人工智能计算机视觉深度学习【免费下载链接】ViTPoseThe official repo for [NeurIPS22] ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation and [TPAMI23] ViTPose: Vision Transformer for Generic Body Pose Estimation项目地址https://gitcode.com/gh_mirrors/vi/ViTPose点击查看免费下载本文以 ViTPose 仓库中 hrnet_dark_coco-wholebody.md 为核心系统讲解如何在 COCO-WholeBody133 点全身姿态数据集上使用 HRNet 骨干网络结合 DarkPose 无偏坐标编解码方案完成训练与评估。读完本文你将掌握两套官方配置HRNet-W32 256x192 与 HRNet-W48 384x288的完整参数含义、DarkPose 在仓库源码中的具体实现位置以及如何复现论文中的 Body / Foot / Face / Hand / Whole 分部位 AP、AR 指标。背景为什么是 HRNet DarkPose COCO-WholeBody本文关联文档对应三种核心技术的组合HRNetCVPR2019Deep High-Resolution Representation Learning for Human Pose Estimation通过并行多分辨率分支与反复跨分辨率融合始终保留高分辨率特征是 top-down 热图方法中的经典骨干网络DarkPoseCVPR2020Distribution-Aware Coordinate Representation for Human Pose Estimation通过无偏编码 无偏解码消除传统热图方法中坐标量化的系统性偏差COCO-WholeBodyECCV2020Whole-Body Human Pose Estimation in the Wild在 COCO 17 个身体关键点基础上扩展了脚部6 点、面部68 点和手部42 点关键点共 133 个关键点。从仓库目录结构看该模型方案位于 configs/wholebody/2d_kpt_sview_rgb_img/topdown_heatmap/coco-wholebody/属于2D 关键点、单视角、RGB 图像、top-down 热图任务分支与同目录下的 ViTPose 系列、ResNet、ViP-NAS 方案并列是全身姿态估计基准的重要组成。官方结果一览COCO-WholeBody v1.0 val文档中给出的评估条件为检测器在 COCO val2017 上人体 AP 为 56.4评估使用 COCO-WholeBody v1.0 验证集。官方配置与指标如下ArchInput SizeBody APBody ARFoot APFoot ARFace APFace ARHand APHand ARWhole APWhole ARpose_hrnet_w32_dark256x1920.6940.7640.5650.6740.7360.8080.5030.6020.5820.671pose_hrnet_w48_dark384x2880.7420.8070.7050.8040.8400.8920.6020.6940.6610.743其中各列含义Body / Foot / Face / Hand分别对应 17 个身体点、6 个脚部点、68 个面部点、42 个手部点的 AP 与 ARWhole133 个关键点全体的 AP 与 AR官方 Checkpoint 与训练日志下载地址随表格附注ckpt / log 列可在复现或推理时直接下载使用。文档还特别指出表示该模型先在原始 COCO 数据集上预训练再在 COCO-WholeBody 数据集上微调官方实验表明这种两阶段策略能带来更好的性能。这正是第二个配置中load_from字段的来源详见下文。配置一pose_hrnet_w32_dark256x192完整配置见 hrnet_w32_coco_wholebody_256x192_dark.py。下面按模块拆解关键配置。数据集与 133 通道配置配置文件通过_base_继承基础运行时与数据集定义_base_ [ ../../../../_base_/default_runtime.py, ../../../../_base_/datasets/coco_wholebody.py ]其中 coco_wholebody.py 定义了 COCO-WholeBody 数据集的完整dataset_info包含 133 个关键点的名称、颜色、左右互换关系swap与骨架连线skeleton。从TopDownCocoWholeBodyDataset的源码注释可以确认关键点索引的划分方式见 topdown_coco_wholebody_dataset.py0-16: 17 个身体关键点 17-22: 6 个脚部关键点 23-90: 68 个面部关键点 91-132: 42 个手部关键点 共 133 个关键点两个配置都使用相同的通道配置channel_cfg dict( num_output_channels133, dataset_joints133, dataset_channel[list(range(133))], inference_channellist(range(133)))模型结构HRNet 骨干 简单热图头model dict( typeTopDown, pretrainedhttps://download.openmmlab.com/mmpose/ pretrain_models/hrnet_w32-36af842e.pth, backbonedict( typeHRNet, in_channels3, extradict( stage1dict( num_modules1, num_branches1, blockBOTTLENECK, num_blocks(4, ), num_channels(64, )), stage2dict( num_modules1, num_branches2, blockBASIC, num_blocks(4, 4), num_channels(32, 64)), stage3dict( num_modules4, num_branches3, blockBASIC, num_blocks(4, 4, 4), num_channels(32, 64, 128)), stage4dict( num_modules3, num_branches4, blockBASIC, num_blocks(4, 4, 4, 4), num_channels(32, 64, 128, 256)))), keypoint_headdict( typeTopdownHeatmapSimpleHead, in_channels32, out_channelschannel_cfg[num_output_channels], num_deconv_layers0, extradict(final_conv_kernel1, ), loss_keypointdict(typeJointsMSELoss, use_target_weightTrue)), train_cfgdict(), test_cfgdict( flip_testTrue, post_processunbiased, shift_heatmapTrue, modulate_kernel11))要点解读HRNet 四阶段结构stage1 为 1 个分支的 BOTTLENECK 残差块stage2stage4 逐步扩展到 2、3、4 个并行分支通道数依次为 (32,64)、(32,64,128)、(32,64,128,256)。HRNet 的实现位于 mmpose/models/backbones/hrnet.py其核心HRModule类负责多分支构建与跨分辨率特征融合_make_branches/_make_fuse_layers简单热图头TopdownHeatmapSimpleHead实现见 topdown_heatmap_simple_head.py使用 HRNet 最高分辨率分支in_channels32的输出num_deconv_layers0表示不额外堆叠反卷积直接通过 1x1 卷积输出 133 通道热图损失函数为带 target_weight 的JointsMSELossDarkPose 解码test_cfg中post_processunbiased是 DarkPose 无偏解码的关键开关modulate_kernel11对应高斯调制核大小需要与训练时的高斯 sigma2 匹配见后文源码说明。数据路径与检测框data_cfg dict( image_size[192, 256], heatmap_size[48, 64], num_output_channels133, num_joints133, dataset_channelchannel_cfg[dataset_channel], inference_channelchannel_cfg[inference_channel], soft_nmsFalse, nms_thr1.0, oks_thr0.9, vis_thr0.2, use_gt_bboxFalse, det_bbox_thr0.0, bbox_filedata/coco/person_detection_results/ COCO_val2017_detections_AP_H_56_person.json, )image_size[192, 256]与heatmap_size[48, 64]输入图像尺寸与输出热图尺寸热图分辨率为输入的 1/4use_gt_bboxFalse验证时不使用真实框而是使用检测框文件COCO_val2017_detections_AP_H_56_person.json该检测器在 COCO val2017 上人体 AP 为 56.4与文档评测条件一致训练时则使用 GT 框soft_nmsFalse、nms_thr1.0单目标 top-down 流程中的 NMS 相关配置。训练流水线中的 DarkPose 无偏编码train_pipeline [ dict(typeLoadImageFromFile), dict(typeTopDownRandomFlip, flip_prob0.5), dict(typeTopDownHalfBodyTransform, num_joints_half_body8, prob_half_body0.3), dict(typeTopDownGetRandomScaleRotation, rot_factor40, scale_factor0.5), dict(typeTopDownAffine), dict(typeToTensor), dict(typeNormalizeTensor, mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), dict(typeTopDownGenerateTarget, sigma2, unbiased_encodingTrue), dict(typeCollect, keys[img, target, target_weight], meta_keys[image_file, joints_3d, joints_3d_visible, center, scale, rotation, bbox_score, flip_pairs]), ]TopDownGenerateTarget(sigma2, unbiased_encodingTrue)是 DarkPose 训练侧的关键。在 top_down_transform.py 的源码中可以看到两种高斯热图生成路径的差异传统 MSRA 方式先将关键点坐标除以特征步长后取整mu_x int(...)再以整数位置为中心放置高斯核这引入了最多 0.5 像素的量化偏移无偏编码方式unbiased_encodingTrue不再取整直接以浮点坐标mu_x joints_3d[joint_id][0] / feat_stride[0]计算高斯分布exp(-((x-mu_x)^2(y-mu_y)^2)/(2*sigma^2))热图中心与真实关键点精确对齐从根本上消除了编码阶段的量化偏差。同理验证/测试流水线不生成 target仅做仿射变换、归一化并收集center/scale/rotation等用于坐标回映射的元信息。优化器与学习率optimizer dict(typeAdam, lr5e-4) optimizer_config dict(grad_clipNone) lr_config dict( policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[170, 200]) total_epochs 210 evaluation dict(interval10, metricmAP, save_bestAP)优化器为 Adam初始学习率 5e-4学习率采用 step 策略线性 warmup 500 步后在第 170 与第 200 个 epoch 衰减总训练 210 个 epoch评估每 10 个 epoch 执行一次指标为 mAP并依据 Whole 的 AP 保存最优模型运行时基配置见 default_runtime.py每 10 个 epoch 保存一次 checkpoint日志每 50 个迭代输出一次。配置二pose_hrnet_w48_dark384x288完整配置见 hrnet_w48_coco_wholebody_384x288_dark_plus.py。它与 W32 版本的核心差异如下先在 COCO 预训练再在 WholeBody 微调策略load_from https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_384x288_dark-741844ba_20200812.pth model dict( typeTopDown, pretrainedNone, # 不再加载 ImageNet 预训练权重 ... )load_from指向一个已在 COCO 数据集上训练好的 HRNet-W48 DarkPose 权重训练启动时直接加载该 checkpoint 作为初始化这正是文档中的含义先在原始 COCO 上训练、再在 COCO-WholeBody 上微调与之相对W32 配置使用pretrained加载 ImageNet 预训练权重hrnet_w32-36af842e.pth这是从头在 WholeBody 上训练的常规做法。更大的骨干与输入分辨率HRNet-W48stage2~stage4 分支通道数升级为 (48,96)、(48,96,192)、(48,96,192,384)keypoint_head.in_channels48输入与热图尺寸image_size[288, 384]、heatmap_size[72, 96]均为 W32 版本的 1.5 倍高斯 sigma 与调制核训练热图sigma3对应modulate_kernel17而 W32 版本为sigma2对应modulate_kernel11。这与源码中keypoints_from_heatmaps的注释一致——调制核大小需与训练高斯 sigma 匹配K17 for sigma3 and k11 for sigma2见 top_down_eval.pysamples_per_gpu32W32 为 64以适配更大的输入分辨率与模型容量。DarkPose 解码在仓库中的实现原理推理阶段test_cfg中的post_processunbiased会进入 top_down_eval.py 的keypoints_from_heatmaps无偏解码分支先通过_get_max_preds找到热图峰值坐标作为粗略预测对热图做高斯调制heatmaps np.log(np.maximum(_gaussian_blur(heatmaps, kernel), 1e-10))其中kernel即配置中的modulate_kernel在调制后的对数空间中对峰值邻域做Taylor 展开_taylor函数求亚像素级极值得到更精确的坐标最后通过transform_preds将热图坐标映射回原图use_udpFalse时按scale / output_size的简化比例回映射。对比之下普通post_processdefault只对峰值位置施加固定的 ±0.25 像素偏移修正精度远低于 DarkPose 的分布调制 Taylor 展开方案。这就是 DarkPose 在仓库中编码unbiased_encoding 解码post_processunbiased的完整闭环。另外两个配置都开启了flip_testTrue水平翻转测试双路热图融合与shift_heatmapTrue翻转后热图平移补偿进一步稳定预测结果。训练、测试与复现环境与数据准备按仓库 README.md 与 install.md 安装依赖mmcv、mmpose 及其 requirements准备 COCO 数据目录结构需满足data_root data/coco注释文件为annotations/coco_wholebody_train_v1.0.json与annotations/coco_wholebody_val_v1.0.json图像位于train2017/与val2017/验证时需要的检测框文件放在data/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json。训练命令单卡训练 W32 模型python tools/train.py configs/wholebody/2d_kpt_sview_rgb_img/topdown_heatmap/coco-wholebody/hrnet_w32_coco_wholebody_256x192_dark.py多卡分布式训练bash tools/dist_train.sh configs/wholebody/2d_kpt_sview_rgb_img/topdown_heatmap/coco-wholebody/hrnet_w32_coco_wholebody_256x192_dark.py 8训练入口 tools/train.py 支持--work-dir、--resume-from、--no-validate等参数单机多卡通过tools/dist_train.sh传入 GPU 数集群环境可使用tools/slurm_train.sh。测试命令python tools/test.py configs/wholebody/2d_kpt_sview_rgb_img/topdown_heatmap/coco-wholebody/hrnet_w32_coco_wholebody_256x192_dark.py \ work_dirs/hrnet_w32_coco_wholebody_256x192_dark/best_AP_epoch_210.pth \ --eval mAPevaluation配置中的metricmAP对应 top_down_eval.py 中的 COCO 评估实现会分别输出 Body / Foot / Face / Hand / Whole 各分部位的 AP 与 AR与本文开头的结果表一一对应。官方权重复现如需快速复现结果而非重新训练可直接下载官方 checkpoint见文档原表 ckpt / log 列并用上述 test 命令配合对应配置进行推理评估。W32 模型输入 256x192W48 模型输入 384x288两者post_processunbiased的评测行为完全一致可直接对比。小结与调参要点编码与解码必须配套DarkPose 方案要求训练侧unbiased_encodingTrue与测试侧post_processunbiased同时启用且modulate_kernel要与训练高斯sigma匹配sigma2 → kernel11sigma3 → kernel17否则坐标精度会退化分辨率与容量的权衡W48 384x288 相比 W32 256x192 在 Whole AP 上提升约 0.0790.582 → 0.661但显存占用与推理耗时同步上升samples_per_gpu需相应下调两阶段微调策略先在 COCO 预训练再在 WholeBody 微调可显著提升全身关键点精度官方在 W48 配置中通过load_from固化这一策略评估口径官方结果表基于 AP 56.4 的检测器框若要严格对比指标请使用配置中的bbox_file并在相同的翻转测试flip_testTrue设置下评测。赞分享人工智能计算机视觉深度学习【免费下载链接】ViTPoseThe official repo for [NeurIPS22] ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation and [TPAMI23] ViTPose: Vision Transformer for Generic Body Pose Estimation项目地址https://gitcode.com/gh_mirrors/vi/ViTPose点击查看免费下载相关推荐HRNetv2 DarkPose 手部关键点估计COCO-WholeBody-Hand 256×256 配置全解析基于 ViTPose 仓库HRNetv2 DarkPose 手部关键点估计COCO WholeBody Hand 256×256 配置全解析基于 ViTPose 仓库 本篇技术人工智能计算机视觉深度学习ViTPose 仓库实战LiteHRNet 在 COCO-WholeBody-Hand 上的 2D 手部关键点估计ViTPose 仓库实战LiteHRNet 在 COCO WholeBody Hand 上的 2D 手部关键点估计 本文以当前仓库ViTPose基于 Op人工智能计算机视觉深度学习HRNet 全身姿态估计实战MMPose 中 COCO-WholeBody 133 关键点模型库配置与源码解析HRNet 全身姿态估计实战MMPose 中 COCO WholeBody 133 关键点模型库配置与源码解析 本文以 hrnet_coco wholebod计算机视觉人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考