Tổng quan về các dataset ước lượng tư thế#
Các định dạng dataset được hỗ trợ#
Định dạng Ultralytics YOLO#
Định dạng nhãn dataset dùng để huấn luyện các model pose YOLO như sau:
- Một tệp văn bản cho mỗi ảnh: Mỗi ảnh trong dataset có một tệp văn bản tương ứng, mang cùng tên với tệp ảnh và có phần mở rộng ".txt".
- Một dòng cho mỗi đối tượng: Mỗi dòng trong tệp văn bản tương ứng với một đối tượng trong ảnh.
- Thông tin đối tượng trên mỗi dòng: Mỗi dòng chứa thông tin sau về đối tượng:
- Chỉ số lớp của đối tượng: Số nguyên biểu thị lớp của đối tượng (ví dụ: 0 cho người, 1 cho ô tô, v.v.).
- Tọa độ tâm đối tượng: Tọa độ x và y của tâm đối tượng, được chuẩn hóa trong khoảng 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 trong khoảng từ 0 đến 1.
- Tọa độ keypoint của đối tượng: Các keypoint của đối tượng được chuẩn hóa trong khoảng 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 keypoint 2D
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>Định dạng có độ hiển thị keypoint (bao gồm độ hiển thị của từng đ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ỉ số lớp của đối tượng, <x> <y> <width> <height> là tọa độ đã chuẩn hóa của bounding box, còn <px1> <py1> <px2> <py2> ... <pxn> <pyn> là tọa độ keypoint đã chuẩn hóa. Kênh độ hiển thị là tùy chọn nhưng hữu ích với các dataset có gán nhãn hiện tượng che khuất.
Định dạng YAML của dataset#
Framework Ultralytics sử dụng định dạng tệp YAML để xác định cấu hình dataset và model khi huấn luyện model ước tính tư thế. Dưới đây là ví dụ về định dạng YAML dùng để định nghĩa dataset 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 ảnh huấn luyện, xác thực và kiểm thử. Mỗi trường chấp nhận một thư mục, danh sách thư mục hoặc 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 ./ sẽ được phân giải tương đối với file *.txt). File *.txt hữu ích khi huấn luyện trên một tập con của thư mục, bỏ qua ảnh không có nhãn hoặc kết hợp ảnh từ nhiều nguồn vào một tập dữ liệu.
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 là một dictionary chứa tên các class. Thứ tự tên phải khớp với thứ tự chỉ số class của object trong các file dataset YOLO.
(Tùy chọn) flip_idx ánh xạ từng keypoint sang ảnh phản chiếu của nó, nhờ đó phép tăng cường lật ngang giữ cho bên trái và bên phải nhất quán trên các bộ xương đối xứng như cơ thể hoặc khuôn mặt người. Với năm mốc trên khuôn mặt được đánh chỉ số theo thứ tự [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 đổi chỗ, còn mũi giữ nguyên chỉ số.
(Tùy chọn) kpt_oks_sigmas thiết lập các giá trị sigma OKS tùy chỉnh cho từng keypoint, được dùng trong quá trình huấn luyện và validation, ví dụ: [0.26, 0.25, 0.25, ...]. Độ dài danh sách phải bằng số keypoint N từ kpt_shape, và mọi giá trị đều phải dương. Nếu không chỉ định, các giá trị sigma cho 17 keypoint của COCO sẽ được dùng cho kpt_shape: [17, 3], còn các trường hợp khác sẽ dùng 1/N đồng nhất.
Cách sử dụng#
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n-pose.pt") # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
# Huấn luyện model
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)Dataset được hỗ trợ#
Phần này giới thiệu các dataset tương thích với định dạng Ultralytics YOLO và có thể dùng để huấn luyện model ước tính tư thế. Hầu hết các dataset này cũng được lưu trữ trên Ultralytics Platform, nơi bạn có thể duyệt xem hình ảnh và chú thích, xem thống kê dataset và sao chép dataset để huấn luyện trên đám mây.
COCO-Pose#
- Mô tả: COCO-Pose là dataset ước tính tư thế người quy mô lớn, bao gồm các hình ảnh COCO 2017 có người được gán nhãn keypoint.
- Định dạng nhãn: Tương tự định dạng Ultralytics YOLO được mô tả ở trên, với keypoint cho tư thế người.
- Số lớp: 1 (người).
- Keypoint: 17 loại keypoint, 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 keypoint có một chiều độ hiển thị.
- Cách sử dụng: Phù hợp để huấn luyện model ước tính tư thế người.
- Ghi chú bổ sung: Dataset này được xây dựng dựa trên thử thách COCO Keypoints 2017: 58.945 hình ảnh được gán nhãn với 156.165 người.
- Đọc thêm về COCO-Pose
COCO8-Pose#
- Mô tả: COCO8-Pose của Ultralytics là một dataset ước tính tư thế nhỏ nhưng linh hoạt, gồm 8 hình ảnh đầu tiên của tập COCO train 2017, trong đó 4 hình ảnh dùng để huấn luyện và 4 hình ảnh dùng để validation.
- Định dạng nhãn: Tương tự định dạng Ultralytics YOLO được mô tả ở trên, với keypoint cho tư thế người.
- Số lớp: 1 (người).
- Keypoint: 17 loại keypoint, 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 keypoint có một chiều độ hiển thị.
- Cách sử dụng: Phù hợp để kiểm thử và gỡ lỗi model ước tính tư thế hoặc thử nghiệm các phương pháp phát hiện keypoint mới.
- Ghi chú bổ sung: COCO8-Pose lý tưởng cho các bước kiểm tra tính hợp lý và kiểm tra CI.
- Đọc thêm về COCO8-Pose
Dog-Pose#
- Mô tả: Dataset Dog-Pose của Ultralytics có 6.773 hình ảnh huấn luyện và 1.703 hình ảnh validation để ước tính keypoint của chó.
- Định dạng nhãn: Tuân theo định dạng Ultralytics YOLO, với chú thích cho nhiều keypoint đặc trưng cho giải phẫu của chó.
- Số lớp: 1 (chó).
- Keypoint: 24 keypoint, mỗi keypoint có một chiều độ hiển thị, được thiết kế cho tư thế chó như vị trí chân, khớp và đầu.
- Cách sử dụng: Lý tưởng để huấn luyện model ước tính tư thế chó trong nhiều tình huống, từ nghiên cứu đến ứng dụng thực tế.
- Ghi chú bổ sung: Hình ảnh nguồn được lấy từ Stanford Dogs Dataset.
- Đọc thêm về Dog-Pose
Keypoint bàn tay#
- Mô tả: Dataset Keypoint bàn tay của Ultralytics gồm 26.768 hình ảnh, trong đó 18.776 hình ảnh được phân bổ cho huấn luyện và 7.992 cho validation.
- Định dạng nhãn: Tương tự định dạng Ultralytics YOLO được mô tả ở trên, nhưng có 21 keypoint cho bàn tay người và một chiều độ hiển thị.
- Số lớp: 1 (bàn tay).
- Keypoint: 21 keypoint.
- Cách sử dụng: Phù hợp để ước tính tư thế bàn tay người và nhận dạng cử chỉ.
- Ghi chú bổ sung: Chú thích keypoint được tạo bằng Google MediaPipe để đảm bảo tính nhất quán trong gán nhãn.
- Đọc thêm về Keypoint bàn tay
Tiger-Pose#
- Mô tả: Dataset Tiger-Pose của Ultralytics gồm 263 hình ảnh lấy từ một video YouTube, trong đó 210 hình ảnh được phân bổ cho huấn luyện và 53 cho validation.
- Định dạng nhãn: Tương tự định dạng Ultralytics YOLO được 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ớp: 1 (hổ).
- Keypoint: 12 keypoint.
- Cách sử dụng: Phù hợp để ước tính tư thế động vật hoặc các tư thế không phải của người.
- Ghi chú bổ sung: Được phát hành theo Giấy phép AGPL-3.0.
- Đọc thêm về Tiger-Pose
Thêm dataset của riêng bạn#
Nếu bạn có dataset riêng và muốn dùng dataset đó để huấn luyện model ước tính tư thế theo định dạng Ultralytics YOLO, hãy đảm bảo dataset tuân theo định dạng được nêu ở trên trong mục "Định dạng Ultralytics YOLO". Chuyển đổi chú thích sang định dạng cần thiết và chỉ định đường dẫn, số lớp cùng 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 hình ảnh thô lên, chú thích keypoint trên trình duyệt và huấn luyện trực tiếp trên dataset thu được.
Công cụ chuyển đổi#
Ultralytics cung cấp công cụ chuyển đổi tiện lợi để chuyển 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)Bạn có thể dùng công cụ chuyển đổi này để chuyển 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ó đưa keypoint (dùng cho ước tính tư thế) vào nhãn sau chuyển đổi hay không.
Câu hỏi thường gặp#
Định dạng Ultralytics YOLO dành cho dataset ước tính tư thế yêu cầu gán nhãn cho mỗi hình ảnh bằng một tệp văn bản tương ứng. Mỗi hàng trong tệp văn bản lưu thông tin về một đối tượng:
- Chỉ số lớp của đối tượng
- Tọa độ tâm đối tượng (x và y đã chuẩn hóa)
- Chiều rộng và chiều cao của đối tượng (đã chuẩn hóa)
- Tọa độ keypoint của đối tượng (pxn và pyn đã chuẩn hóa)
Với tư thế 2D, keypoint có tọa độ x và y đã chuẩn hóa. Khi có chiều độ hiển thị, mỗi keypoint cũng có một cờ độ hiển thị. Để biết thêm chi tiết, xem định dạng Ultralytics YOLO.
coco-pose.yamlđược đóng gói cùng package và sẽ tải hình ảnh cùng 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") # tải model đã huấn luyện trước results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)Để biết chi tiết về dataset, xem COCO-Pose; để xem danh sách đầy đủ các tham số, xem trang Huấn luyện.
Để thêm dataset của bạn:
-
Chuyển đổi chú thích sang định dạng Ultralytics YOLO.
-
Tạo tệp cấu hình YAML chỉ định đường dẫn dataset, số lớp và tên lớp.
-
Dùng tệp cấu hình để huấn luyện model:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Để xem đầy đủ các bước, hãy tham khảo phần Thêm dataset của riêng bạn.
-
Tệp YAML của dataset trong Ultralytics YOLO xác định cấu hình dataset và model dùng cho huấn luyện. Tệp này chỉ định đường dẫn đến hình ảnh huấn luyện, validation và kiểm thử, hình dạng keypoint, tên lớp cùng các tùy chọn cấu hình khác. Định dạng có cấu trúc này giúp đơn giản hóa việc quản lý dataset 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.zipTìm hiểu thêm về cách tạo tệp cấu hình YAML trong Định dạng YAML của dataset.
Ultralytics cung cấp công cụ chuyển đổi nhãn dataset COCO sang định dạng YOLO, bao gồm cả thông tin keypoint:
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 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.