MMPose 基于 RTMPose 的 COCO-WholeBody-Face 人脸关键点检测配置解析与实战指南

发布时间:2026/9/17 4:44:01

MMPose 基于 RTMPose 的 COCO-WholeBody-Face 人脸关键点检测配置解析与实战指南 MMPose 基于 RTMPose 的 COCO-WholeBody-Face 人脸关键点检测配置解析与实战指南【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文以 MMPose 仓库中 rtmpose_coco_wholebody_face.md 对应的官方模型页面为核心骨架系统讲解 RTMPose-m 在 COCO-WholeBody-Face 数据集上训练 68 点人脸关键点检测模型的完整配置、核心组件原理与训练/评估流程。读完本文你将能够读懂该模型卡中的所有字段掌握 SimCC 坐标分类编解码、RTMCCHead 头部结构、两阶段训练策略与 NME 评估指标在真实配置中的落地方式并能在本仓库中直接复现该模型的训练与测试。模型卡速览官方已发布的结果与文件该模型卡的原始内容围绕一张结果表展开先完整还原它表格中的配置文件与权重文件均存在于当前仓库或由模型卡/模型库 yml 声明ArchInput SizeNME配置文件权重与日志RTMPose-m256x2560.0466rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py权重文件rtmpose-m_simcc-coco-wholebody-face_pt-aic-coco_60e-256x256-62026ef2_20230228.pth及对应训练日志下载地址见 rtmpose_coco_wholebody_face.yml 中的Weights字段结果表同时引用了两个工作骨干/框架相关的 RTMDet 论文RTMDet: An Empirical Study of Designing Real-Time Object DetectorsArXiv 2022与数据集来源论文 Whole-Body Human Pose Estimation in the WildECCV 2020。这两篇文献在文档中以 bibtex 形式给出分别对应 RTMPose 所依赖的实时检测/主干设计与 COCO-WholeBody 数据集的标注协议。在仓库的整体目录中该模型被收录于 configs/face_2d_keypoint/rtmpose/README.md 的 COCO-WholeBody-Face Dataset 小节与 WFLWNME 4.01、LaPaNME 1.29等其他 RTMPose 人脸模型并列。此外configs/face_2d_keypoint/rtmpose/README.md 还给出了 RTMPose 的整体设计动机现有 2D 姿态估计方法在公开基准上表现优秀但工业落地仍受制于模型参数大、延迟高的问题RTMPose 从范式、骨干网络、定位算法、训练策略与部署推理五个方面进行经验性改进构建了高性能实时多人姿态估计框架。训练配置文件逐段拆解本模型的完整训练配置位于 rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py下面按逻辑段逐一解读。训练周期、随机性与优化器_base_ [../../../_base_/default_runtime.py] max_epochs 60 stage2_num_epochs 10 base_lr 4e-3 train_cfg dict(max_epochsmax_epochs, val_interval1) randomness dict(seed21) optim_wrapper dict( typeOptimWrapper, optimizerdict(typeAdamW, lrbase_lr, weight_decay0.05), paramwise_cfgdict( norm_decay_mult0, bias_decay_mult0, bypass_duplicateTrue))配置通过_base_继承 configs/base/default_runtime.py该文件提供了日志、Checkpoint、可视化、分布式环境、日志处理器等通用运行设置例如默认LoggerHook每 50 次迭代打点、CheckpointHook每 10 个 epoch 保存。训练共60 个 epoch其中最后10 个 epoch为第二阶段stage2_num_epochs由后面的PipelineSwitchHook触发管线切换。优化器采用AdamW初始学习率4e-3权重衰减0.05norm_decay_mult0与bias_decay_mult0表示 BatchNorm 与偏置项不参与权重衰减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)前 1000 次迭代执行从1e-5倍基准学习率开始的线性预热by_epochFalse即按迭代计算自第 30 个 epoch 起执行CosineAnnealingLR最低学习率降至base_lr * 0.05T_max30与begin/end对应后半段 30 个 epochauto_scale_lr dict(base_batch_size512)声明该配置的基准批大小为 512当实际总 batch size 变化时MMPose 会自动按比例缩放学习率保证大批量训练时的收敛行为一致。编解码器SimCC 坐标分类codec dict( typeSimCCLabel, input_size(256, 256), sigma(5.66, 5.66), simcc_split_ratio2.0, normalizeFalse, use_darkFalse)SimCCLabel是 mmpose/codecs/simcc_label.py 中注册的SimCCLabel类其核心思想来自论文SimCC: a Simple Coordinate Classification Perspective for Human Pose Estimation不再像热图方法那样预测 2D 空间热图而是把关键点定位拆成x、y 两个一维坐标分类任务每个坐标用一个长度等于输入尺寸 × simcc_split_ratio的一维标签向量表示。对照源码中的关键参数行为mmpose/codecs/simcc_label.pyinput_size(256, 256)编码与解码都在该图像尺寸空间内进行simcc_split_ratio2.0标签分辨率是输入尺寸的 2 倍即每个轴的标签长度W 256 * 2 512这是坐标分类精度的关键因子sigma(5.66, 5.66)高斯标签的方差编码时按3-sigma 规则生成高斯分布目标见_generate_gaussianmmpose/codecs/simcc_label.pysigma同时影响 DARK 后处理的模糊核尺寸normalizeFalse关闭标签归一化直接使用exp(-(x-mu)^2 / (2*sigma^2))形式的高斯值use_darkFalse解码时不启用 DARK 亚像素细化。若开启decode会调用refine_simcc_dark对峰值位置做二次多项式拟合mmpose/codecs/simcc_label.py并配合sigma计算模糊核int((sigma*20-7)//3)。模型结构TopdownPoseEstimator CSPNeXt RTMCCHeadmodel 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., checkpointhttps://download.openmmlab.com/mmpose/v1/projects/ rtmposev1/cspnext-m_udp-aic-coco_210e-256x192-f2f7d6f6_20230130.pth )), headdict( typeRTMCCHead, in_channels768, out_channels68, 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, ))整体范式TopdownPoseEstimator即自顶向下top-down姿态估计先由外部检测器给出人脸框再在裁剪框内做单人 68 点关键点回归数据预处理PoseDataPreprocessor使用 ImageNet 统计均值/方差做归一化bgr_to_rgbTrue表示输入图像按 BGR 读取后转为 RGB 再送入网络骨干网络CSPNeXt从 mmdet 作用域引入archP5表示五阶段结构deepen_factor0.67与widen_factor0.75对应 RTMPose-m 的深度/宽度缩放out_indices(4,)只取最高层特征channel_attentionTrue启用通道注意力。骨干采用在 AICCOCO 上预训练的权重初始化init_cfg中的checkpoint字段prefixbackbone.保证只加载骨干参数检测头RTMCCHead的实现位于 mmpose/models/heads/coord_cls_heads/rtmcc_head.py其结构为大核卷积final_layerkernel_size7→ 展平 → 全连接层MLP→ Gated Attention UnitGAU→ 输出 SimCC 一维坐标分布。out_channels68对应 68 个面部关键点in_featuremap_sizetuple([s // 32 for s in codec[input_size]])即(8, 8)由 256 输入经骨干 32 倍下采样得到。GAU 配置中hidden_dims256、s128控制注意力通道维数expansion_factor2为 FFN 扩展倍数act_fnSiLU损失函数KLDiscretLossbeta10.用于平滑软标签分布label_softmaxTrue在计算前对预测做 softmaxuse_target_weightTrue按关键点可见性加权测试策略test_cfgdict(flip_testTrue)启用水平翻转测试融合利用人脸左右对称的swap关系见下文数据集定义提升精度。测试增强说明flip_testTrue的翻转融合会依据数据集定义的keypoint_info中每个点的swap字段交换左右对称点对。在 configs/base/datasets/coco_wholebody_face.py 中可以看到例如face-0与face-16互为一对swapface-16/swapface-0眼睑、眉毛、嘴唇等对称点均有对应关系而鼻尖face-27/28/29/30、下巴face-57、鼻梁face-33、上唇中心face-51、下唇中心face-62、鼻根face-66等中轴点swap为空。数据集与数据管线数据集类与 68 点标注数据集类型为CocoWholeBodyFaceDataset实现位于 mmpose/datasets/datasets/face/coco_wholebody_face_dataset.py。它继承BaseCocoStyleDataset其METAINFO从 configs/base/datasets/coco_wholebody_face.py 读取该文件定义了完整的 68 点语义轮廓点face-0~face-16、左右眉face-17~face-26、鼻部face-27~face-36、左右眼face-36~face-47、外唇face-48~face-59、内唇face-60~face-67并附带sigmas每点 OKS 用的归一化方差与joint_weights全 1.0。关键解析逻辑在parse_data_infococo_wholebody_face_dataset.py通过ann[face_valid]与max(ann[face_kpts]) 0过滤无效人脸实例使用ann[face_box]xywh 格式裁剪人脸框并将坐标裁剪到图像范围内得到[1, 4]的 bbox关键点从ann[face_kpts]读取[..., :2]为坐标[..., 2]经np.minimum(1, ...)得到可见性标记可见关键点数量num_keypoints用于数据过滤。数据加载配置dataset_type CocoWholeBodyFaceDataset data_mode topdown data_root data/coco/ backend_args dict(backendlocal)训练与验证均使用 COCO 目录下的官方标注训练用annotations/coco_wholebody_train_v1.0.jsontrain2017/图像验证用annotations/coco_wholebody_val_v1.0.jsonval2017/图像。backend_args默认本地文件系统配置中保留的 petrel/S3 块为可选的远端存储写法被注释掉。数据加载器统一为batch_size32、num_workers10、persistent_workersTrue训练侧DefaultSampler(shuffleTrue)验证侧关闭 shuffle 并设置test_modeTrue。训练/验证管线train_pipeline [ dict(typeLoadImage, backend_argsbackend_args), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomBBoxTransform, scale_factor[0.6, 1.4], rotate_factor80), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typemmdet.YOLOXHSVRandomAug), dict(typeAlbumentation, transforms[...]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ] val_pipeline [ dict(typeLoadImage, backend_argsbackend_args), dict(typeGetBBoxCenterScale), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typePackPoseInputs) ]训练侧依次执行图像加载 → 由 bbox 计算中心与尺度 → 水平随机翻转 → 随机 bbox 变换尺度缩放 0.6~1.4、旋转 ±80°→ 仿射变换到 256x256 → HSV 颜色增强来自 mmdet 的YOLOXHSVRandomAug→ Albumentations 增强Blur与MedianBlur各 0.1 概率CoarseDropout随机挖空→ 用 SimCC codec 生成训练目标 → 打包。验证管线只保留加载、仿射对齐与打包不做任何随机增强。两阶段训练策略PipelineSwitchHooktrain_pipeline_stage2 [ ... dict(typeRandomBBoxTransform, shift_factor0., scale_factor[0.75, 1.25], rotate_factor60), ... ]配置文件通过custom_hooks中的mmdet.PipelineSwitchHook在max_epochs - stage2_num_epochs 50个 epoch 处切换到第二训练管线配置文件的 hooks 段。第二阶段的核心差异是弱化数据增强尺度范围收窄为[0.75, 1.25]、旋转角收窄为 ±60°、CoarseDropout概率从 1.0 降到 0.5并在进入该阶段后配合 EMA 模型使网络从探索过渡到精细收敛这是 RTMPose 系列稳定精度的关键训练技巧之一。EMA 与模型保存default_hooks dict( checkpointdict( save_bestNME, ruleless, max_keep_ckpts1, interval1)) custom_hooks [ dict( typeEMAHook, ema_typeExpMomentumEMA, momentum0.0002, update_buffersTrue, priority49), ... ]训练全程维护Exponential Moving AverageEMA参数副本momentum0.0002验证与保存均基于 EMA 模型Checkpoint 以验证集 NME 为监控指标ruleless仅保留最优权重一份每 1 个 epoch 评估一次。评估指标NMEval_evaluator dict( typeNME, norm_modekeypoint_distance, )该模型使用NMENormalized Mean Error归一化平均误差作为评测指标评测器NME实现在 mmpose/evaluation/metrics/keypoint_2d_metrics.py。NME 定义为预测关键点与真值之间的平均欧氏距离除以一个归一化因子norm_modekeypoint_distance表示以人脸框对角线长度即关键点距离作为归一化分母这与 COCO-WholeBody 官方评估协议一致。NME 值越小精度越高官方报告的本模型验证集 NME 为0.0466。训练与推理实操单卡/多卡训练按照 MMPose 的标准训练方式在安装好依赖并下载 COCO-WholeBody 数据集标注放入data/coco/annotations/图像放入data/coco/train2017/与data/coco/val2017/后可基于 tools/train.py 与 tools/dist_train.sh 启动训练# 单机 8 卡训练 bash tools/dist_train.sh configs/face_2d_keypoint/rtmpose/coco_wholebody_face/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py 8 # 单卡训练 python tools/train.py configs/face_2d_keypoint/rtmpose/coco_wholebody_face/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py训练日志默认输出到work_dirs/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256/最优模型EMA会按 NME 最优自动保存。当实际使用的总 batch size 与配置的base_batch_size512不一致时auto_scale_lr机制会自动修正学习率如需关闭可加--no-auto-scale-lr。测试与权重获取使用 tools/test.py 评估python tools/test.py configs/face_2d_keypoint/rtmpose/coco_wholebody_face/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py \ /path/to/rtmpose-m_simcc-coco-wholebody-face_pt-aic-coco_60e-256x256-62026ef2_20230228.pth官方预训练权重的文件名与下载地址可在 rtmpose_coco_wholebody_face.yml 的Weights字段查到该 yml 同时声明了模型架构RTMPose、训练数据COCO-WholeBody-Face、任务类型Face 2D Keypoint与 NME 结果是模型库索引与自动下载如mim download mmpose --config rtmpose-m_8xb32-60e_coco-wholebody-face-256x256的元数据来源。推理接入人脸 68 点关键点检测属于自顶向下流程正式使用时需先做人脸检测再送入本模型。仓库提供两条可参考的推理路径通用推理脚本 demo/inferencer_demo.py基于Pose2DInferencer见 mmpose/apis/inferencers/pose2d_inferencer.py可配合 mmdet 的人脸检测模型组合调用纯检测关键点串联示例 demo/topdown_demo_with_mmdet.py其中--det-cat-id 0等参数用于控制检测类别。仓库还提供了现成的人脸检测器配置例如 demo/mmdetection_cfg/yolox-s_8xb8-300e_coco-face.py。小结COCO-WholeBody-Face 上的 RTMPose-m 配置是一个高度工程化的标准答案它集中体现了 RTMPose 系列的几大设计要素以 SimCC 一维坐标分类替代二维热图mmpose/codecs/simcc_label.py、以 CSPNeXt RTMCCHead大核卷积 GAU构成轻量高精度主干与头部mmpose/models/heads/coord_cls_heads/rtmcc_head.py、以预热 余弦退火 自动学习率缩放 EMA 两阶段弱增强管线的组合训练策略并以 NMEnorm_modekeypoint_distance作为与官方协议一致的评测口径。如果你需要在其他面部数据集如 WFLW、LaPa或自建人脸数据上复刻这套方案只需替换dataset_type、标注路径、关键点元信息configs/base/datasets/coco_wholebody_face.py 中keypoint_info的 68 点定义与swap/sigmas以及codec的输入尺寸即可复用本文拆解的全部训练机制。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 4:39:01

自适应滑模观测器在Carsim/Simulink联合仿真中实现轮胎力估计

大家在做Carsim联合仿真时,有一个问题绕不开:轮胎的纵向力和侧向力到底是多少?我之前搞横向稳定性控制时,这两个量直接进控制律,但实车传感器根本给不出来,Carsim内部虽然算了轮胎力,外部接口选…

2026/9/17 4:39:01

C++实现AVO正演:从Zoeppritz方程到CDP道集生成

简介:面向石油物探专业研究生与地震资料处理人员的AVO/AVA正演模型实验代码包,集中于叠前地震数据正演、加噪音处理、角度区域分析与CDP道集生成等关键环节,适合用于理解弹性参数变化对反射振幅的影响,以及完成课程实验或科研预研…

2026/9/17 4:39:01

高速铁路静态验收:轨检小车数据清洗与超限自动判定

简介:《高速铁路工程静态验收技术规范》(TB 10760-2013)是铁路行业重要的验收标准,面向高速铁路建设单位、施工企业、监理机构及第三方验收人员,为新建高速铁路工程静态验收提供统一的技术要求和质量标准,解…

2026/9/17 5:44:03

Rocky Linux中文乱码解决:字体安装与locale/编码排查指南

刚把一台 Rocky Linux 9 的测试服务器部署好,网页一打开,满屏的“□□□□□□”,日志文件里全是“????”。这种中文乱码,很多人第一反应是去改 locale、加export LANGzh_CN.UTF-8,结果折腾半天还是老样子。其实在…

2026/9/17 5:44:03

Fabric自动化部署工具:原理、实践与性能优化

1. 为什么需要自动化部署工具每次手动登录服务器敲命令部署代码的日子该结束了。记得刚入行那会儿,我负责维护三个测试环境,每次发版都要重复执行十几条命令,稍不留神就会漏掉某个步骤。最惨的一次是把数据库迁移脚本漏了,导致线上…

2026/9/17 5:44:03

PC端CAN通信工程实践:USB-CAN上位机系统设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 5:44:03

WSL下Node开发环境完整搭建指南:从安装到踩坑修复

把Windows下的Node项目迁进WSL,一开始只是因为node-sass编译老挂、路径分隔符恶心。真正动手装的时候才发现,WSL本身的门槛也不低:下载卡住、403、版本太旧、装完Node又冒出一堆npm权限和模块导出的报错。这篇文章把我在WSL里安装Node的完整踩…

2026/9/17 5:39:03

EVTOL无人机AI图像处理:从端边云架构到模型部署的完整链路

简介:这是一份围绕EVTOL低空经济无人机AI图像处理系统建设的完整方案PPT,适合无人机系统设计、AI算法研发及低空经济应用规划人员参考,覆盖从总体架构到实施落地的全流程。资源共1个文件,为PPT演示文稿,容量约1.04MB&a…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码