ViTPose 中的 HRNet 马姿态估计实战:Horse-10 数据集 Top-down Heatmap 配置解析与模型选型指南

发布时间:2026/10/13 15:17:15

ViTPose 中的 HRNet 马姿态估计实战:Horse-10 数据集 Top-down Heatmap 配置解析与模型选型指南 人工智能计算机视觉深度学习【免费下载链接】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 仓库中 Horse-10 动物姿态估计的 HRNet 基准文档 hrnet_horse10.md 展开系统讲解如何在动物 2D 关键点检测任务中使用 HRNetCVPR2019作为高分辨率特征骨干从官方 PCK/NME 基准结果出发深入剖析 w32 与 w48 两套配置文件的模型结构、训练策略与数据增强差异并给出可直接运行的训练、测试命令与评测指标实现依据。读完后你可以独立完成 Horse-10 数据集上的 HRNet 模型复现、按 split 划分做基准测试并根据精度/速度需求选择合适的 backbone 宽度。一、任务背景HRNet 与 Horse-10 数据集该基准文档关联两篇论文骨干网络——HRNetCVPR2019通过多分辨率并行分支与跨分辨率交互保持高分辨率表征从源码结构看其实现位于 hrnet.py在 top-down heatmap 范式中与TopdownHeatmapSimpleHead配合输出关键点热图inproceedings{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} }数据集——Horse-10WACV2021来源于 Mathis 等人的预训练鲁棒性研究用于非人类马2D 姿态估计inproceedings{mathis2021pretraining, title{Pretraining boosts out-of-domain robustness for pose estimation}, author{Mathis, Alexander and Biasi, Thomas and Schneider, Steffen and Yuksekgonul, Mert and Rogers, Byron and Bethge, Matthias and Mathis, Mackenzie W}, booktitle{Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision}, pages{1859--1868}, year{2021} }ViTPose 继承自 MMPose 的 animal 任务体系任务总览见 2D Animal Keypoint Detection将 Horse-10 归类于2d_kpt_sview_rgb_img/topdown_heatmap技术路线先由检测器或使用预标注 bbox框出单只马再对每个 bbox 做关键点热图回归。二、官方基准结果原始文档在 Horse-10 测试集上给出了 6 组 HRNet 官方结果完整继承如下SetArchInput SizePCK0.3NMEckptlogsplit1pose_hrnet_w32256x2560.9510.122ckptlogsplit2pose_hrnet_w32256x2560.9490.116ckptlogsplit3pose_hrnet_w32256x2560.9390.153ckptlogsplit1pose_hrnet_w48256x2560.9730.095ckptlogsplit2pose_hrnet_w48256x2560.9690.101ckptlogsplit3pose_hrnet_w48256x2560.9610.128ckptlog从结果可以看出两点选型经验其一w48 在三个 split 上均优于 w32PCK0.3 提升约 23 个点NME 降低约 0.03适合追求极限精度其二split3 在两种宽度下都是三个划分中最难的NME 最高这与数据集划分中不同马匹/场景差异有关评估时应以多个 split 综合判断而非单一 split。该表中记录的指标与 hrnet_horse10.yml 模型库索引一一对应Task: Animal 2D Keypoint。三、Horse-10 数据集结构22 个关键点与骨骼连接数据集元信息集中定义在 horse10.py 的dataset_info中。Horse-10 共有22 个关键点按语义可分为头部Nose、Eye、躯干Shoulder、Midshoulder、Elbow、Girth、Wither、Hip、Ischium、Stifle以及四肢前后腿的 knee/fetlock/foot/hockID关键点ID关键点0Nose11Girth1Eye12Wither2Nearknee13Nearhindhock3Nearfrontfetlock14Nearhindfetlock4Nearfrontfoot15Nearhindfoot5Offknee16Hip6Offfrontfetlock17Stifle7Offfrontfoot18Offhindhock8Shoulder19Offhindfetlock9Midshoulder20Offhindfoot10Elbow21Ischiumskeleton_info定义了 18 条骨骼连线例如Nose→Eye、Eye→Wither、Wither→Hip构成躯干主轴Nearknee→Nearfrontfetlock→Nearfrontfoot构成前腿链条用于可视化渲染joint_weights为 22 个关键点统一赋权 1.0即评测时各关节等权。由于马的姿态左右基本对称flip_pairs在数据集中为空swap这意味着水平翻转增强时不做关键点互换——这一细节在 animal_horse10_dataset.py 中通过继承 top-down 基类的通用翻转逻辑处理。数据下载与目录组织按 2d_animal_keypoint.md 的说明图像可从 Horse-10 官方主页下载标注文件为 OpenMMLab 提供的horse10_annotations.tar该数据仅限非商业使用。期望目录结构为mmpose │── data │── horse10 │── annotations │ │-- horse10-train-split1.json │ |-- horse10-train-split2.json │ |-- horse10-train-split3.json │ │-- horse10-test-split1.json │ |-- horse10-test-split2.json │ |-- horse10-test-split3.json │── train/ │── test/配置文件中的数据根目录即data/horse10见 hrnet_w32_horse10_256x256-split1.py 中data_root data/horse10train/val/test 分别读取对应 split 的 json 文件。四、模型配置文件深度解析以 hrnet_w32_horse10_256x256-split1.py 为基准w48 及 split2/3 的差异见后文4.1 继承关系与训练策略_base_ [ ../../../../_base_/default_runtime.py, ../../../../_base_/datasets/horse10.py ] evaluation dict(interval10, metricPCK, save_bestPCK)配置继承 default_runtime.py 的默认运行时参数与 horse10.py 的数据集元信息每 10 个 epoch 评测一次 PCK 并保存最优权重。学习率与调度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 次迭代线性 warmup从 0.001 倍升温至全量210 个 epoch 内于 170、200 epoch 处按 step 策略衰减学习率。4.2 骨干网络HRNet 多分辨率结构w32 与 w48 的差异体现在 HRNetextra的各 stage 通道数部位w32w48stage2 num_channels(32, 64)(48, 96)stage3 num_channels(32, 64, 128)(48, 96, 192)stage4 num_channels(32, 64, 128, 256)(48, 96, 192, 384)head in_channels3248ImageNet 预训练权重hrnet_w32-36af842e.pthhrnet_w48-8ef0771d.pthstage1 统一采用 1 个 BOTTLENECK 分支、64 通道stage2/3/4 分别使用 2/3/4 个并行分支做跨分辨率融合各 stage 的 module 数为 1/4/3每分支块数均为 4。两套配置分别从 ImageNet 预训练的hrnet_w32、hrnet_w48checkpoint 初始化pretrained字段这也是该任务“预训练提升跨域鲁棒性”主题的落地方式。关键点头与损失keypoint_headdict( typeTopdownHeatmapSimpleHead, in_channels32, # w48 配置中为 48 out_channelschannel_cfg[num_output_channels], # 22 num_deconv_layers0, extradict(final_conv_kernel1, ), loss_keypointdict(typeJointsMSELoss, use_target_weightTrue)),num_deconv_layers0不加反卷积上采样层HRNet 本身保持高分辨率1/4 下采样final_conv_kernel1末端为 1×1 卷积直接输出 22 通道热图JointsMSELossuse_target_weightTrue按关键点可见性加权的热图 MSE 损失。4.3 输入输出尺寸与通道映射data_cfg dict( image_size[256, 256], heatmap_size[64, 64], ...)输入裁剪框 256×256热图 64×64即 4 倍下采样与 HRNet 主干的 1/4 分辨率特征天然对齐。channel_cfg将 22 个关节ID 20 即 Offhindfoot 因索引跳过 20 位映射到单一输出通道组训练与推理通道一致。4.4 数据增强流水线train_pipeline [ dict(typeLoadImageFromFile), dict(typeTopDownRandomFlip, flip_prob0.5), 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]) ]关键增强项实现均在 top_down_transform.pyTopDownRandomFlip50% 概率水平翻转TopDownGetRandomScaleRotation随机旋转 ±40°、随机缩放 0.5 倍±50%用于增强对马匹姿态方向/距离的鲁棒性TopDownGenerateTarget以 sigma2 的高斯核生成热图监督目标。验证/测试流水线val_pipeline仅做TopDownAffine裁剪 归一化无随机增强。4.5 测试期配置test_cfgdict( flip_testTrue, post_processdefault, shift_heatmapTrue, modulate_kernel11)flip_testTrue对翻转后的输入再推理一次并将热图翻回从源码看由 topdown_heatmap_simple_head.py 的inference_model中flip_back完成shift_heatmapTrue翻转热图存在 1 像素特征错位推理时对翻转热图左移一列以对齐源码注释 “feature is not aligned, shift flipped heatmap for higher accuracy”post_processdefault与modulate_kernel11启用热图后处理modulate/unsuppress 策略kernel 大小 11。4.6 批大小设置data dict( samples_per_gpu64, workers_per_gpu2, val_dataloaderdict(samples_per_gpu32), test_dataloaderdict(samples_per_gpu32), ...)由于每张马的照片只产生 12 个 bbox22 关键点热图体积较小训练批大小可开到 64。五、数据集加载与评测实现的源码佐证AnimalHorse10Dataset 继承Kpt2dSviewRgbImgTopDownDataset有两个值得注意的实现细节1bbox 输入使用 1.25 倍 padding# use 1.25 padded bbox as input center, scale self._xywh2cs(*obj[bbox][:4], 1.25)加载标注时即对原 bbox 放大 1.25 倍再求 center/scale保证马匹四肢fetlock、foot 等边缘关节尽量不落在裁剪框外。2NME 归一化因子为双眼间距def _get_normalize_factor(self, gts): interocular np.linalg.norm(gts[:, 0, :] - gts[:, 1, :], axis1, keepdimsTrue) return np.tile(interocular, [1, 2])即 Nose(0) 与 Eye(1) 两点间的欧氏距离把误差归一到与马头尺寸相当的比例尺度上这正是 Horse-10 论文推荐的做法也解释了结果表中 NME 在 0.0950.153 区间的含义。3评测指标evaluate(metricPCK | NME)走基类 _report_metric底层调用 top_down_eval.py 的keypoint_pck_accuracy与keypoint_nme。PCK 以 bbox 最大边长为归一化参考、pck_thr为判定阈值基准表标注的 PCK0.3 对应阈值 0.3_report_metric的pck_thr参数在源码中默认值为 0.2基准测试按 0.3 口径统计引用指标时应以原始文档表格的 PCK0.3 口径为准。评测结果写入result_keypoints.json并支持res_folder持久化。六、训练、测试与推理命令6.1 训练以 w48/split1 为例需先在仓库根目录准备好上文第三节所述的data/horse10python tools/train.py configs/animal/2d_kpt_sview_rgb_img/topdown_heatmap/horse10/hrnet_w48_horse10_256x256-split1.py多卡训练可加--gpus N参数或改用 dist_train.sh 分布式脚本total_epochs210、学习率在 170/200 epoch 衰减与--runner默认 epoch 模式一致。6.2 测试python tools/test.py configs/animal/2d_kpt_sview_rgb_img/topdown_heatmap/horse10/hrnet_w48_horse10_256x256-split1.py CHECKPOINT --eval PCK NME--eval支持PCK与NME两种指标源码中allowed_metrics [PCK, NME]evaluation.metricPCK保证训练过程中自动按 PCK 保存最优 checkpoint。6.3 推理仓库提供 top-down 动物推理脚本 top_down_img_demo.py文档见 2d_animal_demo.md加载上述 HRNet checkpoint输入单张马的图片需给出 bbox 或使用检测结果输出 22 个关键点与骨骼渲染图。七、小结决策点建议精度优先hrnet_w48_*三 split 平均 PCK0.3 ≈ 0.968NME ≈ 0.108速度/资源优先hrnet_w32_*精度损失约 23 个 PCK 点泛化性评估三个 split 都要测split3 最困难自定义微调复用lr_config5e-4 Adam、170/200 step与 1.25× bbox padding 设定如需扩展同一目录下还有 ResNet 系列对照配置resnet_horse10.md可作为 HRNet 之外的 baseline 参照数据集元信息、关键点/骨骼定义与AnimalHorse10Dataset源码共同构成了该任务从数据到评测的完整证据链。赞分享人工智能计算机视觉深度学习【免费下载链接】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点击查看免费下载相关推荐MMPose 低光人体姿态估计实战HRNet ExLPose 数据集 Top-Down 热力图配置全解MMPose 低光人体姿态估计实战HRNet ExLPose 数据集 Top Down 热力图配置全解 本文围绕 MMPose 官方模型库中的 HRNet计算机视觉人工智能深度学习MMPose 中 HRNet 人体姿态估计实践Top-down 热图模型在 MPII 数据集上的训练、配置与 PCKh 评测MMPose 中 HRNet 人体姿态估计实践Top down 热图模型在 MPII 数据集上的训练、配置与 PCKh 评测 本文以 MMPose 官方模型库计算机视觉人工智能深度学习MMPose 中 HRNet 人体关键点估计实战基于 Top-Down Heatmap 的 CrowdPose 训练、配置与评估全流程MMPose 中 HRNet 人体关键点估计实战基于 Top Down Heatmap 的 CrowdPose 训练、配置与评估全流程 本文以 MMPose计算机视觉人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/13 15:12:14

SpringBoot外卖系统源码拆解:从订单状态机到并发扣库存

简介:这套基于Spring Boot构建的外卖系统源码,面向Java Web初学者、毕业设计及课程大作业开发人群,覆盖用户注册登录、商家入驻、商品发布、订单管理、支付对接等核心业务,帮助理解真实项目的分层架构与前后端分离开发流程。压缩包…

2026/10/13 15:12:14

足球比分模板选型与高并发实战:轮询、推送与避坑指南

简介:这是一套面向足球资讯站搭建者与前端学习者的完整比分网站模板集合,围绕赛事比分展示、数据分析与球迷互动等场景,提供可直接套用的页面方案,适合具备一定ASP与前端基础、希望快速搭建足球门户的开发者参考。压缩包共249个文…

2026/10/13 16:13:06

上下文工程实战:从设计到优化,解决大模型答非所问

1. 从一个真实困境说起:为什么模型总是“答非所问”我最早接触大语言模型应用开发的时候,踩过一个特别典型的坑。当时我在做一个智能客服原型的问答模块,用户问“我上周买的那个订单什么时候到”,模型给出的回答是“请提供您的订单…

2026/10/13 16:13:06

名企AI面试100题:高频考点与实战解析

简介:《名企AI面试100题》是面向求职互联网大厂AI岗位的笔试面试备考资料,源自七月在线近4000道题库的精选题集,适合计算机相关专业学生及转行求职者系统复习。本资源为PDF格式,共1个文件,压缩包约49.22MB,…

2026/10/13 16:13:06

TCN时间序列预测实战:因果卷积与膨胀卷积详解

简介:本资源是一份面向初级及以上数据科学学习者与时间序列分析实践者的完整TCN项目教程,聚焦利用Python与TensorFlow实现时间卷积神经网络进行高精度时序预测,特别以外汇市场趋势建模为落地场景,有效解决RNN在长序列中梯度消失、…

2026/10/13 16:13:06

LiteLLM实战:用OpenAI风格接口统一调度多种大模型API

1. 这不是一个“模型”,而是一个“总闸”——用一分钟认识 LiteLLM如果你和我一样,过去一年里被各种大模型 API 折腾到头秃,你应该能秒懂我在说什么:OpenAI 的接口长一个样子,Anthropic 的接口是另一个样子&#xff0c…

2026/10/13 16:08:06

CS+ for CC编译器设置记录

瑞萨编译器在创建新工程后必须设置以下参数用以让工程顺利进行 1,设置选项字节: 不同与其他MCU,瑞萨单片机的时钟与看门狗是在用户选项字节中设置的,选项字节供4个Byte。 其一位置在:CC-RL(Build Tool)->Link Optio…

2026/10/13 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑