YOLOV4:從零開始安裝&訓練自己的數據集

系統環境

Centos7 opencv-4.1.0  gcc-4.8.5 cuda-10.0

CUDA安裝

具體可以參考博文Centos7離線安裝nvidia驅動的兩種方法,推薦使用方法2,編譯時需要ncvv,需添加如下環境變量到~/.bashrc

CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH

opencv4安裝

這裏選用opencv-4.1.0 ,它和yolov4發佈的時間比較接近,理論上最新版也沒有問題
官方安裝文檔:https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

安裝

注意**-D OPENCV_GENERATE_PKGCONFIG=ON** 須加上,YOLO編譯時用到,具體可以參考博客YOLOV4:opencv4編譯問題

cd opencv-4.1.0
mkdir build
cd build
cmake -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

測試

若有如下類似輸出,則安裝無誤

[javis@node4 build]$ pkg-config --cflags --libs opencv4
-I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4  -L/usr/local/lib64 -lopencv_dnn -lopencv_gapi -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core  

YOLOv4安裝

Git地址:https://github.com/AlexeyAB/darknett
Linux安裝還是挺簡單,若你只使用默認配置,make一下就行了,但是爲了支持CUDA和OPENCV,需要額外配置一下,修改Makefile

GPU=1
CUDNN=1
OPENCV=1 

訓練SeaShips數據集

SeaShips數據集:數據集共有7000張圖片,圖片分辨率均爲1920x1080,分爲六類船隻(數據地址)

生成cfg模型配置文件

複製darknet-master/cfg/yolov4-custom.cfg爲yolov4-ship.cfg,並修改部分參數,其他參數視情況而定

classes=6 #有3處都在[yolo]配置下,可以使用查找替換
filters=33 #有3處都在[yolo]配置上方,需要一個一個修改,其值=(classes + 5)x3)
max_batches = 12000  #其值=classes*2000
steps=9600,10800 #其值=(max_batches*0.8,max_batches*0.9)

數據文件

在darknet-master/data下新建文件ship.data,保存內容如下

classes= 6
train  = data/train.txt
valid  = data/test.txt
names = data/ship.names
backup = backup/

train和valid爲保存爲數據集劃分的內容;names爲類別名稱列表;backup爲保存訓練模型路徑
data/train.txt:(一行一張圖片地址,ship爲存放圖片的文件夾)

data/ship/000001.jpg
data/ship/000002.jpg
data/ship/000003.jpg
data/ship/000004.jpg
data/ship/000005.jpg
data/ship/000006.jpg

data/ship.names:(一行一個類別名稱)

ore carrier
container ship
bulk cargo carrier
general cargo ship
fishing boat
passenger ship

數據集的標籤與圖片在同一目錄,如 data/ship/006983.jpg對應的label爲data/ship/006983.txt
006983.txt

1 0.091406 0.486574 0.130729 0.097222
1 0.788542 0.511574 0.051042 0.041667

一行一個object,分別表示框體的類別,框體中心x座標,框體中心的y座標,框體的寬,框體的高。這裏需要注意所有值都爲相對值,即座標和寬高都要除以圖片的寬高。voc->yolo數據集的轉換,yolo也提供了API函數,就是解析xml,然後進行座標轉換。

模型訓練

./darknet detector train data/ship.data cfg/yolov4-ship.cfg yolov4.conv.137

模型訓練就一行命令,加載對應配置文件,其中yolov4.conv.137爲模型的預訓練權重,訓練時會在當前目錄下生成模型的loss曲線圖(chart.png)
chart.png

模型預測

./darknet detector test data/ship.data cfg/yolov4-ship.cfg backup/yolov4-ship_last.weights data/ship/006983.jpg -ext_output

以驗證集中的圖片006983.jpg爲例,程序運行完成會在當前目錄下生成預測圖片predictions.jpg
predictions.jpg

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