【数据集转换】COCO数据集格式

简介

COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), and image captions(看图说话),使用JSON文件存储。

格式结构

{
    "info": info,
    "licenses": [license],
    "images": [image],  #划入训练集(或者测试集)的图片的数量;
    "annotations": [annotation], #训练集(或者测试集)中bounding box的数量
    "categories": [category] #类别的数量
}

image

每一个image的实例是一个dict。其中有一个id字段,代表的是图片的id,每一张图片具有唯一的一个独特的id。

annotations

annotations字段是包含多个annotation实例的一个数组,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)

annotation{
    "id": int,    
    "image_id": int,  #图片序列
    "category_id": int, 
    "segmentation": RLE or [polygon],
    "area": float, 
    "bbox": [x,y,width,height],
    "iscrowd": 0 or 1, #是否为polygon
}

{
	"segmentation": [[510.66,423.01,511.72,420.03,510.45......]],
	"area": 702.1057499999998,
	"iscrowd": 0,
	"image_id": 289343,
	"bbox": [473.07,395.93,38.65,28.67],
	"category_id": 18,
	"id": 1768
},

另外,每个对象(不管是iscrowd=0还是iscrowd=1)都会有一个矩形框bbox ,矩形框左上角的座标和矩形框的长宽会以数组的形式提供,数组第一个元素就是左上角的横座标值。

area是area是area of encoded masks,是标注区域的面积。如果是矩形框,那就是高乘宽;如果是polygon或者RLE,那就复杂点。

最后,annotation结构中的categories字段存储的是当前对象所属的category的id,以及所属的supercategory的name。

polygon格式mask

polygon格式比较简单,这些数按照相邻的顺序两两组成一个点的xy座标,如果有n个数(必定是偶数),那么就是n/2个点座标。下面就是一段解析polygon格式的segmentation并且显示多边形的示例代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
fig, ax = plt.subplots()
polygons = []
num_sides = 100
gemfield_polygons = [[125.12, 539.69, 140.94, 522.43......]]
gemfield_polygon = gemfield_polygons[0]
max_value = max(gemfield_polygon) * 1.3
gemfield_polygon = [i * 1.0/max_value for i in gemfield_polygon]
poly = np.array(gemfield_polygon).reshape((int(len(gemfield_polygon)/2), 2))
polygons.append(Polygon(poly,True))
p = PatchCollection(polygons, cmap=matplotlib.cm.jet, alpha=0.4)
colors = 100*np.random.rand(1)
p.set_array(np.array(colors))

ax.add_collection(p)
plt.show()

categories


```python
{
	"supercategory": "person",
	"id": 1,
	"name": "person"
},
{
	"supercategory": "vehicle",
	"id": 2,
	"name": "bicycle"
},

参考文献

知乎推荐【链接】
制作自己数据集【链接】
文本检测数据集转换成COCO【github链接】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章