恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
ViTPose 仓库 HRNet 混合精度(FP16)训练配置实战解析:基于 hrnet_fp16_coco 指南
首页
资讯中心
/
ViTPose 仓库 HRNet 混合精度(FP16)训练配置实战解析:基于 hrnet_fp16_coco 指南
ViTPose 仓库 HRNet 混合精度(FP16)训练配置实战解析:基于 hrnet_fp16_coco 指南
发布时间:2026/10/14 2:22:52
人工智能计算机视觉深度学习【免费下载链接】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 仓库中 configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_fp16_coco.md 为骨架结合仓库内对应训练配置与mmpose/core/fp16模块源码完整讲解如何在 COCO 人体姿态估计任务上开启 HRNet 的 FP16 混合精度训练。读完本文你将掌握fp16配置项的写法与loss_scaledynamic的含义、混合精度训练在底层的完整执行流程loss 缩放、FP32 权重主副本、归一化层保 FP32 等并能在自己的实验里复现与验证官方记录的精度结果。一、文档定位一张结果表背后的三项技术资产hrnet_fp16_coco.md是典型的“算法 × 技术 × 数据集”组合型模型卡片它用一张 COCO val2017 结果表把三项技术资产绑定在了一起HRNetCVPR2019Deep High-Resolution Representation Learning for Human Pose Estimation以全程保持高分辨率特征表示著称的骨干网络FP16 混合精度训练ArXiv2017Mixed precision training通过半精度浮点前向/反向计算来降低显存占用并加速训练COCOECCV2014Microsoft COCO: Common Objects in Context人体姿态估计领域最常用的基准数据集。文档以 bibtex 形式保留了这三篇文献的完整引用信息方便在论文中直接引用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} }article{micikevicius2017mixed, title{Mixed precision training}, author{Micikevicius, Paulius and Narang, Sharan and Alben, Jonah and Diamos, Gregory and Elsen, Erich and Garcia, David and Ginsburg, Boris and Houston, Michael and Kuchaiev, Oleksii and Venkatesh, Ganesh and others}, journal{arXiv preprint arXiv:1710.03740}, year{2017} }inproceedings{lin2014microsoft, title{Microsoft coco: Common objects in context}, author{Lin, Tsung-Yi and Maire, Michael and Belongie, Serge and Hays, James and Perona, Pietro and Ramanan, Deva and Doll{\a}r, Piotr and Zitnick, C Lawrence}, booktitle{European conference on computer vision}, pages{740--755}, year{2014}, organization{Springer} }二、官方精度基准FP16 训练下的 HRNet-W32 成绩单文档给出的实验设定为使用在 COCO val2017 上人体 AP 为 56.4 的检测器在 COCO val2017 上评测的 top-down 关键点检测结果。这也是该仓库所有 top-down COCO 模型卡片统一采用的评测口径可对照 hrnet_coco.md 中的同口径结果。ArchInput SizeAPAP50AP75ARAR50ckptlogpose_hrnet_w32_fp16256x1920.7460.9050.880.8000.943ckptlog几个值得注意的观察点与 FP32 基线几乎无损对照 hrnet_coco.md 中的同尺寸 FP32 配置pose_hrnet_w32256x192AP 0.746 / AP50 0.904 / AR 0.799FP16 版本的 AP 同为 0.746AP50 甚至略高0.905 vs 0.904。这说明在loss_scaledynamic的混合精度策略下半精度训练可以保住完整精度。权重文件命名训练产出的权重名为hrnet_w32_coco_256x192_fp16_dynamic-290efc2e_20210430.pth其中fp16_dynamic与配置文件名一一对应训练日志为hrnet_w32_coco_256x192_fp16_dynamic_20210430.log.json。该信息在 hrnet_fp16_coco.yml 的模型元数据中同样有记录Weights: hrnet_w32_coco_256x192_fp16_dynamic-290efc2e_20210430.pth。三、配置解读两行代码开启 FP16 训练对应配置文件 hrnet_w32_coco_256x192_fp16_dynamic.py 极其简洁全文如下_base_ [./hrnet_w32_coco_256x192.py] # fp16 settings fp16 dict(loss_scaledynamic)它通过_base_继承 FP32 版本的全部训练配置只额外新增了一个顶层字段fp16 dict(loss_scaledynamic)这里的关键是loss_scaledynamicloss_scale指定损失缩放因子。FP16 的表示范围有限梯度在反向传播中容易下溢为 0因此混合精度训练会把 loss 放大后再反向传播再在更新前把梯度缩回去取值为dynamic时缩放因子会在训练过程中自动动态调整当检测到梯度溢出出现 inf/NaN时自动调小稳定时逐步调大省去了手动调loss_scale的麻烦若改为固定数值如loss_scale512.则使用常量缩放这在Fp16OptimizerHook的默认参数中即为loss_scale512.见下文源码。3.1 继承的 FP32 主配置回顾被继承的 hrnet_w32_coco_256x192.py 定义了完整的 top-down 姿态估计训练管线FP16 配置在其基础上叠加生效优化器Adamlr5e-4grad_clipNone学习率策略step衰减线性 warmup500 步ratio 0.001衰减节点为第 170 / 200 epoch总计total_epochs210骨干网络HRNetin_channels3四阶段通道数 32/64/128/256前两个阶段各 1 个模块后两个阶段分别为 4 个与 3 个模块关键点头TopdownHeatmapSimpleHeadin_channels32out_channels17COCO 人体 17 个关键点配合JointsMSELossuse_target_weightTrue测试设置flip_testTrue水平翻转测试增强、post_processdefault、shift_heatmapTrue、modulate_kernel11数据配置输入 256x192热图 64x48sigma2生成高斯目标训练时使用 TopDownRandomFlip、TopDownHalfBodyTransform、TopDownGetRandomScaleRotation旋转 40 度、缩放 0.5等增强评测metricmAPinterval10save_bestAP。四、源码级原理混合精度训练在 ViTPose 中如何落地fp16 dict(loss_scaledynamic)这一行配置会被 mmpose/apis/train.py 消费# fp16 setting fp16_cfg cfg.get(fp16, None) if fp16_cfg is not None: optimizer_config Fp16OptimizerHook( **cfg.optimizer_config, **fp16_cfg, distributeddistributed)也就是说只要配置中出现了fp16字段训练时就会用Fp16OptimizerHook替换掉默认的OptimizerHook并把optimizer_config如grad_clipNone与fp16_cfg如loss_scaledynamic合并传入。4.1 Fp16OptimizerHook 的五个关键步骤Fp16OptimizerHook的实现位于 mmpose/core/fp16/hooks.py其优化流程为before_run训练前准备对优化器的param_groups做deepcopy保留一份FP32 权重主副本master copy用于参数更新随后调用wrap_fp16_model(runner.model)把主模型转换为 FP16after_train_iter每轮迭代将 loss 乘以loss_scale放大scaled_loss runner.outputs[loss] * self.loss_scale再执行scaled_loss.backward()避免 FP16 梯度下溢把模型上的 FP16 梯度复制到 FP32 权重主副本copy_grads_to_fp32分布式训练时对 FP32 梯度做 allreduce将梯度除以loss_scale还原再做可选的梯度裁剪随后runner.optimizer.step()更新FP32 权重最后copy_params_to_fp16把更新后的 FP32 参数同步回 FP16 模型供下一轮前向使用。4.2 wrap_fp16_model归一化层必须留在 FP32wrap_fp16_model并不只是简单地model.half()它还要保证批归一化BatchNorm等归一化层保持在 FP32def wrap_fp16_model(model): # convert model to fp16 model.half() # patch the normalization layers to make it work in fp32 mode patch_norm_fp32(model)patch_norm_fp32会递归地把_BatchNorm与nn.GroupNorm转换回float()并对其forward做 patch输入先由 FP16 cast 成 FP32 参与计算输出再 cast 回 FP16对应patch_forward_method与cast_tensor_type工具函数见 mmpose/core/fp16/utils.py。这样既享受了卷积等算子半精度加速又避免了 BatchNorm 在 FP16 下统计量计算不稳定的问题。4.3 auto_fp16 装饰器模型前向的半精度开关在 mmpose/models/detectors/top_down.py 中TopDown 检测器的前向方法被装饰为auto_fp16(apply_to(img, )) def forward(self, img, ...):auto_fp16定义于 mmpose/core/fp16/decorators.py的逻辑是只有当模块上设置了fp16_enabled True由wrap_fp16_model在before_run阶段统一标记时才会把输入img从 FP32 cast 成 FP16 再进入前向计算未开启 FP16 训练时直接走原始 FP32 路径。仓库中的 AssociativeEmbedding、PoseLifter、PoseWarper 等检测器也采用了同样的auto_fp16装饰说明 FP16 是仓库内通用的训练加速机制而不仅是 HRNet 配置的专属特性。五、如何运行训练与评估5.1 单机训练python tools/train.py configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w32_coco_256x192_fp16_dynamic.py首次运行前需按 docs/zh_cn/install.md 安装依赖并按 COCO 标准目录结构准备data/coco/annotations/person_keypoints_train2017.json、train2017/、val2017/等路径在配置的data_root data/coco下评测依赖的检测结果文件bbox_filedata/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json需按文档说明下载放置对应“人体 AP 为 56.4 的检测器”这一评测口径模型预训练权重默认从配置中指定的 URL 下载pretrained.../hrnet_w32-36af842e.pth。5.2 多卡 / 分布式训练仓库提供 tools/dist_train.sh 与 tools/slurm_train.shbash tools/dist_train.sh configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w32_coco_256x192_fp16_dynamic.py 8注意Fp16OptimizerHook构造时默认distributedTrue多卡场景下会在 FP32 权重副本上执行梯度 allreduceallreduce_grads这与 FP32 训练的分布式梯度同步位置略有不同——梯度先在每个 GPU 的 FP32 副本上聚合再更新避免半精度聚合误差。5.3 独立评估python tools/test.py configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w32_coco_256x192_fp16_dynamic.py \ /path/to/hrnet_w32_coco_256x192_fp16_dynamic-290efc2e_20210430.pth六、横向参照FP16 是仓库内的通用技术fp16配置并非 HRNet 专属仓库中其他骨干同样提供了 FP16 变体ResNet-50res50_coco_256x192_fp16_dynamic.py 与 HRNet 版本结构完全一致继承 FP32 主配置 fp16 dict(loss_scaledynamic)其官方结果见 resnet_fp16_coco.md为 256x192 输入下 AP 0.717 / AP50 0.898 / AP75 0.793 / AR 0.772 / AR50 0.936配置命名约定为backbone_input_fp16_dynamic.pydynamic标识即动态 loss scale 模式。七、实践建议与注意事项优先使用loss_scaledynamic相比固定缩放动态缩放免调参且对溢出更稳健官方两个 FP16 模型卡片均采用该设置关注显存收益FP16 前向/反向将激活与梯度内存减半配合samples_per_gpu64的大 batch 设置是 HRNet-W32 能在 256x192 输入下顺利训练的重要前提精度可比性从官方记录看HRNet-W32 FP16 与 FP32 版本 AP 持平0.746可作为混合精度训练“几乎无损”的直接证据但具体任务仍需自行验证归一化层不受影响wrap_fp16_model已保证 BatchNorm/GroupNorm 留在 FP32因此 HRNet 中大量使用的 BN 层在混合精度下依然稳定版本注意仓库在 mmpose/apis/train.py 中优先尝试从mmcv.runner导入Fp16OptimizerHook需要 mmcv1.1.4版本过低时会回退到 mmpose 自带实现并给出 DeprecationWarning建议按 requirements/mminstall.txt 安装匹配的 mmcv 版本。结语hrnet_fp16_coco.md这张模型卡片看似只有一行结果背后却是“HRNet 骨干 FP16 混合精度 COCO 基准”三种技术的组合落地。通过本文的配置与源码拆解可以看到一行fp16 dict(loss_scaledynamic)会在训练管线中替换优化器 Hook、保留 FP32 权重主副本、动态缩放损失、并将归一化层排除在半精度之外——正是这套机制保证了官方记录中 FP16 与 FP32 几乎一致的 AP 成绩。读者可直接以 hrnet_w32_coco_256x192_fp16_dynamic.py 为起点复现该基准或将同样的fp16配置迁移到仓库内其他 top-down 模型上。赞分享人工智能计算机视觉深度学习【免费下载链接】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点击查看免费下载相关推荐DeepSpeed混合精度训练FP16/BF16实战DeepSpeed混合精度训练FP16/BF16实战 引言混合精度训练的痛点与解决方案 你是否在训练深度学习模型时遇到过显存不足的问题是否因训练速度过慢而人工智能大模型深度学习分布式训练预训练强化学习模型优化训练提速20倍FP16/FP8混合精度实战指南训练提速20倍FP16/FP8混合精度实战指南 你还在为模型训练耗时长、GPU内存不足而烦恼吗本文将带你掌握混合精度训练的核心技术通过FP16/FP8数据人工智能大模型AI 技能/插件分布式训练微调深度学习uMario_Jakowski开发实战如何添加自定义角色与道具的完整指南uMario_Jakowski开发实战如何添加自定义角色与道具的完整指南 uMario是一款基于C和SDL2开发的经典平台跳跃游戏由Łukasz Jak上一篇Headscale 策略文件详解ACL 与 Grants 访问控制、Autogroups 机制及源码实现下一篇TanStack Table Column Pinning 接口深度解析Column\_ColumnPinning 的四个核心方法与底层实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考