yolov3 tiny訓練自己的數據集進行物體檢測 (只檢測行人)

說明:我的電腦是個16年3500元買的筆記本(勇氣可嘉:)

環境:額外的包之類的,我用的anaconda,可以非常容易安裝各類包,如果運行顯示缺包,那就去environment去安裝對應的包。

我的版本:python 3.7.4 - tensorflow 1.13.1 - numpy 1.16.0 - keras 2.2.4

1. 下載Github上面的文件

https://github.com/qqwweee/keras-yolo3

直接下載zip。本文是針對以上文件內容的微小改動來訓練自己的數據

 

2. 下載預訓練的權值

https://pjreddie.com/media/files/yolov3-tiny.weights

下載完成後放入上面解壓文件的目錄下 C:\Users\...\Desktop\keras-yolo3-master,下文所述“[目錄]”,皆指向此目錄

 

3. 下載數據集文件(自己製作也行,自己製作參考其他博客)

https://pan.baidu.com/s/15ewJZoav2ebmkqBf2bPyeA 提取碼:anv2

此處爲博主z649431508收集的數據集,放在代碼同一目錄下解壓(去掉外面多套的文件夾VOCdevkit,沒有多套請忽略該提示)。

解壓後可以把裏面文件刪除只保留:Annotations、ImageSets和JPEGImages。

將ImageSets\Main 文件夾下的txt文件全部刪掉

用python寫個腳本生成一個txt文件,仿照下圖形式,裏面的內容一直到009963(也就是該數據集裏面最後一張圖片),完事後這個train.txt放到 \VOCdevkit\VOC2007\ImageSets\Main下(這裏如果覺得數據集太多可以設置idx<5000)

python代碼如下:

idx = 1
f = open('train.txt', 'w')
while idx < 9964:
    f.write('{:0>6d}'.format(idx) + '\n')
    idx += 1
f.close()

 

4. 修改相關文件配置

  1. 修改voc_annotation.py,將class改爲:classes = ["person"](我們只識別人所以只保留person),將sets改爲:sets=[('2007', 'train')]
  2. 修改model_data/voc_classes.txt 和 coco_classes.txt,刪除多餘類,只保留person(這一行)
  3. 修改yolov3-tiny.cfg,將[yolo]下的classes改爲=1,將[yolo]上的[convolutional]下的filter改爲filters=18 [因爲3 * ( classes + x + y + w + h + score )],因爲tiny yolov3只有兩個不同輸出分支張量,所以總共需要修改兩處[yolo]和其上面的[convolutional]下的內容
  4. 修改train.py裏面,找到anchors_path,改爲anchors_path = 'model_data/tiny_yolo_anchors.txt'
  5. 修改yolo.py裏面,修改使得 "anchors_path": 'model_data/tiny_yolo_anchors.txt'

 

5. 生成.txt文件

運行anaconda prompt(以下“運行”所指,皆爲在anaconda prompt下鍵入指令)

  • 運行voc_annotation.py

  • 目錄下會生成名字前綴爲2007_的txt文件,然後刪掉它們的前綴 "2007_",得到train.txt內容如下,每行的內容前面是路徑,後面五個數字爲一組,前四個是標記的box的xywh,後面一個0表示person。

  • (可選)運行kmeans.py文件,利用kmeans算法找到最合適的6個不同尺寸的anchor,用此文件替換model_data下的anchor文件。根據我自己的數據集,得到如下anchor

 

6.  運行 convert.py 將之前下載的預訓練權重(30M文件)轉化成keras網絡的權重(生成 .h5 文件)

python convert.py -w yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo_weights.h5

 

6.x 如果不訓練,此時可以直接運行驗證別人訓練好的網絡的性能(*)

python yolo_video.py --image

test/person.jpg(要在目錄下創建test文件夾,裏面放上一張圖片命名person.jpg)

 

7. 訓練網絡

python train.py

下面的圖片是我整合所有圖片數據集後進行訓練的結果,因爲圖片太多,所有我修改了50+50epoch,改爲15+5epoch

 

8. 測試自己得到的權值

在 logs/000/下有你剛剛('~')訓練得到的權值文件 trained_weights_stage_1.h5(前15epoch得到)  以及 trained_weights_final.h5(15+5epoch得到)

修改 yolo.py"model_path": 'logs/000/trained_weights_final.h5'

 

9. 效果

運行 6.x 所述內容

我通過整合數據並且加入自己標記的數據後,一共有10000張圖片,其中4000張包含人的。在只解封最後兩層訓練了15個epoch,然後解封所有層訓練了5個epoch。訓練後的效果感覺上其實不如官網權重的效果好,不過也不差太多。

 

10. 其他

附yolov3-tiny網絡參數和結構圖:

 

參考

https://www.jianshu.com/p/d76adef49293

https://blog.csdn.net/lly1122334/article/details/89019891

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章