YOLO v4(学习笔记)

YOLO v4(学习笔记) 目录1.YOLO v4 结构1整体结构2CSP3SPP 和 PAN4YOLO v4网络2.优化策略1anchor中心坐标计算扩充范围2正样本划分3马赛克数据增强1.YOLO v4 结构1整体结构Backbone:CSPDarknet53Neck: SPPPANHead: YOLOv3相比之前的YOLOv3改进了下Backbone在Darknet53中引入了CSP模块来自CSPNet。在Neck部分采用了SPP模块Ultralytics版的YOLOv3 SPP就使用到了以及PAN模块来自PANet。Head部分没变还是原来的检测头。2CSPCSPDarknet53就是将CSP结构融入了Darknet53中。CSP结构是在CSPNetCross Stage Partial Network论文中提出的作者说在目标检测任务中使用CSP结构有如下好处增强卷积神经网络CNN的学习能力加快计算速度降低显存的使用CSP结构的思想参考原论文中绘制的CSPDenseNet左下进入每个stage一般在下采样后先将数据划分成俩部分如图所示的Part1和Part2。在CSPNet中是直接按照通道均分但在YOLOv4网络中是通过两个1x1的卷积层来实现的。在Part2后跟一堆Blocks然后在通过1x1的卷积层图中的Transition接着将两个分支的信息在通道方向进行Concat拼接最后再通过1x1的卷积层进一步融合图中的Transition。k代表卷积核的大小s代表步距c代表通过该模块输出的特征层channels下图为CSPDenseNet详细结构Backbone中所有的激活函数都是Mish激活函数可以看到整体网络都是由相似的结构模块组成的只是通道数量和ResBlock数量不同3SPP 和 PANSPP就是将特征层分别通过一个池化核大小为5x5、9x9、13x13的最大池化层然后在通道 方向进行concat拼接在做进一步融合这样能够在一定程度上解决目标多尺度问题。PANPath Aggregation Network结构其实就是在FPN从顶到底信息融合的基础上加上了从底到顶的信息融合图中红圈。但YOLOv4的PAN结构和原始论文的融合方式又略有差异论文中特征层之间融合时是直接通过相加的方式进行融合的但在YOLOv4中是通过在通道方向Concat拼接的方式进行融合的。4YOLO v4网络2.优化策略1anchor中心坐标计算扩充范围在原来YOLO v2和v3中关于计算anchor的中心坐标计算公式是但在YOLOv4的论文中作者认为这样做不太合理比如当真实目标中心点非常靠近网格的左上角点或者右下角点的时网络的预测值x需要负无穷或者正无穷时才能取到而这种很极端的值网络一般无法达到。为了解决这个问题作者引入了一个大于1的缩放系数scale一般取2并修改了公式上图中橙色曲线对应最后scale2的公式通过引入scale系数网络的预测值能够很容易达到0或者1但是偏移的范围由原来的 (01) 调整到了(−0.51.5)这个问题会在下面的正样本划分中解决2正样本划分由于前面提到的缩放因子scale通过缩放后网络预测中心点的偏移范围已经从原来的( 0 , 1调整到了 (-0.5, 1.5。所以对于同一个GT Boxes可以分配给更多的Anchor即正样本的数量更多了。之前是大于阈值的anchor目标中心落在哪个网格就是哪个网格的正样本但现在还要考虑这个网格的上下左右四个网格因为偏移范围变为了(-0.5, 1.5。比如上侧的网格中心点对他的左上角来说偏移范围是在(-0.5, 1.5内的对于左侧的网格同理。因此anchor就会成为这三个网格的正样本。一般是会多扩充两个网格至于扩充哪两个看下图公式3马赛克数据增强在数据预处理时将四张图片拼接成一张图片增加学习样本的多样性