Windows系统C++版 YOLOv4船舶目标检测实战

5 篇文章 0 订阅
3 篇文章 1 订阅

克隆或下载YOLOv4

YOLOv4网址:https://github.com/AlexeyAB/darknet
如果安装了Git软件,可直接克隆项目到本地:
nvcc -V
git clone https://github.com/AlexeyAB/darknet

解决方案生成

在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet目录下使用vs2019打开sln文件
在这里插入图片描述
打开后如图
在这里插入图片描述

点击重新生成,然后就会在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64下生成darknet.exe文件

生成训练集和测试集文件

使用PASCAL VOC数据集的目录结构:
建立文件夹层次为 C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64\VOCdevkit\VOC2007
VOC2007下面建立两个文件夹:Annotations和JPEGImages
JPEGImages放所有的训练和测试图片;Annotations放所有的xml标记文件
在这里插入图片描述
在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64目录下执行

	python genfiles.py

在VOCdevkit \ VOC2007目录下可以看到生成了文件夹labels ,同时在darknet下生成了两个文件2007_train.txt和2007_test.txt。

2007_train.txt和2007_test.txt分别给出了训练图片文件和测试图片文件的列表,含有每个图片的路径和文件名。
另外,在VOCdevkit\VOC2007\ImageSets\Main目录下生产了两个文件test.txt和train.txt,分别给出了训练图片文件和测试图片文件的列表,但只含有每个图片的文件名(不含路径和扩展名)。
labels下的文件是images文件夹下每一个图像的yolo格式的标注文件,这是由annotations的xml标注文件转换来的。
最终训练只需要:2007_train.txt,2007_test.txt,labels下的标注文件和 VOCdevkit\VOC2007\JPEGImages下的图像文件。

修改配置文件

1)新建data\voc.names文件
可以复制data\voc.names再根据自己情况的修改;可以重新命名如:data\voc_ship.names
2)新建 data\voc.data文件
可以复制data\voc.data再根据自己情况的修改;可以重新命名如:data\voc_ship.data
3)新建cfg\yolov4-voc.cfg
可以复制cfg\yolov4-custom.cfg再根据自己情况的修改;可以重新命名cfg\yolov4_ship.cfg:
batch=64 subdivisions=64 (如果显存溢出改为16)
max_batches = 2000(这里为2000乘以类别数)
steps=1600,1800(这里为max_batches的百分之80和90)

在Darknet中,batch和subdivisions是结合使用的,例如这儿的batch=64,subdivisions=16表示训练的过程中将一次性加载64张图片进内存,然后分16次完成前向传播,意思是每次4张,前向传播的循环过程中累加loss求平均,待64张图片都完成前向传播后,再一次性后传更新参数。

subdivisions一般设置16,根据尝试,通常设置为8的倍数,batch的值可以根据显存占用情况动态调整,一次性加减subdivisions大小即可,通常情况下batch越大越好,还需注意一点,在测试的时候修改batch和subdivisions参数为1,避免发生错误。
width也可以设置为不等于height,通常情况下,width和height的值越大,对于小目标的识别效果越好,但受到了显存的限制,读者可以自行尝试不同组合。一次为跑完一个batch,训练次数达到max_batches后停止学习。
在cfg\yolov4_ship.cfg文件中,三个yolo层和各自前面的convolutional层的参数需要修改:
三个yolo层都要改:yolo层中的classes为类别数,每一个yolo层前的convolutional层中的filters =(类别+5)* 3
例如:
yolo层 classes=1, convolutional层 filters=18

训练自己的数据集

1)下载预训练权重文件
yolov4.conv.137
放置在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64目录下
这里的训练使用迁移学习,所以下载的yolov4在coco数据集上的预训练权重文件(不含全连接层)
2)训练网络

darknet.exe detector train data\voc_ship.data cfg\yolov4_ship.cfg  backup\yolov4.conv.137 -map

如需要显示训练过程的map变化,在命令末尾加-map
整个训练如下图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由于我是中断后在训练的,所以前面的chart被更新了,只剩下后面的chart
断点训练命令如下:

darknet.exe detector train data\voc_ship.data cfg\yolov4_ship.cfg  backup\yolov4_ship_last.weights -map

以下为训练完的权重文件

在这里插入图片描述

创建测试cfg文件

训练好后可以在backup目录下看到权重文件。
尝试test前要修改cfg文件,切换到test模式。可以重新建立一个测试cfg文件, 如yolov4-ballship.cfg
设置:
batch=1 subdivisions=1

运行命令

 darknet.exe detector test data\voc_ship.data cfg\yolov4_ship_test.cfg backup\yolov4_ship_last.weights testfiles\000678.jpg

在这里插入图片描述

注意事项:

当报显存满的错误时,我调节batch并没有解决问题,我降低了网络的输入大小为320*320解决的这个问题,但是训练出来的模型明显对小目标不太鲁棒。

一起开启新世界的大门吧😊

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lindsayshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值