RTMPose: Real-Time Multi-Person Pose Estimation based on MMPose 阅读笔记

RTMPose: Real-Time Multi-Person Pose Estimation based on MMPose(RTMPose:基于MMPose的实时多人姿态估计)

CVPR 2023
论文链接
代码链接

摘要: 2D姿态估计的研究在公共基准上取得了优异性能,但其在工业界的应用仍存在模型参数重和高延迟问题。为弥补这一差距,本文研究了影响姿态估计结果的关键因素,包括范式、模型架构、训练策略和部署,并提出了一个基于MMPose的高性能实时多人姿态估计框架RTMPose。我们的 RTMPose-m 在 Intel i7-11700 CPU上实现了 75.8% 的 AP,在 NVIDIA GTX 1660 Ti GPU 上实现了430+FPS,在COCO WholeBody上实现了65.3%的AP。为进一步评估 RTMPose 在关键实时应用程序中的能力,本文还报告了在移动设备上部署后的性能,RTMPose-s模型在Snapdragon 865芯片上以70+的FPS在COCO上实现了72.2%的AP,优于现有的开源库。



1. Introduction

实时人体姿态估计有助于人机交互、动作识别、运动分析和 VTuber 技术,尽管 HRNet 和 VitPose 已经在学术基准 CrowdPose,COCO 上取得了不错的进展,但在计算能力有限的设备上执行 robust 和real-time 的多人姿态估计仍是一项具有挑战性的任务。最近的高效网络架构(Blazepose: On-device real-time body pose trackingNext-generation pose detection with movenet and tensorflow.jsLite-HRNet)和无人体检测的一阶段方法(Bottom-up human pose estimation via disentangled keypoint regressionPifpaf: Composite fields for human pose estimationEnd-to-end multi-person pose estimation with transformers)虽然取得了一些成功,但仍然无法满足工业界要求。
本文从5个角度研究了影响人体姿态估计性能和延迟的因素,包括:范式、backbone、关键点定位方法、训练策略以及部署方式。通过一系列优化,我们提出了 RTMPose:Real-Time Models for POSE estimation。
首先,RTMPose采用 top-down 方法,使用现有检测器获得人体检测边界框,然后单独估计每个人的姿态,由于 top-down方法需要额外的人体检测且会随着人数增加而工作量增加,因此 top-down 方法虽然准确,但速度比较慢。但得益于高效的实时检测器,人体检测部分不再是 top-down 方法推理速度的瓶颈。在大多数情况下(每个图像6个人以内),当前的轻量级姿态估计网络能够实时执行对所有实例的多个前向传递。
其次,RTMPose采用为目标检测而设计的 CSPNeXt 作 backbone,为图像分类设计的 backbone 对于密集预测任务(如目标检测、姿态估计和语义分割等)来说是次优的。一些网络,例如:HRNet、Lite-HRNet 通过提高特征图的分辨率来提高在公共姿态估计数据集上的准确性,还有一些网络通过采取先进的 transformer 架构来提高性能,但这些方法计算成本高、推理延迟高且部署困难。CSPNeXt在速度和准确性之间取得 trade-off,且易于部署。
第三,RTMPose使用基于SimCC的算法预测关键点,该算法将关键点定位视为分类任务。与基于热图的算法相比,基于SimCC的算法以更低的计算工作量实现了具有竞争力的精度。此外,SimCC使用两个简单的全连接层架构进行预测,使其易于部署在各种 backends上。
第四,本文重新审视了先前工作[On-device real-time body pose trackingCrowdPoseAn empirical study of designing real-time object detectors]中的训练设置,并引入了适用于姿态估计任务的训练策略集。实验表明,这组策略能显著提升 RTMPose 及其他姿态估计模型的性能。
最后,我们优化了姿态估计框架的推理 pipeline,具体而言,使用 [On-device real-time body pose tracking] 中提出的跳帧检测策略来减少延迟,并通过姿态非最大值抑制(NMS)和平滑滤波来改进姿态处理,以获得更好的鲁棒性。此外,我们还提供了一系列 t/s/m/l/x 大小的 RTMPose 模型,以覆盖不同的应用场景,并实现最佳的性能-速度 teade-off。
我们使用不同的推理框架(PyTorch、ONNX Runtime、TensorRT、ncnn)和硬件(i7-11700、GTX1660Ti、Snapdragon865)部署RTMPose来测试效率。
如图1所示,我们使用各种推理框架(PyTorch、ONNX Runtime、TensorRT、ncnn)和硬件(Intel i7-11700、GTX 1660Ti、Snapdragon 865)评估RTMPose的效率。RTMPose-m在英特尔i7-11700 CPU上以90+FPS、NVIDIA GeForce GTX 1660 Ti GPU上以430+FPS和Snapdragon 865芯片上以35+FPS的速度在COCO val set上实现了75.8%的AP(with flipping)。RTMPose-m 使用高性能实时目标检测模型 RTMDet-nano 可以实现73.2%的AP。在 MMDeploy 的帮助下,RTMPose也可以轻松地部署到各种后端,如RKNN、OpenVINO、PPLNN等。
在这里插入图片描述

图1. RTMPose和其他开源模型在COCO val set 上关于模型大小、延迟和精度的比较。圆形大小表示模型参数的相对大小。


2. Related Work

Bottom-up Approaches. 自下而上的算法检测图像中的实例未知关键点,并对这些关键点进行分割以获得人体姿势。自下而上范式适用于人群场景,因为无论人数增加多少,计算成本都是稳定的。然而,这些算法通常需要较大的输入分辨率来处理不同 scale 的人体,使其较难协调准确性和推理速度。

Top-down Approaches. 自上而下的算法使用现成的检测器来检测人体边界框,然后将人体边界框裁剪成统一 scale 来进行姿态估计。两阶段推理范式允许人体检测器和姿态估计器使用相对较小的输入分辨率,因此其在非极端场景(即,当图像中的人数不超过6人时)中的速度和准确性方面优于自下而上的算法。此外,先前大多数工作都专注于在公共数据集上实现 sota 性能,而本工作旨在设计具有更好速度和精度权衡的模型,以满足工业应用的需求。

Coordinate Classification. 先前的姿态估计方法通常将关键点定位视为坐标回归或热图回归。SimCC 介绍了一种新方案,将关键点预测公式化为分别从水平坐标和垂直坐标的sub-pixel bins 中进行分类,SimCC具有几个优势:1. 首先,SimCC摆脱了对高分辨率热图的依赖,从而实现了一种非常紧凑的架构,既不需要高分辨率的中间表示,也无需高代价的反卷积层。2. 其次,SimCC对最终的特征图进行 flatten 以进行分类,而不是涉及全局池化,从而避免了空间信息的丢失。3. 第三,通过 sub-pixel 的坐标分类可以有效地减轻量化误差,而无需额外的细化后处理。这些特性使得SimCC能够构建轻量级姿态估计模型。此项工作进一步开发了坐标分类方案,并对模型架构和训练策略进行了优化。

Vision Transformers. 从 NLP 移植而来的基于 Transformers 的架构在各种视觉任务中取得了巨大成功,如表示学习、目标检测、语义分割、视频理解以及姿态估计。ViTPose 利用 sota transformer backbone 来提高姿态估计的准确性,而TransPose将 transformer encoder 与 CNN集成在一起,以有效捕捉 lang-range 空间关系。受 DETR 的启发,PRTR 和 PETR 提出了带有 transformer 的端到端多人姿态估计框架。以前使用 transformer 的姿态估计方法要么使用基于热图的表示,要么保留 pixel tokens 和 keypoints token ,这导致高计算成本,难以实时推理。相比之下,我们将 self-attention 机制与基于SimCC的紧凑表示相结合,以捕获关键点相关性,这显著降低了计算负载,并允许以 sota 的准确性和效率进行实时推理。

3. Methodology

最终的模型架构如图2所示,图3说明了路线图的逐步增益。
在这里插入图片描述

图2:RTMPose 的整体架构,包括一个卷积层、一个全连接层和一个门控注意力单元(GAU),用于细化 K 个关键点表示。之后,将二维姿态估计视为 x 轴和y轴坐标的两个分类任务,以预测关键点的水平和垂直位置。


在这里插入图片描述

图3. 从SimCC baseline 开始逐步改进。

3.1. SimCC: A lightweight yet strong baseline

Preliminary. SimCC 将关键点定位公式化为一个分类问题。其核心思想是将水平轴和垂直轴划分为 equal-width numbered bins,并将连续坐标离散为积分bin标签。然后对模型进行训练,以预测关键点所在的 bin,可以通过使用大量的 bin 来将量化误差减少到 subpixel level。
得益于这种新颖的公式,SimCC具有非常简单的结构,它使用1×1卷积层将 backbone 提取的特征转换为 vectored keypoint 表示,并使用两个全连接层分别执行分类。
受传统分类任务 [Rethinking the inception architecture for computer vision] 中标签平滑的启发,SimCC提出了一种 Gaussian label 平滑策略,将 one-hot label 替换为以 ground truth bin 为中心的Gaussian distributed soft label,该策略集成了模型训练中的 inductive bias,并显著提高了性能。我们发现这种技术也与有序回归任务中 SORD 的思想一致。给定由标签分布定义的类间惩罚距离,soft label 自然封装了关键点位置的秩似然性。

Baseline. 我们首先从标准SimCC中移除高代价的上采样层。表1的结果表明,与基于标准的SimCC和热图的 baseline 相比,修剪后的SimCC复杂性更低,且仍能实现较高的准确性,这表明在定位任务中将全局空间信息编码为解耦的1D表示是有效的。通过用更紧凑的CSPNext-m取代ResNet-50 backbone,能进一步缩小模型 scale,并获得轻量级且高准确性的 baseline,69.7%的AP。
在这里插入图片描述

表1. baseline 方法的计算成本和准确性。我们展示了FLOPs和 prediction head 的模型参数,以便进行详细比较。“SimCC*”表示从标准SimCC头上移除上采样层。


3.2. Training Techniques

Pre-training. 先前的工作 [On-device real-time body pose tracking,Human pose regression with residual log-likelihood estimation] 表明,使用基于热图的方法对 backbone 进行预训练可以提高模型的准确性。我们采用 UDP [Delving into unbiased data processing for human pose estimation] 方法进行 backbone 的 pre-training,使模型精度从69.7%AP提高到70.3%的AP。在以下部分使用此技术作为默认设置。

Optimization Strategy. 本文采用了 [Rtmdet: An empirical study of designing real-time object detectors] 中的优化策略。指数移动平均(Exponential Moving Average:EMA)用于缓解过拟合(70.3%-70.4%),flat cosine annealing 策略将精度提高到 70.7% AP,本文还抑制了 normalization layers 和 bias 上的 weight decay。

Two-stage training augmentations. 根据 [An empirical study of designing real-time object detectors] 中的训练策略,我们使用先强后弱的两阶段增强。首先使用强数据增强来训练180个epoch,然后使用弱策略来训练30个epoch。在强阶段,我们使用大的 random scaling range[0.6,1.4] 和大的 random rotation factor = 80,并将 Cutout probability(剪枝率) 设置为1。根据AID,Cutout有助于防止模型过拟合图像纹理,并鼓励其学习姿态结构信息。 在弱策略阶段,关闭 random shift,使用较小的 random rotation range,并将 Cutout probability设置为0.5,以允许模型在更接近真实图像分布的域中进行微调。

3.3. Module Design

Feature dimension 模型性能随着特征分辨率的提高而提高。因此本文使用全连接层将1D关键点表示扩展到由超参数控制的所需维度。本工作使用了256个维度,精度从71.2%的AP提高到71.4%的AP。

Self-attention module 为了进一步利用全局和局部空间信息,本文使用自注意模块来细化关键点表示。我们采用了 Transformer 的变体:门控注意力单元(Gated Attention Unit: GAU),它速度更快、内存占用较低、性能更高。具体而言,GAU利用门控线性单元(Gated Linear Unit:GLU)改进了 transformer 层的前馈网络(FFN),并以优雅的形式集成了注意力机制:
在这里插入图片描述
本工作实现的自注意力如下,该自注意力模块使模型性能提高了0.5%(71.9%)。:
在这里插入图片描述

3.4. Micro Design

Loss function 将坐标分类视为有序回归任务,并遵循 SORD 提出的 soft label 编码:
在这里插入图片描述
ϕ ( r t , r i ) \phi(r_t, r_i) ϕ(rt,ri)是选择的度量损失函数,它惩罚 r t r_t rt 的真实度量值与 rank r i r_i ri 距离多远,本工作采用未归一化的高斯分布作为类间距离度量:
在这里插入图片描述
请注意,Eq.3 可以被视为计算所有 ϕ ( r t , r i ) \phi(r_t, r_i) ϕ(rt,ri) 的Softmax。我们在Softmax操作中为模型输出和 soft labels 添加 temperatures(“temperature”(温度)是一个关键的超参数。,可以将其视为概率分布的平滑程度的调节因子。例如,如果标签是“尖锐”的,即概率集中在某一个类别上,通过提高温度,我们可以让预测的概率分布变得更为平滑。这样做有助于避免模型陷入局部最优解,类似于模拟退火算法中的降温过程。此外,初始阶段较高的温度系数可以防止梯度在传播过程中消失,从而使得模型训练更加稳定。随着训练的进行,我们可能会逐渐降低温度,以实现更好的模型性能。),进一步调整归一化分布形状:
在这里插入图片描述
根据实验结果,使用 τ=0.1可以将性能从71.9%提高到72.7%。

Separate σ 在SimCC中,水平和垂直标签使用相同的σ进行编码。本文根据经验探索了一种简单的策略,为它们设置单独的σ:
在这里插入图片描述
其中WS分别是水平方向和垂直方向上的 bin number。该步骤将准确率从72.7%提高到72.8%。

Larger convolution kernel 我们对最后一个卷积层的不同 kernel 大小进行了实验,发现与使用1×1 kernel 相比,使用更大的内核大小可以提高性能。最后,我们选择使用7×7卷积层,实现了73.3%的AP。表2比较了不同 kernel 大小的模型性能。此外,我们还使用最终的模型架构比较了表3中不同温度因素的影响。
在这里插入图片描述


More epochs and multi-dataset training. 增加训练周期会给模型性能带来额外的收益。具体而言,训练270和420个 epoch 分别达到 73.5% 和 73.7% 的AP。为了进一步挖掘模型的潜力,本文通过将 COCO 和 AI Challenger 数据集组合在一起进行预训练和微调,以平衡的采样率来丰富训练数据,最终性能达到75.3%的AP。

3.5. Inference pipeline

除了姿态估计模型之外,我们还进一步优化了整体自上而下的推理 pipeline,以降低延迟并提高鲁棒性。我们使用 BlazePose 中的跳帧检测机制,其中每 K 帧执行一次人体检测,并且在间隔帧中,根据最后的姿态估计结果生成边界框。此外,为了实现对帧的平滑预测,我们在后处理阶段使用基于 OKS的姿态 NMS 和 OneEuro 滤波器。

在这里插入图片描述

图4. RTMPose的推理 pipeline 。

4. Experiments

4.1. Settings

我们实验中的训练设置如表7所示,如3.2节所述,我们进行了基于热图的预训练,除了较短的 epoch 外,该训练遵循微调中使用的相同训练策略。我们的所有型号都在8个NVIDIA A100 GPU上进行了训练。并用平均精度(AP)对模型性能进行了评价。
在这里插入图片描述

4.2. Benchmark Results

COCO:
在这里插入图片描述

表4. COCO val set 上的身体姿态估计结果。仅报道姿态模型的GFLOP。不使用 Flip test。

COCO-SinglePerson:
在这里插入图片描述

表5. COCO SinglePerson val 上的身体姿势估计结果。我们总结了 top-down 方法的检测GFLOP,并与 bottom-up 方法进行公平的比较。“*”表示双重推理。不使用 Flip test。

COCO-WholeBody:

在这里插入图片描述

表6. COCO WholeBody V1.0数据集上的全身姿态估计结果。在 top-down 方法中,只报告了姿态模型的输入大小和GFLOP,而不涉及检测模型。“*” 表示模型在 AIC+COCO 上进行了预训练。“†”表示多尺度测试。使用 Flip test。


Other Datasets:
在这里插入图片描述

表8:不同数据集上的性能。“*”表示模型在AIC+COCO上进行预训练,并在相应的数据集上进行微调。使用 Flip test。

在这里插入图片描述

表9。MPII val set 的比较。“*”表示模型在AIC+COCO上进行了预训练,并在MPII上进行了微调。使用 Flip test。

4.3. Inference Speed

在这里插入图片描述

表10. Snapdragon 865上的推理速度比较。RTMPose模型使用ncnn进行部署和测试。

在这里插入图片描述

表11. CPU和GPU上的推理速度。RTMPose模型分别使用ONNXRuntime和TensorRT进行部署和测试。此表中未使用翻转测试。

在这里插入图片描述

表12。CPU、GPU和移动设备上的 pipeline 推理速度。

5. Conclusion

本文实证研究了影响姿态估计的关键因素,如范式、模型架构、训练策略和部署。基于这些发现,本文提出了一种高性能实时多人姿态估计框架RTMPose,它在平衡模型性能和复杂性方面取得了卓越的效果,可以部署在各种设备(CPU、GPU和移动设备)上进行实时推理。我们希望所提出的算法及其开源实现能够满足工业上对适用姿态估计的一些需求,并帮助未来对人体姿态估计任务的探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值