Ubuntu18.04 搭建模型YOLOV4

14 篇文章 3 订阅
11 篇文章 0 订阅

环境:ubuntu18.04 cuda11.0.3 cudnn8.0.2 python3.7

一、安装YOLOV4

官网:https://github.com/AlexeyAB/darknet

1、克隆darknet

git clone https://github.com/AlexeyAB/darknet

2、编译项目

cd darknet
make

 3、使用预训练权重文件yolov4.weights 安装测试

./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg

测试结果如下:

目录darknet下的predictions.jpg是产生的预测结果图像文件

4、安装opencv3.4.6

安装参考官网:https://docs.opencv.org/3.4.4/d7/d9f/tutorial_linux_install.html

下载opencv和opencv_contrib:https://github.com/opencv  https://blog.csdn.net/weixin_38621214/article/details/93723272

安装链接:https://blog.csdn.net/weixin_38621214/article/details/93723272

因为这次安装下载花了很长时间,所以相关安装包也上传到百度网盘了,方便下次安装。

链接: https://pan.baidu.com/s/1VQqUubKK-3dZmQpC1ZcNPw  密码: 09ae

make时出现了如下问题:

参考链接:https://blog.csdn.net/weixin_44152895/article/details/102882502

解决办法:

 

注意:改完路径之后,一定要重新cmake,重要重要!!!!!!!!!

5、修改darknet目录下的Makefile文件

GPU = 1
CUDNN = 1
OPENCV = 1

#显卡为RTX2080Ti,不同的显卡型号对应不同的算力
ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]

注意:算力一定要要和显卡型号匹配,不然在make时会报以下错误。

6、执行编译命令

make clean
make

注意:make时出现以下错误:

解决办法:
使用如下命令在系统内查看libcuda的路径。

locate libcuda

查找结果如下:

使用下面的命令建立软连接:

 sudo ln -s /usr/local/cuda-11.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/libcuda.so

重新make,成功。

此类问题都可以通过这种方法解决。

7、测试GPU版本的YOLOV4

测试图片

./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg

测试结果如下:

 测试opencv

./darknet imtest data/eagle.jpg

测试结果如下:

二、准备自己的数据集

1、标注图像

2、修改配置文件

2.1  修改存储类别的文件data/voc.names

复制data/voc.names,重命名为data/voc-ball.names,根据实际类别作出修改。

2.2 修改存储训练集信息的文件cfg/voc.data

复制cfg/voc.data,重命名为cfg/voc-ball.data,添加类别数classes、类别名称文件data/voc.names路径、训练集train.txt和测试集test.txt路径等。

2.3  修改网络框架参数cfg/yolov4-custom.cfg

复制cfg/yolov4-custom.cfg,重新命名cfg/yolov4-voc-ball.cfg,主要修改网络框架参数。

(1)  batch=16 subdivisions=8
              max_batches = 6000
              steps=4800, 5400

(2)在cfg/yolov4-voc-ball.cfg文件中,三个yolo层和各自前面的convolutional层的参数需要修改:

三个yolo层都要改:yolo层中的classes为类别数,每一个yolo层前的convolutional层中的filters =(类别+5)* 3

例如:

yolo层 classes=1, convolutional层 filters=18

yolo层 classes=2, convolutional层 filters=21

yolo层 classes=4,convolutional层 filters=27

三、训练自己的数据集

1、在darknet目录下添加预训练权重

 yolov4.conv.137

这里的训练使用迁移学习,所以下载的yolov4在coco数据集上的预训练权重文件(不含全连接层)。

2、训练

./darknet detector train cfg/voc-ball.data cfg/yolov4-voc-ball.cfg yolov4.conv.137 -map

第一次训练的时候报错:CUDA status Error: file: ./src/dark_cuda.c : ():line:373 CUDA Error:out of memory CUDA Error:out of memory。

解决办法:batch和subdivisions都设为4,然后把cfg文件中的width和height减小,但要是32的倍数,直到能训练。

3、训练建议

batch=16
subdivisions=8
把max_batches设置为 (classes*2000);但最小为4000。例如如果训练3个目标类别,max_batches=6000
把steps改为max_batches的80% and 90%;例如steps=4800, 5400。
为增加网络分辨率可增大height和width的值,但必须是32的倍数 (height=608, width=608 or 32的整数倍) 。这有助于提高检测精度。

四、测试训练出的网络模型

训练好后可以在backup目录下看到权重文件。

尝试test前要修改cfg文件,切换到test模式。可以重新建立一个测试cfg文件, 如yolov4-voc-ball-test.cfg

设置:
batch=1 subdivisions=1

测试图片:

#检测单张图,并且加上-ext_output输出框的坐标值
./darknet detector test cfg/voc-ball.data cfg/yolov4-voc-ball-test.cfg backup/yolov4-voc-ball_final.weights -ext_output /home/yons/Project/test_img/ball/img00001.jpg
#recall
./darknet detector recall cfg/voc-ball.data cfg/yolov4-voc-ball-test.cfg backup/yolov4-voc-ball_final.weights -ext_output /home/yons/Project/test_img/ball/img00001.jpg
#检测列表test.txt中图像,并将结果保存在result.json
./darknet detector test cfg/voc-ball.data cfg/yolov4-voc-ball-test.cfg backup/yolov4-voc-ball_final.weights -ext_output -dont_show -out result.json < /home/yons/Project/test_img/test.txt
# 检测列表test.txt中图像,并将结果保存在result.txt
./darknet detector test cfg/voc-ball.data cfg/yolov4-voc-ball-test.cfg backup/yolov4-voc-ball_final.weights -dont_show -ext_output < /home/yons/Project/test_img/test.txt > result.txt

 

  • 0
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值