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

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

3、本文方法


image.pngimage.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),并以优雅的形式整合了注意力机制:

其中是 pairwise乘法(Hadamard乘积),是激活函数。在这项工作中,自注意力如下:

其中s=128,Q和K是简单的线性变换,是ReLU,然后平方。该自注意力模块将模型性能提高了0.5%(71.9%)。

3.4、Micro Design

1、Loss function

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

其中是选择的度量损失函数,它惩罚的真实度量值离秩的距离。在这项工作中,采用非归一化高斯分布作为类间距离度量:

注意,等式3可以被视为计算所有的Softmax。在Softmax操作中为模型输出和软标签添加温度,进一步调整归一化分布形状:

image.png

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

2、Separate σ

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

image.png

其中,分别为水平方向和垂直方向上的bin号。这一步将准确率从72.7%提高到72.8%。

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


5、参考


[1].RTMPose: Real-Time Multi-Person Pose Estimation based on MMPose.

相关文章
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
6月前
|
测试技术 PyTorch 算法框架/工具
魔搭开源推理引擎 DashInfer,助力CPU服务器解锁大模型超强推理
ModelScope推出了预训练大语言模型(LLM)推理引擎DashInfer,采用C++ Runtime编写,提供C++和Python语言接口,具有生产级别的高性能表现,适用于多种CPU架构,包括x86和ARMv9。DashInfer支持连续批处理(Continuous Batching)和多NUMA推理(NUMA-Aware),能够充分利用服务器级CPU的算力,为推理14B及以下的LLM模型提供更多的硬件选择。该项工作已开源。
|
6月前
|
机器学习/深度学习 人工智能 PyTorch
不止于大模型 英特尔CPU引领智算新高度
ChatGPT的横空出世拉开了AI大模型的新时代,而近期的文生视频模型SORA又让业界为之激动不已。据了解,Sora所需token(文本处理最小单位)数量相较于文本及图片模型的推理呈数量级增长。经中信证券简单估算,对于一个60帧的视频(约6至8秒),Sora要生成至少约120万个token,这是相当大的计算量。
|
6月前
|
缓存 Java 知识图谱
1.什么是CPU多级缓存模型?
1.什么是CPU多级缓存模型?
84 0
1.什么是CPU多级缓存模型?
|
机器学习/深度学习 并行计算 异构计算
gpu是什么和cpu的区别 模型训练
gpu是什么和cpu的区别 模型训练
755 1
|
存储 机器学习/深度学习 缓存
探索大模型世界的多元算力:CPU、GPU与算存互连的复杂比较与重要性分析
据科技部新一代人工智能发展研究中心发布的报告显示,我国已发布79个参数规模超过10亿的大模型,几乎形成了百模大战的局面。在大模型研发方面,中国14个省区市都在积极开展工作,其中北京拥有38个项目,广东拥有20个项目。
1378 0
|
并行计算 TensorFlow 算法框架/工具
模型部署专题 | 02 :BERT-Tensorflow模型部署(CPU版和GPU版)
介绍如何用Tensorflow部署BERT模型,包括CPU版和GPU版
|
机器学习/深度学习 编解码 自然语言处理
CPU也可以起飞的RTMPose来袭 | 作者手把手带你设计一个超轻超快的模型(一)
CPU也可以起飞的RTMPose来袭 | 作者手把手带你设计一个超轻超快的模型(一)
896 0
|
机器学习/深度学习 存储 文件存储
快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
274 0
|
12天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:

热门文章

最新文章