可以寫一個製作數據集的腳本,每次跑起來就比較方便了
coco數據集
官網上給出的格式如下:
'images': [
{
'file_name': 'COCO_val2014_000000001268.jpg',
'height': 427,
'width': 640,
'id': 1268
},
...
],
'annotations': [
{
'segmentation': [[192.81,
247.09,
...
219.03,
249.06]], # if you have mask labels
'area': 1035.749,
'iscrowd': 0,
'image_id': 1268,
'bbox': [192.81, 224.8, 74.73, 33.43],
'category_id': 16,
'id': 42986
},
...
],
'categories': [
{'id': 0, 'name': 'car'},
]
label-voc數據集(.xml)
<annotation>
<folder>VOC2012</folder> #表明圖片來源
<filename>2007_000027.jpg</filename> #圖片名稱
<source> #圖片來源相關信息
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
</source>
<size> #圖像尺寸
<width>486</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented> #是否用於分割
<object> #包含的物體
<name>person</name> #物體類別
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox> #物體的bbox
<xmin>174</xmin>
<ymin>101</ymin>
<xmax>349</xmax>
<ymax>351</ymax>
</bndbox>
<part> #物體的頭
<name>head</name>
<bndbox>
<xmin>169</xmin>
<ymin>104</ymin>
<xmax>209</xmax>
<ymax>146</ymax>
</bndbox>
</part>
<part> #物體的手
<name>hand</name>
<bndbox>
<xmin>278</xmin>
<ymin>210</ymin>
<xmax>297</xmax>
<ymax>233</ymax>
</bndbox>
</part>
<part>
<name>foot</name>
<bndbox>
<xmin>273</xmin>
<ymin>333</ymin>
<xmax>297</xmax>
<ymax>354</ymax>
</bndbox>
</part>
<part>
<name>foot</name>
<bndbox>
<xmin>319</xmin>
<ymin>307</ymin>
<xmax>340</xmax>
<ymax>326</ymax>
</bndbox>
</part>
</object>
</annotation>
label-yolo數據集(.txt)
class_id center_x center_y bbox_weight bbox_height
...
class_id center_x center_y bbox_weight bbox_height
數據集製作的時候一定注意按照 train:val 的 rate 進行 random 來分數據集。
def split_train_val(txt_dir, split_rate=0.5):
txts = [f for f in os.listdir(txt_dir) if f.endswith(".txt")] # xml的格式就改成.xml
txts_num = len(txts)
train_idx = random.sample(range(txts_num), int(txts_num * split_rate))
train_pics = []
val_pics = []
for i, txt in enumerate(txts):
if i in train_idx:
train_pics.append(txt.replace(".txt", ".jpg"))
else:
val_pics.append(txt.replace(".txt", ".jpg"))
return train_pics, val_pics
修改config
classes = ('person', 'bicycle', 'car')
data = dict(
train=dict(classes=classes),
val=dict(classes=classes),
test=dict(classes=classes))
或者
classes = 'path/to/classes.txt'
data = dict(
train=dict(classes=classes),
val=dict(classes=classes),
test=dict(classes=classes))
修改 config/_base/dataset/coco_detect.py 中的root目錄,以及train,val圖片目錄,以及json目錄
這樣數據集就製作好了,就可以進行訓練了。