文章目录
- 前言
- 一、可扩展的 Backbone 和 Neck
- 二、更高效的标签分配策略 TAL (Task Alignment Learning)
- 三、更简洁有效的 ET-Head (Efficient Task-aligned Head)
前言
百度飞桨团队发布了 PP-YOLOE,与其他 YOLO 系列算法相比,其具有更强的性能、更丰富灵活的配置方案以及更全硬件支持三大优势。下面先浅列一下在文章摘要中提到的相关的性能提升:
PP-YOLOE 的 s/m/l/x 全系列四个尺寸在精度及速度方面均超越其他同体量算法。详细数据如下图 所示,其中 PP-YOLOE-l 在 COCO test-dev 上精度可达 51.4%,在 V100 上使用 TRT FP16 进行推理,速度可达 149FPS,相较于YOLOX-l[4]精度提升 1.3 AP,速度提升 24.96%;相较于YOLOv5-x[5]精度提升 0.7AP,TRT-FP16 加速 26.8%;相较于PP-YOLOv2[6]精度提升 1.9 AP,速度提升 13.35%。
PP-YOLOE 相较前几代 YOLO 算法的性能提升主要源于以下三点改进:
- 新颖、统一的 Backbone 和 Neck 设计,更方便灵活配置多种尺寸。
- 引入了更高效的标签分配策略 TAL(Task Alignment Learning)的动态匹配策略,解决了目标检测任务中常见的分类回归不均衡难题,提高检测精度。
- 设计了更简洁的 ET-Head(Efficient Task-aligned Head),以少量的速度损失为代价提升了精度。
下图是PP - YOLOE的模型架构:
一、可扩展的 Backbone 和 Neck
以 ResNet 为代表的残差连接网络和以 DenseNet 为代表的密集连接网络在现代卷积神经网络中被广泛应用。主要是因为残差连接可以作为一种模型集成的方法,解决了梯度消失问题;密集连接融合则具有不同感受野的中间层特征,在目标检测等任务上表现出了良好的性能。综合以上两种结构的特点,飞桨团队设计了 RepResBlock 结构,并用于 PP-YOLOE 的 Backbone 和 Neck 中。
重新设计 Backbone 和 Neck 的初衷之一是在利用密集连接中的特征复用和多感受野融合等优势的同时,避免巨大的内存访问成本 (Memory Access Cost,MAC
) 所导致的速度下降等劣势。为此主要通过以下三步核心设计实现:
- 为了减少内存访问带来的开销,首先借鉴了TreeNet中的 TreeBlock 并将其简化成如上图中的
(a)
所示的形式,在最小化 block 的同时保留了特征复用和多感受野融合的特点。 - 由于直接堆叠简化版的 TreeBlock 仍然会带来巨大的内存访问成本,因此需要对 TreeBlock 中各卷积分支解耦,将 concat 操作替换成 elementwise_add 操作,得到 RepResBlock 来实现重参数化,进一步优化网络结构。训练时网络结构如上图
(b)
所示,在部署时则可以被重参数化为如上图(c)
所示的形式。这样在训练时既可增强模型的表征能力,在部署时也不会引入额外的计算量。 - 堆叠的 RepResBlock 与 CSP 结构结合组成了 CSPRepResStage。CSP 结构去除了冗余的 3x3 卷积,从而避免了巨大的参数量和计算量,使得模型在推理时更加高效。同时,ESE(
Effective Squeeze and Extraction
)也被引入 CSPRepResStage 以施加通道注意力,进一步提升特征表示能力。
深度学习中的
concat
操作和elementwise_add
操作是常见的两种操作方式。concat 操作是指将不同的特征图按照通道数进行拼接,生成一个更加丰富的特征图。具体来说,如果有两个特征图A和B,它们的通道数分别为a和b,那么将它们concat 起来的操作就是将两个特征图在通道维度进行拼接,生成一个新的特征图,其通道数为a+b。在深度学习中,concat 操作常用于将不同层的特征图进行融合,从而提高模型的性能。elementwise_add操作是指将两个特征图中的对应元素进行相加,生成一个新的特征图。具体来说,如果有两个特征图A和B,它们的大小和通道数都相同,那么将它们进行elementwise_add的操作就是将A和B中对应位置的元素相加,生成一个新的特征图。在深度学习中,elementwise_add操作常用于残差网络(ResNet)等模型中,用于学习残差信息,从而提高模型的性能。综上所述,concat 操作和elementwise_add操作是深度学习中常用的两种操作方式,它们都可以用于特征融合和信息增强,提高模型的性能。
CSP(
Cross Stage Partial
)结构是YOLOv4/v5的一个重要组成部分,主要用于提高目标检测的精度和速度。CSP结构的核心思想是通过跨阶段局部连接来提高特征图的复杂性,从而提高目标检测的性能。
具体来说,CSP结构将整个网络分成两个阶段,即CSPDarknet53和CSPHead。CSPDarknet53是一个类似于ResNet50的网络,用于提取图像特征,而CSPHead则是一个轻量级的网络,用于进行目标检测。在CSPDarknet53中,CSP结构被应用于网络的每个模块中,每个模块都包含了一个跨阶段局部连接的CSP结构。这些局部连接可以有效减少模型的计算量和内存消耗,提高模型的训练速度和精度。
在CSPHead中,CSP结构被用于将特征图分成两个部分,即背景特征和前景特征。这样可以有效减少计算量,提高目标检测的速度和精度。此外,CSPHead还采用了多尺度的特征图,可以更好地适应不同大小的目标。
总之,CSP结构在YOLOv4/v5中的应用,可以显著提高目标检测的性能和精度,使得模型更加高效和实用。
重新设计 Backbone 和 Neck 的初衷之二是为了更方便地缩放模型尺寸,以适配不同算力的硬件。因此,需要统一 Backbone 和 neck 中的模块:
-
使用 CSPRepResStage 搭建 Backbone。与 ResNet 类似,PP-YOLOE 使用 3 个堆叠的卷积组成的
stem 结构以及 4 个 CSPRepResStage。 -
在 Neck 方面沿用了 PAN 的结构,由 5 个CSPRepResStage 组成,与 Backbone 不同的是,Neck 中移除了 ESE 以及 RepResBlock中的残差连接。
最终经过重新设计的 Backbone 和 Neck 相较于 PP-YOLOv2 中的结构精度提升 0.7AP,速度也大幅提升。
二、更高效的标签分配策略 TAL (Task Alignment Learning)
标签分配是指在目标检测训练的过程中,将 ground truth 分配给 anchor box 或者 anchor point 以得到正例和负例进行监督学习。目标检测中的标签分配策略通常可以分为静态匹配和动态匹配两种:
- 静态匹配是指不依赖网络的输出,根据 ground truth 和 anchor 的 IoU 或者位置关系进行匹配,如 ATSS、YOLOv3 中的匹配策略等。
- 动态匹配是根据网络的输出来分配正例,如 SimOTA、TAL 等。TAL 设计了综合分类任务和回归任务的指标对 ground truth 进行分配,并依据这一指标来计算 loss 以及调整 loss 的权重,使得分类和回归任务的学习产生交互,达到了对齐分类和回归任务的效果。
由于目标检测任务包含分类和回归两个子任务,但这两个子任务的学习往往不存在交互,因此会导致分类和回归任务在预测上存在不一致的问题。具体表现为一些定位准确、分类置信度不高的预测框,被定位不准确、分类置信度高的预测框抑制。
在之前版本的PP-YOLOv1/v2中是使用 IoU Aware 的方式,依据 IoU 和分类预测分数的综合指标作为 NMS 的置信度来缓解这一问题。但分类任务和回归任务的学习依然是相互独立的,为了更好地解决不一致问题,PP-YOLOE 中引入了 TOOD 中的 TAL(Task Alignment Learning)这一标签分配策略来对齐分类和回归任务。
飞桨团队在基线模型上分别对 ATSS、SimOTA 和 TAL 进行了实验探索,可以看到 TAL 得到了最优的精度表现。在引入了 TAL 之后,模型也得到了 0.9AP 的大幅提升。
三、更简洁有效的 ET-Head (Efficient Task-aligned Head)
由于分类和回归任务需要的特征往往不完全相同,为了同时得到任务通用和任务特有的特征,PP-YOLOE 中引入了TOOD中提出的针对分类任务和回归任务对齐的 T-Head (Task-aligned Head),并对其进行了改进。
ET-Head 具体结构如上图所示,相较于原始的 T-Head 在网络结构上主要进行了以下四点改进:
- 移除了 T-Head 中耗时的任务交互特征模块;
- 在精度无损的条件下,将通道注意力模块简化成了更加高效的 ESE block;
- 将分类任务对齐模块简化成了 shortcut,进一步提升了速度;
- 针对 T-Head 中复杂且对部署不友好的回归任务对齐模块,通过借鉴GFL中的积分模块来建模检测框。
为了进一步提升模型性能,在损失函数方面,则主要进行了以下两点改进:
- 采用 VFL(varifocal loss)作为分类 loss,VFL 使用 IACS(IoU-aware classification
score)作为 target,使得模型可以学习到 classification score 和 IoU score 的联合分布; - 采用DFL(Distribution Focal Loss)来监督积分模块的学习,和 GIoU Loss 相结合共同监督回归任务的学习。
经过改进的 ET-Head,使模型取得了 0.5AP 的精度提升,最终模型在 COCO val 上达到了 50.9mAP 的精度,在
V100 上达到了 78.1FPS。
经过以上优化,PP-YOLOE-s/m/l/x 四个模型均在 COCO 2017 test-dev 取得了卓越的表现,具体对比结果如下图所示: