天天看點

Keras下實作yolov2并使用自己的資料集

在Windows下想嘗試弄個YOLO試試,先從v2版本開始吧,本文主要記錄複現代碼出現的問題,以及使用自己資料庫測試出現的問題。

代碼位址:https://github.com/experiencor/keras-yolo2(選了一個高星)

一.代碼複現

環境:Windows10下使用Anaconda + Pycharm  顯示卡1080Ti

           為了用gpu肯定是conda install keras-gpu,一定要保證有cuda和cudnn

           另外還需要imgaug、opencv-python、h5py 

           環境配置可參見https://blog.csdn.net/hesongzefairy/article/details/86748178

環境配置好了之後,運作程式之前需要按照作者得要求下載下傳資料集

https://github.com/experiencor/raccoon_dataset

下好的資料集有四個檔案夾,就訓練和測試來說,images存放的是訓練圖檔,annodations存的是label,data中是做好的csv檔案。

Keras下實作yolov2并使用自己的資料集

接下來我們需要調整設定檔案config.json

{
    "model" : {
        "backend":              "Full Yolo",
        "input_size":           416,
        "anchors":              [3.99,0.99, 4.24,1.88, 7.68,4.21, 12.37,9.31, 114.44,49.19],
        "max_box_per_image":    10,        
        "labels":               ["raccoon"]
    },

    "train": {
        "train_image_folder":   "/home/hesongze/PycharmProjects/keras-yolo2-master/raccoon_dataset-master/train_small/",
        "train_annot_folder":   "/home/hesongze/PycharmProjects/keras-yolo2-master/raccoon_dataset-master/train_lasmall/",
          
        "train_times":          8,
        "pretrained_weights":   "full_yolo_raccoon.h5",
        "batch_size":           5,
        "learning_rate":        1e-4,
        "nb_epochs":            1000,
        "warmup_epochs":        3,

        "object_scale":         5.0 ,
        "no_object_scale":      1.0,
        "coord_scale":          1.0,
        "class_scale":          1.0,

        "saved_weights_name":   "full_yolo_test.h5",
        "debug":                true
    },

    "valid": {
        "valid_image_folder":   "",
        "valid_annot_folder":   "",

        "valid_times":          1
    }
}
           

最關鍵的幾個點:

  • backend的選擇:這裡選擇Full Yolo是加載之前Yolo的權重,能夠加快自己訓練集的收斂速度,但是這個backend需要自己去下載下傳,作者自己提供的權重并沒有Full Yolo https://github.com/rodrigo2019/keras_yolo2/releases/tag/pre-trained-weights
  • 設定label為“raccoon”,如果使用自己的資料集就換成自己對應的label
  • 資料集的位址設定,設定好train_image_folder和train_annot_folder才能順利讀取圖檔和label
  • 最後需要運作gen_anchors.py(python gen_anchors.py -c config.json)擷取anchors,将輸出得結果複制到config.json相應位置即可

完成以上這些設定後,就可以啟動訓練程式了。

python train.py -c config.json

測試程式

python predit.py -c config.json -w /path/best_weight.h5 -i -/path/image

那麼使用自己的資料集時,最簡單的方法就是将圖檔的名字按照作者這樣命名,寫一個python腳本就可以實作,并且作者在資料集的網址中給出了做label的程式(draw boxes.ipynb)以及xml和csv的轉化檔案,非常友善!