Yolov4部署到ZYNQ系列2-重新训练darknet框架下的Yolov4

文章目录

  • 前言
  • 一、为什么重新训练darknet?
  • 二、改进Yolov4结构
    • 1.其他如常
    • 2.修改cfg文件
    • 3.加快运行
  • 三、改进Yolov4结构后的推测效果
  • 总结


前言

花了一个月不到的时间单枪匹马把Yolov4模型部署到ZYNQ Ultrascale+ MPSOC上,这次把一整个过程和关键的几个要点都按照系列文章的形式展开,确保可以通过系列文章的形式完美复现我的工作。
本节内容包括重新训练darknet框架下的Yolov4


一、为什么重新训练darknet?

用之前DOTA数据集上训练Yolov4(darknet框架)在量化、编译结束后,部署到开发板上出现下述error。解释一下就是Yolov4里面存在XIR(Xilinx中间表示形式)未定义的操作符,也就是激活函数softplus。
在这里插入图片描述
回到Yolov4的网络结构图,网上随便找的。其中有个CBM模块,M表示mish激活函数。
Yolov4部署到ZYNQ系列2-重新训练darknet框架下的Yolov4_第1张图片
而mish激活函数可以表达成如下的形式:
在这里插入图片描述
所以为什么会出现softplus的提示信息也就可以解释了,那又产生一个新问题,为什么会出现没有定义的情况,或者说,我们凭什么确定softplus没有被定义。这个问题需要回到Vitis-AI手册,在手册中我们可以看到量化并不支持softplus激活函数,所以我们的解决方案就是将Yolov4内的mish激活函数替换为leakyrelu,之所以可以这么做,其实主要还是可以接受两个激活函数的波形相似,当然最有力的支持证据还是在于我替换为leakyrelu函数以后得到的模型在服务器端、开发板都显示好的检测效果。
Yolov4部署到ZYNQ系列2-重新训练darknet框架下的Yolov4_第2张图片

二、改进Yolov4结构

1.其他如常

darknet的训练依旧参照我在“DOTA与Yolov4(-Tiny)”中darknet那一节,但是需要事先参照接下来的第2节和第3节修改部分内容。

2.修改cfg文件

修改所有mish函数为leaky函数。

3.加快运行

./darknet detector train cfg/voc.data cfg/yolov4-custom-nomish.cfg yolov4.conv.137 -map -gpus 0,1,2 -dont_show

配合修改cfg文件内的

learning_rate=0.00087
burn_in=4000
max_batches = 30000
policy=steps
steps=24000,27000
scales=.1,.1

三、改进Yolov4结构后的推测效果

推测前

推测后
Yolov4部署到ZYNQ系列2-重新训练darknet框架下的Yolov4_第3张图片


总结

重新调整了Yolov4的网络结构!

你可能感兴趣的:(Yolov4与ZYNQ,深度学习,人工智能,神经网络)