포즈 추정 데이터셋 개요#
지원되는 데이터셋 형식#
Ultralytics YOLO 형식#
YOLO 포즈 모델 학습에 사용되는 데이터셋 레이블 형식은 다음과 같습니다.
- 이미지마다 텍스트 파일 하나: 데이터셋의 각 이미지에는 이미지 파일과 이름이 같고 확장자가 ".txt"인 텍스트 파일이 하나씩 대응됩니다.
- 객체마다 한 행: 텍스트 파일의 각 행은 이미지의 객체 인스턴스 하나에 해당합니다.
- 행마다 객체 정보 포함: 각 행에는 객체 인스턴스에 관한 다음 정보가 포함됩니다:
- 객체 클래스 인덱스: 객체의 클래스를 나타내는 정수입니다(예: 사람은 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 필드는 학습, 검증, 테스트 이미지의 경로를 지정합니다. 각 필드에는 디렉터리, 디렉터리 목록 또는 이미지 경로를 한 줄에 하나씩 나열한 *.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
kpt_shape: [17, 3] # required for pose datasets
names:
0: personnames은 클래스 이름으로 구성된 딕셔너리입니다. 이름의 순서는 YOLO 데이터셋 파일에 지정된 객체 클래스 인덱스의 순서와 일치해야 합니다.
(선택 사항) flip_idx은 각 키포인트를 거울상에 매핑하므로, 수평 뒤집기 증강을 적용해도 사람의 몸이나 얼굴처럼 대칭인 스켈레톤에서 좌우가 일관되게 유지됩니다. [왼쪽 눈, 오른쪽 눈, 코, 왼쪽 입, 오른쪽 입] = [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 손 키포인트 데이터셋은 총 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 형식"에 명시된 형식을 따르는지 확인하세요. 주석을 필수 형식으로 변환하고 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 프로젝트에 원활하게 통합할 수 있습니다. 자세한 내용은 변환 도구 섹션과 데이터 전처리 가이드를 참조하세요.