簡介:
這篇博客是對使用darknet訓練yolo的方法的總結,基本上是按照官網的方法進行訓練,主要是補充了一些細節。
一、下載數據集
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
上述命令是從作者的數據倉庫中下載數據,可能網速會比較慢。也可以考慮從Pascal_voc的官網下載數據http://host.robots.ox.ac.uk/pascal/VOC/,這樣下載速度會比較快。
將三個解壓後的文件,放在一個文件夾中VOCdevkit,因爲VOCtest_06-Nov-2007.tar 和 VOCtrainval_06-Nov-2007.tar解壓後的文件都是VOC2007,因此將後者解壓後的文件改爲VOC2007_test。
二、生成darknet需要的label文件
將darknet/scripts目錄下的voc_label.py文件,拷貝至darknet目錄下。打開voc_label.py文件,修改第7行,將列表的最後一個元組修改爲('2007_test','test');修改第58行,將2007_test,改爲2007_test_test。運行voc_label.py文件,darknet目錄下會生成7個文件,分別爲
2007_train.txt,2007_val.txt,2007_test_test.txt,2012_train.txt,2012_val.txt,train.txt,train.all.txt。
每一個txt文件中都存放着訓練所需的文件的路徑。除此之外,voc_label.py文件爲每一副圖片生成了一個存放label的txt文件。例如,在VOC2007/labels目錄下,便存放着VOC2007數據集的label文件。如下圖所示
每一行的5個參數的含義如下:
後四個參數分別做了歸一化,x和width除以圖片的寬度,y和height除以圖片的高度。
三、訓練
YOLOv2的訓練
下載卷積層的預訓練權重。
wget https://pjreddie.com/media/files/darknet53.conv.74
修改cfg/voc.data文件,按下圖進行修改。
改爲
其中batch的值根據顯存大小進行調整,如果顯存比較大,可以適當加大。如果batch太小或者爲1的話,最終訓練得到的模型可能無法收斂。
最後執行下述命令進行訓練。
./darknet detector train cfg/voc.data cfg/yolov2-voc.cfg darknet53.conv.74
YOLOv3的訓練
如果訓練yolo3模型的話,按同樣的方式,修改cfg/yolov3-voc.cfg文件,並運行下述命令。
改爲
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
最後執行下述命令進行訓練