AI学习者 · 2023年03月16日

CPU也可以起飞的RTMPose来袭 | 作者手把手带你设计一个超轻超快的模型

image.png

近年来对二维姿态估计的研究在公共基准上已经取得了不错的进展,但其在工业界的应用仍存在着模型参数大和高延迟的问题。为了弥补这一差距,本文通过经验探讨了姿态估计中的关键因素,包括范式、模型架构、训练策略和部署,并提出了一个基于MMPose的高性能实时多人姿态估计框架RTMPose。

RTMPose-m在英特尔i7-11700 CPU和COCO上以95_FPS的速度得到了75.8%的AP,在NVIDIA GTX 1660 Ti GPU上达到430+的FPS,而RTMPose-l在COCO-WholeBody上以130+的FPS达到67.0%的AP。

为了进一步评估RTMPose在关键实时应用程序中的能力,本文还报告了在移动设备上部署后的性能。RTMPoses-s在骁龙865芯片上以70+的FPS实现了72.2%的AP,性能优于现有的开源方法。

Github:https://github.com/open-mmlab/mmpose/tree/dev-1.x/configs/wholebody_2d_keypoint/rtmpose

1、简介

实时人体姿态估计对人机交互、动作识别、运动分析和VTuber技术等各种应用都很有吸引力。尽管在学术基准上取得了惊人的进展,但在计算能力有限的设备上执行鲁棒和实时的多人姿态估计仍然是一项具有挑战性的任务。最近的尝试缩小了与高效网络架构和无检测范式之间的差距,这仍然不足以达到工业应用的满意性能。

在这项工作中,作者从5个方面实证研究了影响2D多人姿态估计框架性能和延迟的关键因素:范式、骨干网络、定位方法、训练策略和部署。通过一系列优化,引入了RTMPose,这是一系列用于姿态估计的实时模型。

首先,RTMPose遵循自上而下的模式,即使用现成的检测器来获取边界框,然后单独估计每个人的姿势。由于额外的检测过程和人群场景中不断增加的工作量,自顶向下算法被定型为准确但速度慢。然而,得益于实时检测器的卓越效率,检测部分不再是自顶向下方法推理速度的瓶颈。在大多数场景中(每个图像6人以内),所提出的轻量级姿态估计网络能够实时地对所有实例执行多个前向传递。

第二,RTMPose采用CSPNeXt作为主干,它首先设计用于目标检测。为图像分类设计的主干对于密集的预测任务(如目标检测、姿势估计和语义分割等)来说是次优的。一些利用高分辨率特征图或高级Transformer架构的主干在公共姿势估计基准上实现了高精度,但存在高计算成本、高推理延迟或部署困难。CSPNeXt在速度和精度方面表现出良好的平衡,并且易于部署。

第三,RTMPose使用基于SimCC的算法预测关键点,该算法将关键点定位视为分类任务。与基于Heatmap的算法相比,基于SimCC的算法以较低的计算工作量实现了具有竞争力的精度。此外,SimCC使用2个完全连接层的非常简单的架构进行预测,使其易于部署在各种后端。

第四,作者重新审视了先前工作中的训练设置,并根据经验介绍了一组适用于姿势估计任务的训练策略。作者的实验表明,这组策略为提出的RTMPose以及其他姿势估计模型带来了显著的收益。

最后,作者联合优化了姿态估计框架的推理流水线。使用Blazepose中提出的跳帧检测策略来减少延迟,并通过姿态非最大抑制(NMS)和平滑滤波来改进姿态处理,以获得更好的鲁棒性。作者还提供了一系列具有t/s/m/l大小的RTMPose模型,以覆盖不同的应用场景,同时实现最佳的性能和速度权衡。

使用不同的推理框架(PyTorch、ONNX Runtime、TensorRT、ncnn)和硬件(i7-11700、GTX1660Ti、Snapdragon865)部署RTMPose,以测试效率。

image.png

如图1所示,使用各种推理框架(PyTorch、ONNX Runtime、TensorRT、ncnn)和硬件(Intel i7-11700、GTX 1660Ti、Snapdragon 865)评估RTMPose的效率。RTMPose-m在COCO valset上实现了75.8%的AP,Intel i7-11700 CPU上的帧速率为90+,NVIDIA GeForce GTX 1660 Ti GPU上的帧率为430+,Snapdragon 865芯片上的帧频率为35+。在姿态估计管道中使用高性能实时检测模型RTMDet nano,RTMPosem可以实现73.2%的AP。

借助MMDeploy,RTMPose还可以轻松部署到各种后端,如RKNN、OpenVINO、PPLNN等。

2、相关工作

2.1、Bottom-up Approaches

自底向上算法检测图像中的实例不可知关键点,并划分这些关键点以获得人体姿势。自下而上的范式被认为适合人群场景,因为随着人数的增加,计算成本稳定。然而,这些算法通常需要较大的输入分辨率来处理各种人的尺度,这使得协调准确性和推理速度具有挑战性。

2.2、Top-down Approaches

自顶向下算法使用现成的检测器来提供边界框,然后将人体裁剪成统一的比例以进行姿态估计。自上而下范式的算法一直主导着公共基准。两阶段推理范式允许行人检测器和姿态估计器使用相对较小的输入分辨率,这允许它们在非极端场景(即,当图像中的人数不超过6人时)中在速度和精度方面优于自下而上的算法。

此外,以前的大多数工作都集中在公共数据集上实现最先进的性能,而本文工作旨在设计具有更好速度精度权衡的模型,以满足工业应用的需求。

2.3、Coordinate Classification

先前的姿态估计方法通常将关键点定位视为坐标回归或Heatmap回归。SimCC引入了一种新的方案,该方案将关键点预测公式化为分别从水平和垂直坐标的子像素箱进行分类,这带来了几个优点。

首先,SimCC摆脱了对高分辨率Heatmap的依赖,从而允许非常紧凑的架构,既不需要高分辨率的中间表示,也不需要昂贵的上采样层。

其次,SimCC将最终的特征图变平以进行分类,而不是涉及全局池化层,因此避免了空间信息的丢失。

第三,量化误差可以通过亚像素级的坐标分类有效缓解,而无需额外的细化后处理。这些特性使得SimCC在构建轻量级姿态估计模型方面具有吸引力。

在这项工作中,作者进一步开发了坐标分类方案,并对模型架构和训练策略进行了优化。

2.4、Vision Transformers

移植自现代自然语言处理(NLP)的基于Transformers的架构在各种视觉任务中取得了巨大成功,如表示学习、目标检测、语义分割、视频理解以及姿态估计。

ViTPose利用最先进的Transformer主干来提高姿态估计精度,而TransPose将Transformer编码器与CNN集成,以有效地捕获长距离空间关系。基于Token的关键点嵌入被引入以结合视觉线索querying和anatomic constraint学习,在基于Heatmap的和基于回归的方法中都显示出有效。

PRTR和PETR提出了带有Transformer的端到端多人姿态估计框架。以前使用Transformer的姿态估计方法要么使用基于Heatmap的表示,要么保留像素tokens和关键点tokens,这导致了高计算成本,并使实时推理变得困难。

相反,本文将自注意力机制与基于SimCC的紧凑表示相结合,以捕获关键点依赖性,这显著减少了计算负载,并允许以更高的准确性和效率进行实时推断。

3、本文方法

image.png

image.png

3.1、SimCC: A lightweight yet strong baseline

1、Preliminary

SimCC将关键点定位表述为分类问题。核心思想是将水平轴和垂直轴划分为等宽编号的bins,并将连续坐标离散化为完整的bins标签。然后训练模型以预测关键点所在的bin。通过使用大量的bin,可以将量化误差降低到亚像素级。

由于这种新颖的公式,SimCC具有非常简单的结构,它使用1×1卷积层将主干提取的特征转换为矢量化关键点表示,并使用2个FC层分别执行分类。

受传统分类任务中的标签平滑的启发,SimCC提出了一种高斯标签平滑策略,该策略将一个热标签替换为以GT为中心的高斯分布软标签,该策略在模型训练中集成了归纳偏差,并带来了显著的性能改进。

作者发现,该技术也与有序回归任务中SORD的想法一致。给定由标签分布定义的类间惩罚距离,软标签自然地封装了关键点位置的秩似然性。

2、Baseline

首先从标准SimCC中删除复杂的上采样层。通过表1可以看到,与SimCC和基于Heatmap的Baseline相比,裁剪后的SimCC的复杂度明显更低,并且仍然具有很好的精度。这表明在定位任务中将全局空间信息编码为一维表示的效率。通过用更紧凑的CSPNext-m取代ResNet-50骨干,进一步缩小了模型尺寸,并获得了一个轻量级但强大的基线,69.7% AP。

image.png

3.2、Training Techniques

1、Pre-training

以往的工作表明,使用基于Heatmap的方法对主干进行预训练可以提高模型的精度。骨干预训练采用UDP方法。这将模型从69.7% AP提高到70.3% AP。

2、Optimization Strategy

采用了RTMDet的优化策略。指数移动平均线(EMA)用于缓解过拟合(70.3%至70.4%)。平坦余弦退火策略将预处理精度提高到70.7%。还抑制了标准化层上的权重衰减和偏差。

3、Two-stage training augmentations

遵循RTMDet中的训练策略,使用先强后弱的两阶段增强。首先使用更强的数据扩充来训练180个Epoch,然后使用较弱的策略训练30个Epoch。

  • 在强阶段,使用较大的随机缩放范围[0.6,1.4]和较大的随机旋转因子80,并将切割概率设置为1。根据AID,裁剪有助于防止模型在图像纹理方面产生过拟合现象,并促进其学习姿势结构信息。
  • 在弱策略阶段,关闭随机移动,使用较小的随机旋转范围,并将切割概率设置为0.5,以允许模型在更接近真实图像分布的域中进行微调。

3.3、Module Design

1、Feature dimension

作者观察到,模型性能随着特征分辨率的提高而提高。因此,使用FC层将1D关键点表示扩展到由超参数控制的所需维度。在这项工作中,使用了256个维度,精度从71.2%AP变为71.4%AP。

2、Self-attention module

为了进一步利用全局和局部空间信息,根据Tokenpose的启发,使用自注意力模块细化关键点表示。采用了Transformer的变体,门控注意单元(GAU),与普通Transformer相比,它具有更快的速度、更低的内存成本和更好的性能。

具体而言,GAU使用门控线性单元(GLU)改进了Transformer层中的前馈网络(FFN),并以优雅的形式整合了注意力机制:
image.png

3.4、Micro Design

1、Loss function

将坐标分类视为一个有序回归任务,并遵循SORD中提出的软标签编码:

image.png

image.png

image.png

实验结果表明,使用τ可以将其性能从71.9%提高到72.7%。

2、Separate σ

在SimCC中,水平和垂直标签使用相同的σ进行编码。根据经验探索了一个简单的策略来设置单独的σ:

image.png

3、Larger convolution kernel

这里用最后一个卷积层的不同大小的卷积核进行了实验,发现使用更大的卷积核比使用1×1卷积更能提高性能。最后,选择使用7×7卷积层,其AP达到73.3%。

在表2中比较了不同卷积核大小的模型性能。此外,还使用最终模型架构比较了表3中不同温度因素的影响。

image.png

4、More epochs and multi-dataset training

增加训练周期会为模型性能带来额外的收益。具体而言,训练270和420个Epoch分别达到73.5%的AP和73.7%的AP。为了进一步挖掘该模型的潜力,将COCO和AI Challenger数据集结合在一起,以均衡的采样率进行预训练和微调,从而丰富了训练数据。性能最终达到75.3%的AP。

3.5、Inference pipeline

除了姿态估计模型之外,作者还进一步优化了整体的自上而下的推理管道,以降低延迟和更好的鲁棒性。

使用BlazePose中的跳帧检测机制,其中每K帧进行人工检测,在间隔帧中,边界框从最后的姿态估计结果生成边界框。此外,为了实现在帧上的平滑预测,在后处理阶段使用了基于OKS的姿态NMS和OneEuro滤波器。

image.png

4、实验

4.1、SOTA对比

image.png
image.png

4.2、速度对比

image.png

image.png

作者:小书童
文章来源:集智书童

推荐阅读

更多嵌入式AI干货请关注嵌入式AI专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
18818
内容数
1360
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息