最近在研究車輛檢測相關算法,因yolo算法的速度和精度基本均能滿足要求,原版的yolo v3算法是檢測多類物體,本人是在原來代碼的基礎上修改爲檢測單目標車輛,並基於預訓練權重在VOC2007數據集上進行訓練。
源代碼:https://github.com/qqwweee/keras-yolo3
原作者已經給出了訓練和測試方法,在此不再贅述。
要實現只檢測“car”這一類別,要修改的地方有一下幾個:
1、修改yolo.cfg文件
將yolo.cfg文件的classes修改爲1,所有的filters=255的值修改爲filters=18(計算方式爲(classes+5)*3)。(爲了不改變yolo.cfg,我是直接將yolo.cfg另存爲car.cfg,再做修改)
注意:filters僅僅是Yolo層前的filters修改爲18
2、修改類別文件
將coco_class.txt和voc_class.txt文件中的類別全部修改成‘car’ ,或在該目錄下新建object_classes.txt文件,寫入car。
3、修改voc_annocation.py, 生成數據集
將voc_annocation.py 中的classes修改成只有“car”一個,
準備數據集VOC2007, 然後運行voc_annocation.py生成2007_train.txt和2007_test.txt,2007_val.txt文件
4、生成預訓練權重文件yolo_weights.h5
下載 yolov3.weights ,放到工程根目錄下,cmd下切換到工程目錄下,使用命令:
python convert.py -w car.cfg yolov3.weights model_data/yolo_weights.h5
注意,此處的car.cfg 爲前面新建的,如果直接在原yolo.cfg上改的,則使用yolo.cfg
5、進行訓練
運行 train.py 文件,注意更改訓練文件目錄(annotation_path),類別文件目錄(classes_path)。
訓練完成後會生成一個logs文件夾,裏面的000文件夾下會有訓練好的權重文件,trained_weights_stage_1.h5 是第一階段訓練得到的(只訓練後三層),trained_weights_final.h5是最終得到的訓練權重文件(全訓練)。
6、測試
修改yolo.py文件,將其中的model_path換成自己生成的trained_weights_final.h5文件的目錄, classes_path 改成 待檢測的目標類文件object_classes.txt.
最後就是加載圖片或視頻進行測試了。
也可根據需要,對應做上面的修改以滿足指定類別物體的檢測。
初學者,以上如有不正確之處請指出,謝謝!