1. 程式人生 > >用YOLOv3訓練WIDER_FACE資料集

用YOLOv3訓練WIDER_FACE資料集

- 剛開始想訓練的時候忘了百度一下沒有沒可以直接轉換的指令碼。。。就自己寫了。。。
- 後來發現網上的轉換指令碼基本都是把 WIDER_FACE先轉換成VOC再用yolo提供的準換工具,轉成yolo所需格式。。。
- 自己寫的是直接轉成yolo所需的格式的,版本python3.6
GitHub地址:https://github.com/xp56/WIDER_FACE_data_conversion_for_YOLOv3

- 我個人喜歡寫東西的時候把中間結果存成檔案...

- 這樣的話我可以把工作分成一段一段的......不容易弄混......如果不習慣的話可以把它改成一個檔案。

---

訓練時用

- data_conversion.py是將wide_faced的標註資料集轉成yolov3所需要的標籤。
- 每個圖片轉成對應名稱的標籤
- 由於yolov3需要的是歸一化之後的中心座標和W,H所以在轉換方法中進行了歸一化和資料轉換

- train_list.py將標註檔案轉成yolov3所需要的train_list,valid_list也是用這個

- (注:如果你得到的train_list.py在訓練時一直報錯說找不到對應圖片,先檢查圖片是否存在。然後注意轉換檔案的型別,是否是nux格式,notepad非常方便的檢視,顯示出所有字元,看一下行尾是不是LF!!!這個坑坑了我好半天!)

---

測試時用

- model_out_clean.py是將yolov3輸出的valid檔案進行class 值的篩選通過改變不同的閥值可以得到PR圖

- model_out_convert.py是將model_out_clean.py的輸出轉化成wide_face資料格式,方便進行IOU計算

- count_IOU.py是進行檢測結果與標註結果的IOU計算,並得到精確率召回率
- text.py用來測試模型效果的,把框畫到原圖上

在訓練時還遇到一個大坑,就是我的cuda和cudnn不在預設安裝的位置。剛開始總是不能編譯。。。(我是小白,不太懂Makefile)

將這兩個地方改成自己的

其他的地方就跟訓練單類沒有區別了。

cfg檔案裡 yolo層之前的的那一層 filters改成18 (1+5)*3 一共是三個地方。

batch和subdivisions修改成 64 和 8 如果訓練時視訊記憶體溢位就增大subdivisions


參考資料

官網  https://pjreddie.com/darknet/yolo/

大牛部落格 https://blog.csdn.net/lilai619/article/details/79695109