mmdetection入坑日記(二)數據集製作

可以寫一個製作數據集的腳本,每次跑起來就比較方便了

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目錄
這樣數據集就製作好了,就可以進行訓練了。

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