每一步超詳細!製作自己的voc資料集並通過yolov3訓練
1 把自己的資料集打標記
用labelImg生成的是xml格式標記檔案
這裡建議大家用VOC和ILSVRC比賽的資料集,因為xml檔案都是現成的,省去很多功夫。
或者可以去下載現成的資料集
ILSVRC2015比賽的地址是: http://image-net.org/challenges/LSVRC/2015/download-images-3j16.php
VOC 比賽地址是: http://host.robots.ox.ac.uk/pascal/VOC/index.html
2 整理資料集路徑格式:
2.1 建立資料夾層次為 darknet / VOCdevkit / VOC2018,voc2018下面有三個資料夾:
2.2 JPEGImages放所有的訓練圖片,annotation放所有的xml標記檔案。
2.3 Imagesets包含兩個資料夾:
3 生成txt標籤和list檔案
3.1 Main包下新建3個txt:
裡面的txt內容格式為圖片名(不帶字尾):
(生成train.txt的教程:
3.2 修改voc_label.py(根據自己情況修改):
3.3 執行voc_label.py
執行後發現label資料夾下面已經生成了對應的txt標籤
同時發現在vocdevkit同目錄下也生成了5個list檔案
打開發現路徑也自動寫好了:
4 修改需要的各種配置檔案
4.1 新建 cfg/voc_birds.data:(可以複製cfg/voc.data進行根據自己情況的修改)
4.2 新建data / voc_birds.names:(可以複製data/voc.names 進行根據自己情況的修改)
4.3 新建cfg / yolov3-voc-birds.cfg:(可以複製cfg/yolov3-voc.cfg 進行根據自己情況的修改)
修改如下:
4.3.1 註釋掉testing,開啟train
4.3.2 subdivisions=8
4.3.3 共三個yolo層都要改,yolo層中的class為類別數,每一個yolo層前的conv層中的filters =(類別+5)* 3
5 在darknet目錄下載權重檔案:
wget https://pjreddie.com/media/files/darknet53.conv.74
6 訓練
nohup ./darknet detector train cfg/voc_birds.data cfg/yolov3-voc-birds.cfg darknet53.conv.74 2>1 | tee visualization/train_yolov3_birds.log &
nohup $ 是防止因為ssh斷開而中斷伺服器的程序(如果出現“找不到nohup檔案”的錯誤,去掉命令中的“nohup ... &”)
2>1 | tee visualization/train_yolov3_birds.log 是為了保留訓練中的log,為了後續繪製loss曲線。
訓練開始:
訓練直到loss下降到0.0X之後,不再下降了,就可以停止訓練了:
7.測試
訓練好後可以在backup看到權重檔案,
嘗試test前要修改cfg檔案,切換到test模式:
開始測試:
./darknet detector test cfg/voc_birds.data cfg/yolov3-voc-birds.cfg backup/birds/yolov3-voc-birds.weights
測試結果:
8.問題集錦
8.1 問題:CUDA Error: out of memory
解決:增大cfg檔案中subdivisions,16、32或者64(最多為batch值)
subdivision:這個引數很有意思的,它會讓你的每一個batch不是一下子都丟到網路裡。而是分成subdivision對應數字的份數,一份一份的跑完後,在一起打包算作完成一次iteration。這樣會降低對視訊記憶體的佔用情況。如果設定這個引數為1的話就是一次性把所有batch的圖片都丟到網路裡,如果為2的話就是一次丟一半。