YOLOv3訓練自己的模型
3.0 前言
本文是YOLOv3系列第3篇,記錄YOLOv3如何訓練自己的模型。
參考的網頁:
3.1 配置cfg檔案
3.1.1 複製yolov3.cfg(...\darknet-master\cfg目錄下)檔案並重命名為yolo-obj.cfg(或者其他名字,只要各處對應即可),複製到darknet.exe相同目錄下(或者其他目錄,輸入命令時對應即可)。
3.1.2 修改batch=64,subdivisions=8。
3.1.3 修改classes和filters,共三處。如果檢測兩類物體,則classes=2,
filters=(classess+5)*3=(2+5)*3=21。
3.1.4 上述修改具體行數參考github即可。
3.2 配置obj.name檔案和obj.data檔案(命名也可以為其他,只要對應即可)
新建obj.names檔案和obj.data檔案,放在目錄...\darknet-master\build\darknet\x64\data下。
obj.names內容(每行一個類的名字,名字隨便寫,隨時可以改)
obj.data內容(valid是為了訓練完成後測試模型效果)
3.3 準備圖片和對應的標籤檔案
每張圖片對應一個同名txt檔案,txt檔案儲存的是類的座標資訊(詳見github),可以在官網上下載專用的軟體yolo_mark標記,放在目錄...\darknet-master\build\darknet\x64\data\obj下。txt檔案內容
標記標籤的軟體介面:
3.4 準備儲存圖片路徑的檔案
新建train.txt檔案(名字要和obj.data中對應)放在目錄...\darknet-master\build\darknet\x64\data下(命名和路徑與obj.data中對應)儲存的資料為訓練的圖片相對於darknet.exe的位置,每行一條資料。3.5 準備預訓練的模型
在github下載darknet53.conv.74後放在目錄...\darknet-master\build\darknet\x64下即可。
3.6 訓練過程
3.6.1 訓練命令(需要首先進入darknet.exe同一目錄):
darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74
預設顯示avg loss的影象,新增-dont_show則不顯示 darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show
命令解釋:
darknet.exe detector train:表示訓練(train改為test為測試)
data/obj.data:data檔案的路徑
yolo-obj.cfg:cfg檔案的路徑
darknet53.conv.74:使用的預模型路徑
3.6.2 可能出現的錯誤情況:
可能出現記憶體不足的情況,解決:
修改cfg檔案:
修改subdivisions為16或32或64;
如果依舊不足,修改三個[yolo](修改classes的那個地方)下的random,修改為0(含義 :關閉多尺度訓練)
3.6.3 訓練介面
3.6.4 訓練歷程與部分引數解釋
每迭代100次會儲存一個模型,avg loss是一個錯誤率的指標,越低越好,剛開始會很大,下降也很快,最終降到0.***,每個類一般迭代2000次,所以實訓專案需要4000次。使用GTX 950m,大約每100次迭代耗時70分鐘。
Region xx: cfg檔案中yolo-layer的索引;
Avg IOU:當前迭代中,預測的box與標註的box的平均交併比,越大越好,期望數值為1;
Class: 標註物體的分類準確率,越大越好,期望數值為1;
obj: 越大越好,期望數值為1;
No obj: 越小越好;
.5R: 以IOU=0.5為閾值時候的recall; recall = 檢出的正樣本/實際的正樣本
0.75R: 以IOU=0.75為閾值時候的recall;
count:正樣本數目。
3.6.5 直觀地檢視訓練結果(輸出圖片)
darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
yolo-obj_8000.weights:檢視的模型的路徑。輸入後會提示輸入圖片路徑,輸入即可。
3.6.6 中斷後在之前的基礎上繼續訓練:
darknet.exe detector train data/obj.data yolo-obj.cfg yolo-obj_2000.weights
yolo-obj_2000.weights:之前的模型路徑。
3.6.7 檢視模型精確效果(輸出資料)
按照準備訓練資料的方法準備測試資料(圖片與對應標籤,儲存圖片路徑的檔案);
修改data檔案的valid;
使用如下命令測試:
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
backup\yolo-obj_7000.weights:測試的模型的路徑(相對於darknet.exe)。 介面:
由於可能出現過擬合的情況,所以最好的模型不一定在後邊,
可以多測試幾組,選擇一個性能較好的模型。
3.6.8 訓練結果展示
迭代100次、400次、800次效果
迭代1200次、1600次、2300次效果