1. 程式人生 > >基於keras的YOLOv3在VOC資料集上訓練測試

基於keras的YOLOv3在VOC資料集上訓練測試

一、編譯環境

  • windows7
  • Anaconda+python3.6+keras+tensroflow+pyCharm

二、步驟

  • 測試

  1. 從上文第二個github上下載工程,並用pyCharm開啟,keras-yolo3-master。
  2. 下載yoloV3權重檔案
    https://pjreddie.com/media/files/yolov3.weights
  3. 將darknet下的yolov3配置檔案轉換成keras適用的h5檔案:
    python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
  4. 執行預測影象程式

    python yolo_video.py --image

    輸入測試影象路徑:

  5. 輸出測試結果

  6. 從結果來看,預訓練權重檢測結果尚可。
  • 訓練

  1. 下載VOC2007資料集合得到VOCtrainval_06-Nov-2007.tar和VOCtest_06-Nov-2007.tar,分別解壓命名為VOC2007和VOC2007_test放在資料夾VOCdevkit下。
  2. 根據使用VOC資料集的年份修改voc_annotation.py檔案中的sets
    ets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
    
    classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
    
  3. 執行程式碼
    python voc_annotation.py

    得到3個txt檔案:2007_val.txt,2007_train.txt,2007_test_test.txt

  4. 為了加快訓練速度,下載darknet網路的預訓練權重
    https://pjreddie.com/media/files/darknet53.conv.74

    將darknet53.conv.74改名為darknet53.weights,並轉化為keras能夠接受的權重形式。

    python convert.py -w darknet53.cfg darknet53.weights model_data/darknet53_weights.h5

  5. 修改train.py的34行,將weights_path='model_data/yolo_weights.h5'修改為weights_path='model_data/darknet53_weights.h5',執行程式碼

  6. python train.py

    訓練過程:

  7. 訓練結束:

  8. 第一階段訓練結束,訓練50次得到trained_weights_stage_1.h5,此時的loss=34,似乎下降明顯,但是val_loss=4399依然很大。Train.py的71行開始會在不釋放當前訓練結果的前提下進行第二階段的訓練,但是似乎由於視訊記憶體耗盡的緣故,訓練沒有持續下去。

  9. 對第一階段的訓練結果進行測試,

    修改yolo.py的程式碼

    #"model_path": 'model_data/yolo.h5',
    "model_path": 'model_data/trained_weights_stage_1.h5',
    "anchors_path": 'model_data/yolo_anchors.txt',
    #"classes_path": 'model_data/coco_classes.txt',
    "classes_path": 'model_data/voc_classes.txt',

    執行程式碼

    python yolo_video.py --image

    測試結果如下:

  10. 可以看出測試結果很不好。所以,應該嘗試繼續訓練。