1. 程式人生 > >用YOLOv2訓練自己的資料集

用YOLOv2訓練自己的資料集

一. 系統初始環境

系統:Ubuntu16.04: ubuntu-16.04-desktop-amd64.iso

cuda安裝檔案: cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb.44-1_amd64-deb,下載連結點選, linux-x86架構-ubuntu-16.04-deb(local)

cudnn安裝檔案: cudnn-8.0-linux-x64-v5.0-ga.solitairetheme8,下載連結點選, 適用cuda8.0有5.1和5.0版,這裡用5.0版,區別應該不大

caffe原始碼: github連結 ,或者執行git clone

https://github.com/BVLC/caffe.git

安裝過程點選這裡

二. 初始化YOLO(v2版本)

  1. cd darknet
  2. make
    注意預設Markfile是沒有開啟GPU模式的,需要適當修改:
    GPU=1
    CUDNN=1
    OPENCV=1

開啟OPENCV=1後編譯可能出現找不到lippicv的情況,筆者是將/usr/local/share/OpenCV/3rdparty/lib 裡面的libippicv.a檔案複製到/usr/lib解決的,因為使用OPENCV=0後編譯後訓練時無法通過stb_image.h匯入影象

三. 測試YOLO

  1. 進行測試 ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

三. 訓練自己的資料

(一).準備資料集

  1. 製作資料集,將圖片製作成VOC2007格式
  2. 把資料集放在darknet/script中,資料集結構為VOCdevkit/VOC2007/*,如果需要改動資料集位置或名稱,需要同時修改voc_label.py裡面對應的檔案路徑
  3. 修改voc_label.py中的classes變成自己需要的類別名稱
  4. 執行voc_label.py
  5. 可選 sudo cat 2007_train.txt 2007_val.txt > train.txt

(二).修改配置

  1. 修改data/voc.names裡面的類別為自己需要的類別名稱
  2. 修改cfg/voc.data檔案

    classes= 20


train = 對應路徑/train.txt

valid = 對應路徑/2007_test.txt

names = data/voc.names

backup = 對應路徑/backup

  1. 修改src/yolo_kernel.cu檔案

    約行62:draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, 你的類別數);

  2. cfg/tiny-yolo-voc.cfg檔案(也可複製重新命名為其他,如my.cfg)

    學習率 learning_rate=0.001

最大迭代次數 max_batches = 1001(測試時可以調低一些,100次迭代需要8分鐘左右,迭代次數太少訓練出來的權重可能看不到測試效果)

[convolutional]

size=1

stride=1

pad=1

filters=35 #filters=(classes+coords+1)*5

activation=linear

[region]

anchors = 1.08,1.19, 3.42,4.41, 6.63,11.38, 9.42,5.11, 16.62,10.52

bias_match=1

classes=2 #你的類別數

coords=4

num=5

softmax=1

jitter=.2

rescore=1

(三).訓練


  1. 下載預訓練模型

四. 測試訓練模型效果

./darknet detector test cfg/voc.data cfg/my.cfg 你的backup目錄/my_final.weights data/測試圖片.jpg
命令列後接-thresh 0.05可調整置信度閾值