YOLOv4 随笔

YOLOv4

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

  • 13 x 13 用于检测大目标
  • 26 x 26 用于检测中目标
  • 52 x 52 用于检测小目标

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

YOLOv4 的优化点

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

  • backbone: Darknet53 更改为 CSPDarknet53
  • neck
  • head 在特征提取网络,使用了 SPP 和 PANet 结构来加强特征提取

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

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

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

  • 416 \times 416 \times 3 输入
  • 压缩宽度和高度到通道维度
  • 在后面几层已经具有一定语义信息,
  • 进行 CBL \times 3

CSPDarknet53(CSP)

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

  • resblock 构成
  • Mish 激活函数: ReLU 激活函数一直依赖是我们做卷积神经网络的首选。不过随着 Mish 出现,这种情况可能会发生改变。那么 Mish 凭什么能够代替老大的位置呢?

<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">

  • 使用 CSPDarkNet 的结构(CSP + Darknet)
    <img src="./images/yolov4_resblock.png">
  • Part1 是对残差结构堆叠
  • Part2 部分是一个大残差边

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

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

融合特征提取

SPP 结构
  • 首先进行 13 \times 13 \times 1024 卷积进行 3 次卷积
  • 然后进行 SPP 模块,只需要不同池化核进行池化后再进行堆叠就可以了
  • 最后再进行 3 次卷积
PANet

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

SE 和 SAM

  • SENet (Squeeze-and-Excitation (SE), 增加 2% 计算量(但推理时有10%的速度),可以提升1%的ImageNet top-1精度。
  • Spatial Attention Module (SAM),增加0.1%计算量,提升0.5%的top-1准确率

数据增强

这里

  • 数据增强(扩充)
    • 亮度、饱和度、噪声
    • 几何变形
  • 模拟对象遮挡
    • random erase
    • Cutout
    • hide-and-seek grid mask 随机或均匀选取图片中的几何区域将其全部替换为 0
  • feture map
    • Dropout
    • DropConnet
    • DropBlock
      <img src="./images/yolov4_dropblock.png">
  • 图像融合
    • MixUp
    • CutMix 作者在 CutMix 基础提出 Mosica 增强
      <img src="./images/yolov4_mosaic.png">
      <img src="./images/yolov4_mosaic_002.jpeg">
  • 解决类别不平衡
    • hard negative example mining
    • online hard example mining
    • focal loss
  • label smoothing
    [0,0,1] 转换到[0.01,0.01,0.90]
    labels \times (1- a) + \frac{a}{n}[1,1,\cdots]
    [0,0,1] \times (1- 0.03) + \frac{0.03}{3}[1,1,0]
  • bbox
    <img src="./images/yolov4_CIoU.jpeg">
    • IoU loss
      L_{IoU} = 1 - \frac{|B \cap B^{gt}|}{B \cup B^{gt}}
      IoU 的问题是因为如果两个框不相交,IoU 就是 0 所以 1 存在梯度消失问题

    • GIoU loas
      L_{GIoU} = 1 - IoU + \frac{|C - B \cup B^{gt}|}{|C|}
      <img src="./images/yolov4_GIoU.jpg">

    • DIoU loss
      L_{DIoU} = 1 - IoU + \frac{\rho^2(b,b^{bt})}{c^2}
      <img src="./images/yolov4_DIoU.jpg">

      • 两个中心点位置约束,c 表示两个框的对角线连接长度就是 c 两个中心点距离平方
    • CIoU loss
      \begin{aligned} L_{CIoU} = 1 - IoU + \frac{\rho^2(b,b^{bt})}{c^2} + \alpha v\\ v = \frac{4}{\pi^2}(\arctan \frac{w^{gt}}{h^{gt}} - \arctan \frac{w}{h})^2\\ \alpha = \frac{v}{(1 = IoU)+ v}\\ \end{aligned}

      • v 是用来度量长宽比相似性的,\alpha 是用来度量权重函数

      • IoU 是比值的概念,对目标物体的 scale 是不敏感的,然而常用的 BBox 的回归损失优化和 IoU 优化不是完全等价的,通常 IoU 无法直接优化没有重叠的部分。

      • 于是有人提出直接使用 IoU 作为回归优化 loss, CIoU 是其中非常优秀的一种想法。

      • CIoU 将目标与 anchor 之间的距离、重叠率、尺度以及正则项都考虑进去,使得BBox变得更加稳定,不会像 IoU 和 GIoU 一样出现训练过程中发散等问题。而

    • DIoU-NMS

      • 传统的 NMS 通过重叠去掉冗余框,但是对于遮挡效果不好。所以在 DIoU-NMS 不仅考虑检测区域的重叠,而且还考虑了检测区域间的中心点的距离

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

部位
backbone CSPDarknet53
neck SPP,FPN,PAN
head 与 yolov3 一致,提供 3 个检测头
  • 13 \times 13 \times 256
  • 26 \times 26 \times 256
  • 52 \times 52 \times 256

YOLOv4

  • Bag of Freebie(Bof) for backbone
    • CutMix
    • Mosaic data augmentation
    • DropBlock regularization
    • Class label smoothing
  • Bag of Special(Bos)
    • Mish activation
    • Cross-stage partial connections(CSP)
    • Multi-input weighted residual connection(MiWRC)
  • Bag of Freebies(BoF) for Detector
    • CIoU-loss
    • CmBN
    • DropBlock regularization
    • Mosaic data augmentation
    • Self-Adversarial Training
    • Eliminate grid sensitivity
    • Using multiple anchors for a single ground truth
    • Cosine annealing scheduler
    • Optimal hyper-parameters
    • Random training shapes
  • Bag of Specials(Bos) for detector
    • Mish activation
    • SPP-block
    • SAM-block
    • PAN path-aggregation block
    • DIoU-NMS

历史版本

版本 说明
1 yolov1 直接回归出位置
2 yolov2 全流程多尺度法,还是一个检测头
3 yolov3 多尺度检测头,resblock darknet53
  • 模型设计,前向计算
  • 定义目标函数
  • 反向传播
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350