全国新农村建设中心网站,怎样做同城配送网站,咨询公司注册经营范围,平顶山网站网站建设文章目录 输入端Mosaic数据增强Self-Adversarial TrainingCmBN 主干网络Mish激活函数DropBlock 正则化CSPNetFocus结构 NeckPANet 输出目标损失函数IoU LossGIoU LossDIoU LossCIoU Loss总结 DIOU_nms 参考 YOLO v4和v5版本在v3版本的基础上#xff0c;组合了多种先进算法提升… 文章目录 输入端Mosaic数据增强Self-Adversarial TrainingCmBN 主干网络Mish激活函数DropBlock 正则化CSPNetFocus结构 NeckPANet 输出目标损失函数IoU LossGIoU LossDIoU LossCIoU Loss总结 DIOU_nms 参考 YOLO v4和v5版本在v3版本的基础上组合了多种先进算法提升精度。为了能快速理解YOLO v4和v5我们需要了解各种改进方法。此篇博文从输入端、主干网络、Neck和输出等四个方面简要介绍v4和v5中用到的改进方法。 输入端
Mosaic数据增强
数据增广Mixup, Cutout 和 CutMix
Mosaic是一种数据增强方法主要思想是将四张图片进行随机缩放、随机剪裁、随机排布的方式拼接到一张图上。CutMix数据增强方式是将两张图片进行拼接然后将拼接好的图片送入到主干网络中。Mosaic则是将四张图片进行拼接。将拼接好的图片传入到主干网络当中去学习相当于一下子传入了四张图片极大地丰富了检测物体的背景而且BN计算时会计算四张图片的数据使得batch size的不需要太大。 Self-Adversarial Training
自对抗训练Self-adversarial trainingSAT是一种新的数据增强方式分两个前后阶段进行操作。在第一阶段神经网络改变原始图像而不是网络权重通过这种方式神经网络对自己进行对抗性攻击改变原始图像从而产生图像上没有所需物体的欺骗在第二阶段训练神经网络以正常的方式检测该修改图像上的物体。
CmBN 目前大部分流行的模型都会用到Batch NormalizationBN可以加快模型的收敛速度在一定程度上缓解深层网络“梯度弥散”的问题。对一个batch首先求出batch中所有特征图的均值和方差然后对输入特征图进行归一化将归一化的结果乘以尺度因子 γ \gamma γ然后加上偏移量 β \beta β得到最后输出。BN是在一个batch中计算所有均值和方差当batch size越大时均值和方差越接近整个训练集的均值和方差所以一般训练时需要将batch size尽可能设置大些。但是当batch size较小的时候BN的效果会变差。
batch size太小本质上还是数据量太少不能近似整个数据集。CBN(Cross Batch Normalization)引入时间维度通过计算前几个迭代计算好的均值和方差一起计算本次迭代的均值和方差通过这种方式变相扩大了batch size。前几个迭代的均值和方差由前几个迭代的网络参数计算得到的在本轮迭代中计算BN时前几轮迭代的参数已经过时了。CBN中引入泰勒公式解决上述问题。具体推导见论文。
CmBN是基于CBN改进的CmBN是将大batch中的4个mini-batch看做一个整体不需要前几个迭代时刻的BN参数。在大batch中的4个mini-batch中使用CBN进行计算。
主干网络
Mish激活函数
Mish激活函数是光滑的非单调激活函数定义为 f ( x ) x ⋅ t a n h ( l n ( 1 e x ) ) f\left( x \right) x \cdot tanh \left( ln \left( 1 e^{x}\right) \right) f(x)x⋅tanh(ln(1ex)). 非单调这种性质有助于保持小的负值从而稳定网络梯度流。 如上图所示Mish函数无上界有下界。无上界属性是任何激活函数都需要的特性。有下界属性有助于实现强正则化效果。
DropBlock 正则化
DropBlock是一种针对卷积层的正则化方法它是将整块的特征去除。如下图所示b和c绿色区域中的激活单元包含输入图像的语义信息。因为临近的激活单元包含的语义信息比较接近随机去除激活单元并不是有效的。相反连续的区域包含特定的语义信息去除连续的区域能够迫使剩余的单元学习可分类输入图像的特征信息。 下图是DropBlock的算法伪代码和图像示例。DropBlock并不应用在推理阶段而是应用在训练阶段。DropBlock有两个超参数block_size和 γ \gamma γ值的设定。 γ \gamma γ服从伯努利公式 γ 1 − k e e p p r o b b l o c k s i z e 2 f e a t s i z e 2 ( f e a t s i z e − b l o c k s i z e 1 ) 2 \gamma \frac{1-keep_prob}{block_size^{2}} \frac{feat_size^{2}}{\left(feat_size - block_size 1 \right)^{2}} γblocksize21−keepprob(featsize−blocksize1)2featsize2。keep_prob固定值效果不好需要一个线性衰减过程从最初的1到设定的阈值。 CSPNet
跨阶段局部网络Cross Stage Partial DenseNet, CSPNet的设计目的是使网络架构能够实现更丰富的梯度组合同时还减少计算量。CSPNet通过将基础层的特征图划分为两部分然后通过跨阶段层次结构进行合并实现此目标。CSPNet论文作者的主要思想是通过分割梯度流使梯度流通过不同的网络路径传播。通过切换串联或者过渡步骤传播的梯度信息可以具有较大的相关性差异。
下面两图分别是DenseNet和CSPDensNet单阶段架构图。DenseNet的每个单阶段包含一个Dense Block和一个Transition Layer。相比于DenseNetCSPDenseNet将输入特征层 x 0 x_{0} x0在通道层面拆分成两部分 x 0 [ x 0 ′ , x 0 ′ ′ ] x_{0} [x_{0}, x_{0}] x0[x0′,x0′′]其中 x 0 ′ ′ x_{0} x0′′进入局部Dense Block与在DenseNet中的操作一样 x 0 ′ x_{0} x0′直接连接到阶段的末端。 假设每个Dense Block由 k k k个Dense Layer组成下面表格列出了DenseNet和CSPDenseNet的前向计算和权重更新方程。在DenseNet中大量的梯度信息被重用来更新不同Dense Layer的权重这将导致无差异的Dense Layer反复学习同样的梯度信息。在CSPDenseNet中Dense Layer的梯度是单独积分的。没有经过Dense Block的 x 0 ′ x_{0} x0′也被单独积分。
-DenseNetCSPDenseNet前向计算权重更新
CSPNet可以很轻松地应用于ResNet和ResNeXt如下图所示。由于只有一半地特征通道通过ResXBlocks因此就不再需要引入bottleneck了。当固定FLOP时这使理论上的内存访问成本MAC下限成为可能。
Focus结构
YOLO v5在图片进入主干网络前对图片进行切片操作执行切片操作的结构被称为Focus。Focus的具体操作是: 在一张大小为 h × w h \times w h×w的特征图中每隔一个像素取一个值组成新的特征图那么就会得到四个大小为 h 2 × w 2 \frac{h}{2} \times \frac{w}{2} 2h×2w的特征图。假设原始的三通道图像大小为 640 × 640 × 3 640 \times 640 \times 3 640×640×3, 经过Focus结构之后得到的特征图的大小为 320 × 320 × 12 320 \times 320 \times 12 320×320×12。 Swim-Transform中的patch merging layer层的操作和Focus结构很相似。
class Focus(nn.Module):# Focus wh information into c-spacedef __init__(self, c1, c2, k1, s1, pNone, g1, actTrue): # ch_in, ch_out, kernel, stride, padding, groupssuper(Focus, self).__init__()self.conv Conv(c1 * 4, c2, k, s, p, g, act) # Focus后得到的特征图通道数扩了4倍def forward(self, x): # Focus操作特征图大小变化: x(b,c,w,h) - y(b,4c,w/2,h/2)return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))Neck
目标检测领域称主干网络和输出层之间的一些层为Neck。Yolov4和v5的Neck结构主要采用了SPP模块、FPNPAN的方式。
PANet
下图是PANet被提出的网络结构图。a部分是FPN结构FPN将高层得到的特征图进行上采样然后往下传递为top-down的过程。高层特征图中包含丰富的语义信息经过top-down的传播就可以使得这些语义信息传播到底层特征上也让底层特征图包含丰富语义的信息。但是底层特征图却无法影响高层特征图。PANet引入了bottom-up的路径让底层特征也传递到高层特征图中。
(a)(b)两个子图连在一起的过程就是先进行up-bottom的特征融合之后再进行bottom-up的特征融合。
如上图所示采用ResNet作为基础架构使用 { P 2 , P 3 , P 4 , P 5 } \{ P_{2}, P_{3}, P_{4}, P_{5}\} {P2,P3,P4,P5}为FPN的特征层从 P 2 P_{2} P2到 P 5 P_{5} P5特征图2倍下采样 { N 2 , N 3 , N 4 , N 5 } \{ N_{2}, N_{3}, N_{4}, N_{5}\} {N2,N3,N4,N5}是根据 { P 2 , P 3 , P 4 , P 5 } \{ P_{2}, P_{3}, P_{4}, P_{5}\} {P2,P3,P4,P5}新生成的特征层。 N i N_{i} Ni和 P i P_{i} Pi的特征图大小相同。
下图是up-bottom的局部块结构。 N i N_{i} Ni相比较于 N i 1 N_{i1} Ni1为高分辨率特征图。首先需要将 N i N_{i} Ni通过一个步长为2的 3 × 3 3 \times 3 3×3的卷积减少特征图大小得到新的特征图然后新特征图中的元素和 P i 1 P_{i1} Pi1中的元素相加得到融合特征图融合特征图再经过一个 3 × 3 3 \times 3 3×3的卷积生成 N i 1 N_{i1} Ni1。 输出
目标损失函数
目标检测的损失函数一般由分类损失函数和回归损失函数组成。近些年来回归损失函数从直接回归bbox的4个坐标点逐渐将bbox作为一个整体进行回归。回归损失函数的发展历程如下所示
L1 loss– L2 loss– Smooth L1 Loss–IoU Loss --GIoU Loss -- DIoU loss -- CIoU Loss
Smooth L1 损失函数是分段函数综合了L1 和L2的优点在x较大时( ∣ x ∣ ≥ 1 |x| \geq 1 ∣x∣≥1)为L1 损失函数L1损失函数的导数为常数保证模型训练前期有稳定的梯度。在x比较小时 ∣ x ∣ 1 |x|1 ∣x∣1为L2损失函数L2处处可导在0值周围具有较小的梯度波动小更加稳定。
L1L2和Smooth L1 Loss都是独立地计算4个点的Loss这种做法默认这4个点是相互独立的没有考虑bbox四个坐标之间的相关性。
IoU Loss
交并比IoU(Intersection over Union)计算预测框和真实框的交集和并集的比值。假设预测框为 A A A真实框为 B B B那么交并比的公式定义为: IoU A ∩ B A ∪ B \frac{A \cap B}{A \cup B} A∪BA∩B
16年论文UnitBox: An Advanced Object Detection Network中提出了IoU Loss将bbox作为一个整体做回归。
IoU Loss的定义是先求出预测框与真实框之间的交并比之后再求负对数。用公式简要表示就是 I o U l o s s − l n ( I o U ( b b o x g t , b b o x p r e d ) ) IoUloss -ln \left( IoU(bbox_{gt}, bbox_{pred}) \right) IoUloss−ln(IoU(bboxgt,bboxpred))。IoU满足非负性、统一性、对称性、三角不等性而且相比于距离损失函数还具有尺度不变性不论bbox的大小IoU loss的取值位于 ( 0 , 1 ) (0,1) (0,1)。
但是当预测框和真实框不相交时也就是 I o U ( b b o x g t , b b o x p r e d ) 0 IoU(bbox_{gt}, bbox_{pred})0 IoU(bboxgt,bboxpred)0IoU loss为0损失函数在0处不可导没有梯度回传无法进行学习训练。
GIoU Loss
GIoU(Generalized Intersection over Union)引入了预测框 A A A和真实框 B B B的最小外接矩形 C C C。 G I o U I o U − C ∖ ( A ∪ B ) ∣ C ∣ GIoU IoU - \frac{C \setminus \left(A \cup B \right)}{|C|} GIoUIoU−∣C∣C∖(A∪B)。GIoU不仅可以关注重叠区域还可关注非重合区域能比较好地反应预测框和真实框在闭包区域的相交情况。 如下所示绿色框为真实框红色框为预测框。GIoU中加入了预测框和真实框得最小外接矩形但是当真实框包含预测框时 C ∖ ( A ∪ B ) ∣ C ∣ 0 \frac{C \setminus \left(A \cup B \right)}{|C|}0 ∣C∣C∖(A∪B)0GIoU就退化为IoU无法确定真实框和预测框之间的相对关系。 DIoU Loss
由于GIoU过度依赖IoU项尤其对水平和垂直bboxGIoU需要更多迭代步数收敛。DIoU仅在IoU 的基础上添加一个惩罚项直接最小化两个bbox中心点之间的归一化距离normalized distance这样也能比GIoU更快地收敛。 假设预测框为 B B B真实框为 B g t B^{gt} Bgt。 D I o U I o U − ρ 2 ( b , b g t ) c 2 DIoU IoU - \frac{\rho^{2} \left( b, b^{gt} \right)}{c^{2}} DIoUIoU−c2ρ2(b,bgt) 其中 b b b和 b g t b^{gt} bgt是预测框 B B B和真实框 B g t B^{gt} Bgt的中心点 ρ ( ⋅ ) \rho\left( \cdot \right) ρ(⋅)是欧式距离如上图所示红色的线段为两个框中心点之间的距离 d ρ ( b , b g t ) d\rho \left( b, b^{gt} \right) dρ(b,bgt) c c c是覆盖两个检测框的最小矩形的对角线长度。如上图所示灰色那么DIoU loss函数被定义如下 L D I o U 1 − I o U ρ 2 ( b , b g t ) c 2 L_{DIoU} 1 - IoU \frac{\rho^{2} \left( b, b^{gt} \right)}{c^{2}} LDIoU1−IoUc2ρ2(b,bgt)
CIoU Loss
一个好的bbox回归损失函数应当包含三个重要的几何因素重合区域、中心点距离和纵横比。IoU考虑到了重合区域GIoU高度依赖IoUDIoU同时考虑了重合区域和中心点距离。然而bbox的纵横比的一致性仍然是一项重要的几何因素。因此基于DIoUCIoU中添加了bbox的纵横比CIoU的公式定义如下 C I o U I o U − ρ 2 ( b , b g t ) c 2 − α u CIoU IoU - \frac{\rho^{2} \left( b, b^{gt} \right)}{c^{2}} - \alpha u CIoUIoU−c2ρ2(b,bgt)−αu 其中 α \alpha α是正超参数 u u u计算纵横比的一致性。 α \alpha α和 u u u的公式定义如下 u 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 u \frac{4}{\pi^{2}}\left( arctan \frac{w^{gt}}{h^{gt}} - arctan \frac{w}{h}\right)^{2} uπ24(arctanhgtwgt−arctanhw)2 α u ( 1 − I o U ) u \alpha \frac{u}{\left(1 - IoU \right) u } α(1−IoU)uu
CIoU 损失函数的定义如下所示 L C I o U 1 − I o U ρ 2 ( b , b g t ) c 2 α u L_{CIoU} 1 - IoU \frac{\rho^{2} \left( b, b^{gt} \right)}{c^{2}} \alpha u LCIoU1−IoUc2ρ2(b,bgt)αu
总结
方法优点缺点IoUIoU具有尺度不变性IoU的结果范围为01非负如果两个框不相交IoU将为0无法反映两个框的距离远近IoU无法精确地反映两个框的重合度大小。GIoU引入两个框的最小外接矩形解决两个框没有交集时梯度为零的问题GIoU不仅关注重叠区域还关注非重合区域能比较好地反映两个框在闭包区域的相交情况当两个框属于包含关系时GIoU会退化成IoU。DIoUDIoU考虑到了两个框之间的距离重叠率和尺度使得回归变得更加稳定DIoU没考虑bbox的纵横比CIoU在DIoU的基础上加入了纵横比纵横比描述的是相对值
DIOU_nms
我们先回忆一下NMS算法的具体步骤。首先按照候选框的得分对所有的候选框进行排序选择分数最大的候选框M将其他与M的IoU值超过阈值的框剔除迭代这一过程直到所有的框被检测完成。在原始的NMS中IoU用来抑制多余的检测框重叠区域是唯一的因素会导致两个相近物体的检测框被错误地剔除。
DIoU不仅仅考虑到了重叠区域还考虑到两个框的中心点距离。DIoU替代IoU可作为NMS中一个较好的标准。DIoU NMS假设两个远距离的候选框中是不同的物体。对一个具有最高分数的预测框M来说DIoU可以公式化地定义如下 s i { s i , I o U − R D I o U ( M , B i ) ε 0 , I o U − R D I o U ( M , B i ) ≥ ε s_{i} \left\{\begin{matrix} s_{i}, IoU - R_{DIoU}\left ( M,B_{i} \right ) \varepsilon \\ 0 , IoU - R_{DIoU}\left ( M,B_{i} \right ) \ge \varepsilon \end{matrix}\right. si{si,0,IoU−RDIoU(M,Bi)εIoU−RDIoU(M,Bi)≥ε
如上述公式所示候选框 B i B_{i} Bi被移除需要同时考虑IoU和两个框中心点之间的距离两个因素。 s i s_{i} si是分类分数 ε \varepsilon ε是NMS阈值。
参考
AlexeyAB/darknetUnitBox: An Advanced Object Detection NetworkGeneralized Intersection over Union: A Metric and A Loss for Bounding Box RegressionDistance-IoU Loss: Faster and Better Learning for Bounding Box RegressionCSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNNDropBlock: A regularization method for convolutional networksPath Aggregation Network for Instance SegmentationTianxiaomo/pytorch-YOLOv4