YOLO Vision 2026:

포즈 추정(Pose Estimation) 데이터셋 개요#

지원되는 데이터셋 형식#

Ultralytics YOLO 형식#

YOLO 포즈 모델 학습에 사용되는 데이터셋 라벨 형식은 다음과 같습니다:

  1. 이미지당 하나의 텍스트 파일: 데이터셋의 각 이미지에는 이미지 파일과 동일한 이름 및 ".txt" 확장자를 가진 대응하는 텍스트 파일이 있습니다.
  2. 객체당 한 행: 텍스트 파일의 각 행은 이미지 내의 하나의 객체 인스턴스에 해당합니다.
  3. 행별 객체 정보: 각 행에는 해당 객체 인스턴스에 대한 다음 정보가 포함됩니다:
    • 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수(예: 사람은 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>은(는) bounding box의 정규화된 좌표이며, <px1> <py1> <px2> <py2> ... <pxn> <pyn>은(는) 정규화된 키포인트 좌표입니다. 가시성 채널은 선택 사항이지만 가림 현상이 주석 처리된 데이터셋에 유용합니다.

데이터셋 YAML 형식#

Ultralytics 프레임워크는 포즈 추정 모델을 학습하기 위한 데이터셋 및 모델 구성을 정의할 때 YAML 파일 형식을 사용합니다. 다음은 포즈 데이터셋을 정의하는 데 사용되는 YAML 형식의 예시입니다:

ultralytics/cfg/datasets/coco8-pose.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.zip

train, val, 및 test 필드는 학습, 검증 및 테스트 이미지를 가리킵니다. 각각은 디렉토리, 디렉토리 목록, 또는 줄당 하나의 이미지 경로를 나열하는 *.txt 파일을 허용합니다(./로 시작하는 경로는 *.txt 파일에 상대적으로 해석됨). *.txt 파일은 디렉토리의 하위 집합에서 학습하거나, 라벨이 없는 이미지를 건너뛰거나, 여러 소스의 이미지를 하나의 분할로 결합하는 데 유용합니다.

`*.txt` 파일 형태의 이미지 경로
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
names:
  0: person

names은 클래스 이름의 사전입니다. 이름의 순서는 YOLO 데이터셋 파일의 객체 클래스 인덱스 순서와 일치해야 합니다.

(선택 사항) flip_idx은(는) 각 키포인트를 대칭 이미지에 매핑하여 수평 뒤집기 증강이 인체나 얼굴 같은 대칭 골격에서 좌우를 일관되게 유지하도록 합니다. 5개의 얼굴 랜드마크가 [left eye, right eye, nose, left mouth, right mouth] = [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

# Load a model
model = YOLO("yolo26n-pose.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)

지원되는 데이터셋#

이 섹션에서는 Ultralytics YOLO 형식과 호환되며 pose estimation 모델 학습에 사용할 수 있는 데이터셋을 설명합니다.

COCO-Pose#

  • 설명: COCO-Pose는 키포인트가 주석으로 달린 사람들을 포함하는 COCO 2017 이미지를 다루는 대규모 사람 포즈 추정 데이터셋입니다.
  • 라벨 형식: 위에서 설명한 Ultralytics YOLO 형식과 동일하며, 사람 포즈에 대한 키포인트가 포함되어 있습니다.
  • 클래스 수: 1 (사람).
  • 키포인트: 코, 눈, 귀, 어깨, 팔꿈치, 손목, 엉덩이, 무릎, 발목을 포함한 17가지 유형의 키포인트이며, 각각 가시성 차원을 포함합니다.
  • 사용법: 사람 포즈 추정 모델 학습에 적합합니다.
  • 추가 참고 사항: 이 데이터셋은 COCO Keypoints 2017 챌린지를 기반으로 하며, 156,165명의 사람이 주석으로 처리된 58,945장의 이미지로 구성되어 있습니다.
  • COCO-Pose에 대해 자세히 알아보기

COCO8-Pose#

  • 설명: Ultralytics COCO8-Pose는 COCO train 2017 세트의 처음 8개 이미지(학습용 4개, 검증용 4개)로 구성된 작지만 다재다능한 포즈 추정 데이터셋입니다.
  • 라벨 형식: 위에서 설명한 Ultralytics YOLO 형식과 동일하며, 사람 포즈에 대한 키포인트가 포함되어 있습니다.
  • 클래스 수: 1 (사람).
  • 키포인트: 코, 눈, 귀, 어깨, 팔꿈치, 손목, 엉덩이, 무릎, 발목을 포함한 17가지 유형의 키포인트이며, 각각 가시성 차원을 포함합니다.
  • 사용법: 포즈 추정 모델을 테스트 및 디버깅하거나 새로운 키포인트 탐지 접근 방식을 실험하는 데 적합합니다.
  • 추가 참고 사항: COCO8-Pose는 스모크 테스트 및 CI checks에 이상적입니다.
  • COCO8-Pose에 대해 자세히 알아보기

Dog-Pose#

  • 설명: Ultralytics Dog-Pose 데이터셋은 견공 키포인트 추정을 위한 6,773개의 학습 이미지와 1,703개의 검증 이미지를 포함합니다.
  • 라벨 형식: Ultralytics YOLO 형식을 따르며, 개 해부학적 구조에 특화된 여러 키포인트에 대한 어노테이션을 포함합니다.
  • 클래스 수: 1 (개).
  • 키포인트: 사지, 관절, 머리 위치와 같이 반려견 포즈에 맞춰진 24개의 키포인트이며, 각 키포인트는 가시성 차원을 포함합니다.
  • 사용법: 연구부터 real-world applications에 이르기까지 다양한 시나리오에서 개 포즈를 추정하는 모델을 학습하는 데 이상적입니다.
  • 추가 참고 사항: 소스 이미지는 Stanford Dogs Dataset에서 가져온 것입니다.
  • Dog-Pose에 대해 자세히 알아보기

Hand Keypoints#

  • 설명: Ultralytics Hand Keypoints 데이터셋은 총 26,768장의 이미지로 구성되어 있으며, 이 중 18,776장은 학습용, 7,992장은 검증용으로 할당되어 있습니다.
  • 라벨 형식: 위에서 설명한 Ultralytics YOLO 형식과 동일하지만, 사람 손에 대한 21개의 키포인트와 가시성 차원이 포함됩니다.
  • 클래스 수: 1 (손).
  • 키포인트: 21개의 키포인트.
  • 사용법: 사람의 손 포즈 추정 및 gesture recognition에 매우 적합합니다.
  • 추가 참고 사항: 일관된 라벨링을 위해 Google MediaPipe를 사용하여 키포인트 주석을 생성했습니다.
  • Hand Keypoints에 대해 자세히 알아보기

Tiger-Pose#

  • 설명: Ultralytics Tiger-Pose 데이터셋은 YouTube video에서 소스를 가져온 263장의 이미지로 구성되어 있으며, 210장은 학습용, 53장은 검증용으로 할당되어 있습니다.
  • 라벨 형식: 위에서 설명한 Ultralytics YOLO 형식과 동일하며, 동물 포즈를 위한 12개의 키포인트가 있고 가시성 차원은 없습니다.
  • 클래스 수: 1 (호랑이).
  • 키포인트: 12개의 키포인트.
  • 사용법: 동물 포즈 또는 사람이 아닌 다른 포즈를 추정하는 데 매우 유용합니다.
  • 추가 참고 사항: AGPL-3.0 License에 따라 배포됩니다.
  • Tiger-Pose에 대해 자세히 알아보기

자신만의 데이터셋 추가하기#

자체 데이터셋을 보유하고 있으며 이를 사용하여 Ultralytics YOLO 형식으로 포즈 추정 모델을 학습시키려는 경우, 위에서 명시된 "Ultralytics YOLO 형식"을 따르는지 확인하십시오. 어노테이션을 필요한 형식으로 변환하고 YAML 구성 파일에서 경로, 클래스 수, 클래스 이름을 지정하십시오.

변환 단계를 완전히 건너뛰려면 Ultralytics Platform을 사용하여 원본 이미지를 업로드하고 브라우저에서 키포인트에 주석을 단 다음 결과 데이터셋으로 직접 학습을 진행할 수 있습니다.

변환 도구#

Ultralytics는 인기 있는 COCO dataset 형식의 라벨을 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 매개변수는 변환된 라벨에 (포즈 추정을 위한) 키포인트를 포함할지 여부를 지정합니다.

FAQ#

포즈 추정을 위한 Ultralytics YOLO 형식이란 무엇인가요?#

포즈 추정 데이터셋을 위한 Ultralytics YOLO 형식은 각 이미지에 대응하는 텍스트 파일을 라벨링하는 것을 포함합니다. 텍스트 파일의 각 행은 객체 인스턴스에 대한 정보를 저장합니다:

  • 객체 클래스 인덱스
  • 객체 중심 좌표 (정규화된 x 및 y)
  • 객체 너비 및 높이 (정규화됨)
  • 객체 키포인트 좌표 (정규화된 pxn 및 pyn)

2D 포즈의 경우, 키포인트에는 정규화된 x 및 y 좌표가 포함됩니다. 가시성 차원이 있는 경우 각 키포인트에는 가시성 플래그도 함께 제공됩니다. 자세한 내용은 Ultralytics YOLO format을 참조하세요.

COCO-Pose 데이터셋을 Ultralytics YOLO에서 어떻게 사용하나요?#

coco-pose.yaml은(는) 패키지에 포함되어 제공되며 처음 사용할 때 이미지와 라벨을 다운로드하므로 수동으로 준비할 필요가 없습니다.

from ultralytics import YOLO

model = YOLO("yolo26n-pose.pt")  # load pretrained model
results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)

데이터셋에 대한 자세한 내용은 COCO-Pose를 참조하고, 전체 인수 목록은 Train 페이지를 참조하세요.

Ultralytics YOLO에서 포즈 추정을 위해 나만의 데이터셋을 추가하려면 어떻게 해야 하나요?#

데이터셋을 추가하려면:

  1. 어노테이션을 Ultralytics YOLO 형식으로 변환합니다.

  2. 데이터셋 경로, 클래스 수, 클래스 이름을 지정하는 YAML 구성 파일을 만듭니다.

  3. 구성 파일을 사용하여 모델을 학습시킵니다:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n-pose.pt")
    results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)

    전체 단계에 대해서는 Adding your own dataset 섹션을 확인하세요.

Ultralytics YOLO에서 데이터셋 YAML 파일의 목적은 무엇인가요?#

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.zip

YAML 설정 파일 작성에 대한 자세한 내용은 Dataset YAML format에서 읽어보세요.

COCO 데이터셋 라벨을 포즈 추정을 위한 Ultralytics YOLO 형식으로 어떻게 변환하나요?#

Ultralytics는 COCO 데이터셋 라벨을 키포인트 정보를 포함하여 YOLO 형식으로 변환하는 변환 도구를 제공합니다:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)

이 도구는 COCO 데이터셋을 YOLO 프로젝트에 원활하게 통합하는 데 도움을 줍니다. 자세한 내용은 Conversion Tool 섹션과 data preprocessing guide를 참조하세요.

댓글