拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MMPose 中的 RTMPose 实时全身姿态估计:COCO-WholeBody 配置、模型库与 RTMW 训练实战

MMPose 中的 RTMPose 实时全身姿态估计COCO-WholeBody 配置、模型库与 RTMW 训练实战【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文基于 MMPose 仓库中 configs/wholebody_2d_keypoint/rtmpose/README.md 及其子目录下的模型配置与说明文档系统讲解 RTMPose 框架在全身whole-body姿态估计任务上的落地方式。你将掌握 COCO-WholeBody 数据集上的 RTMPose-m/l/x 模型选型与精度对照、SimCC 坐标分类编解码原理、RTMCCHead / RTMWHead 等头部结构的源码实现以及基于 rtmpose-m_8xb64-270e_coco-wholebody-256x192.py 与 rtmw-l_8xb1024-270e_cocktail14-256x192.py 等真实配置复现训练、评测与部署的完整方法。RTMPose 是什么面向工业落地的实时多人姿态估计框架近年的 2D 姿态估计研究在公开基准上已取得优秀成绩但工业场景中的实际应用仍普遍受困于模型参数量大、推理延迟高的问题。RTMPose 正是为弥合这一差距而提出的实时多人姿态估计框架它基于 MMPose 实现从五个影响多人姿态估计算法性能的维度进行了系统性经验研究范式Paradigm采用 top-down先检测人框、再单人姿态估计路线配合精确的检测器前置骨干网络Backbone使用来自 RTMDet论文 arXiv2022的 CSPNeXt 系列骨干定位算法Localization Algorithm采用 SimCC 坐标分类方案将关键点坐标回归问题转化为一维坐标分类问题训练策略Training Strategy包含两阶段训练预热 蒸馏/微调、EMA 权重平均、自动学习率缩放等部署推理Deployment Inference面向 CPU / GPU / 移动端深度优化。该 README 报告的核心性能数据以仓库文档为准RTMPose-m 在 COCO 上达到75.8% AP在 Intel i7-11700 CPU 上可达90 FPS、在 NVIDIA GTX 1660 Ti GPU 上可达430 FPSRTMPose-l 在 COCO-WholeBody 上达到67.0% AP且推理130 FPS。全身任务需要在同一帧内同时输出身体、脚、脸、手四个部位的关键点RTMPose 通过统一 133 点标注空间与 SimCC 头部的设计让实时性与全身精度可以兼得。模型库总览COCO-WholeBody、Cocktail14 与 UBody 三大分支configs/wholebody_2d_keypoint/rtmpose/目录下按训练数据来源组织为三个子目录构成完整的全身姿态模型家族子目录模型前缀训练数据特点coco-wholebodyRTMPose-m/l/xCOCO-WholeBody v1.0经典基线RTMCCHead 头部cocktail14RTMW-m/l/x14 个公开数据集混合RTMW 系列CSPNeXtPAFPN 颈部 RTMWHeadubodyRTMPose-t/s/m/l/xCOCO-WholeBody UBody 15 个场景面向非受限真实场景含轻量级 t/s 型号三个分支共用同一套 133 关键点定义COCO-WholeBody 的 17 身体 6 脚 68 脸 42 手关键点通过KeypointConverter将不同数据集的标注统一映射到该空间。COCO-WholeBody v1.0 评测结果依据 rtmpose_coco-wholebody.md以下结果在 COCO-WholeBody v1.0 val 集上测得检测器为在 COCO val2017 上 human AP 达 56.4 的人体检测器ArchInput SizeBody APBody ARFoot APFoot ARFace APFace ARHand APHand ARWhole APWhole ARrtmpose-m256x1920.6730.7500.6150.7520.8130.8710.4750.5890.5820.674rtmpose-l256x1920.6950.7690.6580.7850.8330.8870.5190.6280.6110.700rtmpose-l384x2880.7120.7810.6930.8110.8820.9190.5790.6770.6480.730从表中可以清晰读出两个结论一是输入分辨率是全身精度的第一杠杆——RTMPose-l 从 256x192 提升到 384x288 后 Whole AP 从 0.611 涨到 0.648二是手部关键点是全身任务的精度瓶颈——即便 384x288 输入下 Hand AP 也仅 0.579明显低于 Body / Foot / Face训练时应对手部关键点给予额外关注RTMW 配置中通过 mask 与 mask_weight 实现了这一点详见下文。Cocktail14RTMW 系列的多数据集混合训练rtmw_cocktail14.md 定义了Cocktail14在14 个公开数据集上混合训练得到的模型覆盖身体、脚、脸、手四个子任务的数据源按[configs/_base_/datasets/coco_wholebody.py](https://link.gitcode.com/i/9207ba86684a4009b0d7759062bc15a6)的 133 点元信息统一对齐身体/脚AI Challenger、CrowdPose、MPII、sub-JHMDB、Halpe、PoseTrack18、COCO-WholeBody、UBody、Human-Art脸WFLW、300W、COFW、LaPa手InterHand2.6M。在该评测设定检测器 human AP 56.4下RTMW 各型号表现如下ArchInput SizeBody APFoot APFace APHand APWhole APWhole ARrtmw-m256x1920.6760.6710.7830.4910.5820.673rtmw-l256x1920.7430.7630.8340.5980.6600.746rtmw-x256x1920.7460.7700.8440.6100.6720.752rtmw-l384x2880.7610.7930.8840.6630.7010.780rtmw-x384x2880.7630.7960.8840.6640.7020.781相比单纯 COCO-WholeBody 训练的 RTMPose-lWhole AP 0.611256x192同等输入下 RTMW-l 的 Whole AP 提升到 0.660其中 Foot AP 从 0.658 提升到 0.763、Hand AP 从 0.519 提升到 0.598——这正是多数据集混合训练带来的跨场景泛化收益。UBody真实场景全身姿态估计ubody 分支将 COCO-WholeBody 与 UBody 数据集的15 个真实场景Magic_show、Entertainment、ConductMusic、Online_class、TalkShow、Speech、Fitness、Interview、Olympic、TVShow、Singing、SignLanguage、Movie、LiveVlog、VideoConference联合训练每个 UBody 场景以sample_interval10抽帧采样以平衡数据量。该分支提供 t/s/m/l/x 五个规格其中 RTMPose-t/s 适合边缘设备部署。配置解析以 RTMPose-m 全身模型为例rtmpose-m_8xb64-270e_coco-wholebody-256x192.py 是一份完整可复现的 270 epoch 训练配置其结构清晰分块逐块拆解如下。CodecSimCC 坐标分类编解码器codec dict( typeSimCCLabel, input_size(192, 256), sigma(4.9, 5.66), simcc_split_ratio2.0, normalizeFalse, use_darkFalse)SimCC 的核心思想是把关键点 (x, y) 坐标分别编码为两条一维高斯分布序列X 轴、Y 轴各一条将回归问题转化为一维坐标分类问题。其源码位于 mmpose/codecs/simcc_label.py关键参数含义sigma一维高斯核的标准差控制标签的平滑程度。256x192 输入下 X 轴取 4.9、Y 轴取 5.66二者不同是因为输入宽高比不同192 vs 256384x288 配置中则取(6., 6.93)成比例放大simcc_split_ratio标签尺寸与输入尺寸之比为 2.0 时 X 标签长度为w * 2.0 384、Y 标签长度为h * 2.0 512即输出向量被上采样两倍以获得亚像素精度normalizeFalse不归一化标签use_darkFalse关闭 DARK 亚像素细化后处理decode_visibilityTrue仅 384x288 的 RTMW-x 配置启用在解码坐标的同时解码关键点可见性这对全身任务中大量被遮挡的关键点很有帮助。Backbone来自 mmdet 的 CSPNeXtbackbonedict( _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., checkpointhttps://download.openmmlab.com/mmpose/v1/projects/ rtmposev1/cspnext-m_udp-aic-coco_210e-256x192-f2f7d6f6_20230130.pth))通过_scope_mmdet直接复用 mmdetection 注册的CSPNeXt骨干无需重复定义deepen_factor0.67/widen_factor0.75对应 m 规格l 规格为1.0/1.0x 规格为1.33/1.25见 rtmw-x 配置使用 AICCOCO 上预训练的cspnext-m_udp权重作为初始化prefixbackbone.指定加载时的键名前缀。HeadRTMCCHead KLDiscretLossheaddict( typeRTMCCHead, in_channels768, out_channels133, input_sizecodec[input_size], in_featuremap_sizetuple([s // 32 for s in codec[input_size]]), # (6, 8) 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)RTMCCHead的实现位于 mmpose/models/heads/coord_cls_heads/rtmcc_head.pyin_channels768对应 CSPNeXt-m 的特征通道数out_channels133为全身关键点数量in_featuremap_size(6, 8)输入 256x192经骨干 32 倍下采样得到 8x6 特征图gau_cfg配置Gated Attention UnitGAU模块这是 RTMPose 引入的轻量注意力机制s128控制注意力头维度、expansion_factor2控制 FFN 扩展倍数损失函数为KLDiscretLoss对 SimCC 的一维分布输出施加KL 散度 标签软化label_softmaxTruebeta10.控制软化温度。训练策略两阶段训练、EMA 与自动学习率缩放max_epochs 270 stage2_num_epochs 30 base_lr 4e-3 optim_wrapper dict( typeOptimWrapper, optimizerdict(typeAdamW, lrbase_lr, weight_decay0.05), paramwise_cfgdict(norm_decay_mult0, bias_decay_mult0, bypass_duplicateTrue)) param_scheduler [ dict(typeLinearLR, start_factor1.0e-5, by_epochFalse, begin0, end1000), dict(typeCosineAnnealingLR, eta_minbase_lr * 0.05, beginmax_epochs // 2, endmax_epochs, T_maxmax_epochs // 2, by_epochTrue, convert_to_iter_basedTrue), ] auto_scale_lr dict(base_batch_size512)该训练配方中有三个被实验证明有效的机制两阶段数据管线前 240 epoch 使用train_pipeline含YOLOXHSVRandomAug与较强的CoarseDropoutp1.0最后 30 epoch 通过mmdet.PipelineSwitchHook切换到train_pipeline_stage2——第二阶段收窄 bbox 增广范围scale_factor[0.75, 1.25]、rotate_factor60、弱化遮挡增广CoarseDropout p 降为 0.5模拟更贴近推理时的分布EMA 权重平均EMAHook使用ExpMomentumEMAmomentum0.0002, priority49在训练中维护指数滑动平均权重提升最终精度的稳定性自动学习率缩放auto_scale_lr dict(base_batch_size512)表示当实际 batch size 偏离 512 时自动按比例调整学习率方便在小显存环境复现。评测闭环CocoWholeBodyMetric 与检测框文件val_dataloader dict( ... datasetdict( typedataset_type, ann_fileannotations/coco_wholebody_val_v1.0.json, data_prefixdict(imgval2017/), test_modeTrue, bbox_filedata/coco/person_detection_results/ COCO_val2017_detections_AP_H_56_person.json, ...)) val_evaluator dict( typeCocoWholeBodyMetric, ann_filedata_root annotations/coco_wholebody_val_v1.0.json)全身评测使用CocoWholeBodyMetric实现见 mmpose/evaluation/metrics/coco_wholebody_metric.py它会分别输出 Body / Foot / Face / Hand 四组 AP、AR 以及整体 Whole AP、Whole AR与本文模型表中的指标一一对应。注意 top-down 评测需要一个固定的检测框文件COCO_val2017_detections_AP_H_56_person.json保证所有模型在同一检测器输入下可比。Checkpoint 保存规则为save_bestcoco-wholebody/AP, rulegreater。RTMW 的进阶设计PAFPN 颈部与部位感知损失与 RTMPose 单分支结构不同RTMW 系列见 rtmw_cocktail14.md引入了两个关键升级源码分别对应 rtmw_head.py 与颈部模块neckdict( typeCSPNeXtPAFPN, in_channels[256, 512, 1024], # l 规格x 规格为 [320, 640, 1280] out_channelsNone, out_indices(1, 2), # 取 P5 层的两路输出 num_csp_blocks2, expand_ratio0.5, norm_cfgdict(typeSyncBN), act_cfgdict(typeSiLU, inplaceTrue)),CSPNeXtPAFPN 颈部将骨干 P5 层的多尺度特征l 规格 in_channels 为[256, 512, 1024]融合后送入RTMWHeadin_channels1024。颈部来自 RTMDet 的检测头设计通过跨尺度特征融合显著改善小目标手部、脚部的定位RTMWHead 部位感知损失损失配置中带有关键的 mask 机制lossdict( typeKLDiscretLoss, use_target_weightTrue, beta1., label_softmaxTrue, label_beta10., masklist(range(23, 91)), # 只覆盖脸部关键点23~90 为 68 个脸点 mask_weight0.5, # 脸点损失权重减半 )该配置对 133 个关键点中索引 23~90 的脸部关键点施加 0.5 的损失权重缓解多数据集混合时不同数据源脸部标注质量不一致带来的干扰。RTMWHead 类注释rtmw_head.py明确其为 Top-down head introduced in RTMPose-Wholebody (2023)接收simcc_split_ratio、gau_cfg等与 RTMCCHead 同源的设计参数。Cocktail14 的数据组织CombinedDataset 与 KeypointConverterRTMW 训练的关键在于数据组织见 rtmw-l_8xb1024-270e_cocktail14-256x192.py按部位分组dataset_wbCOCO-WholeBody Halpe UBody、dataset_bodyAIC CrowdPose MPII sub-JHMDB PoseTrack18 Human-Art、dataset_faceWFLW 300W COFW LaPa、dataset_handInterHand2.6M再通过外层CombinedDataset合并为train_datasets标注空间统一每个子数据集通过KeypointConverter实现见 mmpose/datasets/transforms/converting.py将自身标注映射到 133 点空间。例如 WFLW 的 98 个脸点通过wflw_coco133列表映射到 COCO-WholeBody 的脸部索引23~90InterHand2.6M 的左右手点通过interhand_left/right映射到 91~132不同部位不同增广脸部数据管线使用GetBBoxCenterScale(padding1.25)RandomBBoxTransform(scale_factor[1.5, 2.0], rotate_factor0)的脸部专属增广手部同理避免对脸/手使用全身级旋转增广外推采样UBody 与 InterHand2.6M 使用sample_interval10抽帧避免单一场景数据量过大导致失衡。整个 RTMW 训练使用train_batch_size1024l 规格、base_lr5e-4与clip_graddict(max_norm35, norm_type2)梯度裁剪auto_scale_lr dict(base_batch_size8192)标注了基准 batch size。复现与使用训练、评测与推理训练 RTMPose-m 全身模型环境准备完成后参考 docs/en/installation.md下载 COCO-WholeBody 数据并按 COCO 目录约定放置于data/coco/训练集annotations/coco_wholebody_train_v1.0.json、验证集annotations/coco_wholebody_val_v1.0.json图像来自 train2017/val2017然后执行python tools/train.py configs/wholebody_2d_keypoint/rtmpose/coco-wholebody/rtmpose-m_8xb64-270e_coco-wholebody-256x192.py单卡显存不足时auto_scale_lr会按实际 batch size 自动调整学习率多卡训练可参考仓库根目录的 tools/dist_train.sh 与 tools/slurm_train.sh。UBody 分支的 RTMPose-t/s 轻量模型训练入口在 ubody 目录 下。评测python tools/test.py config checkpoint.pth评测前请确认验证集检测框文件data/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json已就位或按 tools/misc/generate_bbox_file.py 自行生成评测输出将包含 Body / Foot / Face / Hand / Whole 各维度的 AP 与 AR。推理与部署推荐使用 demo/inferencer_demo.py 快速体验python demo/inferencer_demo.py image_or_video \ --pose2d rtmpose-m_8xb64-270e_coco-wholebody-256x192 \ --vis-out-dir vis_results其中--pose2d会自动解析模型库中注册的全身模型。端到端人体检测 姿态估计组合方案可参考 demo/topdown_demo_with_mmdet.py检测器配置位于 demo/mmdetection_cfg如rtmdet_m_640-8xb32_coco-person.py。RTMPose 系列针对部署深度优化ONNX / TensorRT 导出与移动端推理细节可查阅 projects/rtmpose 与 docs/en/user_guides/how_to_deploy.md。选型建议与小结综合上述模型库与配置证据全身姿态估计的选型思路可以概括为追求实时性 端侧部署选择 ubody 分支的 RTMPose-t/s256x192 输入下保持轻量精度优先服务端选择 RTMW-x 384x288Whole AP 0.702若需平衡速度RTMW-l 256x192Whole AP 0.660是性价比之选快速上手验证使用 RTMPose-m/l COCO-WholeBody 模型配置简洁、数据获取直接。RTMPose 全身模型家族的工程价值在于用SimCC 坐标分类替代热图回归、用GAU 轻量注意力与CSPNeXt 骨干控制计算量、用两阶段训练与 EMA稳定收敛、用多数据集混合 部位感知损失补齐手部与脚部短板最终在 COCO-WholeBody 这类 133 点全身任务上同时交出高精度与高吞吐。无论是复现论文指标、接入业务系统还是作为二次开发的起点configs/wholebody_2d_keypoint/rtmpose/下的三套配置coco-wholebody / cocktail14 / ubody都提供了开箱即用的完整答案。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门