モデル概要
モデル特徴
モデル能力
使用事例
🚀 VitPoseのモデルカード
ViTPoseは、人体姿勢推定のためのシンプルなビジョントランスフォーマーベースラインであり、ViTPose+は汎用的な身体姿勢推定のためのビジョントランスフォーマー基礎モデルです。MS COCO Keypoint test-devセットで81.1 APを達成しています。
🚀 クイックスタート
以下のコードを使用して、モデルを始めることができます。
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)
# ------------------------------------------------------------------------
# Stage 1. Detect humans on the image
# ------------------------------------------------------------------------
# You can choose detector by your choice
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] # take first image results
# Human label refers 0 index in COCO dataset
person_boxes = result["boxes"][result["labels"] == 0]
person_boxes = person_boxes.cpu().numpy()
# Convert boxes from VOC (x1, y1, x2, y2) to COCO (x1, y1, w, h) format
person_boxes[:, 2] = person_boxes[:, 2] - person_boxes[:, 0]
person_boxes[:, 3] = person_boxes[:, 3] - person_boxes[:, 1]
# ------------------------------------------------------------------------
# Stage 2. Detect keypoints for each person found
# ------------------------------------------------------------------------
image_processor = AutoProcessor.from_pretrained("usyd-community/vitpose-base-coco-aic-mpii")
model = VitPoseForPoseEstimation.from_pretrained("usyd-community/vitpose-base-coco-aic-mpii", device_map=device)
inputs = image_processor(image, boxes=[person_boxes], return_tensors="pt").to(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] # results for first image
for i, person_pose in enumerate(image_pose_result):
print(f"Person #{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={score.item():.2f}")
出力:
Person #0
- Nose: x=428.70, y=170.20, score=0.90
- L_Eye: x=429.26, y=167.11, score=0.94
- R_Eye: x=429.36, y=167.39, score=0.78
- L_Ear: x=432.93, y=167.07, score=0.88
- R_Ear: x=441.39, y=166.26, score=0.86
- L_Shoulder: x=439.87, y=176.99, score=0.94
- R_Shoulder: x=444.96, y=177.49, score=0.70
- L_Elbow: x=436.33, y=196.93, score=0.98
- R_Elbow: x=431.81, y=200.50, score=0.84
- L_Wrist: x=430.75, y=217.52, score=0.92
- R_Wrist: x=421.83, y=212.19, score=0.86
- L_Hip: x=444.97, y=223.51, score=0.79
- R_Hip: x=452.21, y=222.88, score=0.70
- L_Knee: x=442.63, y=255.64, score=0.78
- R_Knee: x=452.44, y=255.15, score=0.83
- L_Ankle: x=444.95, y=288.12, score=0.63
- R_Ankle: x=456.43, y=286.81, score=0.86
Person #1
- Nose: x=398.27, y=181.73, score=0.84
- L_Eye: x=398.43, y=179.77, score=0.85
- R_Eye: x=396.03, y=179.55, score=0.85
- R_Ear: x=389.00, y=180.26, score=0.84
- L_Shoulder: x=397.21, y=194.18, score=0.73
- R_Shoulder: x=384.42, y=190.45, score=0.56
✨ 主な機能
ViTPoseは、人体姿勢推定タスクに特化したモデルで、以下のような用途に使用できます。
- 人体姿勢推定:画像やビデオ内の人間の姿勢を推定し、頭、肩、肘、手首、腰、膝、足首などの主要な関節の位置を特定します。
- 行動認識:時間の経過に伴う姿勢の変化を分析することで、様々な人間の行動や活動を認識します。
- 監視:公共空間や私的施設での人間の行動を監視および分析するために使用できます。
- 健康とフィットネス:フィットネスアプリで運動姿勢を追跡および分析し、フォームやテクニックに関するフィードバックを提供します。
- ゲームとアニメーション:ゲームやアニメーションシステムに組み込んで、よりリアルなキャラクターの動きやインタラクションを実現します。
📚 ドキュメント
モデルの詳細
設計において特定のドメイン知識を考慮していないにもかかわらず、単純なビジョントランスフォーマーは視覚認識タスクで優れた性能を示しています。しかし、このような単純な構造の姿勢推定タスクへの潜在能力を明らかにする努力はほとんどなされていません。この論文では、ViTPoseと呼ばれるシンプルなベースラインモデルを通じて、モデル構造の単純さ、モデルサイズの拡張性、トレーニングパラダイムの柔軟性、およびモデル間の知識の移行可能性という様々な側面から、単純なビジョントランスフォーマーの姿勢推定に対する驚くほど良好な能力を示しています。具体的には、ViTPoseは、与えられた人物インスタンスの特徴を抽出するために、単純で階層的でないビジョントランスフォーマーをバックボーンとして採用し、姿勢推定のために軽量なデコーダを使用します。トランスフォーマーの拡張可能なモデル容量と高い並列性を利用することで、100Mから1Bのパラメータまで拡大することができ、スループットと性能の間に新しいパレートフロントを設定します。さらに、ViTPoseは、注意タイプ、入力解像度、事前学習と微調整戦略、および複数の姿勢タスクの処理に関して非常に柔軟です。また、大規模なViTPoseモデルの知識は、単純な知識トークンを介して小規模なモデルに容易に移行できることを実証的に示しています。実験結果は、基本的なViTPoseモデルが、挑戦的なMS COCO Keypoint Detectionベンチマークで代表的な方法を上回り、最大のモデルが新しい最先端技術、つまりMS COCO test-devセットで80.9 APを設定することを示しています。コードとモデルは、https://github.com/ViTAE-Transformer/ViTPose で入手できます。
モデルの説明
これは、🤗 transformersモデルのモデルカードで、Hubにアップロードされています。このモデルカードは自動生成されています。
- 開発者:Yufei Xu, Jing Zhang, Qiming Zhang, Dacheng Tao
- 資金提供:ARC FL - 170100117およびIH - 180100002
- ライセンス:Apache - 2.0
- 🤗 Transformersへの移植者:Sangbum Choi and Niels Rogge
モデルのソース
- 元のリポジトリ:https://github.com/ViTAE-Transformer/ViTPose
- 論文:https://arxiv.org/pdf/2204.12484
- デモ:https://huggingface.co/spaces?sort=trending&search=vitpose
バイアス、リスク、および制限
この論文では、姿勢推定のためのシンプルで効果的なビジョントランスフォーマーベースライン、すなわちViTPoseを提案しています。構造に精巧な設計がないにもかかわらず、ViTPoseはMS COCOデータセットでSOTAの性能を達成しています。しかし、ViTPoseの潜在能力は、複雑なデコーダやFPN構造などのより高度な技術を用いて完全には探索されておらず、これらの技術を用いることでさらに性能を向上させる可能性があります。また、ViTPoseは単純性、拡張性、柔軟性、および移行可能性などの魅力的な特性を示していますが、例えばプロンプトベースの微調整を探索するなど、さらなる研究努力が必要です。さらに、ViTPoseは他の姿勢推定データセット、例えば動物の姿勢推定[47, 9, 45]や顔のキーポイント検出[21, 6]にも適用できると考えられます。これらは将来の研究課題として残しています。
🔧 技術詳細
トレーニングデータ
トレーニングと評価には、MS COCO [28]、AI Challenger [41]、MPII [3]、およびCrowdPose [22]のデータセットを使用しています。OCHuman [54]データセットは、遮蔽された人物を扱うモデルの性能を測定するために、評価段階でのみ使用されます。MS COCOデータセットは、トレーニング用に118Kの画像と150Kの人間のインスタンスを含み、各インスタンスには最大17のキーポイントアノテーションが付けられています。このデータセットはCC - BY - 4.0ライセンスの下にあります。MPIIデータセットはBSDライセンスの下にあり、トレーニング用に15Kの画像と22Kの人間のインスタンスを含み、各インスタンスには最大16の人間のキーポイントがアノテーションされています。AI Challengerははるかに大きく、200Kを超えるトレーニング画像と350の人間のインスタンスを含み、各インスタンスには最大14のキーポイントがアノテーションされています。OCHumanは、重度の遮蔽がある人間のインスタンスを含み、バリデーションとテストセットとしてのみ使用され、4Kの画像と8Kのインスタンスを含みます。
トレーニングハイパーパラメータ
- トレーニング方式:
速度、サイズ、時間
評価
OCHumanバリデーションとテストセット
重度の遮蔽がある人間のインスタンスに対する人体姿勢推定モデルの性能を評価するために、ViTPoseのバリアントと代表的なモデルを、正解のバウンディングボックスを持つOCHumanバリデーションとテストセットでテストしました。OCHumanデータセットではすべての人間のインスタンスがアノテーションされているわけではないため、追加の人間検出器を採用していません。人間検出器は多くの「偽陽性」のバウンディングボックスを生成し、姿勢推定モデルの真の能力を反映できないからです。具体的には、MS COCOデータセットに対応するViTPoseのデコーダヘッドを使用しています。これは、MS COCOとOCHumanデータセットのキーポイント定義が同じであるためです。
MPIIバリデーションセット
ViTPoseと代表的なモデルの性能を、正解のバウンディングボックスを持つMPIIバリデーションセットで評価しました。MPIIのデフォルト設定に従い、性能評価の指標としてPCKhを使用しています。
結果
モデルアーキテクチャと目的
ハードウェア
モデルは、mmposeコードベースに基づいて8台のA100 GPUでトレーニングされています。
📄 ライセンス
このモデルはApache - 2.0ライセンスの下で提供されています。
引用
@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}
}









