深度学习

YOLOv4 随笔

2020-10-11  本文已影响0人  zidea

YOLOv4

YOLOv4 在网络结构上没有大突破,不过使用学多小 tricks,可以做面试经典,在YOLOv4 可以看成 YOLOv3 加强版,所以YOLOv4 与 YOLOv3 的预测大致一样

在 head 部分决定我们网络是用于检测还是分类

YOLOv4 的优化点

在现在的目标检测的结构,现在按这些位置来说明一下 YOLOv4 改动

<img src="./images/yolov3_structure.jpg">

<img src="./images/yolov4_net_architecture.jpeg">

<img src="./images/yolov4_structure.png">

CSPDarknet53(CSP)

CSPDarknet53 是 Darknet53 的改进版本,经过主干神经网我们会得到 3 个有效特征层输出 13\times 13 \times 102426\times 26 \times 51252\times 52 \times 256 的特征层, CSP

<img src="./images/yolov4_mish_activation.jpeg" width="75%">

看函数形状会发现这个函数不是单调的,ReLU 和 Mish 的对比,Mish 的梯度更平滑。而且实验证明 Mish 和各种优化器结合的效果都比较好。

更具体说一下,以上无边界(即正值可以达到任何高度),避免了由于封顶而导致的饱和,例如 ReLU6。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU 中那样的硬 0 边界。
Mish=x * tanh(ln(1+e^x))

最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性泛化

尽管如此,我测试了许多激活函数,他们也满足了其中的许多想法,但大多数都无法执行。这里的主要区别可能是 Mish 函数在曲线上几乎所有点上的平滑度。

这种通过 Mish 激活曲线平滑性来推送信息的能力如下图所示,在简单测试中,越来越多的层被添加到一个测试神经网络中,而没有一个统一的函数。随着层深的增加,ReLU 精度迅速下降(),其次是 Swish。相比之下,Mish 能更好地保持准确性,这可能是因为它能更好地传播信息:

<img src="./images/yolov4_mish_activation_02.jpeg">

<img src="./images/yolov4_csp_002.png">

<img src="./images/yolov4_002.jpeg"/>

融合特征提取

SPP 结构
PANet

<img src="./images/yolov4_neck_head.png">

SE 和 SAM

数据增强

这里

现在做目标检测就是对应目标,对三个部分进行选择填空,

部位
backbone CSPDarknet53
neck SPP,FPN,PAN
head 与 yolov3 一致,提供 3 个检测头

YOLOv4

历史版本

版本 说明
1 yolov1 直接回归出位置
2 yolov2 全流程多尺度法,还是一个检测头
3 yolov3 多尺度检测头,resblock darknet53
上一篇下一篇

猜你喜欢

热点阅读