YOLOV4 windows10系統訓練自己的圖片數據集(robomaster官方數據集)

首先,當然是要配置好環境啦,這裏相信屏幕前的你已經配置好了,如果沒有配置好也不用着急。可以看一下本博主另一篇保姆教程,請移步:https://blog.csdn.net/weixin_39954922/article/details/105785460,,,,啊哈哈哈哈

一、配置好之後,最重要的就是數據集,因爲博主報名參加了RM比賽,所以就用大疆給的官方數據集試驗了一下,首先準備兩個數據集,一個是圖片數據集Image,一個是每個圖像內標記好目標後生成的xml文件Annotation。這裏我只用了兩百張圖片:如下圖:

二、把圖片放在darknet.exe同級目錄下的data文件夾,在data內新建文件夾專門用來存放圖片,這裏我建立的是robomaster文件夾。

三、需要準備兩種txt文件,一種是train.txt,這個txt文件要放在data文件夾下,且內容爲存儲了每張圖片相對於darknet.exe的路徑,筆者的文件如下:

另一種TXT文件是每張圖片都對應有一個,是通過xml文件得來的,每個TXT文件裏面都是純數字如圖一所示,記錄了標記目標的信息。這個TXT的命名與對應圖片的命名一樣,且訓練時要放置在與image相同目錄下,如圖2所示:

圖一

圖二

 

四、在data文件夾下建立.names和.data文件。筆者建立的是robomaster.names和robomaster.data文件,在robomaster.names文件裏面寫上要檢測的目標的名稱,每個名稱佔用一行,如圖三所示,這裏檢測目標有五個

圖三

robomaster.data文件的內容包括總共有多少類對象,train.txt的文件路徑,備份路徑等,如圖四所示。classes要改成對應的數字,如果你想檢測的目標有6個,就改成6。

圖四

 

五、建立訓練所需的.cfg文件,在cfg文件夾下創建,筆者直接複製的原有的yolov4.cfg,並改名爲yolov4-robomaster.cfg。

六、更改cfg文件內的參數。非常重要!!!

6.1更改batch爲batch=64

6.2更改subdivisions爲subdivisions=16

6.3更改max_batches爲classes數*2000,但是不要少於4000,例如筆者這裏有classes=5,那麼max_batches=10000

6.4更改steps爲max_batches的80%,90%,筆者這裏steps=8000,9000,再設置神經網絡尺寸width=416
height=416,或者其他32的倍數。

6.5在cfg的3個[yolo]裏面,將classes=80改爲你的classes數目,筆者這裏爲classes=5,三個都要改哦

6.6在每個[yolo]前面有個[convolutional],注意有兩個,在最靠近[yolo]那個裏面改,將裏面的filters=255改爲filters=(classes+5)*3

筆者這裏filters=(5+5)*3=30,注意每個都要改哦。

如果您使用[Gaussian_yolo] 則filters=(classes + 9)x3  在每個 [Gaussian_yolo] 之前的[convolutional]

6.7注意,不要在cfg文件裏面寫filters=(classes + 5)x3),要直接算出數字

七、下載預訓練模型,這裏我用的是yolov4.conv.137,下載地址爲:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

下載完成後,保存在與darknet.exe相同目錄下

八、開始訓練在darknet.exe目錄下用powershell運行:

.\darknet.exe detector train data/robomaster.data cfg/yolov4-robomaster.cfg yolov4.conv.137

然後就開始訓練啦。

9.訓練的時候會在終端出現一張損失函數的圖標和當前迭代的函數圖,按照官方的說法是:當紅框內第一個參數小於0.06就可以停止訓練了。第二個參數是當前迭代的次數,注意,YOLOV4每迭代100次會自動保存訓練的模型,文件名爲yolo-robomaster_last.weights,在backup文件夾內。若訓練結束,則在該文件夾下生成yolo-robomaster_final.weights。每訓練1000次會生成:yolo-robomaster_1000.weights,兩千次會生成yolo-robomaster_2000.weights等等,,具體的可以看一下YOLOV4github官方說明:https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

10.筆者電腦檯垃圾,訓練到三百次就放棄了,不得不說顯卡是個好東西,損失函數快到20,說明誤差還是很大的,沒辦法,就這樣湊合跑吧:.\darknet.exe detector demo data/robomaster.data cfg/yolov4-robomaster.cfg yolov4-robomaster.weights -ext_output test.mp4

(我總覺得這個代碼不對,但是爲啥能運行,還是很迷啊哈哈哈哈,應該不是這個代碼,各位看官有了解的可以在評論區解釋一下子。感激不盡)

記得要把測試視頻放到和darknet.exe同一目錄下哦。檢測效果如下:模型訓練的誤差很大,效果確實不咋滴。

訓練時bug說明:

1.CUDAERROR,out of memory:把subdivisions改大一些,但一定要是32的倍數。

2.如果在訓練過程中看到平均(損失)字段的nan值-則訓練有誤,但如果nan在其他行中-則訓練進行得很好

3.如果您在cfg文件中更改了width =或height =,則新寬度和高度必須被32整除。

引用:

1.數據集TXT文件的生成參考:https://blog.csdn.net/public669/article/details/98020800?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2

2.https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

 

 

 

 

 

 

 

 

 

 

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