【论文笔记】PP-YOLOE: An evolved version of YOLO

简介

2022.3.24,百度飞浆推出PP-YOLOE,作为22年的第一个YOLO改进版,官方号称测试性能(在MS COCO上)全面领先YOLOX。
尤其是速度方面,在-s模型上达到208FPS,相较于YOLOX-s的119FPS,几乎翻倍!
而在性能上,以PP-YOLOE-x为例,在MS COCO上的mAP达到52.2%,毫无疑问是目前综合性能最好的yolo版本。

在这里插入图片描述
论文地址
项目地址(只有接口!!)

由于paddledetdction中只提供了训练和推理的接口,并没有源代码,所以本文将从论文出发,对比分析PP-YOLOE的各项改进。

改进

分五个部分进行对比分析。

1.针对泛化性

PP-YOLOE去除了可变卷积(deformable convolution)和Matrix NMS,从而在各种硬件上得到很好的支持,进一步提升了泛化性能。支持TensorRT 和 ONNX。

1)可变卷积(deformable convolution)

可变卷积在普通的卷积层上增加位移变量,这个变量根据数据的情况学习,偏移后,相当于卷积核每个方块可伸缩的变化,从而改变了感受野的范围,感受野成了一个多边形。
结构图如下:
3*3可变卷积示意图
虽然有助于提高精度,但额外增加的一个卷积层用来学习offset,增加了许多的计算负担,并且飞浆认为这样不利于模型部署。

2)Matrix NMS

利用排序过后的上三角化的IoU矩阵,并且将mask IoU并行化,然后论文同样采取了得分惩罚机制来抑制冗余mask。

优点:

  1. 实现了mask IoU的并行计算,对于box-free的密集预测实例分割模型很有使用价值。
  2. 与Fast NMS一样,只需一次迭代。

缺点:

  1. 与Fast NMS一样,直接从上三角IoU矩阵出发,可能造成过多抑制。
  2. 同样的,飞浆不认为这个操作带来的性能提升优于其带来的额外计算负担,并且为了便于部署,将其舍弃。

2. Anchor-free

作为PP-YOLOv2的改进版本,PP-YOLOE与其最大的不同之处就体现在基于Anchor-free,根据FCOS的思想,对每一个目标像素设置一个锚点,将 ground truths分配给相应的特征图。此举使得模型损失了0.3的AP,但提升了模型速度。
这个部分没啥好讲的,FCOS用语义分割的像素级处理方式处理目标检测,相比于传统的Anchor-based大大减少了运算量和参数量,实际效果上算是拿精度换速度了。
感兴趣的小伙伴可以 戳这里(FCOS论文)

3. 骨干网络和Neck

使用飞浆自己改进的 RepResBlock构造骨干网络,命名CSPRepResNet,采用和ResNet一样的结构,包含一个由三个卷积层和四个后续阶段组成的stem,这四个后续阶段由 RepResBlock堆叠而成。

1)RepResBlock

RepResBlock源自TreeBlock,首先将其简化成如下形式,其中圆圈C代表连接运算(concatenation opearation)
在这里插入图片描述

由于连接运算(concatenation operation)和元素加运算(element-wise add operation)之间的相似性已经在
Rmnet论文
中得到证实(具体细节不展开,我也没看懂😓),所以飞浆将其进行替换,得到训练阶段的RepResBlock,如下图所示,其中圆圈+代表元素加运算。
在这里插入图片描述

然后,又将训练阶段的 RepResBlock进行重参数化( re-parameterizes),得到一个符合RepVGG风格的基本残差块,并在推理阶段使用,如下图所示
在这里插入图片描述
而在骨干网络中,飞浆使用两个trick对RepResBlock进行了改造,分别是跨阶段部分连接(cross stage partial connections)和ESE(Effective Squeeze and Extraction),

2)跨阶段部分连接(cross stage partial connections)

CSPNet提出,CSP即Cross Stage Partial的缩写。
在resnet的基础上,将每一个stage的头尾两部分的特征图集成起来,用于减少在网络优化的过程中花费在重复的梯度信息上的计算。
与ResNet的结构对比如下图
在这里插入图片描述

3)ESE (Effective Squeeze and Extraction)

在这里插入图片描述
综合上述两种trick,得到最终在三个卷积层后进行堆叠的CSPRepResStage,如下图所示。
在这里插入图片描述
其中的ResBlock在推理阶段和训练阶段稍有不同,差别在于重参数化后,推理阶段的ResBlock少了一条带有1*1卷积的残差边。

backbone和neck的宏观结构如下:
在这里插入图片描述

4. Task Alignment Learning (TAL).

对标YOLOX的标签分配策略SimOTA。
为了更进一步克服分类和定位的错位,飞浆在PP-YOLOE中使用TOOD中提出的task alignment learning (任务对齐学习)。

Task Alignment Learning (TAL) 显式的把两个任务的最优anchor拉近。这是通过设计一个样本分配策略和任务对齐loss来实现的。样本分配器计算每个anchor的任务对齐度,同时任务对齐loss可以逐步将分类和定位的最佳anchor统一起来。
在这里插入图片描述

1)任务对齐样本分配

anchor对齐度量
用分类得分和预测框和gt的IoU的高阶组合来表示这个度量:
在这里插入图片描述
这里α和β可以用来控制得分和IoU对这个指标的影响程度。

训练样本分配
对于每个gt,我们选择m个具有最大t值的anchor作为正样本点,其余的为负样本。另外,训练的时候还会计算一个新loss,用来对齐分类和定位。

2) Task-aligned Loss

分类目标函数
为了显式的增加对齐的anchor的得分,减少不对齐的anchor的得分,我们用t来代替正样本anchor的标签。我们发现,当α和β变换导致正样本的标签变小之后,模型无法收敛,因此,我们使用了归一化的t,这个归一化有两个性质:1)确保可以有效学习困难样本,2)保持原来的排序。
在这里插入图片描述

公式中tˆ,是标准化后的t,来替换损失中的目标。
TOOD文中其实还有借鉴focal loss的思想,得到最后的损失函数,但PP-YOLOE中没有提及,我也就不放到本文中了。

消融实验
不同分配策略在COCO train2017上训练36epochs的结果。
在这里插入图片描述

5. ET-head(Efficient Task-aligned Head)

T-head:
在这里插入图片描述
飞浆在T-head的基础上,改进得到ET-head。
在这里插入图片描述
对比可以看到,飞浆使用ESE代替TOOD中的层注意,将分类分支的对齐简化为shortcut,用分布焦点损失(DFL)层代替回归分支的对齐。

对于分类任务和定位任务的学习,作者分别选择了Varifocal Loss(VFL)(来自论文VarifocalNet)戳这里和Distribution focal loss(DFL)(来自论文Generalized Focal Loss)戳这里

1)Varifocal Loss(VFL)

Varifocal Loss由Focal Loss演化而来,在这里插入图片描述
其中,α是用来平衡正负样本的权重, 和 用来调制每个样本的权重,使得困难样本有较高的权重,避免大量的简单的负样本主导了训练时候的loss。借用了Focal Loss中的这种加权的思想,用Varifocal Loss来训练回归连续的IACS,和Focal Loss不一样的是,Focal Loss对于正负样本的处理是相同的,而这里是不对等的,所以Varifocal Loss定义为:
在这里插入图片描述
其中p是预测的IACS,q是目标IoU得分,对于正样本,q是预测包围框和gt框之间的IoU,对于负样本,q为0。

2)Distribution focal loss(DFL)

在这里插入图片描述

其中:
在这里插入图片描述在这里插入图片描述

消融实验

在这里插入图片描述

性能

在这里插入图片描述

笔者思考总结

1.关于PP-YOLOE速度上的提升

PP-YOLOE和YOLOX整体的结构相差不大,但在速度上有很大的提高,在-s模型上,甚至提升了74%!
这么大的提高,我认为除了模型本身的优化和tricks的使用外,残差结构的大量使用,也有一定影响。模型中所有部件,从backbone和neck中的RepResBlock、CSPRepResStage到ET-head中的shortcut和ESEBlock,无不使用或借鉴了残差结构。
虽然残差结构的主要作用是解决网络退化问题,使得层间信息传播更加顺畅,但在较高层间使用残差结构,不可置否地使得计算开销减小。

2.关于PP-YOLOE精度上的提升

因为还没有完全开源的代码(再吐槽一下飞浆只给接口😓),不好直接debug各个部件进行对比,以后有机会再将此部分补充完整。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

事多做话少说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值