用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
安裝過程:點選這裡
二. 初始化YOLO(v2版本)
- cd darknet
- 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
- 進行測試 ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
三. 訓練自己的資料
(一).準備資料集
- 製作資料集,將圖片製作成VOC2007格式
- 把資料集放在darknet/script中,資料集結構為VOCdevkit/VOC2007/*,如果需要改動資料集位置或名稱,需要同時修改voc_label.py裡面對應的檔案路徑
- 修改voc_label.py中的classes變成自己需要的類別名稱
- 執行voc_label.py
- 可選 sudo cat 2007_train.txt 2007_val.txt > train.txt
(二).修改配置
- 修改data/voc.names裡面的類別為自己需要的類別名稱
- 修改cfg/voc.data檔案
classes= 20
train = 對應路徑/train.txt
valid = 對應路徑/2007_test.txt
names = data/voc.names
backup = 對應路徑/backup
修改src/yolo_kernel.cu檔案
約行62:draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, 你的類別數);
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
(三).訓練
- 下載預訓練模型
四. 測試訓練模型效果
./darknet detector test cfg/voc.data cfg/my.cfg 你的backup目錄/my_final.weights data/測試圖片.jpg
命令列後接-thresh 0.05可調整置信度閾值