论文题目:YOLOv4: Optimal Speed and Accuracy of Object Detection

今天,使用YOLOv4对无人机进行目标检测,将自己的训练过程记录下来,总的来说,和之前Darknet的YOLOv3版本的操作完全相同。

环境

Ubuntu 16.04

Python: 3.6.4

OPENCV:3.4.0

CUDA: 10.0

GPU: RTX2080Ti

首先下载代码:

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

由于都是AlexeyAB大神的杰作,在使用上与YOLOv3使用过程几乎相同,因此,使用起来较为熟悉。

1. 编译make

如果硬件设备包含GPU加速,需要对makefile文件进行修改,修改后如下图所示。

然后在终端进行编译:

1 # cd到darknet文件夹下:2 make # 或make -j8

2. 下载开源权重,并测试:

使用与训练的权重进行测试:

1 ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

3. 训练自己的数据集

构建与YOLOv3相同的数据文件夹(此处仍以YOLOv3的方式构建):

先按照上面的格式准备好数据。其中:

Anontations用于存放标签xml文件

JPEGImage用于存放图像

ImageSets内的Main文件夹用于存放生成的图片名字,例如:

4. 准备YOLOv4需要的label和txt

首先,从路径为"/home/vtstar/yolov4/darknet/scripts"下的voc_label.py复制到项目根目录下(darknet),并对其内容进行修改。

其中,#后为注释掉的为原先的,未被注释掉的是修改后的,sets中为年份(VOC后的数字,例如VOC2007中的2007)和包含的数据集(Main文件夹中划分数据集的txt的种类),classes中填写标注文件中包含的待识别物体的类别标签。

由于是将voc_label.py复制到项目的根目录下,所以不需要对相关文件的路径进行修改。

执行voc_label.py,在根目录下将会生成训练需要的文件,即各个训练集中包含图像的路径。

5. 修改配置文件

这里同yolov3的使用是一致的,需要修改的配置文件包含三个部分:

cfg目录下:

voc.data / coco.data (二选一即可,本篇使用voc.data)

存放相关文件的路径:

类别的数量

训练过程中训练数据和验证数据的txt文件(voc_label.py生成的)

类别标签名称

存放权重的路径

yolov4-custom.cfg

yolov4训练参数和相关网络结构的修改:

输入图像大小和训练测试阶段中batch的数量和划分次数;

图像的大小可以是32的倍数。

训练代数;

github中给出了max_batches的基本设置方法,2000 × classes。当然,设置的大一些也是可以的,只不过后期基本上在某一值附近震荡

值得注意的是,steps的设置是max_batches × 80% 和 max_batches × 90%/。

网络结构;

根据待测目标类别的数量更改YOLO层(3个)和YOLO层前一层的卷积层(3个)

包含YOLO前一层卷积层的卷积核个数:(classes + 5)*3

YOLO层的类别数classes。

锚框(可选,kmeans聚类)

data目录下:

voc.names / coco.names (二选一即可, 多个类别隔行输入即可,本篇修改voc.names)

6. 开始训练

训练指令(与yolov3依旧相同):

1 ./darknet detector train cfg/voc.data cfg/yolov4-custom.cfg yolov4.conv.137 gpus 0

在训练过程中,与之前yolov3不同的是yolov4在训练过程中会弹出训练过程中的loss的实时图像,如下图所示,会动态的显示每一代的损失,当前代数和预计剩余时间。

对于下图,值得一提的是起初loss在图像上看到的是平的,并不是意味着损失不下降,只是loss相对与18.0而言都太大了,在固定坐标的图像上难以显示,因此可视化的是平的。

7. 预测

预测指令:

1 ./darknet detector test cfg/voc.data cfg/yolov4-custom.cfg yolov4-custom_xxxx.weights

然后在提示的Enter Path中输入待测图像的路径。如下图所示。

或者直接在预测指令后添加图像的路径。

这是单张图像的测试方式。

总的来说,和之前yolov3的操作完全相同,可以很好的迁移!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐