
MMPose 服装关键点检测基于 ResNet 的 DeepFashion 2D 服装关键点 Top-Down 方案全解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本文以 MMPose 仓库中 DeepFashion 服装关键点检测的 ResNet 方案Simple Baseline 2D ResNet-50 热图回归为主线完整梳理其在 DeepFashion服装关键点数据集上的配置、数据组织、训练与评估细节。读者将掌握三类服装子集upper/lower/full的标注定义、MSRAHeatmap 编解码原理、210 epoch 训练配置的每个关键参数以及如何复现或迁移该方案到自己的服装关键点任务。一、方案概述与文档定位在 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion/resnet_deepfashion.md 中MMPose 给出了服装 2D 关键点检测的 ResNet 基准方案。该方案属于Top-Down 热图回归topdown_heatmap技术路线先通过检测器定位服装或人体区域的包围框再对每个实例裁剪出局部图像送入网络预测各关键点的热图。这一小节对应的核心论文有三篇文档中均给出了完整的 BibTeX 引用SimpleBaseline2DECCV2018提出“简单基线”结构即主干网络 反卷积层直接回归热图被证明足够高效文档中给出其 BibTeX 条目可在 docs 等仓库文档中检索到其算法归属。ResNetCVPR2016残差网络作为主干backbone文档中同样给出 BibTeX 引用。DeepFashionCVPR2016与 Fashion Landmark Detection in the WildECCV2016前者提供包含丰富标注的服装数据集后者定义了服装关键点landmark任务本身。从仓库结构看整个 DeepFashion 配置目录 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion 下同时提供了 ResNet 与 HRNet 两套骨干的实现本文聚焦文档主体——ResNet 系列。二、实验结果表三个子集在验证集上的表现原文档的核心数据表如下DeepFashion 验证集输入尺寸 256x192。该数据同时登记在 resnet_deepfashion.yml 的 Model Zoo 元数据中模型权重文件信息可在该 yml 中查询SetArchInput SizePCK0.2AUCEPEupperpose_resnet_50256x19295.457.816.8lowerpose_resnet_50256x19296.574.410.5fullpose_resnet_50256x19297.766.412.7注原文档明确说明由于时间限制目前仅训练了 ResNet-50 模型并欢迎社区贡献以复现论文中的其他结果。从 Model Zoo 配置 可以看出仓库还维护了 ResNet-101、ResNet-152 的完整训练配置对应三个子集各一份只是暂无对应权重。三个评估指标的含义如下PCK0.2Percentage of Correct Keypoints预测关键点与真值距离不超过阈值此处阈值为 0.2 倍躯干参考距离的比例越高越好AUCArea Under the CurvePCK 曲线下面积反映定位精度的整体水平越高越好EPEEnd Point Error预测点与真值的平均欧氏距离像素越低越好。可以看到 full 子集8 点的 PCK0.2 最高97.7而 upper 子集6 点的 AUC 最低57.8说明不同子集的难度差异明显这也与各类别关键点数量与标注特性直接相关详见下文数据定义部分。三、配置逐段拆解以 upper 子集为例以 td-hm_res50_8xb64-210e_deepfashion_upper-256x192.py 为例该文件名编码了全部关键信息td-hmTop-Down Heatmap 路线、res50ResNet-50 主干、8xb648 卡 × 每卡 64 样本、210e210 epoch、输入尺寸 256x192。3.1 运行时与优化器_base_ ../../../_base_/default_runtime.py # runtime train_cfg dict(max_epochs210, val_interval10) # optimizer optim_wrapper dict(optimizerdict( typeAdam, lr5e-4, ))基础运行时继承自 configs/base/default_runtime.py训练 210 个 epoch每 10 个 epoch 验证一次使用 Adam 优化器初始学习率 5e-4。3.2 学习率调度线性预热 多步下降param_scheduler [ dict( typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict( typeMultiStepLR, begin0, end210, milestones[170, 200], gamma0.1, by_epochTrue) ]前 500 次迭代by_epochFalse表示按迭代而非按 epoch执行线性预热起始学习率为目标的 0.001 倍之后按 epoch 调度在第 170 和第 200 epoch 各将学习率乘以 0.1γ0.1auto_scale_lr dict(base_batch_size64)声明基准批大小训练时若实际批大小与 64 不同学习率会自动按比例缩放。注意 full 子集配置 td-hm_res50_8xb64-210e_deepfashion_full-256x192.py 中该值为512是三个配置中的一处差异。3.3 训练钩子按 AUC 保存最优权重default_hooks dict( loggerdict(typeLoggerHook, interval10), checkpointdict(save_bestAUC, rulegreater))日志每 10 次迭代输出一次checkpoint 钩子以验证集 AUC 为监控指标、取“更大更优”规则保存最优模型这与评估指标体系AUC 越高越好保持一致。3.4 编解码器MSRAHeatmapcodec dict( typeMSRAHeatmap, input_size(192, 256), heatmap_size(48, 64), sigma2)MSRAHeatmap 是 Simple Baseline 论文配套的经典热图编解码方式其源码位于 mmpose/codecs/msra_heatmap.py核心参数input_size模型输入尺寸 [w, h] [192, 256]heatmap_size热图输出尺寸 [48, 64]即输入 256x192 对应 64x48 热图下采样倍率为 4sigma高斯热图标准差此处为 2。从源码看编码阶段encode通过generate_gaussian_heatmaps将输入图像空间的关键点坐标除以scale_factor input_size / heatmap_size后投影到热图空间并生成高斯响应同时输出keypoint_weights作为回归权重解码阶段decode通过get_heatmap_maximum取热图最大值位置再经refine_keypoints做亚像素细化最后乘以scale_factor恢复到原图像空间。该类还支持unbiasedDarkPose 无偏编码与blur_kernel_size参数本配置未开启保持最朴素的 MSRA 方式。3.5 模型结构Top-Down 估计器 ResNet-50 热图头model dict( typeTopdownPoseEstimator, data_preprocessordict( typePoseDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue), backbonedict( typeResNet, depth50, init_cfgdict(typePretrained, checkpointtorchvision://resnet50), ), headdict( typeHeatmapHead, in_channels2048, out_channels6, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue, ))TopdownPoseEstimatorTop-Down 姿态估计器位于 mmpose/models/pose_estimatorsPoseDataPreprocessor使用 ImageNet 统计的 mean/std 做归一化bgr_to_rgbTrue适配 OpenCV 读图通道顺序主干为 ResNet-50in_channels2048对应 ResNet-50 最后 stage 的输出通道out_channels等于关键点数量——upper 为 6、lower 为 4、full 为 8与各子集关键点定义一一对应详见 deepfashion_upper.py、deepfashion_lower.py、deepfashion_full.py损失为KeypointMSELoss开启use_target_weightTrue即用 codec 生成的keypoint_weights对每个关键点的 MSE 加权测试阶段开启水平翻转测试flip_testTrue对翻转前后的热图在通道级进行平均flip_modeheatmap并做热图偏移校正shift_heatmapTrue可进一步提升定位精度。3.6 数据流水线train_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeRandomFlip, directionhorizontal), dict(typeRandomBBoxTransform), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typeGenerateTarget, encodercodec), dict(typePackPoseInputs) ] val_pipeline [ dict(typeLoadImage), dict(typeGetBBoxCenterScale), dict(typeTopdownAffine, input_sizecodec[input_size]), dict(typePackPoseInputs) ] test_pipeline val_pipeline训练阶段包含水平随机翻转、包围框随机变换缩放/平移/旋转等数据增强并通过GenerateTarget调用上述 MSRAHeatmap codec 在线生成热图标签验证/测试阶段不启用随机增强仅做仿射变换对齐到 256x192。3.7 数据加载与评估数据集类型为DeepFashionDatasetdata_modetopdowndata_rootdata/fld/三个子集对应不同的标注文件upper 使用fld_upper_train/val/test.jsonlower 使用fld_lower_*.jsonfull 使用fld_full_*.json训练加载器batch_size64、num_workers2验证/测试加载器batch_size32评估器组合为val_evaluator [ dict(typePCKAccuracy, thr0.2), dict(typeAUC), dict(typeEPE), ]即同时报告 PCK0.2、AUC、EPE 三项指标与结果表完全对应。3.8 更大骨干的扩展方式目录下还提供了 ResNet-101 与 ResNet-152 的配置例如 td-hm_res101_8xb64-210e_deepfashion_upper-256x192.py 通过_base_继承 res50 配置仅将主干替换为更深版本_base_ ./td-hm_res50_8xb64-210e_deepfashion_upper-256x192.py model dict( backbonedict( typeResNet, depth101, init_cfgdict(typePretrained, checkpointtorchvision://resnet101)))ResNet-152 版本则同时将_base_指向 res101 配置并把depth改为 152。这种“最小增量覆盖”的配置继承方式是 MMPose 的通用做法方便快速实验不同主干。四、数据集定义三类服装子集的关键点语义DeepFashion服装关键点数据集的标注语义由仓库的_base_/datasets元信息文件定义其实现类DeepFashionDataset位于 mmpose/datasets/datasets/fashion/deepfashion_dataset.py继承自BaseCocoStyleDataset通过subset参数决定加载哪份元信息与标注。从该类源码的_check_subset_and_metainfo可以确认三个子集与元信息文件的对应关系并验证关键点索引语义upper6 个关键点deepfashion_upper.py索引 0-5 依次为 left collar、right collar、left sleeve、right sleeve、left hem、right hemlower4 个关键点deepfashion_lower.py索引 0-3 依次为 left waistline、right waistline、left hem、right hemfull8 个关键点deepfashion_full.py索引 0-7 依次为 left collar、right collar、left sleeve、right sleeve、left waistline、right waistline、left hem、right hem。各元信息文件还定义了两两互换的成对关键点swap字段例如 left collar ↔ right collar这正是训练流水线中水平翻转增强与测试阶段热图翻转融合flip_modeheatmap得以正确进行的前提。joint_weights均设置为 1表示各关键点等权参与损失计算。因此三份配置文件在head.out_channels上的差异6/4/8正是由各子集关键点数量决定这是理解三者精度差异PCK0.2 分别为 95.4/96.5/97.7的重要背景。五、训练、测试与推理实践在配置好数据将 DeepFashion 服装关键点标注按data/fld/目录结构放置后可按照 训练与测试指南 使用仓库根目录的脚本训练# 单机多卡训练 upper 子集模型 bash tools/dist_train.sh \ configs/fashion_2d_keypoint/topdown_heatmap/deepfashion/td-hm_res50_8xb64-210e_deepfashion_upper-256x192.py \ 8 # 单卡训练调试用 python tools/train.py \ configs/fashion_2d_keypoint/topdown_heatmap/deepfashion/td-hm_res50_8xb64-210e_deepfashion_upper-256x192.py测试/评估python tools/test.py \ configs/fashion_2d_keypoint/topdown_heatmap/deepfashion/td-hm_res50_8xb64-210e_deepfashion_upper-256x192.py \ checkpoint.pth训练过程中checkpoint钩子会自动按验证集 AUC 保存最优权重测试脚本会输出 PCK0.2、AUC、EPE 三项指标。如需在推理阶段直接对图片做端到端关键点预测可参考 inferencer 文档 使用MMPoseInferencer若需完整的“检测 关键点”流程可参考 demo 目录 中的 topdown 演示脚本如 topdown_demo_with_mmdet.py。六、总结MMPose 的 DeepFashion ResNet 方案是一个完整的服装关键点检测实战样板它在 DeepFashion 三个服装子集upper/lower/full上分别定义了 6/4/8 个语义关键点采用 Simple Baseline 2D 的“ResNet-50 主干 热图回归头”结构配以 MSRAHeatmap 编解码、Adam 线性预热 多步下降的优化策略以及 PCK0.2/AUC/EPE 三项评估体系在 256x192 输入下取得了上表所示结果。读者既可以按 配置目录 直接复现也可以通过继承 res50 配置快速替换为 ResNet-101/152 或迁移到自定义服装关键点任务。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考