引言
在做实例分割或语义分割的时候,我们通常要用labelme进行标注,labelme标注的json文件与coco数据集已经标注好的json文件的格式和内容有差异。如果要用coco数据集的信息,就要对json文件进行修改和转换。本博客提供两种格式的具体内容及含义以及两种格式相互转换的代码,并对两种格式的json标注信息进行可视化。
1.coco格式的json标注信息详解及可视化
从coco官网下载coco的数据集里面,关于实例的标注信息在“annotations_trainval2017.zip”压缩文件里面的“instances_train2017.json”和“instances_val2017.json”里面,分别是训练集和验证集的标注信息。
下载地址:
训练集图片:http://images.cocodataset.org/zips/train2017.zip
验证集图片:http://images.cocodataset.org/zips/val2017.zip
测试集图片:http://images.cocodataset.org/zips/test2017.zip
训练集、验证集标注信息:http://images.cocodataset.org/annotations/annotations_trainval2017.zip
http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
http://images.cocodataset.org/annotations/panoptic_annotations_trainval2017.zip
由于“instances_train2017.json”里面把所有训练集图片的标注信息整合到一个文件了,文件非常大,不太好查看内部具体内容。我从这个文件中提取出一张图片的信息保存成一个新的json文件。
json文件内主要字段:
代码如下:
#-*- coding: utf-8 -*-
from __future__ importprint_function"""Created on Thu Aug 15 13:58:40 2019
@author: Taoting"""
'''从coco的标注文件里提取一张图片对应的json信息,并保存成新的json文件(以instance为例,其他的类似)。'''
importmatplotlib.pyplot as pltimportos, sys, zipfileimporturllib.requestimportshutilimportnumpy as npimportskimage.io as ioimportpylabimportjsonfrom pycocotools.coco importCOCO
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
json_file='../../../coco dataset/annotations_trainval2017/instances_val2017.json' ## Object Instance 类型的标注#json_file='./annotations/person_keypoints_val2017.json' # Object Keypoint 类型的标注格式#json_file='./annotations/captions_val2017.json' # Image Caption的标注格式
data=json.load(open(json_file,'r'))
data_2={}
data_2['info']=data['info']
data_2['licenses']=data['licenses']
data_2['images']=[data['images'][0]] #只提取第一张图片
data_2['categories']=data['categories']
annotation=[]#通过imgID 找到其所有instance
imgID=data_2['images'][0]['id']#print(imgID)#397133#initialize COCO api for instance annotations
coco=COCO(json_file)
img=coco.loadImgs([imgID])#print(img)#[{'license': 4, 'file_name': '000000397133.jpg', 'coco_url': 'http://images.cocodataset.org/val2017/000000397133.jpg',#'height': 427, 'width': 640, 'date_captured': '2013-11-14 17:02:52', 'flickr_url': 'http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg', 'id': 397133}]#print(img['file_name'])#load and display image
I = io.imread('../../../coco dataset/val2017/%s' % img[0]['file_name'])#use url to load image#I = io.imread(img['coco_url'])#plt.axis('off')#plt.imshow(I)#plt.show()
for ann in data['annotations']:if ann['image_id']==imgID:
annotation.append(ann)
data_2['annotations']=annotation#保存到新的json</