• 网络结构:
    • Backbone:CSPDarknet53
    • Neck:SPP,PAN
    • Head:YOLOv3
  • 优化策略:
    • Eliminate grid sensitivity——消除网格敏感度
    • Mosaic data augmentation——马赛克数据增强
    • IoU threshold(match positive samples)
    • Optimizered Anchors
    • CIoU

0x00 CSPDarknet53

  • 优点:
    • 增强CNN学习能力
    • 移除计算瓶颈
    • 降低显存使用

CSPNet中的CSP结构:

YOLOv4网络学习笔记-萤火
  • 上面的图来自CSPNet论文
  • 分为两部分Part1 和part2(按通道方向进行均分)
  • 最后concat拼接

YOLOv4中的CSP结构:

YOLOv4网络学习笔记-萤火
  • 上图是YOLOv4中的CSP结构
  • 激活函数:Mish
  • 一开始会使用步长为2的卷积做下采样,然后分为2路
  • 经过这两路卷积层之后,通道数都会原来的一半。如原来是128,就变为64了
  • 经过一系列的resblock,再经过1×1卷积层
  • 拼接后的通道数和原来一样。这里都是128

1. CSPDarknet53网络结构

YOLOv4网络学习笔记-萤火

这里有点特殊,CSP结构最开始的1×1卷积没有通道数减半,两路都还是64通道

YOLOv4网络学习笔记-萤火
YOLOv4网络学习笔记-萤火
YOLOv4网络学习笔记-萤火
YOLOv4网络学习笔记-萤火

Down Sample2-5基本都一样,只是堆叠的ResBlock不一样多,还有输入CSP Block的feature map尺寸和通道数不一样

0x01 Mish函数

$$Mish(x) = x*tanh(ln(1+e^x))$$

YOLOv4网络学习笔记-萤火

0x02 SPP

YOLOv4网络学习笔记-萤火

其实在YOLO-SPP中就有了

0x03 PAN结构

Path Aggregation Network路径聚合网络

YOLOv4网络学习笔记-萤火
全览
YOLOv4网络学习笔记-萤火
backbone
YOLOv4网络学习笔记-萤火
FPN
YOLOv4网络学习笔记-萤火
PAN,可以看出PAN包括了FPN
  • FPN:高层语义向低层融合
  • 在FPN之后加一个结构:低层语义信息向高层融合
  • 这个结构和FPN一起构成PAN
YOLOv4网络学习笔记-萤火

原始PAN结构的融合是用相加的方式,YOLOv4中是concat

0x04 网络结构

YOLOv4网络学习笔记-萤火

PAN中的激活函数是Leaky ReLu

0x05 Eliminate grid sensitivity消除网格敏感度

在原先的YOLO中,预测框中心点被限制在grid cell中。假如gt box的中心点刚好落在grid box边缘,那么久需要sigmoid(x)的输出只为0,但是这样要求x为负无穷,网络很难学习到

YOLOv4网络学习笔记-萤火

为了解决这个问题, 引入了一个缩放因子scale,通常取2

YOLOv4网络学习笔记-萤火

0x06 Mosaic数据增强

将4张不同的图片拼接到一起得到一张图片,YOLO-SPP中的技术

0x07 IoU threshold(匹配正样本)

先看看YOLO v3中的:

YOLOv4网络学习笔记-萤火

再看YOLOv4的:

由于之前做了消除grid敏感度,把预测框的中心点由原来相对grid cell在[0, 1]扩大为[-0.5, 1.5],所以要看gt box的中心点落在哪个位置,相临的grid cell 的anchor也会作为正样本。这样也扩充了正样本

YOLOv4网络学习笔记-萤火
  • 具体是哪个相邻的grid cell要看gt box 和它们的左上角点。特殊:如果刚刚好在正中心,只会使用当前那一个grid cell。
  • 只会往上下左右grid cell扩展,不会往4个角落扩展
YOLOv4网络学习笔记-萤火

0x08 优化anchors

  • 针对512*512重新优化了anchor
  • PS:YOLOv5用的还是V3中的anchor尺寸
YOLOv4网络学习笔记-萤火