MMPose 人体姿态估计:HRNet 在 Human-Art 艺术场景数据集上的 Top-Down 热图训练与评测实践
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
本文围绕 MMPose 模型库中「HRNet + Human-Art」这组 Top-Down 热图姿态估计模型展开:介绍 Human-Art 艺术/人工场景数据集对姿态估计的挑战与价值、完整的模型库评测结果(检测框、真实框、COCO 三组基准),并深入解析仓库中对应的训练配置文件与数据集实现,帮助你在艺术插画、游戏立绘等"自然—人工"混合场景中完成姿态模型的训练、评测与选型。
一、背景:为什么需要 Human-Art 数据集
Human-Art(CVPR'2023,"Human-Art: A Versatile Human-Centric Dataset Bridging Natural and Artificial Scenes")是一个专门覆盖自然场景与人工创作场景(插画、漫画、3D 渲染、CG 角色等)的人体姿态数据集。真实照片中训练的姿态模型在面对艺术风格图像时往往出现明显性能衰减,Human-Art 正是为弥合这一"自然—人工"域差距而构建的基准。
该数据集的论文与数据信息在 MMPose 中由 Human-Art 数据集基础配置 维护,其中定义了:
- 17 个关键点,与 COCO 人体关键点命名和骨架结构完全一致(nose、双眼、双耳、双肩、双肘、双腕、双髋、双膝、双踝),因此可以直接复用 COCO 风格的标注格式与
CocoMetric评测器; - 关键点元信息:每个关键点的
id、颜色(color)、归属上/下身(type='upper'/'lower',供半身增强RandomHalfBody使用)、左右互换关系(swap,供RandomFlip使用); - 19 条骨架连线(
skeleton_info)以及用于 PCK 等指标计算的joint_weights与sigmas。
由于关键点定义与 COCO 对齐,"在 Human-Art 上训练/继续训练姿态模型,并同时在 COCO 与 Human-Art 两个基准上评测"成为一套完整的迁移学习评估范式——这正是本文档所呈现的内容。
二、模型库与核心评测结果
MMPose 模型库中的 hrnet_humanart.md 给出了 HRNet 系列模型在三个基准下的完整结果,全部使用经典解码器(classic decoder,即基于高斯热图峰值的后处理解码)。相关论文引用如下:
@inproceedings{sun2019deep, title={Deep high-resolution representation learning for human pose estimation}, author={Sun, Ke and Xiao, Bin and Liu, Dong and Wang, Jingdong}, booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition}, pages={5693--5703}, year={2019} }@inproceedings{ju2023humanart, title={Human-Art: A Versatile Human-Centric Dataset Bridging Natural and Artificial Scenes}, author={Ju, Xuan and Zeng, Ailing and Jianan, Wang and Qiang, Xu and Lei, Zhang}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), year={2023}}2.1 Human-Art 验证集(检测框,human AP 56.2)
使用检测器在 Human-Art 验证集上给出人体框(检测器 human AP 为 56.2):
| 架构 | 输入尺寸 | AP | AP50 | AP75 | AR | AR50 |
|---|---|---|---|---|---|---|
| HRNet-W32,仅 COCO 训练 | 256x192 | 0.252 | 0.397 | 0.255 | 0.321 | 0.485 |
| HRNet-W32,Human-Art+COCO 训练 | 256x192 | 0.399 | 0.545 | 0.420 | 0.466 | 0.613 |
| HRNet-W48,仅 COCO 训练 | 256x192 | 0.271 | 0.413 | 0.277 | 0.339 | 0.499 |
| HRNet-W48,Human-Art+COCO 训练 | 256x192 | 0.417 | 0.553 | 0.442 | 0.481 | 0.617 |
2.2 Human-Art 验证集(真实框 GT BBox)
用人工标注的真实边界框评测,剥离检测误差,考察纯姿态回归能力:
| 架构 | 输入尺寸 | AP | AP50 | AP75 | AR | AR50 |
|---|---|---|---|---|---|---|
| HRNet-W32,仅 COCO 训练 | 256x192 | 0.533 | 0.771 | 0.562 | 0.574 | 0.792 |
| HRNet-W32,Human-Art+COCO 训练 | 256x192 | 0.754 | 0.906 | 0.812 | 0.783 | 0.916 |
| HRNet-W48,仅 COCO 训练 | 256x192 | 0.557 | 0.782 | 0.593 | 0.595 | 0.804 |
| HRNet-W48,Human-Art+COCO 训练 | 256x192 | 0.769 | 0.906 | 0.825 | 0.796 | 0.919 |
2.3 COCO val2017(检测框,human AP 56.4)
同时在 COCO 上评测,检验加入艺术场景数据后对自然域是否产生负迁移:
| 架构 | 输入尺寸 | AP | AP50 | AP75 | AR | AR50 |
|---|---|---|---|---|---|---|
| HRNet-W32,仅 COCO 训练 | 256x192 | 0.749 | 0.906 | 0.821 | 0.804 | 0.945 |
| HRNet-W32,Human-Art+COCO 训练 | 256x192 | 0.741 | 0.902 | 0.814 | 0.795 | 0.941 |
| HRNet-W48,仅 COCO 训练 | 256x192 | 0.756 | 0.908 | 0.826 | 0.809 | 0.945 |
| HRNet-W48,Human-Art+COCO 训练 | 256x192 | 0.751 | 0.905 | 0.822 | 0.805 | 0.943 |
从三组结果可以读出几个关键结论:
- 域提升显著:在 Human-Art 检测框设置下,加入 Human-Art 数据训练使 HRNet-W32 的 AP 从 0.252 提升到 0.399(+14.7 个百分点),W48 从 0.271 提升到 0.417;真实框设置下提升同样巨大(0.533 → 0.754)。
- 无明显负迁移:在 COCO 上,混合训练模型的 AP 仅比纯 COCO 模型低约 0.005~0.008,说明艺术场景数据与真实数据可以兼顾。
- 宽度的边际收益在艺术域更明显:W48 相对 W32 在 Human-Art 检测框设置下 AP 提升约 0.018(0.399 → 0.417),但在 COCO 上几乎持平,选型时可结合算力预算决定。
模型库元数据(hrnet_humanart.yml)中,这两个人体模型登记的训练数据为COCO + Human-Art,并给出了每个模型对应的权重与训练日志下载地址(download.openmmlab.com上的.pth权重与.json日志)。
三、训练配置逐段解析
下面以 td-hm_hrnet-w32_8xb64-210e_humanart-256x192.py 为例,逐段解析配置内容(W48 版本 td-hm_hrnet-w48_8xb32-210e_humanart-256x192.py 结构完全一致)。配置文件基于 默认运行时配置。
3.1 训练策略:210 epoch 与学习率调度
train_cfg = dict(max_epochs=210, val_interval=10) optim_wrapper = dict(optimizer=dict( type='Adam', lr=5e-4, )) param_scheduler = [ dict( type='LinearLR', begin=0, end=500, start_factor=0.001, by_epoch=False), # warm-up dict( type='MultiStepLR', begin=0, end=210, milestones=[170, 200], gamma=0.1, by_epoch=True) ] auto_scale_lr = dict(base_batch_size=512) default_hooks = dict(checkpoint=dict(save_best='coco/AP', rule='greater'))要点说明:
- 优化器:Adam,基础学习率
5e-4; - Warm-up:前 500 个 iteration 用
LinearLR从0.001 × lr线性升到基础学习率(by_epoch=False表示按 iteration 计); - 衰减:
MultiStepLR在第 170、200 个 epoch 将学习率乘以gamma=0.1; auto_scale_lr:以base_batch_size=512为基准,按实际总 batch size 线性缩放学习率。W32 配置单卡batch_size=64(8 卡即 512,不缩放);W48 配置单卡batch_size=32(8 卡即 256,学习率自动减半),这是两个配置最直接的训练差异;- 最佳权重保存:以验证集
coco/AP越大越好的规则保存 best checkpoint。
3.2 模型结构:TopdownPoseEstimator + HRNet + HeatmapHead
model = dict( type='TopdownPoseEstimator', data_preprocessor=dict( type='PoseDataPreprocessor', mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], bgr_to_rgb=True), backbone=dict( type='HRNet', in_channels=3, extra=dict( stage1=dict(num_modules=1, num_branches=1, block='BOTTLENECK', num_blocks=(4,), num_channels=(64,)), stage2=dict(num_modules=1, num_branches=2, block='BASIC', num_blocks=(4, 4), num_channels=(32, 64)), stage3=dict(num_modules=4, num_branches=3, block='BASIC', num_blocks=(4, 4, 4), num_channels=(32, 64, 128)), stage4=dict(num_modules=3, num_branches=4, block='BASIC', num_blocks=(4, 4, 4, 4), num_channels=(32, 64, 128, 256))), init_cfg=dict( type='Pretrained', checkpoint='https://download.openmmlab.com/mmpose/' 'pretrain_models/hrnet_w32-36af842e.pth'), ), head=dict( type='HeatmapHead', in_channels=32, out_channels=17, deconv_out_channels=None, loss=dict(type='KeypointMSELoss', use_target_weight=True), decoder=codec), test_cfg=dict( flip_test=True, flip_mode='heatmap', shift_heatmap=True, ))各部分职责:
TopdownPoseEstimator:Top-Down 范式入口,输入为单个人体裁剪区域,输出单个人体的关键点热图;PoseDataPreprocessor:按 ImageNet 统计量mean/std归一化并做 BGR→RGB 转换(HRNet ImageNet 预训练权重的标准预处理);HRNet主干:四阶段多分辨率结构,stage2~4 分别维护 2、3、4 条分支并通过交换融合(exchange fusion)保持高分辨率特征。W32 与 W48 的差异仅在分支通道数:W32 为(32, 64, 128, 256),W48 为(48, 96, 192, 384)(约为 1.5 倍宽度)。HRNet 主干实现见 mmpose/models/backbones/hrnet.py;HeatmapHead:取 HRNet 最高分辨率分支(W32 为 32 通道、W48 为 48 通道)作为in_channels,输出 17 通道热图;deconv_out_channels=None表示不做反卷积上采样,解码器直接以input_size对应 1/4 分辨率的(48, 64)热图工作;损失为KeypointMSELoss且use_target_weight=True(按关键点可见性权重加权);test_cfg:测试时开启水平翻转增强(flip_test=True),flip_mode='heatmap'表示对预测热图做翻转后平均,shift_heatmap=True在解码时做 1/2 像素偏移修正。
3.3 热图编解码:MSRAHeatmap
codec = dict( type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2)- 输入裁剪图
256x192(宽 x 高),热图为64x48(宽 x 高,1/4 分辨率); - 目标热图用均值为 0.5、标准差
sigma=2像素的高斯核生成(MSRAHeatmap编码器的经典参数)。
3.4 数据管线:训练与验证
train_pipeline = [ dict(type='LoadImage'), dict(type='GetBBoxCenterScale'), dict(type='RandomFlip', direction='horizontal'), dict(type='RandomHalfBody'), dict(type='RandomBBoxTransform'), dict(type='TopdownAffine', input_size=codec['input_size']), dict(type='GenerateTarget', encoder=codec), dict(type='PackPoseInputs') ] val_pipeline = [ dict(type='LoadImage'), dict(type='GetBBoxCenterScale'), dict(type='TopdownAffine', input_size=codec['input_size']), dict(type='PackPoseInputs') ]训练管线的增强组合与 COCO Top-Down 配置完全一致:随机水平翻转(依赖keypoint_info中的swap关系)、随机半身裁剪(依赖type='upper'/'lower'标记)、随机边界框形变(中心/宽高抖动),最后由TopdownAffine将人体裁剪到256x192。验证管线不含随机增强,保证评测可复现。
3.5 数据加载与评测器
dataset_type = 'HumanArtDataset' data_mode = 'topdown' data_root = 'data/' train_dataloader = dict( batch_size=64, ... dataset=dict( type=dataset_type, data_root=data_root, data_mode=data_mode, ann_file='HumanArt/annotations/training_humanart_coco.json', data_prefix=dict(img=''), pipeline=train_pipeline, )) val_dataloader = dict( batch_size=32, ... dataset=dict( ... ann_file='HumanArt/annotations/validation_humanart.json', bbox_file=f'{data_root}HumanArt/person_detection_results/' 'HumanArt_validation_detections_AP_H_56_person.json', data_prefix=dict(img=''), test_mode=True, pipeline=val_pipeline, )) val_evaluator = dict( type='CocoMetric', ann_file=data_root + 'HumanArt/annotations/validation_humanart.json') test_evaluator = val_evaluator从源码结构看,几个值得注意的实现事实:
HumanArtDataset定义在 mmpose/datasets/datasets/body/humanart_dataset.py,它直接继承 COCO 风格的基类BaseCocoStyleDataset,仅在类级METAINFO中指向 configs/base/datasets/humanart.py 的元信息文件——这解释了为何它能无缝复用CocoMetric评测器与全套 COCO 风格数据管线;bbox_file只在评测时生效:val_dataloader指定了检测器结果文件HumanArt_validation_detections_AP_H_56_person.json,评测时使用检测结果提供的边界框(对应结果表 2.1 的"human AP 56.2");若评测时不设置该文件,则使用真实框(对应 2.2 的 GT BBox 设置)。HumanArtDataset的文档字符串明确说明bbox_file仅用于评测、test_mode=False时被忽略;- 评测器:
CocoMetric实现见 mmpose/evaluation/metrics/coco_metric.py,输出的coco/AP等指标也是 checkpoint 保存的依据。
此外,仓库还提供了 21 关键点的变体数据集HumanArt21Dataset(mmpose/datasets/datasets/body/humanart21_dataset.py)与 configs/base/datasets/humanart21.py 元信息,供需要更多关节点的场景使用;同目录下还有 ViTPose 的 Human-Art 配置(small/base/large/huge 四种规格),可作为 Transformer 主干的对照选择。
四、训练与评测命令
在准备好 Human-Art 数据集(标注文件data/HumanArt/annotations/training_humanart_coco.json与validation_humanart.json、验证集检测框文件data/HumanArt/person_detection_results/HumanArt_validation_detections_AP_H_56_person.json,数据集准备方法可参考 准备数据集指南)后,可在仓库根目录执行以下命令复现训练(以 W32 为例,8 卡单机):
# 单卡训练 python tools/train.py \ configs/body_2d_keypoint/topdown_heatmap/humanart/td-hm_hrnet-w32_8xb64-210e_humanart-256x192.py # 8 卡分布式训练 bash tools/dist_train.sh 8 \ configs/body_2d_keypoint/topdown_heatmap/humanart/td-hm_hrnet-w32_8xb64-210e_humanart-256x192.py评测与推理:
# 单卡测试(使用 val_dataloader 中的检测框评测) python tools/test.py \ configs/body_2d_keypoint/topdown_heatmap/humanart/td-hm_hrnet-w32_8xb64-210e_humanart-256x192.py \ <checkpoint.pth> --out results.jsonW48 配置只需把配置路径换成 td-hm_hrnet-w48_8xb32-210e_humanart-256x192.py(配置名中的8xb32即 8 卡 × 每卡 32 的总 batch size 256,auto_scale_lr会据此把学习率按比例下调)。若想在 COCO 与 Human-Art 两个基准上同时评测混合训练的模型,可分别使用 COCO 的 W32 训练配置 对应的val_dataloader(COCO_val2017_detections_AP_H_56_person.json检测框)进行交叉评测,这正是模型库结果表 2.3 的评测口径。
五、关键要点小结
- 配置定位:Human-Art 上的 HRNet Top-Down 热图模型配置集中在 configs/body_2d_keypoint/topdown_heatmap/humanart/,模型库结果页为 hrnet_humanart.md,机器可读的元数据为 hrnet_humanart.yml;
- 结构不变、数据域改变:与 COCO 版 HRNet 配置相比,Human-Art 版本在模型结构、codec、增强管线上完全一致,核心差异是数据集类型(
HumanArtDataset)、标注/检测框文件路径与评测 GT——这是做"新艺术域微调"时最简且可对照的实验设计; - 性能口径:引用结果时务必区分三种评测设置——Human-Art 检测框(AP_H 56.2)、Human-Art 真实框、COCO val2017 检测框(AP_H 56.4),三组 AP 数值相差很大,不可混用;
- 实现可查证:数据集类 humanart_dataset.py、关键点元信息 humanart.py、主干 hrnet.py、评测器 coco_metric.py 均在仓库内,便于逐行核对行为。
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考