Centos7 opencv-4.1.0 gcc-4.8.5 cuda-10.0
具体可以参考博文Centos7离线安装nvidia驱动的两种方法,推荐使用方法2,编译时需要ncvv,需添加如下环境变量到~/.bashrc
CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
这里选用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
Git地址:https://github.com/AlexeyAB/darknett
Linux安装还是挺简单,若你只使用默认配置,make一下就行了,但是为了支持CUDA和OPENCV,需要额外配置一下,修改Makefile
GPU=1
CUDNN=1
OPENCV=1
SeaShips数据集:数据集共有7000张图片,图片分辨率均为1920x1080,分为六类船只(数据地址)
复制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)
./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
voc2txt.py: https://pan.baidu.com/s/1RJeQCPoKR_swhEePUrw5AA 提取码: kfgy