MMPose 服装关键点检测实战:基于 DeepFashion2 数据集的 ResNet-50 热图方案
MMPose 服装关键点检测实战基于 DeepFashion2 数据集的 ResNet-50 热图方案【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose本篇技术指南聚焦 OpenMMLab 姿态估计工具箱 MMPose 中的服装关键点Fashion 2D Keypoint / Fashion Landmark检测任务以 DeepFashion2 数据集的 ResNet-50 配置家族 为线索完整解析Simple BaselineResNet-50 顶层热图Top-down Heatmap方案在 13 个服装类别上的工程实现。读完本文你将掌握 DeepFashion2 数据集的标注结构、MMPose 配置文件中从模型、编解码器、数据管道到评估器的完整参数语义并能直接基于仓库内的 13 份配置在任意类别上复现训练、验证与推理。任务背景DeepFashion2 与服装关键点检测DeepFashion2 是 2019 年 CVPR 上提出的通用服装理解基准论文题为A Versatile Benchmark for Detection, Pose Estimation, Segmentation and Re-Identification of Clothing Images除目标检测、分割与行人重识别外还提供了细粒度的**服装关键点fashion landmark**标注用于刻画衣领、袖口、下摆、腰带、拉链等服饰结构点。MMPose 将其纳入 2D 时尚关键点数据集家族任务定义为给定一张服装图像预测预定义的关键点坐标。该任务与人体姿态估计同源但又有自身特点关键点数量随服装类别变化、服装形变剧烈、类别间共享的语义点较少。为此MMPose 采用了一个类别一套配置的策略在 deepfashion2 配置目录 下为 13 个服装类别分别提供了独立的训练配置并共用一份数据集元信息文件。算法与骨架Simple Baseline ResNet-50本系列模型采用 SimpleBaseline2DXiao et al., ECCV2018提出的**顶层热图top-down heatmap**范式第一阶段由外部检测器给出服装目标的边界框第二阶段在框内对单个目标进行关键点估计——网络直接输出 K 通道的似然热图每个通道对应一个关键点的概率分布而不是直接回归坐标。模型骨架为 ResNet-50He et al., CVPR2016由 ImageNet 预训练权重初始化配置中init_cfg指定checkpointtorchvision://resnet50。整条链路在配置中的体现如下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_channels294, lossdict(typeKeypointMSELoss, use_target_weightTrue), decodercodec), test_cfgdict( flip_testTrue, flip_modeheatmap, shift_heatmapTrue, ))其中几个值得注意的设计HeatmapHead的out_channels294对应数据集中全部 13 个服装类别的关键点总数。DeepFashion2 的标注体系将每个类别独立编号例如 short_sleeved_shirt 的sss_kpt1~sss_kpt16、long_sleeved_shirt 的lss_kpt1~lss_kpt33合计 294 个关键点具体定义见 数据集元信息。KeypointMSELossuse_target_weightTrue对每个关键点的 MSE 损失乘以对应权重天然处理遮挡/缺失关键点。flip_testTrueflip_modeheatmapshift_heatmapTrue测试时对输入做水平翻转将两路热图融合含 1 像素偏移校正可稳定提升精度。13 个类别与配置文件家族deepfashion2 配置目录 下共 13 份td-hm_res50_*xb64-210e_deepfasion2-*-256x192.py配置文件命名规范为模型-批量(批数xbatch)-轮数_数据集-类别-输入尺寸。除批量大小与auto_scale_lr基数外各配置的模型、优化器、学习率策略、数据管道与评估器完全一致。服装类别配置文件仓库相对路径批次批数×64short_sleeved_shirttd-hm_res50_6xb64-...-short-sleeved-shirt-256x192.py6×64long_sleeved_shirttd-hm_res50_8xb64-...-long-sleeved-shirt-256x192.py8×64short_sleeved_outweartd-hm_res50_8xb64-...-short-sleeved-outwear-256x192.py8×64long_sleeved_outweartd-hm_res50_8xb64-...-long-sleeved-outwear-256x192.py8×64vesttd-hm_res50_4xb64-...-vest-256x192.py4×64slingtd-hm_res50_4xb64-...-sling-256x192.py4×64shortstd-hm_res50_3xb64-...-shorts-256x192.py3×64trouserstd-hm_res50_2xb64-...-trousers-256x192.py2×64skirttd-hm_res50_1xb64-...-skirt-256x192.py1×64short_sleeved_dresstd-hm_res50_4xb64-...-short-sleeved-dress-256x192.py4×64long_sleeved_dresstd-hm_res50_1xb64-...-long-sleeved-dress-256x192.py1×64vest_dresstd-hm_res50_1xb64-...-vest-dress-256x192.py1×64sling_dresstd-hm_res50_4xb64-...-sling-dress-256x192.py4×64批次大小反映各类别样本量的差异样本充足的类别如长袖衬衫使用 8×64样本稀疏的类别如半身裙、长袖连衣裙、背心裙使用 1×64通过增大单卡 batch 使每个 epoch 的迭代次数保持在合理范围。相应地各配置的auto_scale_lr dict(base_batch_size批量总数)训练时会依据实际总 batch size 自动线性缩放学习率。配置参数全解析以 short_sleeved_shirt 配置 td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py 为模板逐段解读_base_ [../../../_base_/default_runtime.py] # runtime train_cfg dict(max_epochs210, val_interval10) # optimizer optim_wrapper dict(optimizerdict(typeAdam, lr5e-4)) # learning policy param_scheduler [ dict(typeLinearLR, begin0, end500, start_factor0.001, by_epochFalse), # warm-up dict(typeMultiStepLR, begin0, end210, milestones[170, 200], gamma0.1, by_epochTrue) ] # automatically scaling LR based on the actual training batch size auto_scale_lr dict(base_batch_size384)训练轮次max_epochs210每val_interval10个 epoch 做一次验证。优化器Adam初始学习率5e-4。相比 SGDAdam 在服装关键点这类相对小规模任务上收敛更稳定。学习率调度前 500 个迭代by_epochFalse即按迭代计用LinearLR从 0.001 倍学习率线性热身随后MultiStepLR在 epoch 170 与 200 处各衰减 0.1 倍属于典型的长训练 末期阶梯衰减策略。auto_scale_lrbase_batch_size384即 6×64。配置中带auto_scale_lr时MMEngine 会按新总batch/384的比例自动缩放学习率并输出建议。编解码器Codec是 MMPose 连接图像空间关键点坐标与热图表示的桥梁codec dict( typeMSRAHeatmap, input_size(192, 256), heatmap_size(48, 64), sigma2)MSRAHeatmap即 Simple Baseline 论文中的 MSRA 高斯热图方案实现位于 mmpose/codecs/msra_heatmap.py编码阶段将关键点坐标绘制成(K, H, W)的高斯热图sigma2控制高斯核宽度其构造函数还支持unbiasedTrue的 DarkPose 无偏形式解码阶段则从预测热图中取最大值位置get_heatmap_maximum并可选做亚像素细化refine_keypoints/refine_keypoints_dark。输入尺寸 256×192 对应输出热图 64×48即 4 倍下采样。数据管道Pipeline分为训练与验证两套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) ]训练管道依次完成读取图像 → 由标注框计算中心点与尺度 → 水平随机翻转数据增强需与元信息中关键点的swap映射配合→ 对框做随机平移/缩放 → 仿射变换裁剪到 256×192 → 通过MSRAHeatmap编码器生成高斯热图标签 → 打包输入验证管道不含随机增强直接裁剪并对齐到网络输入。数据加载器data_root data/deepfasion2/训练集标注为train/deepfashion2_short_sleeved_shirt_train.json、图像前缀train/image/验证集对应validation/目录test_dataloader val_dataloader复用验证集。数据集实现类为DeepFashion2Dataset见 mmpose/datasets/datasets/fashion/deepfashion2_dataset.py继承BaseCocoStyleDataset通过METAINFO从 数据集元信息 加载 13 个类别的关键点定义、可视化配色与左右对称swap关系。评估指标与结果评估器统一使用三项指标实现见 keypoint_2d_metrics.pyPCK0.2预测点落在距真值 0.2×躯干直径范围内的比例AUC不同归一化阈值下 PCK 曲线的面积反映整体定位精度EPE关键点平均像素误差越小越好。配置中对应为val_evaluator [ dict(typePCKAccuracy, thr0.2), dict(typeAUC), dict(typeEPE), ] test_evaluator val_evaluator同时default_hooks中checkpointdict(save_bestAUC, rulegreater)会按 AUC 保存最佳权重。官方在 DeepFashion2 验证集上的 ResNet-50 结果如下模型权重与训练日志可通过对应配置文件在 MMPose 模型库中获取详见 model-index 元数据类别架构输入尺寸PCK0.2AUCEPEshort_sleeved_shirtResNet-50256×1920.9880.70310.2long_sleeved_shirtResNet-50256×1920.9730.58716.6short_sleeved_outwearResNet-50256×1920.9660.40824.0long_sleeved_outwearResNet-50256×1920.9870.51718.1vestResNet-50256×1920.9810.64312.7slingResNet-50256×1920.9400.55721.6shortsResNet-50256×1920.9750.68212.4trousersResNet-50256×1920.9730.62514.8skirtResNet-50256×1920.9520.65316.6short_sleeved_dressResNet-50256×1920.9800.60315.6long_sleeved_dressResNet-50256×1920.9760.51820.1vest_dressResNet-50256×1920.9800.60016.0sling_dressResNet-50256×1920.9670.54419.5各类别的结果汇总同样收录于 topdown_heatmap 总览 README 的 DeepFashion2 一节。从结果可以看出一个明显规律结构规整、形变小的类别短袖衬衫、短裤、马甲精度高而褶皱多、遮挡严重的类别吊带、短袖外套精度相对偏低这也为后续在服装关键点任务上引入更强骨干或基于 DARK 无偏热图的改进提供了基线参考。训练、测试与复现数据准备按配置文件约定将 DeepFashion2 数据置于data/deepfasion2/下目录结构为train/image/、train/*_train.json、validation/image/、validation/*_validation.json具体准备步骤可参考 数据集准备指南。单卡训练任意类别将CONFIG替换为目标类别的配置文件路径python tools/train.py CONFIG多卡分布式训练使用 tools/dist_train.shbash tools/dist_train.sh CONFIG 8测试WORK_DIR/epoch_210.pth或best_AUC_epoch_*.pth为训练产出的权重路径python tools/test.py CONFIG WORK_DIR/epoch_210.pth # 或分布式 bash tools/dist_test.sh CONFIG WORK_DIR/epoch_210.pth 8借助配置文件内建的auto_scale_lr当你在不同卡数/批量下复现时学习率会自动按实际总 batch 相对base_batch_size的比例缩放无需手工调参。训练过程中的日志、checkpoint 以及按 AUC 选择的最佳模型会写入work_dirs/下的对应目录。小结本文以 res50_deepfashion2.md 为骨架完整梳理了 MMPose 中 DeepFashion2 服装关键点检测的 ResNet-50 顶层热图方案从任务背景、Simple Baseline 架构、13 份类别配置的差异设计到 codec、数据管道、评估指标与训练复现命令并下钻到DeepFashion2Dataset、MSRAHeatmap等源码实现。这套一类一配置的工程范式同样适用于其他服装理解场景——只需替换数据集元信息、调整out_channels与标注文件即可快速迁移到自定义的时尚关键点任务上。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考