Tổng quan về các tập dữ liệu ước tính tư thế (Pose Estimation)#
Các định dạng tập dữ liệu được hỗ trợ#
Định dạng Ultralytics YOLO#
Định dạng nhãn tập dữ liệu được sử dụng để huấn luyện các model ước tính tư thế YOLO như sau:
- Một tệp văn bản cho mỗi ảnh: Mỗi ảnh trong tập dữ liệu có một tệp văn bản tương ứng với cùng tên với tệp ảnh và phần mở rộng ".txt".
- Một hàng cho mỗi đối tượng: Mỗi hàng trong tệp văn bản tương ứng với một thực thể đối tượng trong ảnh.
- Thông tin đối tượng trên mỗi hàng: Mỗi hàng chứa các thông tin sau về thực thể đối tượng:
- Chỉ số lớp đối tượng: Một số nguyên đại diện cho lớp của đối tượng (ví dụ: 0 cho người, 1 cho xe hơi, v.v.).
- Tọa độ trung tâm đối tượng: Tọa độ x và y của tâm đối tượng, được chuẩn hóa từ 0 đến 1.
- Chiều rộng và chiều cao đối tượng: Chiều rộng và chiều cao của đối tượng, được chuẩn hóa từ 0 đến 1.
- Tọa độ điểm mấu chốt (keypoint) của đối tượng: Các điểm mấu chốt của đối tượng, được chuẩn hóa từ 0 đến 1.
Dưới đây là ví dụ về định dạng nhãn cho tác vụ ước tính tư thế:
Định dạng với các điểm mấu chốt 2D
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>Định dạng với khả năng hiển thị điểm mấu chốt (bao gồm độ hiển thị cho mỗi điểm)
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> <pxn> <pyn> <pn-visibility>Trong định dạng này, <class-index> là chỉ mục lớp của đối tượng, <x> <y> <width> <height> là tọa độ chuẩn hóa của bounding box, và <px1> <py1> <px2> <py2> ... <pxn> <pyn> là tọa độ keypoint chuẩn hóa. Kênh visibility là tùy chọn nhưng hữu ích cho các dataset có chú thích hiện tượng che khuất.
Định dạng YAML cho tập dữ liệu#
Framework Ultralytics sử dụng định dạng tệp YAML để xác định cấu hình tập dữ liệu và model cho việc huấn luyện các model ước tính tư thế. Dưới đây là ví dụ về định dạng YAML được sử dụng để xác định tập dữ liệu tư thế:
# 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.zipCác trường train, val, và test trỏ đến các ảnh train, validation và test. Mỗi trường nhận một thư mục, một danh sách thư mục, hoặc một file *.txt liệt kê một đường dẫn ảnh trên mỗi dòng (các đường dẫn bắt đầu bằng ./ được phân giải tương đối với file *.txt). Một file *.txt hữu ích để train trên một tập con của thư mục, bỏ qua các ảnh không có nhãn, hoặc kết hợp ảnh từ nhiều nguồn thành một split.
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: personnames là một từ điển chứa tên các lớp. Thứ tự của các tên phải khớp với thứ tự của các chỉ mục lớp đối tượng trong các file dataset YOLO.
(Tùy chọn) flip_idx ánh xạ mỗi keypoint tới ảnh phản chiếu của nó, giúp quá trình tăng cường dữ liệu lật ngang giữ nguyên tính nhất quán trái và phải trên các bộ xương đối xứng như cơ thể người hoặc khuôn mặt. Đối với năm mốc trên khuôn mặt được đánh chỉ mục là [mắt trái, mắt phải, mũi, miệng trái, miệng phải] = [0, 1, 2, 3, 4], flip_idx là [1, 0, 2, 4, 3]: các cặp trái-phải 0-1 và 3-4 hoán đổi cho nhau, và mũi giữ nguyên chỉ mục của nó.
(Tùy chọn) kpt_oks_sigmas thiết lập các sigma OKS tùy chỉnh cho từng keypoint được sử dụng trong quá trình train và validation, ví dụ [0.26, 0.25, 0.25, ...]. Độ dài của danh sách phải bằng với số lượng keypoint N từ kpt_shape, và mọi giá trị phải là số dương. Khi bỏ qua, các sigma 17-keypoint của COCO sẽ được sử dụng cho kpt_shape: [17, 3] và một giá trị đồng nhất 1/N trong trường hợp ngược lại.
Cách sử dụng#
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)Các tập dữ liệu được hỗ trợ#
Phần này phác thảo các dataset tương thích với định dạng Ultralytics YOLO và có thể được sử dụng để train các mô hình pose estimation:
COCO-Pose#
- Mô tả: COCO-Pose là tập dữ liệu ước tính tư thế người quy mô lớn bao gồm các hình ảnh COCO 2017 có chứa người được gán nhãn keypoint.
- Định dạng nhãn: Giống với định dạng Ultralytics YOLO như mô tả ở trên, với các điểm mấu chốt cho các tư thế người.
- Số lượng lớp: 1 (người).
- Keypoints: 17 loại keypoint bao gồm mũi, mắt, tai, vai, khuỷu tay, cổ tay, hông, đầu gối và mắt cá chân, mỗi loại có một chiều độ hiển thị (visibility dimension).
- Cách sử dụng: Phù hợp để huấn luyện các model ước tính tư thế con người.
- Lưu ý bổ sung: Dataset được xây dựng dựa trên thử thách COCO Keypoints 2017: 58.945 ảnh được chú thích với 156.165 người.
- Đọc thêm về COCO-Pose
COCO8-Pose#
- Mô tả: Ultralytics COCO8-Pose là một dataset pose estimation nhỏ gọn nhưng linh hoạt bao gồm 8 ảnh đầu tiên của tập COCO train 2017, trong đó 4 ảnh dùng cho train và 4 ảnh dùng cho validation.
- Định dạng nhãn: Giống với định dạng Ultralytics YOLO như mô tả ở trên, với các điểm mấu chốt cho các tư thế người.
- Số lượng lớp: 1 (người).
- Keypoints: 17 loại keypoint bao gồm mũi, mắt, tai, vai, khuỷu tay, cổ tay, hông, đầu gối và mắt cá chân, mỗi loại có một chiều độ hiển thị (visibility dimension).
- Cách sử dụng: Phù hợp để kiểm tra và gỡ lỗi các model ước tính tư thế, hoặc thử nghiệm với các phương pháp phát hiện keypoint mới.
- Lưu ý bổ sung: COCO8-Pose lý tưởng cho việc kiểm tra nhanh (sanity check) và CI checks.
- Đọc thêm về COCO8-Pose
Dog-Pose#
- Mô tả: Dataset Ultralytics Dog-Pose chứa 6.773 ảnh train và 1.703 ảnh validation để ước lượng keypoint chó.
- Định dạng nhãn: Tuân theo định dạng Ultralytics YOLO, với các chú thích cho nhiều điểm mấu chốt đặc thù về giải phẫu chó.
- Số lượng lớp: 1 (chó).
- Keypoints: 24 keypoint, mỗi điểm có một chiều độ hiển thị, được thiết kế riêng cho các tư thế của chó như các chi, khớp và vị trí đầu.
- Cách sử dụng: Lý tưởng để train các mô hình ước lượng tư thế chó trong nhiều kịch bản khác nhau, từ nghiên cứu đến các ứng dụng thực tế.
- Lưu ý bổ sung: Ảnh gốc được lấy từ Stanford Dogs Dataset.
- Đọc thêm về Dog-Pose
Hand Keypoints#
- Mô tả: Dataset Ultralytics Hand Keypoints bao gồm 26.768 ảnh, với 18.776 ảnh được phân bổ cho train và 7.992 ảnh cho validation.
- Định dạng nhãn: Giống với định dạng Ultralytics YOLO được mô tả ở trên, nhưng có 21 điểm mấu chốt cho bàn tay người và một chiều dữ liệu hiển thị.
- Số lượng lớp: 1 (bàn tay).
- Các điểm mấu chốt: 21 điểm mấu chốt.
- Cách sử dụng: Tuyệt vời cho việc ước lượng tư thế bàn tay người và nhận diện cử chỉ.
- Lưu ý bổ sung: Các chú thích keypoint được tạo bằng Google MediaPipe để đảm bảo gắn nhãn nhất quán.
- Đọc thêm về Hand Keypoints
Tiger-Pose#
- Mô tả: Dataset Ultralytics Tiger-Pose bao gồm 263 ảnh nguồn từ một video trên YouTube, với 210 ảnh được phân bổ cho train và 53 ảnh cho validation.
- Định dạng nhãn: Giống với định dạng Ultralytics YOLO như đã mô tả ở trên, với 12 keypoint cho tư thế động vật và không có chiều độ hiển thị.
- Số lượng lớp: 1 (hổ).
- Các điểm mấu chốt: 12 điểm mấu chốt.
- Cách sử dụng: Tuyệt vời cho tư thế động vật hoặc bất kỳ tư thế nào không dựa trên con người.
- Lưu ý bổ sung: Phát hành theo AGPL-3.0 License.
- Đọc thêm về Tiger-Pose
Thêm tập dữ liệu của riêng bạn#
Nếu bạn có tập dữ liệu của riêng mình và muốn sử dụng nó để huấn luyện các model ước tính tư thế với định dạng Ultralytics YOLO, hãy đảm bảo nó tuân theo định dạng được chỉ định ở trên trong phần "Ultralytics YOLO format". Chuyển đổi chú thích của bạn sang định dạng yêu cầu và chỉ định các đường dẫn, số lượng lớp, và tên lớp trong tệp cấu hình YAML.
Để bỏ qua hoàn toàn bước chuyển đổi, Ultralytics Platform cho phép bạn tải lên ảnh thô, chú thích keypoint trực tiếp trên trình duyệt và train trực tiếp trên dataset thu được.
Công cụ chuyển đổi#
Ultralytics cung cấp một công cụ chuyển đổi tiện lợi để chuyển đổi nhãn từ định dạng dataset COCO phổ biến sang định dạng YOLO:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Công cụ chuyển đổi này có thể được sử dụng để chuyển đổi dataset COCO hoặc bất kỳ dataset nào ở định dạng COCO sang định dạng Ultralytics YOLO. Tham số use_keypoints chỉ định có bao gồm keypoint (cho pose estimation) trong các nhãn được chuyển đổi hay không.
Câu hỏi thường gặp#
Định dạng Ultralytics YOLO cho các tập dữ liệu ước tính tư thế liên quan đến việc gắn nhãn mỗi ảnh bằng một tệp văn bản tương ứng. Mỗi hàng của tệp văn bản lưu trữ thông tin về một thực thể đối tượng:
- Chỉ số lớp đối tượng
- Tọa độ trung tâm đối tượng (x và y được chuẩn hóa)
- Chiều rộng và chiều cao đối tượng (được chuẩn hóa)
- Tọa độ các điểm mấu chốt đối tượng (pxn và pyn được chuẩn hóa)
Đối với các tư thế 2D, keypoint bao gồm các tọa độ x và y được chuẩn hóa. Với chiều visibility, mỗi keypoint cũng có một cờ hiển thị. Để biết thêm chi tiết, hãy xem định dạng Ultralytics YOLO.
coco-pose.yamlđi kèm với gói và tải xuống các hình ảnh cũng như nhãn trong lần sử dụng đầu tiên, vì vậy không cần chuẩn bị thủ công:from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") # load pretrained model results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)Để xem chi tiết dataset, hãy xem COCO-Pose, và trang Train để xem danh sách đầy đủ các đối số.
Để thêm tập dữ liệu của bạn:
-
Chuyển đổi các chú thích của bạn sang định dạng Ultralytics YOLO.
-
Tạo một tệp cấu hình YAML chỉ định đường dẫn tập dữ liệu, số lượng lớp và tên lớp.
-
Sử dụng tệp cấu hình để huấn luyện model của bạn:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Để biết các bước hoàn chỉnh, hãy xem phần Thêm dataset của riêng bạn.
-
Tệp YAML tập dữ liệu trong Ultralytics YOLO xác định cấu hình tập dữ liệu và model cho việc huấn luyện. Nó chỉ định các đường dẫn đến ảnh huấn luyện, xác thực và kiểm tra, hình dạng điểm mấu chốt, tên lớp và các tùy chọn cấu hình khác. Định dạng có cấu trúc này giúp hợp lý hóa việc quản lý tập dữ liệu và huấn luyện model. Dưới đây là ví dụ về định dạng 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Đọc thêm về cách tạo file cấu hình YAML trong Định dạng YAML của dataset.
Ultralytics cung cấp một công cụ chuyển đổi để chuyển đổi các nhãn tập dữ liệu COCO sang định dạng YOLO, bao gồm cả thông tin điểm mấu chốt:
from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Công cụ này giúp tích hợp liền mạch các dataset COCO vào các dự án YOLO. Để biết chi tiết, hãy tham khảo phần Công cụ chuyển đổi và hướng dẫn tiền xử lý dữ liệu.