3—YOLO:训练自己的数据
生活随笔
收集整理的這篇文章主要介紹了
3—YOLO:训练自己的数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
YOLO: Real-Time Object Detection:https://pjreddie.com/darknet/yolo/
YOLO模型訓練可視化訓練過程中的中間參數:http://blog.csdn.net/yudiemiaomiao/article/details/72469135
——————————————————————
一.制作數據集
1.數據集準備 (1)將數據集VOCdevkit2007拷貝到darknet\scripts下 (2)VOCdevkit2007修改名稱為VOCdevkit2.修改darknet\scripts\voc_label.py sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')] classes = ["comp"] #os.system("cat 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt > train.txt") #os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")3.終端進入darknet\scripts,執行:python voc_label.py 此后可以看到: VOCdevkit\VOC2007里多了一個labels文件夾(如下) darknet\scripts下多了2007_train.txt、2007_val.txt和2007_test.txt三個文件二.修改配置文件
(1)修改data/voc.names文件:comp(2)修改cfg/voc.data文件。 classes= 1 //類別數 train = /home/gjw/darknet/scripts/train.txt //訓練集 valid = /home/gjw/darknet/scripts/2007_test.txt //測試集 names = data/voc.names backup = backup //在darknet新建一個backup目錄,存儲.weight(3) 修改×××.cfg(以yolo-voc.cfg為例),修改2個參數(filters,class),見下: ① 【region】層中 classes 改成1。 ② 【region】層上方第一個【convolution】層,其中的filters值要進行 修改,改成(classes+ coords+ 1)* (NUM) ,我的情況中:(1+4+1)* 5=30 ③ learning_rate:學習率 ④ max_batches:最大迭代次數三.下載預訓練模型
下載好的預訓練模型保存在/darknet/目錄下PS:經過以上的修改,記得重新make一下darknet四.訓練
在darknet/目錄下新建backup目錄用于存放訓練生成的模型 官網上下載預訓練的模型,訓練命令:./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23./darknet detector train cfg/voc.data cfg/yolo-voc.cfg yolo-voc.weights【結果】訓練完畢就可以生成weights文件 Saving weights to backup/yolo-voc.backup Saving weights to backup/yolo-voc_100.weights Saving weights to backup/yolo-voc_final.weights五.評估性能http://blog.csdn.net/hysteric314/article/details/54093734
經過漫長的訓練過程,model終于訓練好了,為了評估性能,可以使用以下指令 ./darknet detector recall cfg/voc.data cfg/yolo_voc.cfg backup/yolo_voc_final.weights需要注意的是,在使用這個指令之前,我先修改一下src/detector.c 這一函數 (1)位置第375行改成:list *plist = get_paths(“/home/yolo_v2_tinydarknet/darknet/infrared/infrared_val.txt”);//改成infrared_val.txt的完整路徑 (2)運行上面的指令會調用validate_detector_recall函數, 這個函數中有個參數thresh(閾值),默認的值是.001,這個默認 值設的很小,會讓系統識別出更多的框來,導致proposals值激增, 還會讓recall值變高,達到98.5%。最終我改成了 .25。 (3)上面的函數只會顯示出recall值,沒有precision值,precision的 值計算方法是:識別為正確的個數/畫了多少個框,所以我修改了代碼。 我把第447行顯示結果的代碼修改為 : fprintf(stderr, "ID:%5d Correct:%5d Total:%5d\tRPs/Img: %.2f\tIOU: %.2f%%\tRecall:%.2f%%\t", i, correct, total, (float)proposals/(i+1), avg_iou*100/total, 100.*correct/total); fprintf(stderr, "proposals:%5d\tPrecision:%.2f%%\n",proposals,100.*correct/(float)proposals); 運行后顯示的結果是: Correct :可以理解為正確地畫了多少個框,遍歷每張圖片的Ground Truth,網絡會預測出很多的框,對每一Groud Truth框與所有預測出的框計算IoU,在所有IoU中找一個最大值,如果最大值超過一個預設的閾值,則correct加一。Total:一共有多少個Groud Truth框。Rps/img:p 代表proposals, r 代表region。 意思就是平均下來每個圖片會有預測出多少個框。預測框的決定條件是,預測某一類的概率大于閾值。在validation_yolo_recall函數中,默認的這一個閾值是0.001,這一閾值設置的比較低,這就會導致會預測出很多個框,但是這樣做是可以提升recall的值,一般yolo用于畫框的默認值是.25,使用這個閾值會讓畫出來的框比較準確。而validation_yolo_recall使用的閾值改成。25的時候,Rps/img 值會降低,recall的值會降低,所以validation_yolo_recall默認使用一個較低的閾值,有可能作者的目的就是為了提高recall值,想在某種程度上體現網絡的識別精度比較高。IoU、Recall、Precision:解釋起來比較麻煩,請看博客有詳細說明: http://blog.csdn.net/hysteric314/article/details/54093734六.測試單張圖像
./darknet detector test cfg/voc.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights data/000020.jpg[擴展]可以通過-thresh 0設置所有檢測的閾值為0,同理,也可以通 過設置不同的閾值進行檢測。./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0七.測試攝像頭/視頻
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights <video file>http://blog.csdn.net/burning_keyboard/article/details/71056164
http://blog.csdn.net/xjz18298268521/article/details/61922405
http://blog.csdn.net/sinat_30071459/article/details/53100791
http://blog.csdn.net/sinat_30071459/article/details/53161113
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的3—YOLO:训练自己的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2—YOLO2
- 下一篇: OpenCV统计米粒数目-计算联通区域的