
RTMPose 实时多人姿态估计实战指南基于 MMPose 的高性能人体姿态估计框架全解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmposeRTMPose 是 OpenMMLab 团队基于 MMPose 构建的高性能实时多人姿态估计框架本文以其在仓库configs/body_2d_keypoint/rtmpose/下的完整模型库为对象系统讲解其设计思想、技术架构、训练配置与多数据集实验结果。读完本文你将掌握 RTMPose t/s/m/l 系列模型的规格差异与性能数据、SimCC 坐标分类编解码与 RTMCCHead 的原理、420 轮两阶段训练策略中优化器、学习率调度、数据增强与 EMA 的完整配置细节并能够在 MMPose 中直接复现训练与评估。RTMPose 概述面向工业场景的实时多人姿态估计框架二维人体姿态估计2D pose estimation在公开基准上已经取得了出色成绩但落地到工业界时仍长期受困于模型参数量大、推理延迟高两大瓶颈。RTMPose 正是为弥合这一鸿沟而设计其作者基于 MMPose 对影响多人姿态估计算法性能的五个关键方面展开了实证研究并在此基础上提出了一个高性能的实时多人姿态估计框架范式Paradigm选择高效的 Top-Down自上而下先检测后回归流程骨干网络Backbone Network复用 RTMDet 的 CSPNeXt 骨干定位算法Localization Algorithm采用 SimCC 坐标分类而非传统热图回归训练策略Training Strategy两阶段训练、EMA 等技巧的组合部署推理Deployment Inference针对 CPU/GPU/移动端做了大量实测与优化。根据该框架的模型库文档RTMPose-m 在 COCO 上达到75.8% AP同时可在 Intel i7-11700 CPU 上以90 FPS、在 NVIDIA GTX 1660 Ti GPU 上以430 FPS运行RTMPose-l 在 COCO-WholeBody 上达到67.0% AP并以130 FPS的速度运行在同时期的开源实现中表现突出。为了进一步验证 RTMPose 在关键实时场景下的能力作者还专门报告了其部署到移动设备后的性能表现。RTMPose 技术架构解析整体范式Top-Down SimCC 坐标分类RTMPose 采用 Top-Down 架构整体模型在配置文件中由TopdownPoseEstimator定义见 rtmpose-m_8xb256-420e_coco-256x192.pymodel dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( _scope_mmdet, typeCSPNeXt, archP5, expand_ratio0.5, deepen_factor0.67, widen_factor0.75, out_indices(4, ), channel_attentionTrue, norm_cfgdict(typeSyncBN), act_cfgdict(typeSiLU), init_cfgdict( typePretrained, prefixbackbone., checkpoint.../cspnext-m_udp-aic-coco_210e-256x192-...pth)), headdict( typeRTMCCHead, in_channels768, out_channels17, input_sizecodec[input_size], in_featuremap_sizetuple([s // 32 for s in codec[input_size]]), simcc_split_ratiocodec[simcc_split_ratio], final_layer_kernel_size7, gau_cfgdict( hidden_dims256, s128, expansion_factor2, dropout_rate0., drop_path0., act_fnSiLU, use_rel_biasFalse, pos_encFalse), lossdict( typeKLDiscretLoss, use_target_weightTrue, beta10., label_softmaxTrue), decodercodec), test_cfgdict(flip_testTrue))其中的_scope_mmdet表明骨干网络直接复用 MMDetection 中实现的 CSPNeXtdata_preprocessor使用 ImageNet 统计的均值/方差做归一化并完成 BGR 到 RGB 的通道转换。骨干网络CSPNeXt来自 RTMDetRTMPose 的骨干网络选用 RTMDet 中的 CSPNeXt配置为archP5、expand_ratio0.5并开启通道注意力channel_attentionTrue、使用 SyncBN 归一化与 SiLU 激活。该骨干先在 AICCOCO 上以 UDP 策略预训练 210 轮再通过init_cfg以prefixbackbone.的方式加载预训练权重作为后续姿态估计训练的初始化。RTMCCHead 与 GAU头部使用专用的RTMCCHead源码位于 mmpose/models/heads/coord_cls_heads/rtmcc_head.py。其核心创新是在轻量分类头中引入GAUGated Attention Unit模块通过gau_cfg配置隐藏维度hidden_dims256、注意力维度s128、扩展系数expansion_factor2等超参以极低的额外计算量建模关键点坐标间的相关性。头部最终通过final_layer_kernel_size7的卷积输出每个关键点在 X/Y 两个维度上的 SimCC 分布配合KLDiscretLoss以 KL 散度监督离散化的坐标分布其中beta10.用于软化标签、label_softmaxTrue使预测与目标以概率分布形式对齐。测试阶段开启flip_testTrue即水平翻转测试 结果融合以进一步提升精度。SimCCLabel 编解码器RTMPose 使用的坐标编解码器是SimCCLabel源码位于 mmpose/codecs/simcc_label.py其核心思想是不再像传统方法那样回归一张高斯热图而是将每个关键点的 X、Y 坐标分别离散化为一维分布从而在保持亚像素定位精度的同时大幅降低输出通道与计算开销。以 COCO 配置为例codec dict( typeSimCCLabel, input_size(192, 256), sigma(4.9, 5.66), simcc_split_ratio2.0, normalizeFalse, use_darkFalse)input_size(192, 256)训练输入尺寸宽 192、高 256sigma(4.9, 5.66)生成软标签时 X/Y 方向使用的高斯标准差需与输入尺寸相匹配值越大标签越平滑simcc_split_ratio2.0SimCC 分辨率相对输入特征图的放大倍数该值直接决定一维分布的输出长度结合in_featuremap_sizetuple([s // 32 for s in codec[input_size]])可知骨干下采样 32 倍输出坐标分辨率约为 12×16 的 2 倍normalizeFalse与use_darkFalse分别表示不额外归一化标签、不启用 DARK 亚像素细化属于针对实时场景的轻量化选择。模型系列RTMPose-t/s/m/l 规格对比RTMPose 提供 tiny、s、m、l 四种规格均由 CSPNeXt 骨干 RTMCCHead 构成差异集中体现在骨干的深度与宽度因子以及头部输入通道数上详见 coco 目录 下的四个配置文件模型配置文件名deepen_factorwiden_factorhead in_channelsEMARTMPose-trtmpose-t_8xb256-420e_coco-256x192.py0.1670.375384关闭配置注释说明 tiny 模型训练时关闭 EMARTMPose-srtmpose-s_8xb256-420e_coco-256x192.py0.330.50512开启RTMPose-mrtmpose-m_8xb256-420e_coco-256x192.py0.670.75768开启RTMPose-lrtmpose-l_8xb256-420e_coco-256x192.py1.001.001024开启可以看到规格从 t 到 l骨干层数与通道数依次放大精度随之提升、计算量同步增加便于开发者按算力与精度需求选型。需要特别注意的是tiny 模型在训练时刻意关闭了 EMA配置中以注释形式说明 Turn off EMA while training the tiny model其余规格均开启EMAHook。在 COCO 数据集上的实验结果模型库文档rtmpose_coco.md报告了 COCO val2017 上的结果评测时使用在 COCO val2017 上人体 AP 为 56.4 的检测器提供人体框。以下为汇总256×192 输入尺寸模型APAP^50AP^75ARAR^50RTMPose-t0.6820.8830.7590.7360.920RTMPose-s0.7160.8920.7890.7680.929RTMPose-m0.7460.8990.8170.7950.935RTMPose-l0.7580.9060.8260.8060.942RTMPose-t-aic-coco0.6850.8800.7610.7380.918RTMPose-s-aic-coco0.7220.8920.7940.7720.929RTMPose-m-aic-coco0.7580.9030.8260.8060.940RTMPose-l-aic-coco0.7650.9060.8350.8130.942384×288 输入尺寸AICCOCO 预训练模型APAP^50AP^75ARAR^50RTMPose-m-aic-coco0.7700.9080.8330.8160.943RTMPose-l-aic-coco0.7730.9070.8350.8190.942对比可见同样输入尺寸下使用 AICCOCO 混合预训练aic-coco 系列的模型普遍比单 COCO 训练高约 0.5~1.0 个 AP而把输入分辨率从 256×192 提升到 384×288 后RTMPose-m 可再提升约 1.2 个 AP说明在算力允许时应优先提高输入分辨率。训练配置深度解析以 COCO 为例RTMPose 的训练配置rtmpose-m_8xb256-420e_coco-256x192.py集中体现了其长训练 强正则 两阶段的训练哲学本节逐块拆解。训练总览420 轮、AdamW 与参数分组# runtime max_epochs 420 stage2_num_epochs 30 base_lr 4e-3 train_cfg dict(max_epochsmax_epochs, val_interval10) randomness dict(seed21) optim_wrapper dict( typeOptimWrapper, optimizerdict(typeAdamW, lrbase_lr, weight_decay0.05), paramwise_cfgdict( norm_decay_mult0, bias_decay_mult0, bypass_duplicateTrue))总共训练420 轮每 10 轮验证一次随机种子固定为 21优化器为AdamW初始学习率base_lr4e-3权重衰减 0.05tiny/s 配置中 weight_decay 为 0paramwise_cfg对归一化层与偏置项关闭权重衰减norm_decay_mult0, bias_decay_mult0这是稳定长训练的标准做法auto_scale_lr dict(base_batch_size1024)表示学习率按总批大小 1024 为基准自动缩放若实际批大小与 1024 不同MMPose 会线性调整学习率保证不同 GPU 数下的训练一致性。学习率调度1000 步线性预热 后半程余弦退火param_scheduler [ dict( typeLinearLR, start_factor1.0e-5, by_epochFalse, begin0, end1000), dict( # use cosine lr from 210 to 420 epoch typeCosineAnnealingLR, eta_minbase_lr * 0.05, beginmax_epochs // 2, endmax_epochs, T_maxmax_epochs // 2, by_epochTrue, convert_to_iter_basedTrue), ]调度分为两段前 1000 次迭代从1.0e-5线性预热至base_lrby_epochFalse表示按迭代计数随后维持恒定学习率到第 210 轮max_epochs // 2再从 210 轮开始以余弦退火将学习率降至base_lr * 0.05即eta_min。这种先线性预热 → 保持高位 → 后半程余弦衰减的组合是 RTMPose 在 420 轮长训练下稳定收敛的关键。数据增强 Pipeline两阶段强度差异训练阶段一的 pipelinetrain_pipelinetrain_pipeline [ dict(typeLoadImage, backend_argsbackend_args), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomHalfBody), dict( typeRandomBBoxTransform, scale_factor[0.6, 1.4], rotate_factor80), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typemmdet.YOLOXHSVRandomAug), dict( typeAlbumentation, transforms[ dict(typeBlur, p0.1), dict(typeMedianBlur, p0.1), dict( typeCoarseDropout, max_holes1, max_height0.4, max_width0.4, min_holes1, min_height0.2, min_width0.2, p1.), ]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ]主要增强手段包括水平随机翻转、RandomHalfBody随机保留半身关键点训练强化遮挡鲁棒性、RandomBBoxTransform尺度扰动 [0.6, 1.4]、旋转扰动 ±80°、TopdownAffine仿射对齐、mmdet.YOLOXHSVRandomAug颜色抖动以及基于 Albumentations 的模糊与随机擦除CoarseDropout。阶段二 pipelinetrain_pipeline_stage2在训练末期最后 30 轮通过PipelineSwitchHook切换增强强度显著降低尺度扰动收窄为 [0.75, 1.25]、旋转扰动降为 ±60°、CoarseDropout概率由 1.0 降为 0.5从而让模型在更接近真实分布的干净数据上微调进一步打磨精度。EMA 与两阶段切换 Hookdefault_hooks dict( checkpointdict(save_bestcoco/AP, rulegreater, max_keep_ckpts1)) custom_hooks [ dict( typeEMAHook, ema_typeExpMomentumEMA, momentum0.0002, update_buffersTrue, priority49), dict( typemmdet.PipelineSwitchHook, switch_epochmax_epochs - stage2_num_epochs, switch_pipelinetrain_pipeline_stage2) ]EMAHook采用指数滑动平均ExpMomentumEMA动量 0.0002对模型参数做平滑推理时使用 EMA 权重以获得更稳定的精度mmdet.PipelineSwitchHook在第max_epochs - 30 390轮自动将数据增强 pipeline 切换为阶段二版本checkpoint 按验证集coco/AP保存最优权重rulegreater且最多保留 1 份节省磁盘。数据加载与评测训练使用batch_size2568 卡 × 32、10 个 worker 并开启persistent_workersTrue验证/测试用 COCO 官方CocoMetricmmpose/evaluation/metrics/coco_metric.py计算 AP/AR。配置中已将检测框文件注释掉bbox_file部分说明模型库报告的数值使用的是 56.4 AP 的外部检测器结果用户若要在自己的检测框上复现可取消注释并填入对应检测结果文件。AIC COCO 混合数据集训练带-aic-coco后缀的模型如 rtmpose-m_8xb256-420e_aic-coco-256x192.py使用了 AICAI Challenger与 COCO 的混合训练策略这是 RTMPose 提升精度的另一关键手段dataset_coco dict( typeRepeatDataset, datasetdict( typedataset_type, data_rootdata_root, data_modedata_mode, ann_filecoco/annotations/person_keypoints_train2017.json, data_prefixdict(imgdetection/coco/train2017/), pipeline[], ), times3) dataset_aic dict( typeAicDataset, ... pipeline[ dict( typeKeypointConverter, num_keypoints17, mapping[(0, 6), (1, 8), (2, 10), (3, 5), (4, 7), (5, 9), (6, 12), (7, 14), (8, 16), (9, 11), (10, 13), (11, 15)]), ], ) train_dataloader dict( ... datasetdict( typeCombinedDataset, metainfodict(from_fileconfigs/_base_/datasets/coco.py), datasets[dataset_coco, dataset_aic], pipelinetrain_pipeline, test_modeFalse, ))AIC 数据集中每个人的关键点只有 14 个需要通过KeypointConverter与 12 组映射关系转换为 COCO 的 17 点格式COCO 数据通过RepeatDataset重复 3 次以平衡两个数据集的样本量再经CombinedDataset合并为一个训练流混合训练使模型在更大规模、更多姿态样本上预训练最终带来约 1 个点的 COCO AP 提升。更多数据集上的结果MPII在 MPII 验证集上RTMPose-m 使用 256×256 输入训练 210 轮配置见 rtmpose-m_8xb64-210e_mpii-256x256.py基础学习率降为 5e-4、批大小降为 64结果以 PCKh 指标报告模型输入尺寸PCKh0.5含翻转PCKh0.1配置与结果文档RTMPose-m256×2560.9070.348rtmpose_mpii.mdCrowdPose在密集人群基准 CrowdPose 上RTMPose-m 以 256×192 输入训练 210 轮配置见 rtmpose-m_8xb64-210e_crowdpose-256x192.py评测使用 YOLOv3 人体检测器模型输入尺寸APAP^50AP^75AP(Easy)AP(Medium)AP(Hard)RTMPose-m256×1920.7060.8410.7650.7990.7190.582其中 AP(Easy/Medium/Hard) 按 CrowdPose 官方标准依据拥挤程度分组评测可见场景越拥挤精度下降越明显而 RTMPose 在 Hard 档仍保有 0.582 的 AP。Human-ArtHuman-Art 是一个覆盖自然与人工绘画、雕塑、卡通等场景的人体中心数据集。模型库rtmpose_humanart.md给出了两类评测使用人体 AP 为 56.2 的检测器Human-Art 验证集模型输入尺寸APARRTMPose-s256×1920.3110.381RTMPose-m256×1920.3550.417RTMPose-l256×1920.3780.442使用 Ground-Truth 边界框Human-Art 验证集模型输入尺寸APARRTMPose-s256×1920.6980.732RTMPose-m256×1920.7280.759RTMPose-l256×1920.7530.783对照两类结果可以看出在 Human-Art 这类跨域场景中检测器质量对最终姿态精度影响极大GT 框相比检测框 AP 提升约 0.37~0.40这也是在应用中需要为检测环节预留精度的原因。此外该文档还对比了仅用 COCO 训练与 Human-ArtCOCO 联合训练在同一 COCO 验证集上的表现联合训练后的 RTMPose-l 在 COCO 上仍可保持约 0.748 的 APGT 框 0.770说明混合训练不会显著损伤原域性能。训练与测试实操本仓库提供了完整的训练/测试工具tools/train.py、tools/test.py 与 tools/dist_train.sh完整用法可参考 训练与测试指南。以 COCO 的 RTMPose-m 为例# 单卡训练 python tools/train.py configs/body_2d_keypoint/rtmpose/coco/rtmpose-m_8xb256-420e_coco-256x192.py # 多卡训练例如 8 卡 bash tools/dist_train.sh configs/body_2d_keypoint/rtmpose/coco/rtmpose-m_8xb256-420e_coco-256x192.py 8 # 使用预训练权重测试 python tools/test.py configs/body_2d_keypoint/rtmpose/coco/rtmpose-m_8xb256-420e_coco-256x192.py \ ${CHECKPOINT_FILE} --work-dir work_dirs/rtmpose-m注意事项训练前需按 数据准备指南 将 COCO 数据放置于data/coco/目录data_root data/coco/与ann_file均以此为基准各模型的权重与训练日志下载地址均记录在对应的结果文档中如 rtmpose_coco.md下载 ckpt 后填入${CHECKPOINT_FILE}即可复现表中指标若实际 GPU 数与配置中的 8 卡批大小不同auto_scale_lr会自动完成学习率缩放无需手工调整。总结RTMPose 通过Top-Down 范式 CSPNeXt 骨干 SimCC 坐标分类 420 轮两阶段训练 EMA/混合数据集的组合拳在精度与速度之间取得了出色的平衡并且 t/s/m/l 四种规格覆盖了从移动端到服务端的全场景部署需求。本文所解析的配置均可在 configs/body_2d_keypoint/rtmpose/ 目录中直接查看与复用你可以据此复现 COCO 75.8 AP、CrowdPose 70.6 AP 等基准结果也可以参考其中的数据增强与调度策略将其迁移到自定义姿态估计任务中。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考