YOLOV4:从零开始安装&训练自己的数据集

  • 系统环境
  • CUDA安装
  • opencv4安装
  • 安装
  • 测试
  • YOLOv4安装
  • 训练SeaShips数据集
  • 生成cfg模型配置文件
  • 数据文件
  • 模型训练
  • 模型预测


系统环境

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生成如下数据文件

VOC2007 #数据集文件夹
ship.data #数据说明文件
ship.names #类别名称
train.txt #存放训练集的图片路径
val.txt #存放验证集的图片路径
#voc2txt.py #生成yolo_raw_txt标签和划分数据集,文件地址在博客末尾

把SeaShips数据集(VOC2007)解压到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/VOC2007/JPEGImages/000001.jpg
data/VOC2007/JPEGImages/000002.jpg
data/VOC2007/JPEGImages/000003.jpg
data/VOC2007/JPEGImages/000004.jpg
data/VOC2007/JPEGImages/000005.jpg
data/VOC2007/JPEGImages/000006.jpg

data/ship.names:(一行一个类别名称)

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

数据集的标签与图片在同一目录,如 VOC2007/JPEGImages/006983.jpg对应的label为VOC2007/JPEGImages/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)

openkm community 安装 openiv4.0安装教程_YOLOV4

模型预测
./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

openkm community 安装 openiv4.0安装教程_YOLOV4_02