人工智能计算机视觉深度学习【免费下载链接】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点击查看免费下载导读本文以仓库模型卡片 resnet_rhd2d.md 为骨架完整解析 ViTPose 仓库中基于 ResNet-50 骨干 SimpleBaseline2D 方案的 RHDRendered Handpose Dataset二维手部关键点检测实现。你将掌握该任务的模型结构、数据集定义、训练/验证配置、三大评估指标PCK、AUC、EPE的底层计算原理以及如何在本地复现训练与测试。文中所有关键结论均可通过仓库中的 模型配置、数据集基类配置、数据集实现 与 评估实现 逐行验证。一、模型卡片速览官方基线成绩与文献出处模型卡片resnet_rhd2d.md本质是一张模型档案页同时承载三份引用文献与一张成绩表算法出处 SimpleBaseline2DBin Xiao 等人的 Simple baselines for human pose estimation and trackingECCV 2018其核心思想是用 ResNet 提取特征 少量反卷积层还原分辨率 卷积层生成热图以极简结构逼近当时最先进水平。骨干网络 ResNetHe 等人的 Deep Residual Learning for Image RecognitionCVPR 2016通过残差连接缓解深层网络退化问题。数据集 RHDZimmermann 与 Brox 的 Learning to Estimate 3D Hand Pose from Single RGB ImagesICCV 2017该数据集提供带精确标注的渲染手部图像是 2D/3D 手部姿态估计的经典基准。官方在RHD test 集上的成绩如下即模型卡片的 Results 表ArchInput SizePCK0.2AUCEPEckptlogpose_resnet50256x2560.9910.8982.33ckptlog该成绩同样被记录在同目录的 resnet_rhd2d.yml 模型索引中Model Name 为topdown_heatmap_res50_rhd2d_256x256可作为复现实验的验收标准AUC 达到 0.898、EPE 达到 2.33 即认为复现成功。仓库中与 RHD 任务相关的完整配置族还包括hrnetv2_w18_rhd2d_256x256.py及其 dark/udp 变体与mobilenetv2_rhd2d_256x256.py便于做骨干网络横向对比。二、模型结构TopDown 检测器 ResNet50 TopdownHeatmapSimpleHead2.1 model 配置逐项解读以 res50_rhd2d_256x256.py 的 model 段为例model dict( typeTopDown, pretrainedtorchvision://resnet50, backbonedict(typeResNet, depth50), keypoint_headdict( typeTopdownHeatmapSimpleHead, in_channels2048, out_channelschannel_cfg[num_output_channels], loss_keypointdict(typeJointsMSELoss, use_target_weightTrue)), train_cfgdict(), test_cfgdict( flip_testTrue, post_processdefault, shift_heatmapTrue, modulate_kernel11))各部分作用typeTopDown顶层检测器类型对应源码 mmpose/models/detectors/top_down.py 中的TopDown类。它负责编排 backbone → keypoint_head 的前向流程并封装了flip_test测试时增强逻辑见后文 5.2 节。pretrainedtorchvision://resnet50加载 torchvision 预训练权重作为初始化加速收敛。backbonedict(typeResNet, depth50)ResNet-50 骨干。代码实现位于 mmpose/models/backbones/resnet.py。keypoint_headTopdownHeatmapSimpleHead即 SimpleBaseline2D 论文中的反卷积头实现位于 mmpose/models/heads/topdown_heatmap_simple_head.py。从源码看该头由3 个反卷积层默认num_deconv_layers3每层 256 通道、4x4 卷积核加一个 1x1 卷积的final_layer构成将骨干输出的 2048 维特征逐步上采样到 64x64 分辨率并输出 21 通道热图。in_channels2048ResNet-50 最后一个 stage 的输出通道数与 head 的反卷积输入严格对应。loss_keypointJointsMSELoss且use_target_weightTrue即带关节权重掩码的均方误差损失实现在 mmpose/models/losses/mse_loss.py。use_target_weightTrue时仅对可见关节的像素计算梯度避免被缺失/遮挡关节的零值干扰。2.2 channel_cfg通道与关节编号约定channel_cfg dict( num_output_channels21, dataset_joints21, dataset_channel[[0, 1, ..., 19, 20]], inference_channel[0, 1, ..., 19, 20])RHD 数据集共定义21 个手部关键点编号约定完整记录在 mmpose/datasets/datasets/hand/rhd2d_dataset.py 的 docstring 中0: wrist 1-4: thumb1~thumb4 5-8: forefinger1~forefinger4 9-12: middle_finger1~middle_finger4 13-16: ring_finger1~ring_finger4 17-20: pinky_finger1~pinky_finger4即 1 个腕关节 5 根手指各 4 个关节。dataset_channel与inference_channel在这里完全一致直接透传全部 21 个关节它们的存在是为了兼容数据集关节顺序 ≠ 模型输出顺序的场景例如后续接入 COCO-WholeBody 手部子集时需要进行通道重排。三、数据集Rhd2DDataset 与 21 关节标注体系3.1 数据集基类配置configs/base/datasets/rhd2d.py 定义了dataset_info包含keypoint_info21 个关节的名称wrist、thumb1~4、forefinger1~4、middle_finger1~4、ring_finger1~4、pinky_finger1~4、id、可视化 color 与 swap左右镜像配对此处手部默认无 swap。skeleton_info20 条骨骼连接wrist 到各指根、每根手指的 3 段指节定义了可视化时的连线关系。*joint_weights[1.]21每个关节损失权重均为 1。sigmas[]不提供针对目标生成半径的 sigma因此训练时热图高斯核的 sigma 由 pipeline 中的sigma2直接指定。3.2 数据集实现Rhd2DDataset类继承自Kpt2dSviewRgbImgTopDownDatasettop-down 单视角 RGB 2D 关键点数据集基类关键实现点_get_db()从 COCO 格式的 JSON 标注中读取每个目标框过滤掉max(keypoints)0的无效样本并通过_xywh2cs(bbox, padding1.25)将检测框扩展为center/scale作为后续仿射变换与坐标解码的基准。标注中每个 keypoint 为(x, y, visibility)三元组可见性被二值化为 0/1 存入joints_3d_visible。evaluate()方法支持metricPCK/AUC/EPE详见第五节预测结果会写入${res_folder}/result_keypoints.json。测试用最小数据集可参考 tests/data/rhd/test_rhd.json而仓库的单元测试 tests/test_datasets/test_hand_dataset.py第 194~239 行会以configs/_base_/datasets/rhd2d.py的dataset_info构造Rhd2DDataset实例并断言dataset_name rhd2d可直接用于验证环境。四、数据与训练配置256x256 输入 Adam 分段退火4.1 数据尺寸与数据增强data_cfg dict( image_size[256, 256], heatmap_size[64, 64], num_output_channelschannel_cfg[num_output_channels], num_jointschannel_cfg[dataset_joints], dataset_channelchannel_cfg[dataset_channel], inference_channelchannel_cfg[inference_channel])image_size[256, 256]模型输入尺寸heatmap_size[64, 64]输出热图尺寸。输入到输出的下采样倍率为 4x由反卷积头从 16x16 特征逐级恢复而来。仓库同时提供了 224x224 输入变体 res50_rhd2d_224x224.py对应 heatmap_size[56, 56]供算力有限时取舍。train_pipeline训练数据流依次执行LoadImageFromFile加载原图TopDownRandomFlipflip_prob0.5随机水平翻转TopDownGetRandomScaleRotationrot_factor90, scale_factor0.3最多 ±90° 旋转、±30% 缩放扰动TopDownAffine按 center/scale/rotation 做仿射变换裁剪ToTensorNormalizeTensorImageNet 均值 [0.485, 0.456, 0.406]、标准差 [0.229, 0.224, 0.225]TopDownGenerateTargetsigma2生成 21 通道高斯热图目标Collect汇总 img、target、target_weight 及元信息。val_pipeline / test_pipeline去掉翻转、缩放旋转与热图目标生成仅做仿射、归一化与收集保证评估口径一致。4.2 优化器、学习率与训练轮数optimizer dict(typeAdam, lr5e-4) lr_config dict( policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[170, 200]) total_epochs 210使用Adam优化器初始学习率5e-4线性 warmup 500 步初始 0.001 倍 lr在第170 与 200 epoch分阶段降低学习率总训练210 epochevaluation dict(interval10, metric[PCK, AUC, EPE], save_bestAUC)每 10 个 epoch 在验证集上评估三个指标并以AUC 为最优模型选择依据保存 checkpoint。4.3 数据装载与运行时data dict( samples_per_gpu64, workers_per_gpu2, val_dataloaderdict(samples_per_gpu32), test_dataloaderdict(samples_per_gpu32), traindict(typeRhd2DDataset, ann_filedata/rhd/annotations/rhd_train.json, img_prefixdata/rhd/, ...), valdict(typeRhd2DDataset, ann_filedata/rhd/annotations/rhd_test.json, ...), testdict(typeRhd2DDataset, ann_filedata/rhd/annotations/rhd_test.json, ...))训练 batch size 64验证/测试 batch size 32每个 GPU 2 个数据加载 worker数据根目录为data/rhd需自行按此目录结构准备 RHD 数据集annotations 下含rhd_train.json/rhd_test.json运行时基类 configs/base/default_runtime.py 提供checkpoint_config(interval10)、TextLoggerHook、dist_params(backendnccl)等公共设置。五、评估指标详解PCK、AUC、EPE 的计算原理三个指标全部在 mmpose/core/evaluation/top_down_eval.py 中实现且Rhd2DDataset.evaluate()只接受这三者之一。5.1 PCKPercentage of Correct Keypoints定义预测关键点与真值之间的归一化距离小于给定阈值此处0.2的比例。实现_calc_distances()将预测与真值的差按normalize通常取热图尺寸 H/W即 64逐维度归一化后取 L2 范数_distance_acc(distances, thr)统计低于阈值 0.2 的样本占比keypoint_pck_accuracy()汇总出逐关节 acc、平均 avg_acc 与有效关节数。模型卡片中的PCK0.2 0.991即 99.1% 的关节落在归一化距离 0.2 以内。5.2 AUCArea Under the Curve定义把 PCK 阈值从 0 到 1 均匀划分默认num_step20步逐阈值计算平均准确率再对整条 PCK 曲线求积分。keypoint_auc()的实现即是对 20 个阈值点的平均准确率做等权累加。意义AUC 不依赖单一阈值能整体反映不同精度要求下的定位能力因此被选为save_best的模型选择依据。模型卡片中AUC 0.898。5.3 EPEEnd-Point Error定义预测点与真值点的欧氏距离均值不做归一化是所有有效关节的 L2 距离之和除以有效关节数keypoint_epe()中 normalize 直接置 1。意义以像素为单位直观衡量定位误差数值越小越好。模型卡片中EPE 2.33像素。5.4 坐标解码与测试时增强测试阶段top_down.py 的forward_test的完整链路为前向得到原始热图 →keypoints_from_heatmaps()用_get_max_preds()取 argmax 得到整数坐标post_processdefault时用热图峰值周围的一阶差分做±0.25 像素偏移heatmap[py][px1] - heatmap[py][px-1]等缓解整数取整带来的量化误差flip_testTrue时额外前向一次水平翻转图调用 head 的inference_model()经flip_back恢复并依据flip_pairs重排通道最后两路热图取平均——这也是shift_heatmapTrue发挥作用的地方对翻转热图整体左移 1 像素补偿翻转带来的特征不对齐modulate_kernel11对应_gaussian_blur()的高斯调制核大小其 sigma≈2与训练时TopDownGenerateTarget的sigma2保持一致源码注释明确指出 K17 for sigma3 and k11 for sigma2最终用transform_preds()依据 center/scale 把热图坐标映射回原图。六、实操训练与测试命令6.1 数据准备按配置约定将 RHD 数据集放置为data/rhd/ ├── annotations/ │ ├── rhd_train.json │ └── rhd_test.json └── 图像文件标注采用 COCO 风格 JSON参考 tests/data/rhd/test_rhd.json 的字段结构images 含 file_name/idannotations 含 keypoints、bbox。6.2 单卡训练python tools/train.py configs/hand/2d_kpt_sview_rgb_img/topdown_heatmap/rhd2d/res50_rhd2d_256x256.py --work-dir work_dirs/res50_rhd2d_256x256tools/train.py支持--gpu-id默认 0、--seed、--cfg-options如--cfg-options model.backbone.depth18可临时切换骨干深度、--no-validate、--resume-from等参数多卡场景可用仓库提供的tools/dist_train.sh或tools/slurm_train.sh脚本。训练过程每 10 epoch 自动评估一次并按 AUC 保存最优权重。6.3 测试与指标复现python tools/test.py configs/hand/2d_kpt_sview_rgb_img/topdown_heatmap/rhd2d/res50_rhd2d_256x256.py checkpoint路径 --eval PCK AUC EPEtools/test.py的--eval接受空格分隔的指标名输出即为模型卡片中的三项成绩--out可导出结果文件--fuse-conv-bn可略微提升推理速度。测试数据来自rhd_test.json与官方成绩表中的 RHD test 集一致。七、同目录配置族与扩展方向HRNet-W18 变体hrnetv2_w18_rhd2d_256x256.py及 dark、udp 两个后处理变体对比高分辨率骨干与反卷积头的差异MobileNetV2 变体mobilenetv2_rhd2d_256x256.py面向轻量化/移动端部署后处理升级darkDARK 分布感知解码与 udpUnbiased Data Processing变体对应的后处理在top_down_eval.py的post_dark_udp()与_taylor()中实现均以缓解热图 argmax 量化偏差为出发点。若需将本任务扩展至 COCO-WholeBody 手部子集可复用相同的 top-down 热图框架仅需替换 coco_wholebody_hand 数据集配置 并在channel_cfg中定义从全体关节到 21 个手部关节的通道映射——这正是dataset_channel/inference_channel设计意图的典型应用场景。结语从模型卡片出发可以看到RHD 二维手部关键点检测在 ViTPose 仓库中是一条完整、自洽且高度可复现的实验链路SimpleBaseline2D 的极简反卷积头 ResNet-50 预训练骨干构成主干21 关节标注体系与Rhd2DDataset提供数据支撑PCK/AUC/EPE 三指标与save_bestAUC构成客观验收标准256x256 输入下的官方基线PCK0.20.991、AUC0.898、EPE2.33则是复现的最终锚点。掌握这条链路后将其迁移到其他手部/身体关键点数据集只需替换数据集基类、channel 定义与 pipeline 参数这正是该仓库 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点击查看免费下载相关推荐ViTPose 仓库 RHD 手部关键点回归DeepPose ResNet-50 配置实战与源码解析ViTPose 仓库 RHD 手部关键点回归DeepPose ResNet 50 配置实战与源码解析 本指南以 ViTPose 仓库基于 MMPose人工智能计算机视觉深度学习ViTPose 仓库人脸关键点检测实战基于 SimpleBaseline2D ResNet 的 COCO-WholeBody-Face 68 点回归全解析ViTPose 仓库人脸关键点检测实战基于 SimpleBaseline2D ResNet 的 COCO WholeBody Face 68 点回归全解析人工智能计算机视觉深度学习ViTPose 仓库中的 RHD 手部关键点检测HRNetv2-W18 DarkPose 配置文件全解析与训练评估指南ViTPose 仓库中的 RHD 手部关键点检测HRNetv2 W18 DarkPose 配置文件全解析与训练评估指南 导读 本文以 hrnetv2_d人工智能计算机视觉深度学习上一篇PPPwn深入探索PlayStation 4内核级远程代码执行的技术挑战下一篇零信任时代的安全密钥管理Vault完整指南与实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?