MMPose 中 ShuffleNetV1 人体姿态估计:MPII 数据集 Top-down 热图基线的完整解析
MMPose 中 ShuffleNetV1 人体姿态估计MPII 数据集 Top-down 热图基线的完整解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本篇基于 MMPose 模型库文档 shufflenetv1_mpii.md围绕 ShuffleNetV1 骨干网络在 MPII 数据集上的 Top-down 热图姿态估计基线展开完整解读其训练配置、骨干网络实现、热图编解码与 PCKh 评测指标帮助读者掌握一个轻量级姿态估计模型的配置逻辑、复现方式与源码级实现细节。模型背景与评测结果ShuffleNetV1 是一种面向移动端设备设计的极轻量卷积网络其核心思想是通过分组 1x1 卷积压缩通道、深度可分离卷积提取空间信息并用 channel shuffle 在分组间传递信息以降低计算量。原始论文发表于 CVPR 2018inproceedings{zhang2018shufflenet, title{Shufflenet: An extremely efficient convolutional neural network for mobile devices}, author{Zhang, Xiangyu and Zhou, Xinyu and Lin, Mengxiao and Sun, Jian}, booktitle{Proceedings of the IEEE conference on computer vision and pattern recognition}, pages{6848--6856}, year{2018} }MPIIHuman3.6M数据集是 2D 人体姿态估计的经典基准来自 CVPR 2014 论文《2D Human Pose Estimation: New Benchmark and State of the Art Analysis》inproceedings{andriluka14cvpr, author {Mykhaylo Andriluka and Leonid Pishchulin and Peter Gehler and Schiele, Bernt}, title {2D Human Pose Estimation: New Benchmark and State of the Art Analysis}, booktitle {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, year {2014}, month {June} }该基线模型在 MPII val 集上的评测结果为架构输入尺寸Mean (PCKh0.5)Mean0.1 (PCKh0.1)配置pose_shufflenetv1256x2560.8240.195td-hm_shufflenetv1_8xb64-210e_mpii-256x256.py其中 Mean 表示 PCKh0.5 指标以头部尺寸归一化、阈值为 0.5 的 PCK 准确率Mean0.1 为更严格的 PCKh0.1。这两个数值与模型元数据文件 shufflenetv1_mpii.yml 中记录的Mean: 0.824、Mean0.1: 0.195一致。在 Top-down 热图模型汇总 的 MPII 榜单中ShuffleNet-v10.824 / 0.195与 ShuffleNet-v20.828 / 0.205、MobileNet-v20.854 / 0.234、LiteHRNet0.859~0.869等轻量骨干处于同一梯队明显低于 HRNet、ResNet 等大模型体现了其作为轻量级模型的定位以较低精度换取更少的参数量与计算量适合端侧或对速度敏感的场景。Top-down 方法将姿态估计分为两阶段先由目标检测器给出人体框再对每个人体框单独估计姿态。姿态估计器不直接回归关键点坐标而是输出表示关键点位置概率的热图heatmap这一范式源自《Simple Baselines for Human Pose Estimation and Tracking》ECCV 2018MMPose 将其实现为TopdownPoseEstimator架构。训练配置详解配置文件 td-hm_shufflenetv1_8xb64-210e_mpii-256x256.py 继承自 default_runtime.py命名8xb64-210e即表示 8 卡 × 每卡 batch size 64、共训练 210 个 epoch。下面按模块逐一解析。训练策略与学习率train_cfg dict(max_epochs210, val_interval10) optim_wrapper dict( typeOptimWrapper, optimizerdict(typeAdam, lr5e-4)) param_scheduler [ dict(typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # 前 500 次迭代线性 warmup dict(typeMultiStepLR, begin0, end210, milestones[170, 200], gamma0.1, by_epochTrue) # 第 170、200 个 epoch 学习率乘以 0.1 ] auto_scale_lr dict(base_batch_size512) default_hooks dict(checkpointdict(save_bestPCK, rulegreater))优化器为 Adam初始学习率 5e-4前 500 个迭代而非 epoch做线性 warmup从 0.001 倍基础学习率升至 1 倍之后在第 170、200 个 epoch 将学习率各衰减 10 倍这与 210 个 epoch 的总长匹配属于典型的后期小学习率精调策略auto_scale_lr以 5128×64为基准 batch size 线性缩放学习率因此换用其他卡数或 batch size 复现时学习率会自动调整每 10 个 epoch 验证一次val_interval10并按验证集 PCK 指标保存最优 checkpointsave_bestPCK, rulegreater。热图编解码Codeccodec dict( typeMSRAHeatmap, input_size(256, 256), heatmap_size(64, 64), sigma2)MSRAHeatmap是 SimpleBaseline 范式的标准编解码器其实现位于 msra_heatmap.py输入图像为 256×256关键点坐标先按input_size / heatmap_size的比例因子缩放到 64×64 的热图空间编码encode时以每个关键点为中心生成高斯热图sigma2控制热图扩散半径同时输出keypoint_weights仅可见关键点参与监督该 codec 仅支持单实例编码encode中assert keypoints.shape[0] 1符合 Top-down 范式一个输入框对应一个人的前提解码decode时通过热图最大值定位关键点get_heatmap_maximum将热图空间坐标还原回输入图像空间输出 (N, K, D) 形状的关键点坐标与置信度。sigma2是 256 输入尺度下 SimpleBaseline 系列的常用取值若改用 DarkPose 风格的无偏编码可设unbiasedTrue并配合blur_kernel_size源码注释给出经验公式ks11 对应 sigma≈2。模型结构model dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( typeShuffleNetV1, groups3, init_cfgdict(typePretrained, checkpointmmcls://shufflenet_v1)), headdict( typeHeatmapHead, in_channels960, out_channels16, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue))各部分含义data_preprocessor使用 ImageNet 标准均值/方差归一化并将 BGR 转为 RGBbackboneShuffleNetV1的groups3表示 1x1 分组卷积的分组数init_cfg通过mmcls://shufflenet_v1加载 MMClassification 模型库中的 ImageNet 预训练权重分类预训练权重用于迁移姿态任务从头微调headHeatmapHead实现见 heatmap_head.py直接以一个卷积层将骨干输出的 960 通道特征映射为 16 通道热图MPII 的 16 个关键点损失函数KeypointMSELoss且use_target_weightTrue即按 codec 输出的keypoint_weights只对可见关键点计算 MSEtest_cfg测试时启用翻转增强——对水平翻转后的图像分别预测按flip_modeheatmap在热图层面取平均shift_heatmapTrue会对翻转热图做 1 像素的水平平移校正缓解左右不对称关键点如左右手肘的翻转误差。数据集与数据流dataset_type MpiiDataset data_mode topdown data_root data/mpii/ train_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomBBoxTransform, shift_prob0), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs)] train_dataloader dict( batch_size64, num_workers2, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleTrue), datasetdict( typedataset_type, data_rootdata_root, data_modedata_mode, ann_fileannotations/mpii_train.json, data_prefixdict(imgimages/), pipelinetrain_pipeline)) val_dataloader dict( batch_size32, num_workers2, persistent_workersTrue, drop_lastFalse, samplerdict(typeDefaultSampler, shuffleFalse, round_upFalse), datasetdict( typedataset_type, data_rootdata_root, data_modedata_mode, ann_fileannotations/mpii_val.json, headbox_filedata/mpii/annotations/mpii_gt_val.mat, data_prefixdict(imgimages/), test_modeTrue, pipelineval_pipeline)) val_evaluator dict(typeMpiiPCKAccuracy) test_evaluator val_evaluator关键点GetBBoxCenterScale从预存的人体检测框计算中心与尺度TopdownAffine据此将人体裁剪并仿射变换到 256×256GenerateTarget调用 codec 生成高斯热图标签训练集使用annotations/mpii_train.json验证集使用annotations/mpii_val.json验证集额外指定headbox_filedata/mpii/annotations/mpii_gt_val.mat这是 MPII 官方提供的头部框文件用于 PCKh 指标中以头部尺寸归一化误差数据集目录约定为data/mpii/需包含images/与annotations/子目录具体的下载与组织方式可参考 数据集准备指南。ShuffleNetV1 骨干的源码实现MMPose 的 ShuffleNetV1 实现位于 shufflenet_v1.py注册名为ShuffleNetV1。从源码结构看其要点如下阶段划分self.stage_blocks [4, 8, 4]即三个 stage 分别含 4、8、4 个ShuffleUnit前接conv13×3、stride 2与maxpool通道配置由 groups 决定当groups3时三个 stage 的输出通道为(240, 480, 960)并支持groups1/2/3/4/8与widen_factor宽度缩放通道数经make_divisible(ch, 8)对齐到 8 的倍数默认out_indices(2, )只输出第 2 个 stage 的特征960 通道、输入 256 时特征图 8×8这正是配置中HeatmapHead的in_channels960的来源——热图头直接以该特征为输入无需反卷积上采样因为 64×64 热图与 8×8 特征图经 head 内部的步幅设计对齐SimpleBaseline 系列的标准做法热图分辨率低于输入是常态ShuffleUnit 结构1x1 分组卷积压缩通道瓶颈通道数为out_channels // 4→ 3×3 深度卷积 →channel_shufflegroups1 时在分组间重排通道实现在 utils 中→ 1x1 分组卷积恢复通道同一 stage 内首个单元用concat方式合并残差并伴随下采样stride 2其余单元用add残差连接保持分辨率骨干支持frozen_stages、norm_eval、with_cp梯度检查点省显存等通用选项forward返回out_indices指定 stage 的特征元组。PCKh 评测指标评测器MpiiPCKAccuracy定义在 keypoint_2d_metrics.py继承自通用PCKAccuracy归一化方式为head即 PCKhPCKPercentage of Correct Keypoints衡量关键点预测误差小于threshold × 归一化长度的比例PCKh 用头部尺寸来自headbox_file的 val 集头部框作为归一化尺度MPII 论文约定阈值为 0.5 和 0.1对应结果表中的 Mean 与 Mean0.1从源码看MPII 的 16 个关键点中 Neck 与 Head 两个点被 mask 掉PCKh.mask[6:8] True不参与 Mean 计算并按 MPII 官方约定对各关节对取平均如 Shoulder PCK 取两肩均值再用jnt_ratio加权求和得到最终 Mean验证结果同时输出 Head、Shoulder、Elbow、Wrist、Hip、Knee、Ankle 的分部位 PCK便于定位模型薄弱环节。训练与推理命令MPII 为 Top-down 任务官方预训练权重与训练日志可通过上述模型库页面shufflenetv1_mpii.md 中的 ckpt/log 条目下载。使用仓库自带脚本训练或测试# 单卡训练 python tools/train.py configs/body_2d_keypoint/topdown_heatmap/mpii/td-hm_shufflenetv1_8xb64-210e_mpii-256x256.py # 单机 8 卡分布式训练与配置中 8xb64 基准一致 python -m torch.distributed.launch --nnodes1 --nproc_per_node8 \ --local_rank0 \ tools/train.py configs/body_2d_keypoint/topdown_heatmap/mpii/td-hm_shufflenetv1_8xb64-210e_mpii-256x256.py分布式训练也可使用仓库提供的 dist_train.sh 封装脚本。测试/推理命令# 使用 checkpoint 在 MPII val 集上评估 python tools/test.py \ configs/body_2d_keypoint/topdown_heatmap/mpii/td-hm_shufflenetv1_8xb64-210e_mpii-256x256.py \ work_dir/ckpt.pth --out results.pkl由于配置中启用了auto_scale_lr基准 512若以单卡小 batch 复现学习率会自动线性缩放但训练动态BN 统计量、warmup 比例与 8 卡基准存在差异指标可能与模型库报告值略有出入同时验证集必须提供mpii_gt_val.mat头部框文件PCKh 指标才能正常计算。小结该基线展示了 MMPose 中一个完整的 SimpleBaseline 热图方案TopdownPoseEstimatorShuffleNetV1(groups3)HeatmapHead(960→16)MSRAHeatmap(256/64, sigma2)MpiiPCKAccuracy配置层面体现了 MMPose 的典型实践基于 codec 的编解耦、Adam 线性 warmup 双步长衰减、按 PCK 保存最优权重、翻转热图平均测试增强源码层面ShuffleNetV1 的groups参数直接决定三阶段通道数240/480/960与热图头输入通道out_indices(2,)决定了骨干只输出最末 stage 特征二者与配置严格对应ShuffleNetV1 在 MPII 上取得 PCKh0.5 0.824 / PCKh0.1 0.195是轻量骨干梯队中的入门级选择适合作为端侧部署或计算受限场景下的姿态估计起点若需要更高精度可在同目录配置中横向对比 LiteHRNet、MobileNet-v2、HRNet 等模型见 MPII 汇总榜。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考