ViTPose 中 HRNet 训练 Animal-Pose 动物姿态估计的完整配置与实现剖析

发布时间:2026/10/13 15:31:18
ViTPose 中 HRNet 训练 Animal-Pose 动物姿态估计的完整配置与实现剖析
人工智能计算机视觉深度学习【免费下载链接】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 仓库中 Animal-Pose 数据集上 HRNet 模型族的标准基准页configs/animal/2d_kpt_sview_rgb_img/topdown_heatmap/animalpose/hrnet_animalpose.md展开完整覆盖其结果指标与引用来源并结合仓库中的真实配置文件、数据集实现与数据准备流程讲透这套 Top-Down 热图方案在 20 关节动物姿态估计上的配置结构、数据管线与评测方式读完后可直接复现 Animal-Pose 上的 HRNet-W32/W48 训练与测试。一、文档定位Animal-Pose 上 HRNet 的官方基准该基准页隶属于 Animal-PoseICCV2019论文Cross-Domain Adaptation for Animal Pose Estimation数据集的 Top-Down 热图模型目录专门收录 HRNet 架构在 Animal-Pose 验证集1117 个实例上的官方结果。文档给出了两组算法/数据集引用及完整的结果表对应的训练配置为pose_hrnet_w32hrnet_w32_animalpose_256x256.pypose_hrnet_w48hrnet_w48_animalpose_256x256.py两组模型共享同一套模型骨架与数据流程唯一实质差异是 HRNet 各 stage 的通道宽度w32 vs w48这一点在后文配置剖析中会逐参数展开。二、引用来源HRNet 与 Animal-Pose基准页以折叠块形式给出两条 BibTeX 引用这里完整保留便于论文写作时直接引用。HRNetCVPR2019inproceedings{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} }HRNet 的核心思想是全程保持高分辨率特征表示通过多分辨率分支与跨分辨率交换融合信息使得最细分支本文 w32 版为 32 通道、w48 版为 48 通道可以直接作为热图头的输入无需反卷积上采样——这也是配置中num_deconv_layers0的原因。ViTPose 仓库中的 HRNet 实现位于 mmpose/models/backbones/hrnet.py以BACKBONES.register_module()注册。Animal-PoseICCV2019InProceedings{Cao_2019_ICCV, author {Cao, Jinkun and Tang, Hongyang and Fang, Hao-Shu and Shen, Xiaoyong and Lu, Cewu and Tai, Yu-Wing}, title {Cross-Domain Adaptation for Animal Pose Estimation}, booktitle {The IEEE International Conference on Computer Vision (ICCV)}, month {October}, year {2019} }Animal-Pose 是一个跨域动物姿态数据集训练集取自 PASCAL2011 的五类动物狗、猫、羊、牛、马测试集为另外采集的 1000 张图像。官方未提供标准划分MMPose 侧的处理是从 PascalVOC 图像中选取 trainval 共 3608 张3608 张、5117 个实例其中 2798 张 / 4000 个实例用于训练810 张 / 1117 个实例用于验证即基准页中1117 instances的出处其余 1000 张 / 1000 个实例作为测试集。这些数据组织说明见 2d_animal_keypoint.md。三、官方结果与模型权重基准页给出的完整结果表Animal-Pose validation set, 1117 instances如下ArchInput SizeAPAP50AP75ARAR50ckptlogpose_hrnet_w32256x2560.7360.9590.8320.7750.966ckpt: hrnet_w32_animalpose_256x256-1aa7f075_20210426.pthlog.jsonpose_hrnet_w48256x2560.7370.9590.8230.7780.962ckpt: hrnet_w48_animalpose_256x256-34644726_20210426.pthlog.json原表中 ckpt/log 两列为 OpenMMLab 下载站的权重与训练日志文件文件名已保留以便检索。两个模型的差距极小AP 0.736 vs 0.737w48 通道加宽带来的收益几乎被 w32 更小的模型规模优势抵消这从源码结构看是合理的Animal-Pose 训练实例仅 4000 个数据量有限更宽的骨干容易过拟合。结构化元数据模型名、指标、权重地址与本文结果表一致见 hrnet_animalpose.yml其中模型命名为topdown_heatmap_hrnet_w32_animalpose_256x256与topdown_heatmap_hrnet_w48_animalpose_256x256。同目录下还有 ResNet 系列的对照基准resnet_animalpose.md 及 res50/res101/res152 配置可与 HRNet 横向比较。四、配置深度剖析以 hrnet_w32 为例以下参数说明以 hrnet_w32_animalpose_256x256.py 为准w48 配置除骨干通道外与之逐行一致。4.1 基础配置与运行策略_base_ [ ../../../../_base_/default_runtime.py, ../../../../_base_/datasets/animalpose.py ] evaluation dict(interval10, metricmAP, save_bestAP)第一个 base 提供检查点保存每 10 epoch、日志、NCCL 分布式后端与fork多进程启动方式等运行期默认项见 default_runtime.py第二个 base 提供dataset_info即 20 个关节的名称、颜色、左右对称对swap、骨架连线skeleton_info、各关节损失权重joint_weightsKnee 为 1.2Paw 为 1.5以及用于 COCO 协议的sigmas。sigmas的来源值得注意animalpose.py 中的注释指出原论文未给出足够的 sigma 信息此处参考 COCO API 的做法修改得到evaluation每 10 个 epoch 计算一次 mAP并按 AP 保存最优权重。4.2 优化器与学习率策略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即 Adam初始学习率 5e-4、前 500 次迭代线性预热预热起点为最终学习率的 0.1%、在第 170 与 200 个 epoch 处 step 衰减共训练 210 个 epoch。这是 HRNet 在姿态任务上的典型配方与人体姿态COCO上的 HRNet 配置保持一致便于动物任务复用人体预训练权重。4.3 通道定义20 个关节单分组channel_cfg dict( num_output_channels20, dataset_joints20, dataset_channel[[0, 1, 2, ..., 19]], inference_channel[0, 1, 2, ..., 19])Animal-Pose 的 20 个关节L_Eye、R_Eye、L_EarBase、R_EarBase、Nose、Throat、TailBase、Withers、前后腿的 Elbow/Knee/Paw 共 8 个、左右各一对 EarBase 与 Eye 之外的对称点全部放进同一个分组热图头直接输出 20 通道。关节顺序与 animalpose.py 中keypoint_info完全对应也与 animal_pose_dataset.py 的 docstring 中Animal-Pose keypoint indexes一致。4.4 骨干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))), ), ...)各 stage 的num_channels最细分支即为模型名中的宽度w32 版为 32/64/128/256w48 版hrnet_w48_animalpose_256x256.py为 48/96/192/384。pretrained加载的是在 ImageNet 上预训练、与 HRNet 姿态版本兼容的权重这是从人体姿态领域迁移到动物姿态的关键一步跨域微调。检测器类型TopDown的实现位于 top_down.py。4.5 热图头与损失keypoint_headdict( typeTopdownHeatmapSimpleHead, in_channels32, # w48 配置中为 48 out_channelschannel_cfg[num_output_channels], num_deconv_layers0, extradict(final_conv_kernel1, ), loss_keypointdict(typeJointsMSELoss, use_target_weightTrue))in_channels必须等于 HRNet 最细分支通道数w32 为 32w48 为 48这正是两份配置唯一的头侧差异num_deconv_layers0配合 1x1final_conv_kernel依赖 HRNet 保持高分辨率的特点直接回归 64x64 热图JointsMSELoss并启用use_target_weight意味着 20 个关节按joint_weightsPaw 关节权重最高为 1.5加权计算 MSE。4.6 测试配置test_cfgdict( flip_testTrue, post_processdefault, shift_heatmapTrue, modulate_kernel11)flip_test表示推理时做水平翻转并平均依赖dataset_info中的左右swap关节对shift_heatmap启用半像素偏移修正modulate_kernel11指定高斯调制核大小用于热图后处理。4.7 数据配置与数据管线data_cfg dict( image_size[256, 256], heatmap_size[64, 64], ... use_gt_bboxTrue, det_bbox_thr0.0, bbox_file, )use_gt_bboxTrue且bbox_file表明训练/验证阶段直接使用 COCO 标注中的 GT 边界框裁剪出动物 ROI该配置对应的_get_db中assert self.use_gt_bbox即基准结果不依赖任何检测器评测的是姿态估计器本身。训练管线配置文件第 101–124 行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), dict(typeCollect, keys[img, target, target_weight], meta_keys[image_file, joints_3d, joints_3d_visible, center, scale, rotation, bbox_score, flip_pairs]), ]要点50% 概率随机水平翻转30% 概率以 8 个可见关节为中心做半身体裁剪TopDownHalfBodyTransform随机旋转角不超过 ±40°、随机缩放范围 0.5 倍TopDownGenerateTarget以 sigma2 的高斯核生成 64x64 热图标签归一化使用 ImageNet 均值/方差。验证/测试管线val_pipelinetest_pipeline val_pipeline仅做仿射裁剪与归一化无增强。批大小为samples_per_gpu64验证/测试为 32。五、AnimalPoseDataset 的实现与评测细节数据集类AnimalPoseDataset位于 animal_pose_dataset.py继承自Kpt2dSviewRgbImgTopDownDataset核心行为有三点样本加载_get_db断言必须使用 GT bbox随后_load_coco_keypoint_annotations对每个 COCO 标注做 bbox 清洗裁剪到图像边界、过滤零面积框与全零关键点并将bbox换算为center/scale供仿射裁剪mAP 评测evaluate仅支持mAP指标。预测结果按bbox_id排序去重_sort_and_unique_bboxes用于消除 flip_test 产生的重复框随后对每个实例做 rescoring可见关节平均得分 × 框得分与 OKS-NMSoks_nms/soft_oks_nms由data_cfg中soft_nmsFalse、oks_thr0.9、vis_thr0.2控制最后写入result_keypoints.json并用xtcocotools的COCOeval以配置中的sigmas计算 AP/AR返回 AP、AP .5、AP .75、AR 等 10 项统计量——即基准表中列出的指标可测试性上述流程有单元测试覆盖见 test_animal_dataset.py 中的test_animalpose_dataset其中构造的channel_cfg/data_cfg与训练配置逐项一致20 通道、256x256 输入、64x64 热图。六、数据准备与复现步骤6.1 数据集组织按 2d_animal_keypoint.md 的说明将数据解压到{ViTPose}/data下形成如下结构建议对data目录做符号链接data └── animalpose ├── VOC2011 # 训练/验证图像PASCAL2011 五类动物 ├── animalpose_image_part2 # 测试图像cat/cow/dog/horse/sheep ├── annotations │ ├── animalpose_train.json │ ├── animalpose_val.json │ ├── animalpose_trainval.json │ └── animalpose_test.json ├── PASCAL2011_animal_annotation └── annimalpose_anno2COCO 格式的标注文件已由官方预处理好可从 OpenMMLab 的animalpose_annotations.tar下载若需自行生成可使用仓库中的解析脚本 parse_animalpose_dataset.py该脚本将 Pascal VOC 的 XML 标注含 20 个关节名与 20 条骨架连线定义转换为 COCO 格式。6.2 训练在仓库根目录执行单机 8 卡为例GPU 数量与卡数按实际情况调整python tools/train.py \ configs/animal/2d_kpt_sview_rgb_img/topdown_heatmap/animalpose/hrnet_w32_animalpose_256x256.py \ --work-dir work_dirs/animalpose/hrnet_w32入口脚本为 tools/train.py分布式版本可用tools/dist_train.sh。若显存不足可减小配置中的samples_per_gpu默认 64。6.3 测试与推理python tools/test.py \ configs/animal/2d_kpt_sview_rgb_img/topdown_heatmap/animalpose/hrnet_w32_animalpose_256x256.py \ work_dirs/animalpose/hrnet_w32/latest.pth \ --eval mAP测试入口为 tools/test.py评测逻辑即第五节所述的AnimalPoseDataset.evaluate在 Animal-Pose 验证集1117 个实例上应得到与基准表接近的 AP 0.736w32/ 0.737w48。由于配置中use_gt_bboxTrue测试时同样使用标注中的 GT 框如需端到端检测姿态流程可另行启用检测器 bbox 文件bbox_file。七、小结hrnet_animalpose.md这份基准页虽然简短但它锚定了 ViTPose 仓库中 Animal-Pose 任务最经典的一组 Top-Down 热图模型HRNet-W32/W48 20 关节单通道分组 无检测器GT bbox设定在验证集上分别取得 0.736/0.737 AP。结合 hrnet_w32_animalpose_256x256.py 的完整配置、animal_pose_dataset.py 的加载与 COCO 协议评测实现、以及 2d_animal_keypoint.md 的数据组织说明即可完整复现该基准从 PASCAL2011 五类动物图像与 COCO 标注构建data/animalpose使用 Adam(5e-4) 210 epoch step[170,200] 的学习率策略微调 ImageNet 预训练的 HRNet最终在 1117 个验证实例上以 OKS-NMS COCOeval含专用sigmas与关节权重输出 AP/AR 指标。该配置模式换dataset_infobase、改channel_cfg与keypoint_head.in_channels也可推广到仓库中的 AP-10K、Horse-10、MacaquePose 等其他动物数据集。赞分享人工智能计算机视觉深度学习【免费下载链接】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 仓库实战基于 SimpleBaseline2D ResNet 的 Animal-Pose 动物姿态估计配置全解ViTPose 仓库实战基于 SimpleBaseline2D ResNet 的 Animal Pose 动物姿态估计配置全解 本文以 ViTPose 仓人工智能计算机视觉深度学习ViTPose 人体姿态估计开源仓库全指南从 ViT 骨干到 ViTPose 多任务 MoE 的配置、训练与评测实践ViTPose 人体姿态估计开源仓库全指南从 ViT 骨干到 ViTPose 多任务 MoE 的配置、训练与评测实践 本篇技术指南以当前仓库 README人工智能计算机视觉深度学习MMPose 中 HRNet 在 PoseTrack18 上的 Top-Down 热图人体姿态估计配置、训练策略与评测全流程解析MMPose 中 HRNet 在 PoseTrack18 上的 Top Down 热图人体姿态估计配置、训练策略与评测全流程解析 本文以 MMPose 模型库计算机视觉人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考