Yolov4训练自己的数据集

Yolov4论文:
链接:https://pan.baidu.com/s/1cMtCneweOumFb1KoEFPBWg
提取码:49r6

代码:https://github.com/AlexeyAB/darknet

环境:
Ubuntu 18.04
Python3.7(anoconda)
cuda10.0,cudnn7.3.4

编译:

原文作者的代码中,已经将所有的东西包装好了,因此根据自己的需求,修改makefile的参数,make即可。参数如下(原文作者代码中的README.md文件,有详细的介绍):
GPU=1

  • 使用CUDA进行构建以通过使用GPU加速(CUDA应该在中/usr/local/cuda)

CUDNN=1

  • 使用cuDNN v5-v7进行构建,以通过使用GPU加速培训(cuDNN应该在中/usr/local/cudnn)

CUDNN_HALF=1

  • 为Tensor Core构建(在Titan V / Tesla V100 / DGX-2及更高版本上)加速检测3倍,训练2倍

OPENCV=1

  • 使用OpenCV 4.x / 3.x / 2.4.x构建-允许检测来自网络摄像机或网络摄像机的视频文件和视频流

DEBUG=1

  • 调试Yolo版本

OPENMP=1

  • 使用OpenMP支持进行构建以通过使用多核CPU来加速Yolo

LIBSO=1

  • 生成一个库darknet.so和uselib使用该库的二进制可运行文件。

ZED_CAMERA=1

  • 构建具有ZED-3D摄像机支持的库(应安装ZED SDK)
#cd 到代码的主目录darknet-master
make

等其运行好之后运行代码经行测试,

#dog.jpg是自带的图片,也可以传自己的图,这里我只是测试代码能不能跑
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

在这里插入图片描述

准备自己的数据集:

这里有两种方式(我所了解的)。

第一种:用作者提供的代码

按照VOC的数据格式准备数据集(),
/VOCdevkit/VOC2014/Annotations
/VOCdevkit/VOC2014/ImageSets/Main
/VOCdevkit/VOC2014/JPEGImages

为什么这么创建呢,因为作者的代码中,生成标签就是这样生成的,说白了就是偷个懒。。。(代码在build/darknet/x64/data/voc/voc_label.py)

Annotations存放标签的xml文件
Imagesets/Main里面存放着txt文件,txt中存放着图片的名字:
0001
0002等等
当然,分为train.txt,test.txt,val.txt(train为训练集,test为测试集,val为验证集)。
JPEGImages存放着图片。

更改build/darknet/x64/data/voc/voc_label.py中的代码

将set换成自己需要的文件名,classes换成训练的类别。
在这里插入图片描述
这就是为什么要用voc的数据格式,可以直接用作者写好的代码
在这里插入图片描述
在这里插入图片描述
运行之后,会生成labels文件夹,里面是以每张图片名字命名的txt文件,txt文件中包含每张图片标签转换过后的值。除此之外,还会生成train2017.txt,val2017.txt文件,里面存储着图片的路径。

第二种:自己准备

如果你不想用作者的代码生成标签,你可以自己生成,train2014.txt,val2014.txt,以及labels文件。之后,在按照/VOCdevkit/VOC2014/JPEGImages目录,将数据放入JPEGImage中(train2014.txt和val2014.txt文件存放图片路径),并将labels放入/VOCdevkit/VOC2014/,与JPEGImage同级。

这是因为训练的时候,是根据图片路径来找标签的,如果不放在同级,它会从JPEGImage中寻找标签。(代码在 src/untils.c)
在这里插入图片描述

如果labels没有放对文件夹,或者JPEGImage中没有标签,则会报错 Can’t open label file. (This can be normal only if you use MSCOCO)
如果不想存放在JPEGImage中,则可以在下面写上自己的路径,如下图:
在这里插入图片描述

修改cfg文件

在cfg目录下找到coco.name,复制并重命名为obj.name(可以替换为自己想用的名字)
将其中的类别,改为自己的类别
在这里插入图片描述
在cfg目录下找到coco.data,复制并重命名为obj.data,并修改为自己的参数
在这里插入图片描述
在cfg目录下找到yolov4-custom.cfg,复制并重命名为yolov4-obj.cfg
这一部分根据自己的需求更改,
在这里插入图片描述
另外classes和filters需要改成自己的数据对应的值。(一共3个,每个yolo里面的clases以及yolo前面的filters,filters =(classes+5)*3)
在这里插入图片描述
在这里插入图片描述

训练

#yolov4.conv.137为预训练权重(可以在gits上下载)
./darknet detector train cfg/obj.data cfg/yolov4-obj.cfg yolov4.conv.137

测试

#测试方式有很多种,还可以测试视频,有兴趣的可以自己尝试
./darknet detector test cfg/obj.data cfg/yolo-obj.cfg backup/yolov4-obj_1000.weights 

./darknet detect cfg/yolov4.cfg backup/yolov4-obj_1000.weights data/dog.jpg

另外,还有许多改进方法,在git上的README.md中,有兴趣的可以看看,非常有帮助。
另外网上已经有tensorflow和pytorch版本的yolov4的源码,有兴趣的可以看看,下面是我收藏的两篇(当然也可能有比下面的更好的,自取)

tensorflow(包含tensorrt):https://github.com/hunglc007/tensorflow-yolov4-tflite

pytorch(包含tensorrt):https://github.com/Tianxiaomo/pytorch-YOLOv4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值