姿勢推定データセットの概要#
サポートされているデータセット形式#
Ultralytics YOLO形式#
YOLOの姿勢推定モデルのトレーニングに使用するデータセットのラベル形式は次のとおりです。
- 画像ごとに1つのテキストファイル:データセット内の各画像に、画像ファイルと同じ名前で拡張子が「.txt」のテキストファイルが対応します。
- 物体ごとに1行:テキストファイルの各行は、画像内の1つの物体インスタンスに対応します。
- 各行に物体情報を記載:各行には、物体インスタンスに関する次の情報が含まれます。
- 物体クラスのインデックス:物体のクラスを表す整数(例:人は0、車は1など)。
- オブジェクトの中心座標:オブジェクト中心のx座標とy座標で、0~1の範囲に正規化されています。
- オブジェクトの幅と高さ:オブジェクトの幅と高さで、0~1の範囲に正規化されています。
- オブジェクトのキーポイント座標: オブジェクトのキーポイントは、0~1の範囲に正規化されています。
以下は、ポーズ推定タスクのラベル形式の例です:
2Dキーポイント形式
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>キーポイントの可視性を含む形式(各点の可視性を含む)
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> ... <pxn> <pyn> <pn-visibility>この形式では、<class-index>はオブジェクトのクラスインデックス、<x> <y> <width> <height>はバウンディングボックスの正規化座標、<px1> <py1> <px2> <py2> ... <pxn> <pyn>はキーポイントの正規化座標です。可視性チャンネルは任意ですが、オクルージョンをアノテーションするデータセットでは役立ちます。
データセットのYAML形式#
Ultralyticsフレームワークでは、YAMLファイル形式を使用して、ポーズ推定モデルのトレーニングに使うデータセットとモデルの設定を定義します。以下は、ポーズデータセットの定義に使用するYAML形式の例です:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose
# Example usage: yolo train data=coco8-pose.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-pose ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-pose # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes
names:
0: person
# Keypoint names per class
kpt_names:
0:
- nose
- left_eye
- right_eye
- left_ear
- right_ear
- left_shoulder
- right_shoulder
- left_elbow
- right_elbow
- left_wrist
- right_wrist
- left_hip
- right_hip
- left_knee
- right_knee
- left_ankle
- right_ankle
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.ziptrain、val、testの各フィールドは、学習、検証、テスト用画像を指定します。各フィールドには、ディレクトリ、ディレクトリのリスト、または1行につき1つの画像パスを記載した*.txtファイルを指定できます(./で始まるパスは、*.txtファイルを基準に解決されます)。*.txtファイルを使うと、ディレクトリ内の一部だけを学習に使用したり、ラベルのない画像を除外したり、複数のソースの画像を1つの分割にまとめたりできます。
path: datasets/coco8-pose # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
kpt_shape: [17, 3] # required for pose datasets
names:
0: personnamesはクラス名の辞書です。クラス名の順序は、YOLOデータセットファイル内のオブジェクトクラスインデックスの順序と一致させてください。
(任意)flip_idxは各キーポイントを鏡像のキーポイントに対応付けます。これにより、人の体や顔のような左右対称の骨格で、水平反転によるデータ拡張を行っても左右の対応関係が保たれます。5つの顔のランドマークを[左目、右目、鼻、左口角、右口角] = [0, 1, 2, 3, 4]としてインデックス付けする場合、flip_idxは[1, 0, 2, 4, 3]です。左右のペアである0-1と3-4は入れ替わり、鼻は同じインデックスを維持します。
(任意)kpt_oks_sigmasは、トレーニングと検証で使用するキーポイントごとのカスタムOKSシグマを設定します(例: [0.26, 0.25, 0.25, ...])。リストの長さは、kpt_shapeのキーポイント数Nと一致し、すべての値が正である必要があります。省略した場合、kpt_shape: [17, 3]にはCOCOの17キーポイント用シグマが、それ以外には均一な1/Nが使用されます。
使用方法#
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-pose.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
# モデルをトレーニングする
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)サポート対象のデータセット#
このセクションでは、Ultralytics YOLO形式に対応し、ポーズ推定モデルのトレーニングに使用できるデータセットを紹介します。これらのデータセットの多くはUltralytics Platformでもホストされており、画像やアノテーションの閲覧、データセット統計の確認、クラウドトレーニング用のクローン作成ができます。
COCO-Pose#
- 説明: COCO-Poseは、キーポイントがアノテーションされた人物を含むCOCO 2017画像を対象とした、大規模な人間のポーズ推定データセットです。
- ラベル形式: 上記で説明したUltralytics YOLO形式と同じで、人間のポーズのキーポイントを含みます。
- クラス数: 1(人物)。
- キーポイント: 鼻、目、耳、肩、肘、手首、腰、膝、足首など、可視性の次元を持つ17種類のキーポイントです。
- 用途: 人間のポーズ推定モデルのトレーニングに適しています。
- 補足: このデータセットはCOCO Keypoints 2017チャレンジを基盤としており、58,945枚の画像に156,165人がアノテーションされています。
- COCO-Poseの詳細はこちら
COCO8-Pose#
- 説明: Ultralytics COCO8-Poseは、小規模ながら汎用性の高いポーズ推定データセットです。COCO train 2017セットの最初の8枚の画像で構成され、トレーニング用が4枚、検証用が4枚です。
- ラベル形式: 上記で説明したUltralytics YOLO形式と同じで、人間のポーズのキーポイントを含みます。
- クラス数: 1(人物)。
- キーポイント: 鼻、目、耳、肩、肘、手首、腰、膝、足首など、可視性の次元を持つ17種類のキーポイントです。
- 用途: ポーズ推定モデルのテストやデバッグ、新しいキーポイント検出手法の実験に適しています。
- 補足: COCO8-Poseは、動作確認やCIチェックに最適です。
- COCO8-Poseの詳細はこちら
Dog-Pose#
- 説明: Ultralytics Dog-Poseデータセットには、犬のキーポイント推定用のトレーニング画像6,773枚と検証画像1,703枚が含まれています。
- ラベル形式: Ultralytics YOLO形式に準拠し、犬の解剖学的特徴に固有の複数のキーポイントをアノテーションしています。
- クラス数: 1(犬)。
- キーポイント: 四肢、関節、頭部の位置など、犬のポーズに合わせた24個のキーポイントがあり、それぞれに可視性の次元があります。
- 用途: 研究から実環境でのアプリケーションまで、さまざまなシナリオで犬のポーズを推定するモデルのトレーニングに最適です。
- 補足: ソース画像はStanford Dogs Datasetから取得されています。
- Dog-Poseの詳細はこちら
手のキーポイント#
- 説明: Ultralytics Hand Keypointsデータセットは26,768枚の画像で構成され、トレーニング用に18,776枚、検証用に7,992枚が割り当てられています。
- ラベル形式: 上記のUltralytics YOLO形式と同じですが、人間の手の21個のキーポイントと可視性の次元を含みます。
- クラス数: 1(手)。
- キーポイント: 21個のキーポイントです。
- 用途: 人間の手のポーズ推定やジェスチャー認識に適しています。
- 補足: 一貫したラベル付けのため、キーポイントのアノテーションはGoogle MediaPipeを使用して生成されます。
- 手のキーポイントの詳細はこちら
Tiger-Pose#
- 説明: Ultralytics Tiger-Poseデータセットは、YouTube動画から取得した263枚の画像で構成され、トレーニング用に210枚、検証用に53枚が割り当てられています。
- ラベル形式: 上記のUltralytics YOLO形式と同じで、動物のポーズ用に12個のキーポイントを含み、可視性の次元はありません。
- クラス数: 1(トラ)。
- キーポイント: 12個のキーポイントです。
- 用途: 動物のポーズや、人間以外のあらゆるポーズの推定に適しています。
- 補足: AGPL-3.0ライセンスの下で公開されています。
- Tiger-Poseの詳細はこちら
独自のデータセットを追加する#
独自のデータセットをお持ちで、Ultralytics YOLO形式を使ってポーズ推定モデルをトレーニングする場合は、「Ultralytics YOLO format」で上記に指定した形式に準拠していることを確認してください。アノテーションを必要な形式に変換し、YAML設定ファイルでパス、クラス数、クラス名を指定します。
変換手順を省略するには、Ultralytics Platformに未加工の画像をアップロードし、ブラウザー上でキーポイントをアノテーションして、作成したデータセットをそのままトレーニングに使用できます。
変換ツール#
Ultralyticsは、一般的なCOCOデータセット形式のラベルをYOLO形式に変換する便利なツールを提供しています:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)この変換ツールを使用すると、COCOデータセットやCOCO形式の任意のデータセットをUltralytics YOLO形式に変換できます。use_keypointsパラメーターは、変換後のラベルにキーポイント(ポーズ推定用)を含めるかどうかを指定します。
よくある質問#
ポーズ推定データセット向けのUltralytics YOLO形式では、各画像に対応するテキストファイルでラベル付けします。テキストファイルの各行には、オブジェクトインスタンスに関する情報が格納されます:
- オブジェクトのクラスインデックス
- オブジェクトの中心座標(正規化されたxとy)
- オブジェクトの幅と高さ(正規化済み)
- オブジェクトのキーポイント座標(正規化されたpxnとpyn)
2Dポーズでは、キーポイントに正規化されたx座標とy座標が含まれます。可視性の次元がある場合、各キーポイントには可視性フラグも含まれます。詳細については、Ultralytics YOLO形式をご覧ください。
データセットを追加するには:
-
アノテーションをUltralytics YOLO形式に変換します。
-
データセットのパス、クラス数、クラス名を指定するYAML設定ファイルを作成します。
-
設定ファイルを使用してモデルをトレーニングします:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)手順の詳細については、独自のデータセットの追加セクションをご確認ください。
-
Ultralytics YOLOのデータセットYAMLファイルでは、トレーニングに使うデータセットとモデルの設定を定義します。トレーニング、検証、テスト用画像のパス、キーポイントの形状、クラス名、その他の設定オプションを指定します。この構造化された形式により、データセットの管理とモデルのトレーニングを効率化できます。以下はYAML形式の例です:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose # Example usage: yolo train data=coco8-pose.yaml # parent # ├── ultralytics # └── datasets # └── coco8-pose ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-pose # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Keypoints kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible) flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15] # Classes names: 0: person # Keypoint names per class kpt_names: 0: - nose - left_eye - right_eye - left_ear - right_ear - left_shoulder - right_shoulder - left_elbow - right_elbow - left_wrist - right_wrist - left_hip - right_hip - left_knee - right_knee - left_ankle - right_ankle # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.zipYAML設定ファイルの作成については、データセットYAML形式をご覧ください。
Ultralyticsは、キーポイント情報を含むCOCOデータセットのラベルをYOLO形式に変換するツールを提供しています:
from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)このツールを使うと、COCOデータセットをYOLOプロジェクトにスムーズに統合できます。詳細については、変換ツールのセクションとデータの前処理ガイドをご覧ください。