yolov4训练自己的数据集

小帅编:努力不一定成功,放弃就等于失败!

注:版权归小帅编所有,转载请注明出处。有任何问题可以在下面评论或者私信小帅编,看到一定会回复。
如果对你有帮助可以点个赞哦

前几天(目前2020-04-30)yolov4轰轰烈烈的问世了,自己跑了一下顺便记录下来。
论文
代码

环境

Ubuntu 16.04
Python3.5
cuda 9

首先把代码下载下来,可以用下面命令下载,也可以直接点击上面代码链接下载。

git clone https://github.com/AlexeyAB/darknet.git
1.编译

如果需要使用GPU加速,那么得打开项目里面的makefile文件修改一些参数的值。修改完成之后在直接make。
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
OPENMP=1
LIBSO=1
DEBUG=1

# cd到darknet-master目录下
make
或者 make -j8
2.测试一下开源权重
# 测试图片,结果保存在darknet-master/predictions.jpg
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

在这里插入图片描述

3.准备自己要训练的数据集,以voc数据集的格式存放

在这里插入图片描述
先按照上面格式准备好数据
Annotations是存放标签xml文件
JPEGImage 存放图片
ImageSets 里面txt按行存放着图片名字

000001
000002
000003…

4.制作yolov4需要的label以及txt

这个时候只用voc数据集的格式是不满足我们这里需要的格式。首先打开路径下 build/darknet/x64/data/voc/voc_label.py,修改voc_label.py里面的内容。
先把7行的关于2012的去掉,再把第9行改成自己的类别。
在这里插入图片描述接着给每个路径前面加个data,如下图
在这里插入图片描述在这里插入图片描述修改完了之后在主目录darknet-master下执行voc_label.py,否则哪些文件会生成在build/darknet/x64/data下面,执行完成后你会看到主目录下的data/目录下会生成几个txt。主目录darknet-master下的data/VOCdevkit/VOC2007/下面会生成一个label文件夹。

5.修改配置文件

<a.>cfg/目录下复制coco.data,并且重命名为obj.data。然后使用修改下面以下内容
在这里插入图片描述

<b.>cfg/目录下复制coco.names,并且重命名为obj.names。改成自己类别的名称
在这里插入图片描述
<c.>复制cfg/yolov4-custom.cfg,并且重命名为yolo-obj.cfg,同时修改一下内容
在这里插入图片描述
上图中修改width和height为416,修改最大batch迭代多少个数max_batches = 6000,修改steps多久学习率下降一次,一般设置为batch个数的80%和90%。

然后三个classes的地方要修改
在这里插入图片描述
还有三个filters=255的地方要修改成自己的。
在这里插入图片描述

6.开始训练自己的数据集
./darknet detector train cfg/obj.data cfg/yolo-obj.cfg yolov4.conv.137

如若报错这个错误,则将cfg/yolo-obj.cfg 里面26行mosaic=1改成mosaic=0或者注释掉。没报错就忽略。
在这里插入图片描述

7.预测
./darknet detector test cfg/obj.data cfg/yolo-obj.cfg yolo-obj_xxxx.weights 

预测效果如图,yolov4果然强,这是我用了1000张图训练了3000个epoch训练得到的权重效果

在这里插入图片描述

———————————————————————————————————————————

备注:上面的测试命令是基于编译出来的darknet来预测的,当我们工程中要用的的时候及其不方便,但是可以用以这个代码来使用模型。
8.用自己训练的权重作为预训练

有时候训练到一半突然终止了,这时候从头开始训练又很费时间,此时我们可以将自己之前保存的权重作为预训练权重。但是直接使用yolo-obj_last.weights会报错。需要做出如下转变。

#首先用第一行代码将yolo-obj_last.weights转化为olo-obj_last.conv.23
./darknet partial cfg/yolo-obj.cfg backup/yolo-obj_last.weights backup/yolo-obj_last.conv.23 23
#第二行将我们刚转化好的yolo-obj_last.conv.23作为预训练权重训练
./darknet detector train cfg/obj.data cfg/yolo-obj.cfg backup/yolo-obj_last.conv.23

版权声明:本文为CSDN博主「CSzhangjinchao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44771532/article/details/105495755

CSzhangjinchao

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

LabelImg如何使用?快捷键操作

LabelImg是一个图形图像注释工具。它是用Python编写的,使用Qt作为图形界面。图片标注被保存为PASCAL VOC格式的XML文件,这是ImageNet使用的格式。此外,它还支持YOLO和Cr

YOLO-V3-SPP详细解析

YOLO-V3-SPP 继前两篇简单的YOLO博文 YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》YOLO-V2论文理解《YOLO9000: Bet

YOLOV5学习笔记

Yolov5有很多版本,但是 Yolov5s网络最小,速度最少,AP精度也最低。但如果检测的以大目标为主,追求速度,倒也是个不错的选择。其他的三种网络,在此基础