參考:https://blog.csdn.net/la_fe_/article/details/81564420
https://blog.csdn.net/qq_31442743/article/details/81087346
如果是在已有的基礎上繼續訓練數據集,參考:https://mp.csdn.net/postedit/102964648
1.準備好數據集,訓練圖片、驗證圖片和他們對應的路徑名txt文件
和faster-rcnn不太一樣的是,yolo還需要幾個txt文件運行這個腳本voc_label2.py即可生成(見最上面的參考博客)
還會生成D:\software_engineer\darknet\darknet\scripts\VOCdevkit\VOC2007\labels這個文件夾
voc_label2.py:
1.voc.data(類別數,步驟一中的兩個txt的路徑,類名路徑,訓練產生的文件保存位置)
前面的batch和subdivisions在訓練的時候把testing下面的註釋掉,測試的時候把training下面的註釋掉
filters=30 //修改最後一層卷積層核參數個數,每個yolo層上面的convolutional層,有三處
//計算公式是依舊自己數據的類別數filter=num×(classes + coords + 1)=5×(1+4+1)=30
// YOLOv3版本中 filter=3×(classes + coords + 1)=3×(1+4+1)=18,即3*(類別數 + 5)
anchors = 1.08,1.19, 3.42,4.41, 6.63,11.38, 9.42,5.11, 16.62,10.52
在D:\software_engineer\darknet\darknet\build\darknet\x64裏面執行
./darknet detector train D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg
如果有預訓練模型就把它放到darknet.exe同文件夾裏,然後在指令最後加上預訓練模型的名字,例如:darknet53.conv.74,
要在已有的基礎上訓練的話,不能直接在最後添加訓練好的文件名,要多運行下面這句話,做一個微調,將yolov3_last.weights變爲yolov3_last.conv.23,否則會報錯(dont show)
./darknet partial cfg/darknet19_448.cfg yolov3_last.weights yolov3_last.conv.23 23
然後運行訓練./darknet detector train D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg yolov3_last.conv.23
./darknet detector test D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg D:/software_engineer/darknet/darknet/backup/yolov3_last.weights -i 0 -thresh 0.5 D:/work_place/門鎖項目/計數項目深度學習目標識別/VOCdevkit/VOC2007/JPEGImages/00089.jpg
yolov3_last.weights是訓練好的文件,在backup裏面,不想輸它的路徑的話可以把它拷貝到和darknet.exe同一個文件夾裏
(2)test參數換成valid,然後把圖片名去掉(即路徑爲圖片集文件夾路徑),可以批量測試 測試集裏的數據,保存到results文件夾下,是txt格式,不直觀。這個批量測試只跑測試集。
./darknet detector demo data/coco.data cfg/yolov3.cfg yolov3.weights video_003.avi
1.測試yolov3時報錯:cuda error: out of memory darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
我訓練到800次的時候突然報這個錯,但好在此時已經開始收斂,訓練的結果可以用
2.batchsize調到64之後訓練速度超級慢,和數據集大小關係好像不大,訓練上萬張voc2007數據集和自己的200張數據集速度差不多,應該是顯卡性能問題