Backbone
YOLOv4的骨干是CSPDarknet53
CSP结构的作用:1. 增强CNN的学习能力 2. 移出计算瓶颈 3. 减少内存开销
CSP首先将输入的特征层分成两个部分,这里以densenet为例,part2分支经过denseblock后,进过一个transition,然后和part1 concat后再经过transition模块。
CSP的两个分支是在通道方向上进行的一个均分操作,但是在YOLOv4中是采用卷积的方式来实现分离(如下图右半部分所示),v4中的transition使用的是1*1的卷积
SPP
Spatial Pyramid Pooling,分为三路做maxpooling 然后再做类似残差连接,SPP支持任意大小,不管多大都是划分成一样的网格做maxpooling,是resize或者裁剪的一种替换,SPP相当于是多尺度池化,让模型的鲁棒性更强;可以进行多尺度训练,提高模型的泛化能力,减低过拟合
PAN
图中P5-P2是FPN,FPN是图像特征从高层往底层的一个融合,再将特征由底层往高层进行一个融合,构成最终的PAN模块,PAN=FPN+底层到高层;原始PANnet中采用的是add的方法,这里采用了concat方法
整体结构
注意,在cspdarknet53中使用的激活函数是mish,但是在PAN中使用的激活函数是leaky,
优化策略
提高位置敏感性
存在的问题:当预测的xy就在左上角的时候,也就是 σ ( t x ) \sigma(t_x) σ(tx)趋向于0的时候,也就是x趋向于负无穷的时候,但是网络很难输出这么大的值,而且不利于网络收敛。所以针对这点进行了改进
添加了缩放因子,常见的scale取2,原始数据范围和带scale的范围如下图曲线所示
Mosaic数据增强
将4张图片拼接在一起,不同尺寸、不同比例,可以增强样本的多样性,提升模型能力
样本策略
在YOLOv3中,样本策略如下图所示,先左上角对齐,大于固定阈值的作为正样本,如果有多个模板都满足阈值要求,则都作为正样本送入网络,以增强正样本数量
在YOLOv4中,多考虑了gridcell的上方和左方的gridcell, 如下图所示,主要原因是xy的偏移量已经从0-1到了-0.5-1.5了
可能的情况如下:
xy相较于原始的在-0.5-1.5
都可以,这里好好理解下
Loss
使用CIOU loss