在目標檢測中有很多常用的數據標注工具,如LabelImg、Labelme等等,經過標注生成的格式各不相同,但基本符合幾大數據集的標注格式。
本文用來介紹目標檢測中常見的幾種數據格式,以及格式之間的相互轉換代碼。
1、數據格式
我之前整理了圖像分類和目標檢測領域常用的數據集,點此查看:鏈接
下圖也給出了常用的數據集,本文主要關注PASCAL VOC、ImageNet和COCO的標注形式,其中PASCAL VOC和ImageNet使用同樣的xml標注格式,COCO為json標注格式。

1.1 PASCAL VOC(xml,csv)
PASCAL VOC挑戰賽(The PASCAL Visual Object Classes )是計算機視覺領域最著名的競賽之一,該競賽始於2005年,於2012年舉辦了最后一屆。
PASCAL VOC目標檢測任務中所使用的的數據集和標注格式為xml,每張圖片對應一個xml格式的標注文件。以一個xml文件為例:
xml文件中給出了:圖片名稱、圖像尺寸、標注矩形框坐標、目標物類別、遮擋程度和辨別難度等信息。
<annotation>
<folder>VOC2007</folder>
<filename>test100.mp4_3380.jpeg</filename>
<size>
<width>1280</width> <!--圖像尺寸-->
<height>720</height>
<depth>3</depth>
</size>
<object>
<name>banana</name> <!--目標類別-->
<bndbox> <!--GT矩形框坐標-->
<xmin>549</xmin>
<xmax>715</xmax>
<ymin>257</ymin>
<ymax>289</ymax>
</bndbox>
<truncated>0</truncated> <!--物體是否被遮擋(>15%)-->
<difficult>0</difficult> <!--物體是否難以辨別,主要指需結合背景才能判斷出類別的物體-->
</object>
<segmented>0</segmented> <!--是否有分割label-->
</annotation>
由於標注文件是每個圖像對應一個xml文件,在訓練時首先需要將xml文件轉為一個統一的csv文件,xml_to_csv的轉換代碼后面說明。
轉換后的數據集為以下格式:
- csv/
- annotation.csv
- images/
- image_1.jpg
- image_2.jpg
- ...
annotation.csv的形式為:
/path/to/image,xmin,ymin,xmax,ymax,class
1.2 COCO(json)
COCO數據集是微軟構建的一個數據集,其中包括detection, segmentation, keypoints等任務。從前面的圖片也可以看出,COCO數據集的類別總數雖然沒有 ImageNet 中用於detection的類別總數多,但是每個類別的實例目標總數要比PASCAL和ImageNet都要多。
使用labelme等標注工具進行標注,同樣是一張圖片對應一個json文件json格式如下:
{
"version": "3.16.7",
"flags": {},
"shapes": [
{
"label": "scratches",
"line_color": null,
"fill_color": null,
"points": [
[
0.6363636363636402,
96.2809917355372
],
[
199,
123
]
],
"shape_type": "rectangle",
"flags": {}
}
],
"lineColor": [
0,
255,
0,
128
],
"fillColor": [
255,
0,
0,
128
],
"imagePath": "JPEGImages\\scratches_100.jpg",
"imageData": "<----太長省略了---->",
"imageHeight": 200,
"imageWidth": 200
}
在訓練時,需要將labelme標注的json文件轉換成統一的COCOjson文件,注意這兩種json格式是有很大差異的。COCO的json文件由以下五個字段組成:
{
"info": info,
"licenses": [license],
"images": [image],
"annotations": [annotation],
"categories": [category]
}
info和licenses字段的內容一般不太關注
images字段是包含了多個image信息的序列,例如下面的這個images包含了4個images的信息,每個圖片唯一對應一個id
"images": [
{
"height": 200,
"width": 200,
"id": 0,
"file_name": "scratches_30.jpg"
},
{
"height": 200,
"width": 200,
"id": 1,
"file_name": "scratches_229.jpg"
},
{
"height": 200,
"width": 200,
"id": 2,
"file_name": "scratches_109.jpg"
},
{
"height": 200,
"width": 200,
"id": 3,
"file_name": "scratches_232.jpg"
}
annotations字段是包含多個annotation實例的一個列表,以一個annotation實例為例,內容包括圖像id,目標物類別category_id,標注框的坐標信息
"annotations": [
{
"id": 0,
"image_id": 0,
"category_id": 1,
"segmentation": [
[
14,
1,
14,
37.0,
14,
73,
24.0,
73,
34,
73,
34,
37.0,
34,
1,
24.0,
1
]
]}
轉換COCO格式的數據集為以下形式:
- csv/
- annotation.csv
- instances_train.json
- instances_val.json
- images/
- image_1.jpg
- image_2.jpg
- ...
- annotation.csv
1.3 YOLO(txt)
labelImg等標注工具,既可以標注生成VOC的xml格式,也可以生成YOLO的txt格式。
YOLO的txt標注文件有兩部分組成:類別編號和矩形框坐標。
類別編號:如果都是實現目標檢測功能的話,那么所有的類別編號均為0。
矩形框坐標:矩形框坐標為歸一化之后的信息,從左到右分別為:中心點x坐標、中心點y坐標,矩形框寬度和矩形框高度
0 0.467785 0.486111 0.054398 0.241770 0 0.311728 0.090021 0.030093 0.179012 0 0.077932 0.201132 0.155093 0.308642 0 0.795139 0.281636 0.233796 0.204218
2、格式轉換
篇幅有限,格式轉換需要的代碼和使用指南我整理匯總到了一起。如果有需要,關注我的公眾號一刻AI,回復:數據轉換 即可獲取

