人工智能学习:Microsoft COCO数据集读取(7)

Microsoft COCO(Common Objects in Context)是微软研发维护的一个大型的数据集。包含了30多万张图片和91个目标分类。可用于目标识别(Object Detection)、场景感知(Penoptic Segmentation)、语义分割(Stuff Segmentation)、标题生成(Image Captioning)等任务。

1 数据集下载
MS COCO数据集可以通过官方网站下载
https://cocodataset.org/#home

进入下载页面
https://cocodataset.org/#download

2017相关的为最新发布的数据集
人工智能学习:Microsoft COCO数据集读取(7)_第1张图片
包含三个图像数据文件(Train、Val、Test)和系列标注文件,针对不同的识别任务。

数据下载后解压,产生四个子目录,分别train2017、val2017、test2017和annotations。其中前面三个为训练、评估、测试的图像数据,annotations目录为这些图像的标注信息。包含针对多种任务类型的标注。目录结构如下

train2017			#训练图像目录
val2017				#评估图像目录
test2017			#测试图像目录
annotations 		#标注文件夹
	├── captions_train2017.json				#图像标题标注(训练集)
	├── captions_val2017.json				#图像标题标注(评估集)
	├── instances_train2017.json			#目标检测、语义分割标注(训练集)
	├── instances_val2017.json				#目标检测、语义分割标注(评估集)
	├── panoptic_train2017.json				#全景感知标注(训练集)
	├── panoptic_val2017.json				#全景感知标注(评估集)
	├── person_keypoints_train2017.json		#人体关键点检测标注(训练集)
	├── person_keypoints_val2017.json		#人体关键点检测标注(评估集)
	├── stuff_train2017.json				#目标检测、语义分割标注(训练集)
	└── stuff_val2017.json					#目标检测、语义分割标注(评估集)

2 数据读取
通过annotations中的文件可以提取图片以及对应的标注信息,以图像标题标注文件为例。
首先,载入需要的模块

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

import json
import random

其中matplotlib用于显示数据集中的图片,以及对应的标注。json用于载入标注文件。random用于从数据中随机选择样本显示。

指定数据目录

# specify paths
data_path = '../data/COCO'
anno_path = f'{data_path}/annotations'
train_path = f'{data_path}/train2017'

然后读取图像标题标注文件

# load json file, caption annotations
json_file = f'{anno_path}/captions_train2017.json'

with open(json_file, 'r') as f:
    json_data = json.load(f)
    
images = json_data['images']
annotations = json_data['annotations']

载入的json数据包含多个成员变量。运行

json_data.keys()

显示

dict_keys(['info', 'licenses', 'images', 'annotations'])

包含info、license、images、annotations四个变量,其中images为图像信息,包含图像的大小、文件名等信息,annotations为标注信息

然后绘制一些图片以及它们所对应的标题标注,代码如下

# lines and columns of subplots
m = 2
n = 2
num = m*n

# size of figure
plt.figure(figsize=(12,12))

# randomly choose images and plot
for i in range(num):
    # randomly choose image
    image_item = random.choice(images)
    
    image_id = image_item['id']
    image_file = f'{train_path}/{image_item["file_name"]}'
    
    captions = [anno['caption'] for anno in annotations if anno['image_id']==image_id]

    # subplot
    plt.subplot(m,n,i+1)

    img = mpimg.imread(image_file)
    plt.imshow(img)
    
    plt.xticks([])
    plt.yticks([])
   
    plt.xlabel('\n'.join(captions), fontsize=12)

plt.show()

在图像列表images中随机选择4张图片,对于每一张图片,读取它们的id信息,然后在annotations中查找与这个图片相关的标注。最后绘制图片,并在图片下方显示图片的标题,多个标题以每一行进行分开。

显示结果如下
人工智能学习:Microsoft COCO数据集读取(7)_第2张图片

随机列出4张图片,每一张图片包含5个标题的标注。

参考链接:
https://blog.csdn.net/qq_44554428/article/details/122597358
https://blog.csdn.net/qq_52053775/article/details/126196060

你可能感兴趣的:(人工智能,人工智能,COCO)