MMPose 预训练检测模型库(MMDetection Model Zoo)完全指南:人体、手部、人脸与动物检测器的选型与使用
2026/9/17 19:30:12 网站建设 项目流程

MMPose 预训练检测模型库(MMDetection Model Zoo)完全指南:人体、手部、人脸与动物检测器的选型与使用

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

MMPose 提供demo/docs/en/mmdet_modelzoo.md作为官方检测模型清单,汇总了配合 top-down 姿态估计流水线使用的四类 bounding box 检测模型:人体、手部、人脸与动物。本指南以该模型库为骨架,结合仓库内demo/mmdetection_cfg/下的真实配置与demo/topdown_demo_with_mmdet.py推理脚本,帮助你快速完成检测器的选型、权重下载、参数解读与端到端演示运行,并掌握用 MMDetection 复现"单类检测器"的关键配置要点。

为什么 top-down 姿态估计需要一个外部检测器

MMPose 的 top-down 姿态估计流程是典型的两阶段结构:先用检测器圈出目标实例的 bounding box,再对裁剪区域进行关键点估计。检测器的质量直接决定姿态估计的输入质量——漏检会导致关键点丢失,定位不准会降低关键点精度。

仓库中的 demo/topdown_demo_with_mmdet.py 正是这一流程的完整落地:它通过init_detector+inference_detector(来自 MMDetection)得到检测结果,再通过init_pose_estimator+inference_topdown(来自 MMPose)完成关键点预测。因此运行这类 demo 前,必须先安装 mmdet(脚本入口处有assert has_mmdet, 'Please install mmdet to run the demo.'的硬性校验),并准备好一份可用的检测模型。

检测模型从哪来?两个途径:复用 MMDetection 官方 Model Zoo 的 COCO 80 类预训练模型,或使用本模型库列出的、基于特定数据集(OneHand10K、COCO-face、MacaquePose)专门训练的检测器。后者正是demo/docs/en/mmdet_modelzoo.md的核心内容,下文逐一展开。

人体检测模型:直接使用 MMDetection 的 COCO 80 类模型

对于人体 bounding box 检测,MMPose 官方不额外训练专用模型,而是直接复用 MMDetection 提供的 COCO 预训练模型。MMDetection 的模型库包含 80 个 COCO 类别的检测权重,其中已经包含了person(类别索引 0)这一类别,因此无需任何微调即可用于人体检测。

仓库在 demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person.py 提供了一个"单类化"的人体检测配置:它以 MMDetection 的 RTMDet-m 为基座,通过bbox_head=dict(num_classes=1)把输出类别数收缩为 1,并通过metainfo=dict(classes=('person',))把类别语义锁定为 person,同时设置了test_cfgscore_thr=0.05nms=dict(type='nms', iou_threshold=0.6)max_per_img=100)来控制推理时的输出。对应权重为rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth

在 demo/docs/en/2d_human_pose_demo.md 中,人体 demo 的官方示例命令如下:

python demo/topdown_demo_with_mmdet.py \ demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth \ configs/body_2d_keypoint/rtmpose/body8/rtmpose-m_8xb256-420e_body8-256x192.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-body7_pt-body7_420e-256x192-e48f03d0_20230504.pth \ --input tests/data/coco/000000197388.jpg --show --draw-heatmap \ --output-root vis_results/

若追求更快的推理速度,同一目录下的 demo/mmdetection_cfg/rtmdet_nano_320-8xb32_coco-person.py 提供了 nano 规模的人体检测配置(输入 320,deepen_factor=0.33widen_factor=0.25),适合资源受限或对实时性要求高的场景。

手部检测模型:OneHand10K 上的两个选项

与人体不同,手部检测无法直接复用 COCO 80 类模型,因为 COCO 不包含手部类别。因此 MMPose 使用 MMDetection 在OneHand10K 数据集上专门训练了手部检测模型,官方结果如下:

手部检测在 OneHand10K 测试集上的结果(Hand detection results on OneHand10K test set)
架构(Arch)Box AP权重(ckpt)日志(log)
Cascade_R-CNN X-101-64x4d-FPN-1class0.817ckptlog
RTMDet-nano0.760ckpt-

两个模型代表两种取舍:Cascade R-CNN X-101-64x4d 精度更高(0.817),而RTMDet-nano 更轻量快速(0.760),是官方手部 demo 的默认选择。

Cascade R-CNN X-101-64x4d-FPN-1class 配置解读

demo/mmdetection_cfg/cascade_rcnn_x101_64x4d_fpn_1class.py 是完整的单类 Cascade R-CNN 配置,其关键设计点:

  • backbone:ResNeXt-101-64x4d,通过init_cfg=dict(type='Pretrained', checkpoint='open-mmlab://resnext101_64x4d')加载 ImageNet 预训练权重;
  • neck:FPN,in_channels=[256, 512, 1024, 2048]out_channels=256,输出 5 层金字塔特征;
  • roi_headCascadeRoIHeadnum_stages=3stage_loss_weights=[1, 0.5, 0.25]——三个级联阶段的回归损失权重逐级衰减,这是 Cascade R-CNN 渐进式精修的标志性设计;
  • 三个 bbox head 均设置num_classes=1reg_class_agnostic=True:单类别 + 类别无关回归,配合逐级缩小的target_stds[0.1,...][0.05,...][0.033,...]),使每一级 head 的监督目标越来越严格;
  • loss:分类用CrossEntropyLoss,回归用SmoothL1Lossbeta=1.0)。

从模型文件名..._20e_...可以看出该模型按 20 epoch(20e)的训练计划产出。reg_class_agnostic=True是"1 类检测"配置的重要细节:类别无关的回归头对边界框坐标不区分类别,这对单类检测任务是合理的简化。

RTMDet-nano 手部检测配置解读

demo/mmdetection_cfg/rtmdet_nano_320-8xb32_hand.py 展示了另一种思路——从 MMDetection 的 RTMDet 大模型配置出发做轻量化改造:

  • _base_ = 'mmdet::rtmdet/rtmdet_l_8xb32-300e_coco.py':直接继承 RTMDet-L 的完整训练设置;
  • 模型缩放deepen_factor=0.33widen_factor=0.25use_depthwise=True,把主干与颈部压缩为 nano 级别;neck 的in_channels=[64, 128, 256]out_channels=64num_csp_blocks=1也随之收缩;
  • 输入分辨率input_shape = 320,训练与测试均以 320×320 为准;
  • 训练数据ConcatDataset拼接了 OneHand10K、FreiHand、RHD、HalpeHand 四个数据集的训练集(通过mmpose.OneHand10KDatasetmmpose.*数据集类型加载),测试仍用 OneHand10K 测试集——这是典型的"多源数据增强手部泛化"做法;
  • 训练技巧EMAHookExpMomentumEMA,momentum=0.0002)做权重滑动平均;PipelineSwitchHook在 epoch 280 时切换到train_pipeline_stage2(去掉 Mosaic、降低增强强度),这是 YOLO 系模型"大 epoch 训练后期减弱增强"的经典策略。

在 demo/docs/en/2d_hand_demo.md 中,手部 demo 的官方示例命令:

python demo/topdown_demo_with_mmdet.py \ demo/mmdetection_cfg/rtmdet_nano_320-8xb32_hand.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmdet_nano_8xb32-300e_hand-267f9c8f.pth \ configs/hand_2d_keypoint/rtmpose/hand5/rtmpose-m_8xb256-210e_hand5-256x256.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-hand5_pt-aic-coco_210e-256x256-74fb594_20230320.pth \ --input tests/data/onehand10k/9.jpg \ --show --draw-heatmap

人脸检测模型:COCO-face 上训练的 YOLOX-s

对于人脸 bounding box 检测,MMPose 使用 MMDetection 在COCO-face数据上训练了一个YOLOX-s检测器,官方结果如下:

人脸检测在 COCO-face 测试集上的结果(Face detection results on COCO-face test set)
架构(Arch)Box AP权重(ckpt)
YOLOX-s0.408ckpt

yolox-s_8xb8-300e_coco-face.py 这份配置的要点:

  • 加载 COCO 预训练权重再微调load_from指向 MMDetection 的yolox_s_8x8_300e_coco权重,在 COCO 检测能力基础上迁移到人脸任务;
  • 主干与颈部:CSPDarknet(deepen_factor=0.33widen_factor=0.5)+ YOLOXPAFPN,均为 YOLOX-s 的典型缩放;
  • bbox_headYOLOXHeadnum_classes=1,训练用SimOTAAssignercenter_radius=2.5)做标签分配,测试时score_thr=0.01nms=dict(type='nms', iou_threshold=0.65)
  • 训练计划:300 epochs,SGD(lr=0.01,nesterov=True),前 5 epoch 用QuadraticWarmupLR预热,随后CosineAnnealingLR衰减到 eta_min=0.0005;custom_hooks挂载了YOLOXModeSwitchHook(最后 15 epoch 关闭增强)、SyncNormHookEMAHook
  • 数据与类别:训练/验证使用 COCO 格式的coco_face_train.json/coco_face_val.json,并显式声明metainfo=dict(CLASSES=('person',), ...)——即把"人脸"作为一个单类别来训练。

在 demo/docs/en/2d_face_demo.md 中,人脸 demo 的官方示例命令:

python demo/topdown_demo_with_mmdet.py \ demo/mmdetection_cfg/yolox-s_8xb8-300e_coco-face.py \ https://download.openmmlab.com/mmpose/mmdet_pretrained/yolo-x_8xb8-300e_coco-face_13274d7c.pth \ configs/face_2d_keypoint/rtmpose/face6/rtmpose-m_8xb256-120e_face6-256x256.py \ https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-face6_pt-in1k_120e-256x256-72a37400_20230529.pth \ --input tests/data/cofw/001766.jpg \ --show --draw-heatmap

动物检测模型:COCO 动物类别与 Macaque 专项模型

COCO 数据集中的 10 个常见动物类别

COCO 数据集共 80 个目标类别,其中包含10 个常见动物类别(类目 id 与名称对应如下):

(14: 'bird', 15: 'cat', 16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear', 22: 'zebra', 23: 'giraffe')

如果检测目标属于以上类别,可以直接从 MMDetection 的 COCO 80 类模型库中挑选相应模型,然后在运行 demo 时用--det-cat-id指定目标类别的索引即可(例如--det-cat-id=15表示只保留检测结果为 'cat' 的框)。

MacaquePose 测试集上的猕猴检测结果

针对 COCO 之外的猕猴(macaque)检测,MMPose 提供了两个专门训练的模型,官方结果如下:

架构(Arch)Box AP权重(ckpt)日志(log)
Faster_R-CNN_Res50-FPN-1class0.840ckptlog
Cascade_R-CNN X-101-64x4d-FPN-1class0.879ckptlog

注意:两个模型共用同一个 cascade_rcnn_x101_64x4d_fpn_1class.py 配置文件结构,只是训练数据(OneHand10K 手部 vs MacaquePose 猕猴)不同,这正是"一份单类检测配置 + 换数据集重训"复用模式的体现。

其中 faster_rcnn_r50_fpn_1class.py 是经典的 Faster R-CNN 配置:ResNet50 主干(pretrained='torchvision://resnet50'frozen_stages=1)、FPN 颈部、RPN +StandardRoIHeadnum_classes=1;训练使用 COCO 1x schedule(total_epochs = 12,SGD lr=0.02,step 在 [8, 11] 处衰减),测试时score_thr=0.05、NMSiou_threshold=0.5max_per_img=100

动物 demo 示例

在 demo/docs/en/2d_animal_demo.md 中,动物姿态 demo 使用 COCO 检测器 +--det-cat-id筛选类别的官方示例:

python demo/topdown_demo_with_mmdet.py \ demo/mmdetection_cfg/rtmdet_m_8xb32-300e_coco.py \ https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_m_8xb32-300e_coco/rtmdet_m_8xb32-300e_coco_20220719_112220-229f527c.pth \ configs/animal_2d_keypoint/topdown_heatmap/animalpose/td-hm_hrnet-w32_8xb64-210e_animalpose-256x256.py \ https://download.openmmlab.com/mmpose/animal/hrnet/hrnet_w32_animalpose_256x256-1aa7f075_20210426.pth \ --input tests/data/animalpose/ca110.jpeg \ --show --draw-heatmap --det-cat-id=15

其中--det-cat-id=15表示只使用标签为 'cat' 的检测框(15 是 COCO 中 'cat' 的类别索引);对视频输入则把--det-cat-id换成目标动物的索引即可(如 16 对应 'dog')。其余动物(如猕猴)则使用上文的专项检测模型。

统一推理入口:topdown_demo_with_mmdet.py 参数详解

上述所有 demo 共用同一个脚本 demo/topdown_demo_with_mmdet.py,完整命令模板为:

python demo/topdown_demo_with_mmdet.py \ ${MMDET_CONFIG_FILE} ${MMDET_CHECKPOINT_FILE} \ ${MMPOSE_CONFIG_FILE} ${MMPOSE_CHECKPOINT_FILE} \ --input ${INPUT_PATH} \ [--output-root ${OUTPUT_DIR}] [--save-predictions] \ [--show] [--draw-heatmap] [--device ${GPU_ID or CPU}] \ [--bbox-thr ${BBOX_SCORE_THR}] [--kpt-thr ${KPT_SCORE_THR}]

从脚本源码(parser.add_argument部分)可以整理出完整参数表:

参数默认值说明
det_config必填MMDetection 检测器配置文件(位置参数,如demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person.py
det_checkpoint必填MMDetection 检测器权重路径或 URL(位置参数)
pose_config必填MMPose 姿态估计配置文件(位置参数)
pose_checkpoint必填MMPose 姿态估计权重路径或 URL(位置参数)
--input''输入图像/视频路径,或webcam(调用摄像头)
--showFalse是否弹窗显示结果
--output-root''可视化结果保存目录,不指定则不保存
--save-predictionsFalse是否把预测结果保存为 JSON(需配合--output-root
--devicecuda:0推理设备,CPU 推理传cpu
--det-cat-id0检测模型输出的类别索引,用于筛选目标类别(动物 demo 的关键参数)
--bbox-thr0.3检测框得分阈值
--nms-thr0.3检测框 NMS 的 IoU 阈值
--kpt-thr0.3关键点可视化置信度阈值
--draw-heatmapFalse是否同时可视化热图(仅对 heatmap 类模型有效)
--show-kpt-idxFalse是否在关键点上显示索引编号
--skeleton-stylemmpose骨架可视化风格,可选mmpose/openpose
--radius3关键点绘制半径
--thickness1骨架连线粗细
--show-interval0视频逐帧之间的睡眠秒数
--alpha0.8检测框的透明度
--draw-bboxFalse是否绘制检测框

脚本内部的检测→姿态估计调用链也值得了解(对应process_one_image函数,见 demo/topdown_demo_with_mmdet.py):

  1. inference_detector(detector, img)得到pred_instances
  2. pred_instance.labels == args.det_cat_idscores > args.bbox_thr过滤框,再用nms(bboxes, args.nms_thr)做非极大值抑制;
  3. 把最终 bbox 交给inference_topdown(pose_estimator, img, bboxes)逐框估计关键点;
  4. merge_data_samples合并结果后交给visualizer.add_datasample可视化。

理解这条链路后,你就能自由组合"任意 MMDetection 检测器 + 任意 MMPose 姿态模型",而不局限于官方示例。

进阶:从这些配置学习"单类检测器"的训练要点

综合四个方向的配置,可以总结出用 MMDetection 训练"1 类检测器"(专用于姿态估计前置检测)的通用配方:

  1. 输出类别收缩:把 bbox head 的num_classes改为 1,如 Cascade R-CNN 配置中的num_classes=1;对类别无关回归(reg_class_agnostic=True)可进一步简化。
  2. 类别语义声明:通过metainfo=dict(CLASSES=('person',))(RTMDet 与 YOLOX 配置)或直接修改数据集元信息,把单类语义写进配置。
  3. 数据来源:可以使用单一数据集(OneHand10K、COCO-face、MacaquePose),也可以用ConcatDataset拼接多个数据集(如手部配置拼接 OneHand10K + FreiHand + RHD + HalpeHand)以增强泛化。
  4. 预训练迁移:无论是init_cfg=dict(type='Pretrained', checkpoint='open-mmlab://resnext101_64x4d')(主干预训练)还是load_from整个 COCO 检测权重(YOLOX 人脸配置),迁移学习都是在小数据集上快速收敛的关键。
  5. 测试输出控制test_cfg中的score_thr、NMS 的iou_thresholdmax_per_img决定最终送给姿态模型的框数量与质量,应根据任务场景调参。

这些配置与权重在 demo/mmdetection_cfg/ 目录下均可直接查看与复用。

加速推理的小技巧

  1. 关闭测试时的翻转增强:在姿态估计配置中设置model.test_cfg.flip_test=False(各任务的官方示例可见 2d_human_pose_demo.md、2d_animal_demo.md 等文档),可显著减少前向次数,代价是少量精度。
  2. 换用更快的检测器:在检测精度可接受的前提下,把 Cascade R-CNN X-101 这类重模型换成 RTMDet-nano、RTMDet-tiny 或 YOLOX-s 等轻量模型,是 top-down 流水线最常见的提速手段——这也是模型库同时提供高精度与轻量两档选项的原因。

相关文档导航:完整的演示命令可继续查阅 2d_human_pose_demo.md、2d_hand_demo.md、2d_face_demo.md、2d_animal_demo.md;本模型的英文原版清单见 demo/docs/en/mmdet_modelzoo.md,中文版见 demo/docs/zh_cn/mmdet_modelzoo.md。

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询