1. 程式人生 > >每一步超詳細!製作自己的voc資料集並通過yolov3訓練

每一步超詳細!製作自己的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的話就是一次丟一半。