资讯动态

ViTPose 入门指南:从数据准备、预训练模型推理到分布式训练与性能基准测试

发布时间:2026/10/15 8:53:11 来源:尧图企业网站定制
人工智能计算机视觉深度学习【免费下载链接】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 仓库docs/en/getting_started.md的入门文档为主线系统讲解基于 MMPose 框架的 ViTPose 人体姿态估计工作流如何准备数据集、用预训练模型完成整库评测与图像 Demo 推理、如何配置单卡/多卡/多机/集群训练以及如何度量推理吞吐。读者学完后可以独立完成从下载配置与权重到跑通训练与评测的完整闭环并理解tools/下各脚本与底层源码的对应关系。环境准备与安装入门文档要求先完成环境安装详见 docs/en/install.md系统与依赖LinuxWindows 非官方支持、Python 3.6、PyTorch 1.3、CUDA 9.2、GCC 5以及mmcv-full、Numpy、cv2、json_tricks、xtcocotools。可选依赖mmdet人体检测 Demo、mmtrack姿态跟踪 Demo、pyrender与smplx3D 网格 Demo。推荐流程conda create -n open-mmlab python3.7 -y conda activate open-mmlab conda install pytorch1.8.0 torchvision0.9.0 cudatoolkit10.2 -c pytorch pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.9.0/index.html git clone gitgithub.com:open-mmlab/mmpose.git cd mmpose pip install -r requirements.txt pip install -v -e .本仓库在 MMPose 基础上扩展了 ViT 系列主干mmpose/models/backbones/vit.py与混合专家模型mmpose/models/backbones/vit_moe.py并依赖mmcv_custom中的 layer_decay_optimizer_constructor.py 提供 ViT 预训练权重常用的分层学习率衰减策略。准备数据集MMPose 覆盖多种任务不同任务对应不同的数据准备指南2D 人体关键点检测3D 人体关键点检测3D 人体网格恢复2D 手部关键点检测3D 手部关键点检测2D 面部关键点检测2D 全身关键点检测2D 服装关键点检测2D 动物关键点检测所有任务的数据集配置模板统一存放在 configs/base/datasets/如 COCO 的 coco.py。以 COCO 为例训练/验证/测试共用data_root data/coco并期望annotations/person_keypoints_train2017.json、train2017/等目录结构就绪。仓库的测试数据如 tests/data/coco/test_coco.json可用来快速验证流程无需下载完整数据集。用预训练模型进行推理MMPose 提供两类推理入口一是对整库COCO、MPII 等做指标评测的测试脚本二是供集成到其他 OpenMMLab 项目使用的高层 APIinit_pose_model、inference_top_down_pose_model等见 mmpose/apis/init.py。评测一个数据集单卡、CPU、单节点多卡、多节点均已支持# 单卡测试 python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--fuse-conv-bn] \ [--eval ${EVAL_METRICS}] [--gpu_collect] [--tmpdir ${TMPDIR}] [--cfg-options ${CFG_OPTIONS}] \ [--launcher ${JOB_LAUNCHER}] [--local_rank ${LOCAL_RANK}] # CPU 测试禁用 GPU 后运行单卡脚本 export CUDA_VISIBLE_DEVICES-1 python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] \ [--eval ${EVAL_METRICS}] # 多卡测试 ./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [--out ${RESULT_FILE}] [--fuse-conv-bn] \ [--eval ${EVAL_METRIC}] [--gpu_collect] [--tmpdir ${TMPDIR}] [--cfg-options ${CFG_OPTIONS}] \ [--launcher ${JOB_LAUNCHER}] [--local_rank ${LOCAL_RANK}]CHECKPOINT_FILE既可以是预先下载到本地的.pth权重路径也可以是权重文件的 URL 链接。可选参数说明与 tools/test.py 中parse_args逐项对应参数含义RESULT_FILE输出结果文件名不指定则不落盘--fuse-conv-bn融合 conv 与 bn 层略微提升推理速度EVAL_METRICS评测指标取值依赖数据集如 COCO 用mAP--gpu_collect通过 GPU 通信收集各卡结果否则各卡结果先写入TMPDIR再由 rank 0 汇总TMPDIR多卡结果收集用的临时目录未指定--gpu_collect时生效CFG_OPTIONS以xxxyyy键值对覆盖配置如--cfg-options model.backbone.depth18 model.backbone.with_cpTrueJOB_LAUNCHER分布式启动器none/pytorch/slurm/mpinone表示非分布式模式LOCAL_RANK本地 rank 号默认 0从源码看tools/test.py 的流程为读取配置 → 合并--cfg-options→ 构建测试数据集与 dataloader →build_posenet构建模型 →load_checkpoint加载权重 → 可选fuse_conv_bn→ 非分布式用single_gpu_test、分布式用multi_gpu_test→ 在 rank 0 上调用dataset.evaluate输出指标。示例 1单卡测试 ResNet50-COCO 并评测 mAP权重已下载到checkpoints/./tools/dist_test.sh configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/res50_coco_256x192.py \ checkpoints/SOME_CHECKPOINT.pth 1 \ --eval mAP示例 28 卡测试直接通过 URL 下载权重./tools/dist_test.sh configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/res50_coco_256x192.py \ https://download.openmmlab.com/mmpose/top_down/resnet/res50_coco_256x192-ec54d7f3_20200709.pth 8 \ --eval mAP示例 3Slurm 集群上评测./tools/slurm_test.sh slurm_partition test_job \ configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/res50_coco_256x192.py \ checkpoints/SOME_CHECKPOINT.pth \ --eval mAP对应地tools/dist_test.sh 会调用python -m torch.distributed.launch --nproc_per_node$GPUS --master_port$PORT端口默认29500tools/slurm_test.sh 则通过srun按GPUS_PER_NODE、CPUS_PER_TASK等环境变量申请资源后以--launcherslurm启动 tools/test.py。运行 Demo仓库提供多个 Demo 脚本demo 目录以使用 GT 人体框的 top-down 图像 Demo为例python demo/top_down_img_demo.py \ ${MMPOSE_CONFIG_FILE} ${MMPOSE_CHECKPOINT_FILE} \ --img-root ${IMG_ROOT} --json-file ${JSON_FILE} \ --out-img-root ${OUTPUT_DIR} \ [--show --device ${GPU_ID}] \ [--kpt-thr ${KPT_SCORE_THR}]实际示例HRNet-w48 仓库自带 COCO 测试图python demo/top_down_img_demo.py \ configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w48_coco_256x192.py \ https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth \ --img-root tests/data/coco/ --json-file tests/data/coco/test_coco.json \ --out-img-root vis_results从 demo/top_down_img_demo.py 源码可以看出其内部流程用xtcocotools.coco.COCO读取 JSON 标注 → 从每张图的标注中提取xywh格式的人体框 → 调用inference_top_down_pose_model逐图推理 → 用vis_pose_result绘制关键点并保存到vis_results/vis_{i}.jpg。--kpt-thr默认 0.3--radius关键点半径默认 4--thickness连线粗细默认 1也可指定--devicecpu在无 GPU 环境运行。更多 Demo含 mmdet 检测器联合、视频、跟踪、3D 等见 demo 目录 及各自的文档例如 2D 人体姿态 Demo 文档。训练模型MMPose 同时实现分布式训练MMDistributedDataParallel与非分布式训练MMDataParallel并统一采用分布式模式管理单机与多机场景假设服务器有 8 张 GPU则启动 8 个进程、每进程占一张卡。每个进程持有独立的模型、数据加载器与优化器模型参数仅在开始时同步一次前向/反向后各 GPU 间对梯度做 allreduce再由优化器更新参数——因为梯度已 allreduce所以每个迭代结束后所有进程的模型参数保持一致。训练设置所有输出日志与权重默认保存到配置文件指定的work_dir也可以命令行覆盖--work-dir ${YOUR_WORK_DIR}。从 tools/train.py 可见work_dir的优先级为命令行 配置中的work_dir 配置文件名推导出的./work_dirs/config_name。默认每个 epoch 结束后在验证集上评测一次可通过修改配置中的evaluation调整间隔evaluation dict(interval5) # 每 5 个 epoch 评测一次以 configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/ViTPose_base_coco_256x192.py 为例COCO 上训练 210 个 epoch每 10 个 epoch 评测一次并保存最优 APevaluation dict(interval10, metricmAP, save_bestAP) optimizer dict(typeAdamW, lr5e-4, betas(0.9, 0.999), weight_decay0.1, constructorLayerDecayOptimizerConstructor, paramwise_cfgdict(num_layers12, layer_decay_rate0.75, ...)) lr_config dict(policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[170, 200]) total_epochs 210其中LayerDecayOptimizerConstructor实现在 mmcv_custom/layer_decay_optimizer_constructor.py按 0.75 的层间衰减率对 ViT 各层设置不同学习率并对bias、pos_embed、norm等参数关闭权重衰减——这是 ViT 主干训练的关键配置ResNet 类配置如 res50_coco_256x192.py则使用普通Adam优化器。线性缩放规则Linear Scaling Rule根据该规则若改变 GPU 数或每卡样本数学习率应与 batch size 成正比调整。例如 4 卡 × 2 视频/卡时lr0.0116 卡 × 4 视频/卡时lr0.08。也可以直接加--autoscale-lr让脚本自动缩放——tools/train.py 中实现为lr lr * len(gpu_ids) / 8。单 GPU 训练python tools/train.py ${CONFIG_FILE} [optional arguments]需要指定工作目录时追加--work-dir ${YOUR_WORK_DIR}。CPU 训练流程与单卡训练一致只需先禁用 GPUexport CUDA_VISIBLE_DEVICES-1然后运行上面的单卡脚本。注意官方不建议用 CPU 训练速度过慢此功能仅为方便在无 GPU 机器上调试。多 GPU 训练./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]可选参数对应 tools/train.py 的参数解析参数含义--work-dir ${WORK_DIR}覆盖配置中的工作目录--resume-from ${CHECKPOINT_FILE}从断点继续训练--no-validate训练期间不做验证评测--gpus ${GPU_NUM}使用的 GPU 数仅非分布式训练源码中已标记 deprecated建议用--gpu-id--gpu-ids ${GPU_IDS}使用的 GPU ID 列表仅非分布式训练同样标记 deprecated--seed ${SEED}设置 python/numpy/pytorch 随机种子--deterministic为 CUDNN 后端设置确定性选项--cfg-options CFG_OPTIONS以xxxyyy覆盖配置--launcher ${JOB_LAUNCHER}none/pytorch/slurm/mpi--autoscale-lr按线性缩放规则自动调整学习率LOCAL_RANK本地 rank默认 0resume-from与load-from的区别resume-from同时加载模型权重与优化器状态并继承 checkpoint 中的 epoch用于中断后恢复训练load-from只加载模型权重训练从 epoch 0 开始用于微调finetune。示例8 卡训练 ResNet50 并从断点恢复./tools/dist_train.sh configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/res50_coco_256x192.py 8 --resume_from work_dirs/res50_coco_256x192/latest.pthdist_train.sh 的实现与dist_test.sh相同python -m torch.distributed.launch --nproc_per_node$GPUS --master_port$PORT tools/train.py $CONFIG --launcher pytorch端口默认29500。多机集群训练如果集群由 Slurm 管理可直接使用 slurm_train.sh同样支持单机./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}示例在Test分区用 16 卡训练 ResNet50GPUS_PER_NODE8指定单节点 8 卡CPUS_PER_TASK2指定每任务 2 个 CPUGPUS16 GPUS_PER_NODE8 CPUS_PER_TASK2 ./tools/slurm_train.sh Test res50 configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/res50_coco_256x192.py work_dirs/res50_coco_256x192slurm_train.sh支持的环境变量与完整参数可查看 tools/slurm_train.sh它通过srun -p ${PARTITION} --gresgpu:${GPUS_PER_NODE} --ntasks${GPUS} --ntasks-per-node${GPUS_PER_NODE} --cpus-per-task${CPUS_PER_TASK} --kill-on-bad-exit1申请资源再以--launcherslurm启动 tools/train.py。若只有多台以太网互联的机器无 InfiniBand 等高带宽网络可参考 PyTorch 的torch.distributed.launch工具手动启动但通常速度较慢。单机启动多个训练任务在单机上同时启动多个任务如 8 卡机器上跑 2 个 4 卡任务时需要为每个任务指定不同的通信端口默认 29500以避免冲突。使用dist_train.sh时在命令中通过环境变量设置端口CUDA_VISIBLE_DEVICES0,1,2,3 PORT29500 ./tools/dist_train.sh ${CONFIG_FILE} 4 CUDA_VISIBLE_DEVICES4,5,6,7 PORT29501 ./tools/dist_train.sh ${CONFIG_FILE} 4使用 Slurm 启动时则需修改配置文件通常是第 4 行左右中的dist_params指定不同端口# config1.py dist_params dict(backendnccl, port29500)# config2.py dist_params dict(backendnccl, port29501)然后分别启动CUDA_VISIBLE_DEVICES0,1,2,3 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} 4 CUDA_VISIBLE_DEVICES4,5,6,7 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} 4dist_params的默认值backendnccl在 configs/base/default_runtime.py 中定义该基类配置还包含checkpoint_config dict(interval10)每 10 个 epoch 存一次权重、log_config日志钩子、workflow [(train, 1)]等运行时设置。基准测试Benchmark可用以下脚本获得平均推理速度注意不包含IO 时间与预处理时间python tools/analysis/benchmark_inference.py ${MMPOSE_CONFIG_FILE}参考 tools/analysis/benchmark_inference.py 的实现脚本构建验证集 dataloadersamples_per_gpu1与模型后先跳过前 5 个迭代num_warmup 5做预热再对后续迭代用torch.cuda.synchronize()time.perf_counter()精确计时纯前向耗时最终输出Overall average: {its:.2f} items / s与总耗时。该脚本还支持--fuse-conv-bn与--log-interval参数。进阶教程入门文档进一步指向仓库中的系列教程覆盖从配置到定制的完整进阶路径学习配置文件微调模型添加新数据集自定义数据流水线添加新模块导出模型为 ONNX自定义运行时设置例如若要为 ViTPose 训练自定义数据集可参照 2_new_dataset.md 组织 COCO 格式标注并在配置中替换data.train/val/test的ann_file与img_prefix若需调整训练超参0_config.md 详细解释了optimizer、lr_config、total_epochs等字段与_base_继承机制。结合本仓库中 ViTPose 系列配置如 ViTPose_small_coco_256x192.py、ViTPose_large_coco_256x192.py 以及多数据集联合训练的 ViTPose 配置 vitPose_base_cocoaicmpiiap10kapt36kwholebody_256x192_udp.py即可把通用工作流落到 ViT/ViTMoE 主干的实战训练上。赞分享人工智能计算机视觉深度学习【免费下载链接】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点击查看免费下载相关推荐PaddleNLP 大模型预训练实战指南从数据准备到分布式训练PaddleNLP 大模型预训练实战指南从数据准备到分布式训练 PaddleNLP 大模型套件为 LLaMA v1/v2、GPT 3、BaiChuan、Qwe人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPDeiT训练实战从ImageNet数据准备到多GPU分布式训练DeiT训练实战从ImageNet数据准备到多GPU分布式训练 想要快速上手DeiTData efficient Image Transformers人工智能深度学习计算机视觉预训练LoFTR项目训练指南从数据准备到模型训练全解析LoFTR项目训练指南从数据准备到模型训练全解析 前言 LoFTR作为一种基于局部特征变换的深度学习模型在图像匹配领域展现了卓越的性能。本文将全面介绍LoF人工智能计算机视觉深度学习图像处理上一篇Minimal Mistakes 主题 Portfolio 归档页实战从 layout: collection 到作品集页面的完整搭建指南下一篇IDEA Claude Code GUI 自定义模型被强制改写为 claude-opus-5 的根因与修复实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑