恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

MMPose CPM 卷积姿态机:Sub-JHMDB 人体 2D 关键点模型配置、训练结果与源码解析

  • 首页
  • 资讯中心
  • /
  • MMPose CPM 卷积姿态机:Sub-JHMDB 人体 2D 关键点模型配置、训练结果与源码解析

相关资讯

Principes des bases de données dans easy-vibe : Index, Transactions et Optimisation SQL 2026/9/16 15:12:58
LinkSwift:九大网盘直链解析的油猴脚本工具 2026/9/16 15:12:58
CloudStream实操教程:5分钟搭好你的专属流媒体中心 2026/9/16 15:12:58

最新资讯

AI如何解决毕业论文写作痛点:书匠策AI深度测评
5分钟部署免费AI简历编辑器:Magic Resume完整上手实录
claude-code-action 能力边界指南:Claude 在 GitHub 自动化中能做什么、不能做什么
Spring Boot库存管理系统实战:数据模型、事务与乐观锁并发控制
MSW接口Mock实战:规则改写与断点拦截提升前后端联调效率
数据可视化核心要素与实战技巧解析

今日推荐

IoT-For-Beginners 智能语音计时器:Wio Terminal 基于 DMAC 与 Flash 的音频采集实战
基于MATLAB的CRI显色指数计算:从SPD光谱到Ra的完整流程
JSP+Servlet+MySQL博客系统源码部署与优化全攻略

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

MMPose CPM 卷积姿态机:Sub-JHMDB 人体 2D 关键点模型配置、训练结果与源码解析

发布时间:2026/9/16 15:12:58
MMPose CPM 卷积姿态机:Sub-JHMDB 人体 2D 关键点模型配置、训练结果与源码解析 MMPose CPM 卷积姿态机Sub-JHMDB 人体 2D 关键点模型配置、训练结果与源码解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文围绕 MMPose 模型库中的 CPMConvolutional Pose Machines, CVPR 2016模型页展开完整讲解该模型在 Sub-JHMDB 数据集上的训练配置、数据流、评测方式与公开基准结果并结合 CPM 骨干网络、CPMHead 与 JhmdbDataset 的源码实现帮助你不仅会复现训练命令还能读懂每个配置项背后的底层逻辑。一、算法与数据集背景CPM 是早期将 CNN 用于人体姿态估计的代表性工作其核心思想是用多个级联的回归阶段stage逐步精化关键点热图并在每个阶段都监督输出从而加速收敛并提升定位精度。对应的模型页为 cpm_jhmdb.md其引用的算法论文为inproceedings{wei2016convolutional, title{Convolutional pose machines}, author{Wei, Shih-En and Ramakrishna, Varun and Kanade, Takeo and Sheikh, Yaser}, booktitle{Proceedings of the IEEE conference on Computer Vision and Pattern Recognition}, pages{4724--4732}, year{2016} }训练与评测所使用的 JHMDB 数据集ICCV 2013是一个源自 YouTube 的动作识别视频数据集MMPose 采用其子集Sub-JHMDB进行人体姿态评测数据集引用如下inproceedings{Jhuang:ICCV:2013, title {Towards understanding action recognition}, author {H. Jhuang and J. Gall and S. Zuffi and C. Schmid and M. J. Black}, booktitle {International Conf. on Computer Vision (ICCV)}, month Dec, pages {3192-3199}, year {2013} }模型页明确给出了两条评测前提复现结果时必须保持一致模型仅在 MPII 数据集上做过预训练pre-trained on MPII dataset only测试时不使用多尺度 / 旋转类的测试时增强NO test-time augmentation: multi-scale / rotation testing。二、Sub-JHMDB 的 15 关键点定义Sub-JHMDB 使用 15 个人体关键点定义在数据集元信息文件 jhmdb.py 中与 COCO 的一个显著区别是它用neck和belly替代了髋部中轴点id名称id名称0neck8left_elbow1belly9right_knee2head10left_knee3right_shoulder11right_wrist4left_shoulder12left_wrist5right_hip13right_ankle6left_hip14left_ankle7right_elbow该文件同时定义了 14 条骨架连线skeleton_info如 right_ankle→right_knee→right_hip→belly 等以及两个影响评测与损失的关键数组joint_weights [1., 1., 1., 1., 1., 1., 1., 1.2, 1.2, 1.2, 1.2, 1.5, 1.5, 1.5, 1.5]肘部、膝部权重 1.2腕部、踝部权重 1.5。它会被写入KeypointMSELoss配置中use_target_weightTrue使网络对末端关节的定位错误施加更大惩罚sigmas注明 Adapted from COCO dataset用于 PCK 等归一化误差度量。数据集加载由 JhmdbDataset 完成继承自BaseCocoStyleDataset元信息通过METAINFO dict(from_fileconfigs/_base_/datasets/jhmdb.py)引入。其中有三处针对 JHMDB 原始标注格式的特殊处理值得注意1-based 转 0-basedJHMDB 原始标注采用 MATLAB 格式索引从 1 开始parse_data_info中先对 bbox 和 keypoints 做x - 1; y - 1再裁剪到图像范围内见 jhmdb_dataset.py#L100-L118bbox 从 xywh 转 xyxyCOCO 风格的bbox是x, y, w, h会被转换成x1, y1, x2, y2并clip到图像边界内area 估算area clip((x2-x1)*(y2-y1)*0.53, a_min1.0)即用 0.53 的系数从框面积估算人体面积保证至少为 1.0。三、CPM 训练配置逐项解析以 Sub1 分片的完整训练配置 td-hm_cpm_8xb32-40e_jhmdb-sub1-368x368.py 为例Sub2、Sub3 仅有对应 sub2、sub3 配置标注文件换成Sub2_*/Sub3_*配置名遵循 MMPose 的命名规范8xb32表示 8 卡 × 每卡 32 张 256 总 batch size40e表示 40 个 epoch。3.1 运行时、优化器与学习率策略# runtime train_cfg dict(max_epochs40, val_interval1) # optimizer optim_wrapper dict(optimizerdict(typeAdam, lr5e-4)) # learning policy param_scheduler [ dict(typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # 前 500 个 iteration 线性 warm-up dict(typeMultiStepLR, begin0, end40, milestones[20, 30], gamma0.1, by_epochTrue) ] # automatically scaling LR based on the actual training batch size auto_scale_lr dict(base_batch_size256) # hooks default_hooks dict( checkpointdict(save_bestPCK, rulegreater, interval1))几个要点使用 Adam初始学习率 5e-4前 500 次迭代从0.001倍线性升到完整学习率在第 20、30 个 epoch 处学习率乘以 0.1auto_scale_lr以 256 为基准 batch size 自动按比例缩放学习率实际卡数变化时训练更稳健checkpoint 钩子以PCK指标为最佳判据rulegreater越大越好每个 epoch 验证后保存最佳权重——这也解释了模型页结果中 ckpt 列指向的权重文件。3.2 模型与热图编解码# codec settings codec dict( typeMSRAHeatmap, input_size(368, 368), heatmap_size(46, 46), sigma2) # model settings model dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( typeCPM, in_channels3, out_channels15, # 15 个关键点 feat_channels128, num_stages6), headdict( typeCPMHead, in_channels15, out_channels15, num_stages6, deconv_out_channelsNone, final_layerNone, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue, ))MSRAHeatmapcodec输入 368×368 的图像 patch输出 46×46 的热图下采样 8 倍高斯核sigma2图像预处理采用 ImageNet 的 mean/std并做 BGR→RGB 转换CPMbackbone 的out_channels15对应 15 个关键点热图通道num_stages6表示 6 个级联回归阶段CPMHead中deconv_out_channelsNone且final_layerNone由于 CPM 骨干本身已在 1/8 分辨率下直接输出热图通道数head 不需要反卷积上采样源码中这两处会被构建成nn.Identity()见 cpm_head.py#L108-L125test_cfg中flip_testTrue, flip_modeheatmap, shift_heatmapTrue表示推理时启用水平翻转热图平均正/反两次前向得到最后一阶段热图翻转热图按flip_indices复原并做 1 像素 shift 校正后取平均见 cpm_head.py#L228-L239。这与模型页不使用 multi-scale / rotation 测试时增强的说明并不矛盾——这里只做了水平翻转而没做多尺度与旋转。3.3 数据流水线与数据加载dataset_type JhmdbDataset data_mode topdown data_root data/jhmdb/ train_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomBBoxTransform, rotate_factor60, scale_factor(0.75, 1.25)), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ] val_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typePackPoseInputs) ]这是典型的 topdown自上而下流程给定人体 bbox先做中心缩放变换训练时随机水平翻转、随机旋转 ±60°、随机缩放 0.75~1.25 倍再仿射裁剪出 368×368 的 patch最后用 codec 生成热图监督目标。验证流水线没有增强步骤。数据加载器要求本地目录结构为data/jhmdb/其中ann_file分别为annotations/Sub1_train.json/annotations/Sub1_test.jsonSub2、Sub3 类推图像前缀为空data_prefixdict(img)即图片相对路径直接写在标注中。评测器定义为val_evaluator [ dict(typeJhmdbPCKAccuracy, thr0.2, norm_item[bbox, torso]), ] test_evaluator val_evaluator即 PCK 阈值为 0.2并同时按两种归一化方式评测bbox以人体框尺寸归一化对应论文中的 PCK和torso以躯干尺寸归一化对应 tPCK。JhmdbPCKAccuracy 继承自PCKAccuracycompute_metrics会对 Head/Sho/Elb/Wri/Hip/Knee/Ank 逐关键点输出精度并给出均值这与模型页两张结果表的列完全一致。3.4 复现训练与评测命令仓库提供标准入口 tools/train.py 与 tools/test.py可直接使用仓库内配置复现# 训练以 Sub1 为例8 卡示例卡数不同会自动按 auto_scale_lr 缩放学习率 python tools/train.py \ configs/body_2d_keypoint/topdown_heatmap/jhmdb/td-hm_cpm_8xb32-40e_jhmdb-sub1-368x368.py \ --work-dir work_dirs/cpm_jhmdb_sub1 # 测试 python tools/test.py \ configs/body_2d_keypoint/topdown_heatmap/jhmdb/td-hm_cpm_8xb32-40e_jhmdb-sub1-368x368.py \ work_dirs/cpm_jhmdb_sub1/epoch_40.pth \ --out work_dirs/cpm_jhmdb_sub1/pred.json四、CPM 网络源码结构CPM backbone 在源码中由四部分构成见 cpm.py#L96-L183stem第一阶段特征提取3 次「9×9 卷积128 通道 BN ReLU 3×3 MaxPool(stride2)」将输入分辨率压到 1/8随后接5×5 卷积(32ch) → 9×9 卷积(512ch) → 1×1 卷积(512ch) → 1×1 卷积(out_channels)直接输出第一个阶段的热图stage1_outmiddle中部分支3 次「9×9 卷积(128ch) 下采样」提取 1/8 分辨率的中间特征middle_out供后续每一级拼接使用cpm_stages级联回归块num_stages - 1 5个CpmBlock每个块是 3 层 11×11 大核卷积128 通道out_convs各阶段输出头5 个「1×1 卷积(128ch) → 1×1 卷积(out_channels)」。前向逻辑cpm.py#L165-L183清晰体现了级联细化stage1_out self.stem(x) # 第 1 阶段热图 middle_out self.middle(x) out_feats [stage1_out] for ind in range(self.num_stages - 1): # 上一阶段热图 与 中间特征降维到 32 通道拼接 inp_feat torch.cat([out_feats[-1], self.middle_convind], 1) cpm_feat self.cpm_stagesind out_feat self.out_convsind out_feats.append(out_feat) # 第 2~6 阶段热图即每个后续阶段的输入都是上一阶段热图 固定的 middle 特征的通道拼接这正是 CPM 论文中回归残差逐步修正的实现方式。以 docstring 中的示例验证输入(1, 3, 368, 368)6 个阶段各输出(1, 17, 46, 46)JHMDB 配置下通道数为 15。CPMHead 侧的关键行为训练损失loss()对 6 个阶段的热图各自计算KeypointMSELoss带keypoint_weights即上文 joint_weights 加权的监督并把各阶段损失累加到同一个loss_kptcpm_head.py#L279-L296同时用最后阶段热图计算 PCK 作为训练日志中的acc_pose指标供 checkpoint 钩子选优。推理解码predict()默认取最后一个阶段的热图经decoderMSRAHeatmap解码出 15 个关键点的坐标与置信度开启flip_test时则取正/翻转两次的前向结果做热图级平均。五、Sub-JHMDB 基准结果模型页原表以下两张表完整来自模型页 cpm_jhmdb.md权重与训练日志已在 MMPose 模型库登记于 cpm_jhmdb.yml 与仓库根目录的 model-index.yml如cpm_jhmdb_sub1_368x368-2d2585c9_20201122.pth等可按该登记信息下载。评测前提仅在 MPII 上预训练测试时无多尺度/旋转增强。按 Person Sizebbox归一化的 PCKSplitArchInput SizeHeadShoElbWriHipKneeAnkMeanSub1cpm368x36896.191.981.078.996.690.887.389.5Sub2cpm368x36898.193.677.170.994.089.184.787.4Sub3cpm368x36897.994.987.384.098.694.486.292.4Averagecpm368x36897.493.581.577.996.491.486.189.8按 Torso Sizetorso归一化的 tPCKSplitArchInput SizeHeadShoElbWriHipKneeAnkMeanSub1cpm368x36889.063.054.054.968.263.161.266.0Sub2cpm368x36890.357.946.844.360.858.262.461.1Sub3cpm368x36891.072.659.954.073.268.565.870.3Averagecpm368x36890.164.553.651.167.463.363.165.7结果解读三个分片的总体水平相近bbox 归一化均值 87.4~92.4其中 Sub3 最优92.4无论哪种归一化肘部与腕部都是最弱关键点末端关节离躯干远、易被遮挡这也与joint_weights中对肘/腕/膝/踝加大损失权重的设计相互呼应换成 torso 归一化后所有关键点精度明显下降均值从 ~89.8 降至 ~65.7因为躯干尺度通常小于整框尺度归一化后的容差更严格这正体现了两种 PCK 口径的差异。同目录下还有一组 ResNet50 热图方案的结果resnet_jhmdb.md输入 256×256可与 CPM 方案对照阅读两者共用同一套JhmdbPCKAccuracy评测口径便于公平比较不同骨干在 Sub-JHMDB 上的表现。六、小结MMPose 中的 Sub-JHMDB CPM 方案是一个算法页—配置文件—源码—指标完整闭环的典型案例模型页给出可核对的基准数字训练配置完整声明了 368×368 输入、6 阶段热图、AdamMultiStepLR 与 PCK 选优等全部超参数据集元信息定义 15 关键点与关节权重而 CPM 骨干、CPMHead 与 JhmdbDataset 则支撑起级联回归训练、翻转热图 TTA 与 MATLAB 格式标注解析等底层细节。掌握这套配置与源码后你可以将其作为模板快速替换骨干、codec 或评测器迁移到其他 topdown 数据集上。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号