Ultralytics YOLO27:

포즈 추정 데이터셋 개요#

지원되는 데이터셋 형식#

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>바운딩 박스의 정규화된 좌표이며, <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은 각 키포인트를 좌우 반전 이미지에 매핑하므로, 수평 뒤집기 증강을 적용해도 사람의 신체나 얼굴과 같은 대칭형 스켈레톤에서 왼쪽과 오른쪽의 일관성이 유지됩니다. [왼쪽 눈, 오른쪽 눈, 코, 왼쪽 입, 오른쪽 입] = [0, 1, 2, 3, 4]로 인덱싱된 5개의 얼굴 랜드마크의 경우 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 형식과 호환되며 자세 추정 모델 학습에 사용할 수 있는 데이터셋을 개괄합니다. 이러한 데이터셋의 대부분은 Ultralytics 플랫폼에도 호스팅되어 있어, 이미지와 어노테이션을 탐색하고, 데이터셋 통계를 확인하며, 클라우드 학습을 위해 데이터셋을 복제할 수 있습니다.

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에 대해 자세히 알아보기

Hand Keypoints#

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

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 매개변수는 변환된 라벨에 키포인트(포즈 추정용)를 포함할지 여부를 지정합니다.

FAQ#

  • 포즈 추정 데이터셋의 Ultralytics YOLO 형식에서는 각 이미지에 해당하는 텍스트 파일로 라벨을 지정합니다. 텍스트 파일의 각 행에는 객체 인스턴스에 대한 정보가 저장됩니다.

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

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

  • 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 페이지를 참조하세요.

  • 데이터셋을 추가하려면 다음을 수행합니다.

    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)

      전체 단계는 자체 데이터셋 추가 섹션을 참조하세요.

  • 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을 참조하세요.

  • 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를 참조하세요.

댓글