使用yolov3訓練自己的數據集(c++ vs2017 win10)

參考: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:

 

2.準備配置文件,需要3個配置文件

1.voc.data(類別數,步驟一中的兩個txt的路徑,類名路徑,訓練產生的文件保存位置)

2.voc.name

3.yolov3.cfg

前面的batch和subdivisions在訓練的時候把testing下面的註釋掉,測試的時候把training下面的註釋掉

這裏還要改一些參數:

 [convolutional] 

size=1 

stride=1 

pad=1 

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)

activation=linear 

[region] 

anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52 

bias_match=1 

classes=1  //類別數,本例爲1類 

coords=4 

num=5 

softmax=1 

jitter=.2 

rescore=1 

object_scale=5 

noobject_scale=1 

class_scale=1 

coord_scale=1 

absolute=1 

thresh = .6 

random=1

2.訓練

在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

3測試(測試前把yolov3.cfg文件改一下)

(1)單張圖片測試

./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格式,不直觀。這個批量測試只跑測試集。

(3)測試視頻 參數換成demo

./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張數據集速度差不多,應該是顯卡性能問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章