库名称:transformers
许可证:apache-2.0
支持语言:
VitPose模型卡
ViTPose:用于人体姿态估计的简易视觉Transformer基线,以及ViTPose+:通用人体姿态估计的视觉Transformer基础模型。该模型在MS COCO关键点测试开发集上取得了81.1 AP的优异成绩。
模型详情
尽管在设计时未考虑特定领域知识,但朴素的视觉Transformer在视觉识别任务中已展现出卓越性能。然而,很少有人探索这种简单结构在姿态估计任务中的潜力。本文通过名为ViTPose的基线模型,从模型结构简洁性、模型规模可扩展性、训练范式灵活性以及模型间知识可迁移性等多个角度,展示了朴素视觉Transformer在姿态估计中的惊人能力。具体而言,ViTPose采用非层级化的朴素视觉Transformer作为骨干网络提取给定人体实例的特征,并搭配轻量级解码器进行姿态估计。得益于Transformer的可扩展模型容量和高并行性,其参数量可从100M扩展至1B,在吞吐量与性能之间建立了新的帕累托前沿。此外,ViTPose在注意力类型、输入分辨率、预训练与微调策略以及处理多姿态任务方面表现出高度灵活性。我们还通过实验证明,大型ViTPose模型的知识可通过简单的知识令牌轻松迁移至小型模型。实验结果显示,我们的基础ViTPose模型在具有挑战性的MS COCO关键点检测基准测试中超越了代表性方法,而最大模型更是创下了80.9 AP的新纪录(MS COCO测试开发集)。代码与模型详见:https://github.com/ViTAE-Transformer/ViTPose
模型描述
这是发布在Hugging Face Hub上的🤗 transformers模型卡。本模型卡为自动生成。
- 开发团队: 徐宇飞、张静、张启明、陶大程
- 资助方: ARC FL-170100117与IH-180100002
- 许可证: Apache-2.0
- 移植至🤗 Transformers: Sangbum Choi与Niels Rogge
模型来源
- 原始仓库: https://github.com/ViTAE-Transformer/ViTPose
- 论文: https://arxiv.org/pdf/2204.12484
- 演示: https://huggingface.co/spaces?sort=trending&search=vitpose
用途
ViTPose模型由ViTAE-Transformer团队开发,主要用于姿态估计任务。以下是该模型的直接应用场景:
人体姿态估计:可用于图像或视频中的人体姿态估计,识别头部、肩膀、肘部、手腕、臀部、膝盖和脚踝等关键身体关节的位置。
动作识别:通过分析时间序列上的姿态变化,辅助识别人体各类动作与活动。
安防监控:在安防监控应用中,ViTPose可用于公共场所或私人区域的人类行为监测与分析。
健康健身:可集成至健身应用中追踪分析运动姿势,提供动作规范性反馈。
游戏动画:可应用于游戏与动画系统,创造更逼真的角色动作与交互。
偏差、风险与局限性
本文提出了简单高效的视觉Transformer姿态估计基线模型ViTPose。尽管结构设计简洁,ViTPose仍在MS COCO数据集上取得了SOTA性能。然而,若结合更复杂的技术(如复合解码器或FPN结构),其潜力仍有待进一步挖掘。此外,虽然ViTPose展现出简洁性、可扩展性、灵活性和可迁移性等优势,但在提示调优等方向仍需更多研究探索。我们相信ViTPose还可应用于动物姿态估计和面部关键点检测等其他领域,这些将作为未来工作展开。
快速开始
使用以下代码快速体验模型:
import torch
import requests
import numpy as np
from PIL import Image
from transformers import (
AutoProcessor,
RTDetrForObjectDetection,
VitPoseForPoseEstimation,
)
device = "cuda" if torch.cuda.is_available() else "cpu"
url = "http://images.cocodataset.org/val2017/000000000139.jpg"
image = Image.open(requests.get(url, stream=True).raw)
person_image_processor = AutoProcessor.from_pretrained("PekingU/rtdetr_r50vd_coco_o365")
person_model = RTDetrForObjectDetection.from_pretrained("PekingU/rtdetr_r50vd_coco_o365", device_map=device)
inputs = person_image_processor(images=image, return_tensors="pt").to(device)
with torch.no_grad():
outputs = person_model(**inputs)
results = person_image_processor.post_process_object_detection(
outputs, target_sizes=torch.tensor([(image.height, image.width)]), threshold=0.3
)
result = results[0]
person_boxes = result["boxes"][result["labels"] == 0]
person_boxes = person_boxes.cpu().numpy()
person_boxes[:, 2] = person_boxes[:, 2] - person_boxes[:, 0]
person_boxes[:, 3] = person_boxes[:, 3] - person_boxes[:, 1]
image_processor = AutoProcessor.from_pretrained("usyd-community/vitpose-plus-base")
model = VitPoseForPoseEstimation.from_pretrained("usyd-community/vitpose-plus-base", device_map=device)
inputs = image_processor(image, boxes=[person_boxes], return_tensors="pt").to(device)
inputs["dataset_index"] = torch.tensor([0], device=device)
with torch.no_grad():
outputs = model(**inputs)
pose_results = image_processor.post_process_pose_estimation(outputs, boxes=[person_boxes], threshold=0.3)
image_pose_result = pose_results[0]
for i, person_pose in enumerate(image_pose_result):
print(f"人物#{i}")
for keypoint, label, score in zip(
person_pose["keypoints"], person_pose["labels"], person_pose["scores"]
):
keypoint_name = model.config.id2label[label.item()]
x, y = keypoint
print(f" - {keypoint_name}: x={x.item():.2f}, y={y.item():.2f}, 置信度={score.item():.2f}")
训练详情
训练数据
我们使用MS COCO、AI Challenger、MPII和CrowdPose数据集进行训练与评估。OCHuman数据集仅用于评估模型在遮挡情况下的性能。MS COCO数据集包含11.8万张图像和15万个人体实例(每个实例最多标注17个关键点),采用CC-BY-4.0许可。MPII数据集采用BSD许可,包含1.5万张图像和2.2万个人体实例(每个实例最多16个关键点)。AI Challenger规模更大,包含20万张训练图像和350个人体实例(每个实例最多14个关键点)。OCHuman包含严重遮挡的人体实例,仅用于验证和测试集,含4千张图像和8千个实例。
训练超参数
- 训练方案:

速度、规模与耗时

评估
在OCHuman验证集和测试集上,我们使用真实边界框评估ViTPose变体与代表性模型在严重遮挡情况下的性能。由于OCHuman数据集未标注全部人体实例,我们未采用额外的人体检测器。对于MPII验证集,我们采用PCKh指标进行评估。
结果

模型架构与目标

硬件
模型基于mmpose代码库在8块A100 GPU上训练
引用
BibTeX:
@article{xu2022vitposesimplevisiontransformer,
title={ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation},
author={Yufei Xu and Jing Zhang and Qiming Zhang and Dacheng Tao},
year={2022},
eprint={2204.12484},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2204.12484}
}