ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MMPose 项目生态详解:从文档清单到基于 MMPose 构建你自己的关键点估计项目

2026/9/17 20:53:22 拓冰建站 浏览量
MMPose 项目生态详解:从文档清单到基于 MMPose 构建你自己的关键点估计项目 MMPose 项目生态详解从文档清单到基于 MMPose 构建你自己的关键点估计项目【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本篇围绕 MMPose 官方文档 基于 MMPose 的项目列表 展开系统梳理围绕 MMPose 构建的两大类项目部署/科研扩展型项目与论文开源项目并结合仓库内的projects/目录、示例工程与常见问题解答讲清楚“如何在 MMPose 之上扩展一个新模型”的完整路径从注册模块、编写自定义 Head/Loss、继承基线配置到单卡/多卡/Slurm 训练测试命令与项目里程碑验收标准。一、MMPose 项目生态的定位官方文档 docs/zh_cn/notes/projects.md 开宗明义地指出有很多项目构建在 MMPose 之上官方将其中一部分列出来作为“如何为自己的项目扩展 MMPose”的示例。文档同时说明该页面可能尚未完善欢迎社区提交 PR 更新。文档将生态项目划分为两个层次扩展型项目Projects as an extension一些项目将 MMPose 的边界延伸到了部署或其他研究领域展示了 MMPose 所能做到的更多可能性论文配套项目Projects of papers随论文发布的项目其中一部分发表于顶级会议CVPR、ICCV、ECCV其余同样具有较高影响力。官方将其列出作为社区开发、对比新姿态估计算法的参考。已被 MMPose 支持并维护的方法不在列表中——这一前提很重要如果你发现某个主流方法在列表中“找不到”大概率是因为它已经进入了 MMPose 核心包。二、扩展型项目把 MMPose 带向新场景文档列出了两类典型的边界扩展Anime Face Detector一个二次元动漫人脸关键点检测工具箱。姿态/人脸关键点估计通常基于真人图像训练而动漫渲染风格与真实人脸分布差异极大这类项目验证了 MMPose 的 TopDown 流程检测器框定人脸区域 关键点回归/热力图头在风格化数据上迁移扩展的可行性PosePipeline面向临床研究的开源人体姿态估计流水线human pose estimation pipeline for clinical research。姿态估计在临床、康复、运动医学等方向的落地往往需要围绕 MMPose 的推理接口组织数据采集、标注、评估等环节属于典型的“以 MMPose 为骨干、向外围业务流程扩展”的工程形态。从文档结构看这类项目的共同点是MMPose 提供模型与推理骨架扩展项目负责领域数据、业务流程与部署。这也是官方文档选择它们的原因——“它们揭示了 MMPose 的潜力边界”。三、论文配套项目作为算法对比的参照系文档列出的论文项目均已被 MMPose 核心包之外维护故收录于此如下覆盖顶会 ICLR/ECCV/NeurIPS/IJCAI项目会议方法要点源自论文题目Pose for EverythingECCV 2022面向类别无关Category-Agnostic的姿态估计即不依赖预定义关键点类别也能估计任意对象姿态UniFormerICLR 2022统一 Transformer用于高效的空间时序spatiotemporal表示学习是 2D/3D 姿态与动作识别的通用骨干PoseurECCV 2022基于 Transformer 的人体姿态直接回归direct pose regression跳过热力图中间表示ViTAEv2NeurIPS 2022通过探索归纳偏置inductive bias进阶视觉 TransformerDite-HRNetIJCAI-ECAI 2021动态轻量化高分辨率网络面向人体姿态估计的轻量骨干设计这些项目对社区的价值在于当你基于 MMPose 复现或改进某篇论文时可以把它们当作“第三方实现参照”而 MMPose 已内置维护的方法则直接通过核心包使用无需二次实现。四、仓库内落点projects/目录是什么文档中“如何扩展 MMPose”的实操答案落在仓库的 projects/README.md。该目录是社区向 MMPose 贡献关键点检测技术的专属位置其设计动机在 projects/faq.md 中有权威解释为什么单独设projects/FAQ Q1把新模型、新功能塞进 OpenMMLab 算法库核心包对代码质量要求严苛这可能拖慢 SOTA 模型的快速迭代、劝退贡献者。因此projects/存放实验性特性、框架与模型只需满足最低代码质量要求即可作为独立库使用前提是用户 从源码安装 MMPose。项目 PR 如何合并FAQ Q3一个项目的首个 PR 必须满足第一个里程碑的全部条目后续 PR 可以是小修小补无需一次性达成某个里程碑只有达成最后一个里程碑项目才有资格进入核心包。为什么项目里的训练/测试命令与核心模型不同FAQ Q4projects 与核心包独立组织其模块不能被tools/train.py、tools/test.py直接 import因此每个项目要么按示例工程建议使用mim训练/测试要么自带train.py/test.py。如何用调试器调试项目FAQ Q5若在核心包外开发项目 X模块位于projects/X/modules只需在配置中加入custom_imports dict(importsprojects.X.modules)即可从算法库根目录用常规入口如tools/train.py进行断点调试发布前记得移除该配置。4.1 示例工程 example_project最小可扩展骨架仓库提供了完整的最小示例 projects/example_project/它实现了一个 TopDown 姿态估计器其自定义 Head 与 Loss 均“无缝继承”自 MMPose 现有模块。模块注册方式——自定义 Head 直接继承HeatmapHead并用MODELS.register_module()注册见 example_head.pyfrom mmpose.models import HeatmapHead from mmpose.registry import MODELS # Register your head to the MODELS. MODELS.register_module() class ExampleHead(HeatmapHead): Implements an example head. Implement the model head just like a normal pytorch module. def __init__(self, **kwargs) - None: super().__init__(**kwargs) def forward(self, feats): # 前向输入多尺度特征图输出热力图/坐标 return super().forward(feats) def predict(self, feats, batch_data_samples, test_cfg{}): # 测试行为在 predict 中定义 return super().predict(feats, batch_data_samples, test_cfg) def loss(self, feats, batch_data_samples, train_cfg{}): # 训练行为在 loss 中定义 return super().loss(feats, batch_data_samples, train_cfg)这揭示了 MMPose v1.x 的 Head 设计契约forward只负责出特征/热力图训练语义收敛在loss方法、测试语义收敛在predict方法二者分别接收train_cfg/test_cfg运行时配置。注册所用的MODELS注册表定义在 mmpose/registry.py而HeatmapHead、KeypointMSELoss等被继承的基类位于 mmpose/models/heads/ 与 mmpose/models/losses/。自定义 Loss 同理继承KeypointMSELoss注册即可见 example_loss.pyfrom mmpose.models import KeypointMSELoss from mmpose.registry import MODELS MODELS.register_module() class ExampleLoss(KeypointMSELoss): def __init__(self, **kwargs) - None: super().__init__(**kwargs) def forward(self, output, target, target_weightsNone, maskNone): # 输入参数应与 head.loss 给出的匹配 # output: [B, K, H, W] 预测热力图 # target: [B, K, H, W] 目标热力图 # target_weights: [B, K] 关键点级 或 [B, K, H, W] 像素级 # mask: [B, K, H, W] 或 [B, 1, H, W]None 表示不加掩码 return super().forward(output, target, target_weights, mask)两个类通过 models/init.py 导出保证custom_imports导入包时能拿到全部符号。配置文件继承核心包的整份 recipe。示例配置 example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py 只有十几行精髓在于# Directly inherit the entire recipe you want to use. _base_ mmpose::body_2d_keypoint/topdown_heatmap/coco/ \ td-hm_hrnet-w32_8xb64-210e_coco-256x192.py # This line is to import your own modules. custom_imports dict(importsmodels) # Modify the model to use your own head and loss. _base_[model][head] dict( typeExampleHead, in_channels32, out_channels17, deconv_out_channelsNone, lossdict(typeExampleLoss, use_target_weightTrue), decoder_base_[codec])四个要点逐一对应 MMPose 配置体系的能力mmpose::前缀基配置项目配置可以直接继承核心包内置 recipeHRNet-w32 的 COCO TopDown 热力图方案8 卡 x 64 批、210 epoch、256x192 输入数据、优化器、调度器、训练策略全部复用与 configs/base/default_runtime.py 等基配置机制一脉相承custom_imports dict(importsmodels)把工程根目录下的models包注入配置系统使注册表能解析ExampleHead/ExampleLoss_base_[model][head] dict(...)原地替换只换 Head 与 Lossin_channels32HRNet-w32 输出通道、out_channels17COCO 17 关键点、deconv_out_channelsNone不放大热力图、decoder_base_[codec]解码器沿用基配置中定义的 codec通常是Pose3D/BottomUp之外的BottomUp/top-downBottomUp之外的TopDown系解码器如BottomUp不适用时的BottomUp……准确说此处继承自 COCO recipe一般为BottomUp之外的BottomUp……即沿用td-hm默认 codecLoss 超参use_target_weightTrue表示按关键点目标权重加权与KeypointMSELoss的接口一致。4.2 训练与测试命令示例工程 README 给出的命令依赖PYTHONPATH指向项目目录让 Python 找到工程内模块。在projects/example_project/根目录执行export PYTHONPATHpwd:$PYTHONPATH随后通过mim调用 MMPose 的入口mim会自动路由到tools/train.py、tools/test.py等入口脚本# 单卡训练 mim train mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py # 多卡训练PyTorch launcher mim train mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py --launcher pytorch --gpus 8 # Slurm 集群训练 mim train mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py --launcher slurm \ --gpus 16 --gpus-per-node 8 --partition $PARTITION# 单卡测试 mim test mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py $CHECKPOINT # 多卡测试 mim test mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py $CHECKPOINT --launcher pytorch --gpus 8 # Slurm 测试 mim test mmpose configs/example-head-loss_hrnet-w32_8xb64-210e_coco-256x192.py $CHECKPOINT --launcher slurm \ --gpus 16 --gpus-per-node 8 --partition $PARTITION前置环境要求示例工程 README 声明Python 3.7、PyTorch 1.6、MIM v0.33、MMPose v1.0.0rc0数据准备按官方 COCO 数据集说明完成。4.3 里程碑清单从 projects/ 走到核心包示例工程 README 附带的 Checklist 是项目验收的事实标准projects/example_project/README.mdMilestone 1可进入projects/的最低要求完成代码设计遵循既有接口与约定例如每个模型组件注册进mmpose.registry.MODELS、可通过配置文件配置基础 docstring 与引用规范主要类应有 docstring若代码复制/修改自其他开源项目须引用来源并确认许可兼容通常不接受 GPL 许可代码测试期正确性若复现论文结果推理期性能须与原文一致官方预训练权重通常可通过重命名 state_dict 键转换得到若能证明训练期正确性勾选第二个里程碑此项可跳过完整 README按模板写清 Description/Usage/Results/Citation。Milestone 2实现成功训练期正确性按原文规范从零训练最终结果与论文报告在误差范围内一致。Milestone 3可进入核心包类型注解与 docstring理想情况下所有方法都有主要模块的单元测试可参考核心包测试如tests/test_models/test_heads/下的 head 测试按评审意见重构打磨提供metafile.yml会被 MIM 与 Inferencer 解析示例可参考configs/body_2d_keypoint/topdown_heatmap/coco/下的 yml 元文件按代码库文件层级把模块移入核心包并将 README 重构为标准模型 README 形态。保持该清单更新对开发者与社区都重要其他贡献者可据此判断切入点维护者也能据此评估后续打磨工时。五、projects/目录内的官方项目名录文档列表之外的“第一方”参考系是 projects/README.md 收录的仓库内项目它们本身就是“基于 MMPose 扩展”的官方示范RTMPose基于 MMPose 的实时多人姿态估计工具包附部署/跨平台示例projects/rtmpose/examples/下含 C 端示例RTMO面向高性能单阶段实时多人姿态估计的一体化方法TopDown/BottomUp 一体化PoseAnything基于图方法的类别无关姿态估计Graph-Based Approach for Category-Agnostic Pose Estimation与文档“Projects of papers”中 Pose for Everything 的主题呼应且已在仓库内提供 projects/pose_anything/ 的模型、数据集与配置实现MMPose4AIGC用 MMPose 引导 AI 图像生成姿态驱动的图像风格化/重绘脚本如 openpose_visualization.pyYOLOX-Pose利用物体关键点相似度损失增强 YOLO 的多人姿态估计projects/yolox_pose/Awesome MMPose教程、论文、数据集相关资源清单Just-Dance基于视频对比的舞蹈评分系统projects/just_dance/。从源码结构看这些项目普遍遵循示例工程的同一模式各自维护configs/与models/或datasets/子目录通过custom_imports接入核心包注册表从而与mmpose/核心代码解耦——这正对应 FAQ Q4 中“项目模块不能被train.py/test.py直接导入”的说明。六、小结官方 docs/zh_cn/notes/projects.md 是 MMPose 生态的“外部索引”扩展型项目Anime Face Detector、PosePipeline展示 MMPose 在领域迁移与业务落地上的延展性论文项目Pose for Everything、UniFormer、Poseur、ViTAEv2、Dite-HRNet则作为社区算法开发的对照参照且已被核心包维护的方法不重复收录想在 MMPose 之上做自己的项目标准路径是在projects/下建独立工程用MODELS.register_module()注册继承自核心包的 Head/Loss配置中以mmpose::继承基线 recipe 并配合custom_imports注入自定义模块用mim train/test完成单卡、多卡与 Slurm 场景的训练评测项目验收以三级里程碑为准最低要求Milestone 1即可进入projects/训练期正确性Milestone 2证明实现成功类型注解、单测、metafile 与模块迁移Milestone 3达成后方可并入核心包。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考