1. 程式人生 > >darknet yolov3 訓練自定義資料集

darknet yolov3 訓練自定義資料集

VOC資料集上的訓練步驟

修改類別

  1. yolo層的classes修改成新的類別書
  2. yolo層前一個convolution層的filters修改成(classes+4+1)*3
  3. 修改data檔案中的類別數目

訓練

  ./darknet detector train cfg/custom.data cfg/yolov3.cfg pretrained/darknet53.conv.74 2>&1 train.log

burn_in的效果比較好

測試

單幅圖測試

   ./darknet detector test examples/traffic/image.data examples/traffic/yolov3.cfg examples/traffic/yolov3_900.weights data/person_walk.jpg             
   引數說明
   image.data:  訓練時指定類別數目,訓練/測試影象路徑
   yolov3.cfg: 網路定義檔案
   yolov3_900.weights: 訓練出的網路權重
   person_walk.jpg: 測試圖片                                                                        

批量統計recalling

預設darknet的recall模式只能測試coco_val_5k,要測試其他資料集,只需要修改darknet/examples/detector.c中的validate_detector_recall()函式,傳入一個檔名(格式如下文test.txt所述), 具體修改如
修改前

list plist = get_paths("data/coco_val_5k.list");

修改後

    list *plist = NULL;
    if (pathfile == NULL)
	plist = get_paths("data/coco_val_5k.list");
   else
	plist = get_paths(pathfile);

命令列(recall2會傳入test.txt,否則預設呼叫coco_val_5k)

./darknet detector recall2 examples/traffic/image.data examples/traffic/yolov3.cfg examples/traffic/yolov3_900.weights examples/traffic/test.txt

   引數說明
   image.data:  訓練時指定類別數目,訓練/測試影象路徑
   yolov3.cfg: 網路定義檔案
   yolov3_900.weights: 訓練出的網路權重
  test.txt: 一行表示一個測試圖片的絕對路徑(VOC格式的圖片集,按照darknet訓練資料格式,新建一個labels目錄,儲存標籤)