可以写一个制作数据集的脚本,每次跑起来就比较方便了
官网上给出的格式如下:
'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'},
]
<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>
class_id center_x center_y bbox_weight bbox_height
...
class_id center_x center_y bbox_weight bbox_height
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
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目录
这样数据集就制作好了,就可以进行训练了。