目标检测算法 - YOLOv4
1. 简介
YOLOv4是YOLOv3的改进版。YOLOv4并不是原YOLO项目的作者。发表于CVPR2020。
改进:
- 主干特征提取网络:Darknet53 -> CSPDarknet53
- 特征金字塔:SPP,PAN
- 分类回归层:YOLOv3(未改变)
- 训练时用到的小技巧:Mosaic数据增强、Label Smoothing平滑、CIOU、学习率余弦退火衰减
- 激活函数:使用Mish激活函数
- …
性能对比
网络结构:
- Backbone:CSPDarknet53
- Neck:SPP,PAN
- Head:YOLOv3
优化策略:
- Eliminate grid sensitivity
- Mosaic data augmentation
- IoU threshold(match posotive samples)
- Optimizered Anchors
- CIOU
2. YOLOv4整体结构
YOLOv4整体结构
3. Backbone
当输入是416x416时,特征结构如下:
CSP模块
对于输入的特征层,首先将其分为两部分,part1和part2。
对于part2分支,它会通过一系列的dense block,然后通过transition,再将输出和part1上的输出进行融合concat拼接,再通过transition。
在源码中,对于part1和part2是直接将输入特征层按照通道方向进行均分操作。
但是在YOLOv4论文中,并不是这样操作的,如下图。
CSPDarknet53整体结构
作用:
- 增强CNN的学习能力
- 移除计算瓶颈
- 降低显存使用
总体来看,每个CSP模块都有以下特点:
- 相比于输入,输出featuremap大小减半。
- 相比于输入,输出通道数增倍。
- 经过第一个CBM后,featuremap大小减半,通道数增倍。
CSP1和其他CSP有所不同:
-
经过模块第二个CBM后,CSP1 featuremap大小和通道数都不变,但是其他模块featuremap大小不变,通道减半。
-
经过最后一个CBM后,CSP1 featuremap大小不变,通道数减半,但是其他模块featuremap大小通道数都不变。
4. Neck
yolov4的Neck部分主要使用SPP和PANet模块。
SPP
SPP(空间金字塔)可以使得多个尺寸特征融合在一起,输入经过3个maxpool然后concat在一起,maxpool大小分别是13,9和5,yolov4中得SPP模块。
PANet
PANet的网络结构由5个核心模块组成。其中(a)是一个FPN,(b)是PAN增加的自底向上的特征融合层,©是自适应特征池化层,(d)是PANet的bounding box预测头,(e)是用于预测掩码的全连接融合层。
PANet是加强版的FPN,通过融合自底向上和自顶向下两个路径增加模型的表征能力。