51好读  ›  专栏  ›  Coggle数据科学

科大讯飞AI大赛:高分辨率遥感识别检索挑战赛 baseline

Coggle数据科学  · 公众号  ·  · 2024-07-23 12:14

正文

请到「今天看啥」查看全文


  • 赛题名称:高分辨率遥感影像内容识别检索挑战赛
  • 赛题类型:计算机视觉、图文问答
  • 赛题任务:理解用户输入的文字形式的影像需求并将符合需求的影像数据进行匹配

报名链接:https://challenge.xfyun.cn/topic/info?type=identification-retrieval&ch=dw24_AtTCK9

unset unset 赛事背景 unset unset

高分辨率遥感影像提供了丰富的地表信息,对于理解和分析地物至关重要。然而,随着数据量的急剧增加,如何精准高效地从庞大的遥感影像库中检索出用户需要的特定影像成为当前的重要挑战之一。

目前,遥感影像检索大多依赖于手动标注方式,这不仅耗时耗力,还可能因个人主观判断差异而影响搜索结果的准确性。为了提高检索效率和精度,亟需开发一种能够自动识别影像内容、快速关联用户文字描述输入并进行响应的算法。

基于此,我们提出高分辨率遥感影像内容识别检索挑战赛。本赛题旨在鼓励参赛者充分利用人工智能、大模型等先进的计算机视觉技术,开发出一种能够精准识别用户描述信息、从遥感影像库中自动检索出对应影像并展示给用户的算法。

unset unset 赛事任务 unset unset

本次大赛以吉林一号高分辨率卫星遥感影像作为数据集,参赛者需基于提供的数据集样本构建模型,该模型应能够有效识别遥感影像中的特征信息,理解用户输入的文字形式的影像需求并将符合需求的影像数据进行匹配,以此完成基于用户描述的快速影像检索,为遥感影像的综合应用提供有力支持。

我们鼓励参赛者充分发挥创新思维,结合遥感影像的特点和应用需求,开发出具有实际应用价值的遥感影像内容识别检索算法。

unset unset 数据说明 unset unset

本次大赛提供吉林一号高分辨率遥感影像作为数据源,影像为三通道数据(B,G,R),分辨率为0.5~0.75米之间。包括训练集与测试集数据,由长光卫星技术有限公司拍摄、标注、构建。

a.原始影像

影像格式为JPG,包含B、G、R三个波段,初赛和复赛的训练集影像均为一系列尺寸固定的遥感影像(像素行数与列数均为958),初赛与复赛的测试集影像尺寸可变。训练集与测试集影像均已按照固定格式编号。

b.标签数据

训练数据、初赛测试数据、复赛测试数据的使用规则为:训练数据开放下载,用于参赛者调试模型;初赛测试数据开放下载,用于评估参赛者的算法性能;复赛测试数据不开放下载,参赛者需将算法模型部署至在线推理平台进行结果验证。

unset unset 评分方法 unset unset

使用f1_score评估参赛者的算法性能,将每条用户描述的影像匹配效果进行单独评价。

将参赛选手提交的预测结果文件score.txt转化为二维矩阵, 矩阵中的每一行 pred为一个只由 0 或 1 组成的行向量。

unset unset Baseline思路 unset unset

赛题数据分析

  • 原始图片

  • 图片经纬度

123.425,41.613
116.0772602807506,38.87342174455343
112.97851322224848,28.183223191284128
109.07850817300091,34.16585331431989
104.05704488070303,30.393137345785103
108.67099457914519,34.21282222932332
102.69363489880133,25.028546335877042
117.20935280186319,39.22314551755416
  • 提问类型
1.上海市的露天体育场?
2.北京市的故宫博物院?
3.南宁市的大桥?
4.厦门市的工厂?
5.天津市的水域(海洋/河流/湖泊)?
6.广州市的露天体育场?
7.成都市的三角形建筑?
8.武汉市的火车站?
9.苏州市的污水处理厂?
10.长沙市的室内体育馆?
11.上海市的十字路口?
12.上海市的大桥?
13.上海市的水域(海洋/河流/湖泊)?

建模思路

首先,通过 用户输入的问题提取出城市信息 ,并利用该城市的经纬度信息进行最近邻搜索,找到可能包含目标影像的图片集合。我们通过JSON文件加载中国各城市的经纬度数据,并使用Ball Tree算法进行最近邻搜索,从而快速定位到目标城市周围的影像。

接着,利用预训练的ChineseCLIP模型提取这些影像及用户问题的特征。 CLIP模型能够将图像和文本映射到同一个特征空间,并通过计算两者之间的相似度来匹配影像。 在特征提取过程中,我们对图像和文本特征进行归一化处理,以提高相似度计算的准确性。

代码讲解

公开的城市经纬度

# https://github.com/boyan01/ChinaRegionDistrict/blob/master/region.json
# https://lbsyun.baidu.com/jsdemo/demo/yLngLatLocation.htm

region_data = json.load(open('region.json'))
districts_data = sum([x['districts'for x in region_data['districts']], [])
city_data = [[x['name'], x['center']['longitude'], x['center']['latitude']] for x in districts_data]
city_data += [[x['name'], x['center']['longitude'], x['center']['latitude']] for x in region_data['districts']]
city_data = pd.DataFrame(city_data)

测试集图片KNN

test_img_locations = pd.read_csv('初赛测试集/图片中心经纬度.txt', sep=',', header=None)
test_img_locations[0] = test_img_locations[0].apply(lambda x: float(str(x).split(' ')[0]))
test_img_locations[1] = test_img_locations[1].apply(lambda x: float(str(x).split(' ')[0]))

test_imgs = glob.glob('./初赛测试集/图片/*')
test_imgs.sort()
test_imgs = np.array(test_imgs)

from sklearn.neighbors import NearestNeighbors
nbrs = NearestNeighbors(n_neighbors=40, algorithm='ball_tree').fit(test_img_locations)

加载CLIP模型

import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

from PIL import Image
import requests
from transformers import ChineseCLIPProcessor, ChineseCLIPModel

model = ChineseCLIPModel.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")
processor = ChineseCLIPProcessor.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")

图文匹配过程

questions = open('./数据集更新/初赛测试集/问题.txt').readlines()
results = []
for question in tqdm(questions):
    words = jieba.lcut(question)
    words = [x for x in words if len(x) > 1 and not x.isdigit()]
    city = words[0]
    city_pic_dis, city_pic_index = nbrs.kneighbors([city_data[city_data[0].apply(lambda x: x == city)].values[0][1:]])
    city_pic_dis = city_pic_dis[0]
    city_pic_index = city_pic_index[0]

    with torch.no_grad():
        # compute image feature
        inputs = processor(images=[Image.open(x) for x in test_imgs[city_pic_index]], return_tensors="pt")
        image_features = model.get_image_features(**inputs)
        image_features = image_features / image_features.norm(p=2, dim=-1, keepdim=True)  # normalize    
    
        # compute text features
        inputs = processor(text=[question], padding=True, return_tensors="pt")
        text_features = model.get_text_features(**inputs)
        text_features = text_features / text_features.norm(p=2, dim=-1, keepdim=True)  # normalize
    
        ids = torch.matmul(text_features, image_features.T)[0]
        ids = ids.data.cpu().numpy()

        result = city_pic_index[ids.argsort()[::-1]][:5]
        result = [str(x) for x in result]
        result = ','.join(result)
        results.append(result)
        
with open('res.csv''w') as up:
    for result in results:
        up.write(result + '\n')

代码地址:https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2024


# 学习大模型 & 讨论Kaggle #


△长按添加竞赛小助手

每天大模型、算法竞赛、干货资讯

36000+ 来自竞赛爱好者一起交流~








请到「今天看啥」查看全文