YOLOv4代碼下載:https://github.com/AlexeyAB/darknet或者終端輸入
git clone https://github.com/AlexeyAB/darknet.git
其實怎么訓練自己的模型在上面的網址中已經介紹的很清楚了,認真的一步步下來是肯定沒問題的,下面的內容是其中的一部分,還有很多相關工作我沒有去嘗試,可以按照作者的介紹去試一試。我使用的數據集,鏈接: https://pan.baidu.com/s/1t-W8xC8xF4hxdYlm4R_HKw 提取碼: hkty
運行YOLOv4需要安裝一些庫和工具,我裝了opencv3.4.10及對應的contirb,cuda10.1,cudnn7.6。
下載后是一個darknet文件夾,找到Makefile文件,打開后先將前四行都置1,即GPU=1,CUDNN=1,CUDNN_HALF=1,OPENCV=1,然后修改ARCH后的參數和你的GPU有關,修改后的結果:
還有第64行NVCC的路徑,需要根據實際路徑填寫,我改成NVCC=/usr/local/cuda-10.1/bin/nvcc ,不知道的直接ctrl+f查找nvcc,
然后修改第100行的cuda版本及位置,我修改為COMMON+= -DGPU -I/usr/local/cuda-10.1/include/
完成Makefile的修改后在終端輸入以下命令:
cd darknet //進入目錄 make -j8
然后在瀏覽器輸入網址https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights,下載的yolov4的預訓練權重,放在darknet目錄下,可以用這個權重來檢驗之前的操作是否成功。
在終端輸入:
./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights
然后輸入圖片路徑,比如說
data/dog.jpg
如果之前都正確的話會輸出檢測結果圖,按鍵盤上任意按鍵關閉圖片。
接下來開始訓練自己的模型,首先下載預訓練權重,地址:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137
然后在cfg文件夾里找到yolov4-custom.cfg文件,將其復制到darknet目錄下,重命名為yolov4-obg.cfg,然后打開,開始修改參數,主要修改四個參數+2x3個參數。
分別是batch表示每訓練幾個樣本后修改權重,subdivisions將batch再細分,避免內存不夠大出現out of memory錯誤,max_batches權重改變的最大次數,一般是類別數乘2000(最少6000),step用於指定學習率調整時機,當max_batch等於step時調整學習率,filters輸出特征圖數量及classes類別數量。更詳細的配置文件說明可以看這個。
由於我訓練的螺栓螺母,僅兩個類別,而且訓練集一共100張圖片,所以我的參數設置分別為batch=1,subdivisions=64,max_batches=6000,step=4800,5400。
filters和classes需要用ctrl+f搜索,直接搜yolo即可,總共要修改三個遍,filters=21,classes=2。filters的值等於(類別數+5)*3。
訓練集可以放在data文件下,如果自己標定的話推薦使用作者提供的yolo_mark,這里不再多說,訓練集的格式相當重要,一定要弄准確。需要注意,使用他的工具標定完后生成的train.txt文件路徑包含x64,在訓練的時候要注意其他文件的路徑,不想新建x64文件夾的可以在將Yolo_mark中的x64目錄下Release中的三個文件復制到Yolo_mark目錄下,然后修改linux_mark.sh,第二行改為./yolo_mark data/img data/train.txt data/obj.names。這樣訓練集相關數據的都在data目錄下,然后在終端輸入./linux_mark.sh
開始標定。
標定結束后將data文件夾放到darknet目錄下,然后終端輸入:
./darknet detector train data/obj.data yolov4-obj.cfg yolov4.conv.137
訓練時的截圖:
基本上等loss降到0.5左右訓練就差不多結束了,也可以等訓練完6000次后自動結束。最終的權重保存在backup文件夾中,可以使用以下命令檢測:
./darknet detector test data/obj.data yolov4-obj.cfg backup/yolov4-obj_final.weights 圖片名.jpg//單張圖片 ./darknet detector demo data/obj.data yolov4-obj.cfg backup/yolov4-obj_final.weights 視頻名.mp4 //檢測視頻
然后輸入相應圖片名稱即可,我的檢測結果如下,左上角的計數和標簽置信度是我自己加進去: