PP-YoLoE | PP-YoLov2全面升级Anchor-Free,速度精度完美超越YoLoX和YoLov5

关注并星标

从此不迷路

计算机视觉研究院

7ac3decb058b73acf9858f8105301001.gif

823b0d722fc1dba09d53b767da3c4e3a.png

公众号IDComputerVisionGzq

学习群扫码在主页获取加入方式

6dfe447a0c379cd3208e700c602d6aa1.png

论文地址:https://arxiv.org/pdf/2203.00555.pdf

源代码:https://github.com/microsoft/unilm

计算机视觉研究院专栏

作者:Edison_G

PP-YOLOE是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的yolo模型。

00

85c6fa5c788b34667a58de982aecf931.png

前言

ff15aa8f69dba78b6c39b372bf3b4e64.png

1a99a2a9b2f19d0f2075371153613cd8.pngPP-YOLOE是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的yolo模型。

PP-YOLOE有一系列的模型,即s/m/l/x,可以通过width multiplier和depth multiplier配置。PP-YOLOE避免使用诸如deformable convolution或者matrix nms之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。

25e1e90da27fdd7ebcec5b9e7b83c72a.png

2c4251a6d96e3fabbf7edb2c19fe7cbf.png

1模型架构

0bbd864448f36b00980a6a8796c198f5.png

PP-YOLOE由以下方法组成:

  • 可扩展的backbone和neck

  • Task Alignment Learning

  • Efficient Task-aligned head with DFL和VFL

  • SiLU激活函数

1.1、Backbone

b9c9b1b6e1bdda29592e51aad42b8299.png

PP-YOLOE的Backbone主要是使用RepVGG模块以及CSP的模型思想对ResNet及逆行的改进,同时也使用了SiLU激活函数、Effitive SE Attention等模块,下面我们一一道来。

1、RepVGG

RepVGG,这个网络就是在VGG的基础上面进行改进,主要的思路包括:

  1. 在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;

  2. 模型推理阶段,通过Op融合策略将所有的网络层都转换为3×3卷积,便于网络的部署和加速。

39fbc29d7ffd905c8d6eda6cbd7ce7f2.png d53c0409068591646c155bf841f17982.png

上图展示了模型推理阶段的重参数化过程,其实就是一个OP融合和OP替换的过程。图A从结构化的角度展示了整个重参数化流程, 图B从模型参数的角度展示了整个重参数化流程。整个重参数化步骤如下所示:

步骤1:首先通过式3将残差块中的卷积层和BN层进行融合,该操作在很多深度学习框架的推理阶段都会执行。图中的蓝色框中执行3×3卷积+BN层的融合,图中的黑色矩形框中执行1×1卷积+BN层的融合,图中的黄色矩形框中执行3×3卷积(卷积核设置为全1)+BN层的融合。其中表示转换前的卷积层参数,表示BN层的均值,表示BN层的方差,和分别表示BN层的尺度因子和偏移因子,W’和b’分别表示融合之后的卷积的权重和偏置。

75476db6c23e73d056c7c74579b68b16.png

步骤2:将融合后的卷积层转换为3×3卷积,即将具体不同卷积核的卷积均转换为具有3×3大小的卷积核的卷积。由于整个残差块中可能包含1×1卷积分支和Identity两种分支,如图中的黑框和黄框所示。对于1×1卷积分支而言,整个转换过程就是利用3×3卷积核替换1×1卷积核,具体的细节如图中的紫框所示,即将1×1卷积核中的数值移动到3×3卷积核的中心点即可;对于Identity分支而言,该分支并没有改变输入的特征映射的数值,那么可以设置一个3×3的卷积核,将所有的9个位置处的权重值都设置为1,那么它与输入的特征映射相乘之后,保持了原来的数值,具体的细节如图中的褐色框所示。

步骤3:合并残差分支中的3×3卷积。即将所有分支的权重W和偏置B叠加起来,从而获得一个融合之后的3×3卷积层。

为什么要用VGG式模型?

除了相信简单就是美以外,VGG式极简模型至少还有5大现实的优势:

  1. 3×3卷积非常快。在GPU上,3×3卷积的计算密度(理论运算量除以所用时间)可达1×1和5×5卷积的4倍。

  2. 单路架构非常快,因为并行度高。同样的计算量,“大而整”的运算效率远超“小而碎”的运算。

  3. 单路架构省内存。例如,ResNet的shortcut虽然不占计算量,却增加了一倍的显存占用。

  4. 单路架构灵活性更好,容易改变各层的宽度(如剪枝)。

  5. RepVGG主体部分只有一种算子:3×3卷积接ReLU。在设计专用芯片时,给定芯片尺寸或造价可以集成海量的3×3卷积+ReLU计算单元来达到很高的效率。

fce10e5d59d95372284cc836e65145c7.png

下图表示RepVGG推理融合后的ONNX输出,可以看出简化了很多。

6c5e1f92b0bdcd1372e40fda7b725395.png
2、Swish激活函数

从代码和公式来看,Swish包含了SiLU,换句话说SiLU是Swish的一种特例。

1877b681076ff0262d7e92a371a19758.png

所以画图基本上都使用了SiLU代替Swish,因为YOLOE中的Swish的,也就是SiLU激活函数。

6e53f34e9f3eaf5be0c231487fb84d02.png

β是个常数或可训练的参数。Swish 具备无上界有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU。

例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。

8307a6c3ae2d0cb9a2b8fbb245ca1faf.png c06ee9c482d40f9fc66b151bd89e0c00.png
3、Effective SE Attention

该模块主要是来自于《CenterMask:Real-Time Anchor-Free Instance Segmentation》中的eSE模块;

b78ec670986b4af48513fb9a3cdf47cb.png

在输出的内部添加了一个channel上的attention模块eSE。原始的SE模块中使用2个FC去进行channel权重映射,但是为了减少计算量通常会将FC中的channel给剪裁一些(小于输入的channel),这就引入了一些信息的损失,为此文章直接将2个FC替换为了1个FC。

e26b60c4f19f69a19791199743e4b63a.png
4、CSPNet结构
a54bb6bd2ada30594cdd911b7e2b4a97.png

CSPNet的主要思想还是Partial Dense Block,设计Partial Dense Block的目的是:

  • 增加梯度路径:通过分裂合并策略,可以使梯度路径的数目翻倍。由于采用了跨阶段的策略,可以减轻使用显式特征映射复制进行连接的缺点;

  • 平衡各层的计算:通常情况下,DenseNet底层的信道数远远大于增长率。由于部分dense block中的dense layer操作所涉及的底层信道只占原始信道的一半,因此可以有效地解决近一半的计算瓶颈;

  • 减少内存流量:假设dense block在DenseNet中的基本特征映射大小为,增长率为d,并且共m层。然后,该dense block的CIO为,部分dense block的CIO为。虽然m和d通常比c小得多,但部分dense block最多可以节省网络内存流量的一半。

8913bf3117961ab5f138620fe058e8a0.png
5、SPP结构

SPP-Net全名为Spatial Pyramid Pooling(空间金字塔池化结构),2015年由微软研究院的何恺明提出,主要解决2个问题:

  1. 有效避免了R-CNN算法对图像区域剪裁、缩放操作导致的图像物体剪裁不全以及形状扭曲等问题。

  2. 解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。

6125a468458ee42b2b8b60ca87a343d4.png
SPP 显著特点
  1. 不管输入尺寸是怎样,SPP 可以产生固定大小的输出

  2. 使用多个窗口(pooling window)

  3. SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

其它特点
  1. 由于对输入图像的不同纵横比和不同尺寸,SPP同样可以处理,所以提高了图像的尺度不变(scale-invariance)和降低了过拟合(over-fitting)

  2. 实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)

  3. SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)

  4. 不仅可以用于图像分类而且可以用来目标检测

eee959af18a26ac9f4eee2b9c84d2666.png

通过spp模块实现局部特征和全局特征(所以空间金字塔池化结构的最大的池化核要尽可能的接近等于需要池化的featherMap的大小)的featherMap级别的融合,丰富最终特征图的表达能力,从而提高MAP。

1.2、Neck

yoloe的neck结构采用的依旧是FPN+PAN结构模式,将Neck部分用立体图画出来,更直观的看下两部分之间是如何通过FPN结构融合的。

9f9451cee98495003824db2bdec77fd4.png

如图所示,FPN是自顶向下的,将高层特征通过上采样和低层特征做融合得到进行预测的特征图。

dfac6671a56efaf5890d3cf47a908123.png

和FPN层不同,yoloe在FPN层的后面还添加了一个自底向上的特征金字塔。FPN是自顶向下,将高层的强语义特征传递下来,对整个金字塔进行增强,不过只增强了语义信息,对定位信息没有传递,而本文就是针对这一点,在FPN的后面添加一个自底向上的金字塔。这样的操作是对FPN的补充,将低层的强定位特征传递上去。

fd56bbde7504b14cdad3aad6893ce11b.png

1.3、Head

01130cef65279ca29a925af6bb45bf84.png

对于PP-YOLOE的head部分,其依旧是TOOD的head,也就是T-Head,主要是包括了Cls Head和Loc Head。具体来说,T-head首先在FPN特征基础上进行分类与定位预测;然后TAL基于所提任务对齐测度计算任务对齐信息;最后T-head根据从TAL传回的信息自动调整分类概率与定位预测。

593a2d98cdd214cc5a13281e4aaec27d.png

由于2个任务的预测都是基于这个交互特征来完成的,但是2个任务对于特征的需求肯定是不一样的,因为作者设计了一个layer attention来为每个任务单独的调整一下特征,这个部分的结构也很简单,可以理解为是一个channel-wise的注意力机制。这样的话就得到了对于每个任务单独的特征,然后再利用这些特征生成所需要的类别或者定位的特征图。

2ee4fe2159d02d7be45c2e4191f39467.png 76d6c7ba30bb1ead99b5156a0b29865d.png

2样本匹配

2.1 ATSS Assigner思想

ATSS论文指出One-Stage Anchor-Based和Center-Based Anchor-Free检测算法间的差异主要来自于正负样本的选择,基于此提出ATSS(Adaptive Training Sample Selection)方法,该方法能够自动根据GT的相关统计特征选择合适的Anchor Box作为正样本,在不带来额外计算量和参数的情况下,能够大幅提升模型的性能。

ATSS选取正样本的方法如下:其简要流程为:

  1. 计算每个 gt bbox 和多尺度输出层的所有 anchor 之间的 IoU

  2. 计算每个 gt bbox 中心坐标和多尺度输出层的所有 anchor 中心坐标的 l2 距离

  3. 遍历每个输出层,遍历每个 gt bbox,找出当前层中 topk (超参,默认是 9 )个最小 l2 距离的 anchor 。假设一共有 l 个输出层,那么对于任何一个 gt bbox,都会挑选出 topk×l 个候选位置

  4. 对于每个 gt bbox,计算所有候选位置 IoU 的均值和标准差,两者相加得到该 gt bbox 的自适应阈值

  5. 遍历每个 gt bbox,选择出候选位置中 IoU 大于阈值的位置,该位置认为是正样本,负责预测该 gt bbox

  6. 如果 topk 参数设置过大,可能会导致某些正样本位置不在 gt bbox 内部,故需要过滤掉这部分正样本,设置为背景样本

1、ATSS主要2大特性:
  1. 保证了所有的正样本Anchor都是在Ground Truth的周围。

  2. 最主要是根据不同层的特性对不同层的正样本的阈值进行了微调。

2、ATSS的贡献
  • 指出Anchor-Base检测器和Anchor-Free检测器之间的本质区别实际上是如何定义正训练样本和负训练样本;

  • 提出自适应训练样本选择,以根据目标的统计特征自动选择正负样本;

  • 证明了在图像上的每个位置上平铺多个Anchor来提升检测的性能是没效果的;

2.2、Task-aligned Assigner思想(TOOD)

TOOD提出了Task Alignment Learning (TAL) 来显式的把2个任务的最优Anchor拉近。这是通过设计一个样本分配策略和任务对齐loss来实现的。样本分配计算每个Anchor的任务对齐度,同时任务对齐loss可以逐步将分类和定位的最佳Anchor统一起来。

0ab456fb8f3b3fbb3b6fe73b008718b6.png

类似于近期提出的One-Stage检测器,所提TOOD采用了类似的架构:Backbone-FPN-Head。考虑到效率与简单性,类似ATSS, TOOD在每个位置放置一个Anchor。

正如所讨论的,由于分类与定位任务的发散性,现有One-Stage检测器存在任务不对齐(Task Mis-Alignment)约束问题。本文提出通过显式方式采用T-head+TAL对2个任务进行对齐,见上图。T-headTAL通过协同工作方式改善2个任务的对齐问题;

TOOD选取样本的方法具体来说:

  • 首先,T-head在FPN特征基础上进行分类与定位预测;

  • 然后,TAL基于所提任务对齐测度计算任务对齐信息;

  • 最后,T-head根据从TAL传回的信息自动调整分类概率与定位预测。

1、Task-Aligned Head

本文所提T-Head见下图,它具有非常简单的结构:特征提取器+TAP

为增强分类与定位之间的相互作用,作者通过特征提取器学习任务交互(Task-Interactive)特征,如中蓝色框部分。这种设计不仅有助于任务交互,同时可以为2个任务提供多级多尺度特征。

a33cf463b1a6bd83ba3d43cb29e1032e.png

假设X表示FPN特征,特征提取器采用N个连续卷积计算任务交互特征:

57a0f319428f6320827fa2002b482034.png

因此,通过特征提取器可以得到丰富的多尺度特征并用于送入到后续2个TAP模块中进行分类与定位对齐。

2、Task-Aligned Sample Assignment

为与NMS搭配,训练样例的Anchor分配需要满足以下规则:

  • 正常对齐的Anchor应当可以预测高分类得分,同时具有精确定位;

  • 不对齐的Anchor应当具有低分类得分,并在NMS阶段被抑制。

基于上述两个规则,作者设计了一种新的Anchor对齐度量以显式度量Anchor层面的对齐度。该对齐度量将集成到样本分配与损失函数中以动态提炼每个Anchor的预测。

Anchor Alignment metric 考虑到分类得分与IoU表征了预测质量,我们采用2者的高阶组合度量任务对齐度,公式定义如下:

其中,s与u分别表示分类得分与IoU值,而用于控制两者的影响。因此,t在联合优化中起着非常重要的作用,它激励网络动态的聚焦于高质量的Anchor上

Training sample assignment 正如已有研究表明,训练样例分配对于检测器的训练非常重要

为提升两个任务的对齐性,TOOD聚焦于任务对齐Anchor,采用一种简单的分配规则选择训练样本:对每个实例,选择m个具有最大t值的Anchor作为正样例,选择其余的Anchor作为负样例。然后,通过新的损失函数(针对分类与定位的对齐而设计的损失函数)任务进行训练。

3损失函数

3.1、分类损失varifocal loss

Focal loss定义:

8107a55c5f6d6fd1ab192c5dc422d249.png

其中a是前景背景的损失权重,p的y次是不同样本的权重,难分样本的损失权重会增大。当训练一个密集的物体检测器使连续的IACS回归时,本文从focal loss中借鉴了样本加权思想来解决类不平衡问题。但是,与focal loss同等对待正负样本的损失不同,而varifocal loss选择不对称地对待它们。varifocal loss定义如下:

65171d3544c6b4c843db90c1956cb418.png

其中p是预测的IACS得分,q是目标IoU分数。对于训练中的正样本,将q设置为生成的bbox和gt box之间的IoU(gt IoU),而对于训练中的负样本,所有类别的训练目标q均为0。

备注:Varifocal Loss会预测Iou-aware Cls_score(IACS)与分类两个得分,通过p的y次来有效降低负样本损失的权重,正样本选择不降低权重。此外,通过q(Iou感知得分)来对Iou高的正样本损失加大权重,相当于将训练重点放在高质量的样本上面。

3.2、回归损失

1、GIoULoss

GIOU的计算很简单,对于两个bounding box A,B。我们可以算出其最小凸集(包围A、B的最小包围框)C。有了最小凸集,就可以计算GIOU:

64f97f762d3e25dab4eccd1947309d1d.png

计算方法很简单,从公式可以看出,GIOU有几个特点:

  • GIOU是IOU的下界,且取值范围为(-1, 1]。当两个框不重合时,IOU始终为0,不论A、B相隔多远,但是对于GIOU来说,A,B不重合度越高(离的越远),GIOU越趋近于-1。关于这点,下面再详细解释一下。

  • GIOU其实就是在IOU的基础上减掉了一个东西,这个减掉的东西,让我门避免了两个bbox不重合时Loss为0的情况。至于减掉的东西怎么去直观的理解,似乎不好找到一个很好的解释?

  • 可导:这一点需要强调下,由于max,min,分段函数(比如ReLU)这些都是可导的,所以用1-GIOU作为Loss是可导的。

当IOU=0时:

56a88fcfa0e537654c6b8a6f4403ebdb.png

显然, A∪B值不变,最大化GIOU就是要最小化C,最小化C就会促成2个框不断靠近,而不是像最小化IOU那样loss为0。

YOLO V3涨了2个点,Faster RCNN,MaskRCNN这种涨点少了些。主要原因在于Faster RCNN,MaskRCNN本身的Anchor很多,出现完全无重合的情况比较少,这样GIOU和IOU Loss就无明显差别。所以提升不是太明显。

在TOOD中,bbox(Bouding box)通过对齐的anchor(具有更大的分类得分、更精确的定位)预测得到,这样的bbox通常经过NMS后仍可以得以保留。此外,t可以在训练阶段通过对损失加权选择高质量的bbox。因此,采用t度量bbox的质量,同时结合GIoU Loss定义了TOOD的Reg Loss如下:

19fb8313c7213064e655579bf35506d3.png
2、L1 loss

均绝对误差(Mean Absolute Error,MAE) 是指模型预测值f(x)和真实值y之间距离的均值,其公式如下:

98c9f4afcee8f5034ff62395e999d8f7.png

忽略下标i ,设n=1,以f(x)−y为横轴,MAE的值为纵轴,得到函数的图形如下:

53b50e64be390d31c2912370e64826b7.png

MAE曲线连续,但是在y−f(x)=0处不可导。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。但是,无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。

相比于MSE,MAE有个优点就是,对于离群点不那么敏感。因为MAE计算的是误差y−f(x)的绝对值,对于任意大小的差值,其惩罚都是固定的。

loss_l1 = F.l1_loss(pred_bboxes_pos, assigned_bboxes_pos)
3、DF Loss

对于任意分布来建模框的表示,它可以用积分形式嵌入到任意已有的和框回归相关的损失函数上,例如最近比较流行的GIoU Loss。这个实际上也就够了,不过涨点不是很明显,我们又仔细分析了一下,发现如果分布过于任意,网络学习的效率可能会不高,原因是一个积分目标可能对应了无穷多种分布模式。如下图所示:

877c11a3875fe477ab986f1843c0a29a.png

考虑到真实的分布通常不会距离标注的位置太远,所以我们又额外加了个loss,希望网络能够快速地聚焦到标注位置附近的数值,使得他们概率尽可能大。基于此,我们取了个名字叫Distribution Focal Loss (DFL):

144f89f2430ac641b665203210772200.png

其形式上与QFL的右半部分很类似,含义是以类似交叉熵的形式去优化与标签y最接近的一左一右两个位置的概率,从而让网络快速地聚焦到目标位置的邻近区域的分布中去。

a1aad0f155cfc361e6228496cde5b95b.png

QFL和DFL的作用是正交的,他们的增益互不影响

3.3、总损失

其中,a表示分类损失的权重系数,b表示回归损失的权重系数,c表示DFL损失的权重系数。

4模型推理与部署

4.1、模型推理

3daf9d218ddef1030155a505a255337a.png

4.2、导出ONNX

# export inference model
python tools/export_model.py configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --output_dir=output_inference -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams

# install paddle2onnx
pip install paddle2onnx

# convert to onnx
paddle2onnx --model_dir output_inference/ppyoloe_crn_l_300e_coco --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 11 --save_file ppyoloe_crn_l_300e_coco.onnx

4。3、导出TensorRT Engine

python tools/export_model.py configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams -o trt=True

5参考

[1].https://github.com/PaddlePaddle/PaddleDetection

© THE END 

转载请联系本公众号获得授权

77e32385729778e4dc5352c784d63cdd.gif

计算机视觉研究院学习群等你加入!

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

375528eb88c414486315be6a522be587.png

扫码关注

计算机视觉研究院

公众号ID|ComputerVisionGzq

学习群|扫码在主页获取加入方式

 往期推荐 

🔗

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值