Tổng quan về 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:

  1. Một tệp văn bản cho mỗi hình ảnh: Mỗi hình ả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 hình ảnh và phần mở rộng ".txt".
  2. 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 instance đối tượng trong hình ảnh.
  3. Thông tin đối tượng trên mỗi dòng: Mỗi dòng chứa các thông tin sau về instance đối tượng:
    • Chỉ mục 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 ô 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 của đố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 độ đ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 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 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 các điểm mấu chốt 3D (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ỉ số lớp của đối tượng, <x> <y> <width> <height> là các tọa độ được chuẩn hóa của bounding box, và <px1> <py1> <px2> <py2> ... <pxn> <pyn> là các tọa độ điểm mấu chốt đã được chuẩn hóa. Kênh hiển thị là tùy chọn nhưng rất hữu ích cho các tập dữ liệu có chú thích về sự che khuất.

Định dạng YAML của tập dữ liệu

Framework Ultralytics sử dụng định dạng file 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 một tập dữ liệu tư thế:

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

Các trường trainval chỉ định đường dẫn đến các thư mục chứa hình ảnh huấn luyện và kiểm thử tương ứng.

names là một từ điển gồm các tên 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 tệp tập dữ liệu YOLO.

(Tùy chọn) nếu các điểm có tính đối xứng thì cần flip_idx, ví dụ như hai bên trái-phải của cơ thể người hoặc khuôn mặt. Ví dụ: nếu chúng ta giả định năm điểm mấu chốt trên khuôn mặt: [mắt trái, mắt phải, mũi, miệng trái, miệng phải], và chỉ số ban đầu là [0, 1, 2, 3, 4], thì flip_idx sẽ là [1, 0, 2, 4, 3] (chỉ cần hoán đổi chỉ số trái-phải, tức là 0-1 và 3-4, và không sửa đổi các điểm khác như mũi trong ví dụ này).

Cách sử dụng

Ví dụ
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 tập dữ liệu tương thích với định dạng Ultralytics YOLO và có thể được sử dụng để huấn luyện các model pose estimation:

COCO-Pose

  • Mô tả: COCO-Pose là một tập dữ liệu quy mô lớn về object detection, phân đoạn (segmentation) và ước tính tư thế. Đây là một tập con của tập dữ liệu COCO phổ biến và tập trung vào ước tính tư thế người. COCO-Pose bao gồm nhiều điểm mấu chốt cho mỗi thực thể người.
  • Đị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 tư thế người.
  • Số lượng lớp: 1 (Người).
  • Điểm mấu chốt: 17 điểm mấu chốt 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.
  • Cách sử dụng: Phù hợp để huấn luyện các model ước tính tư thế người.
  • Ghi chú bổ sung: Tập dữ liệu này phong phú và đa dạng, chứa hơn 200 nghìn hình ảnh có gắn nhãn.
  • Đọc thêm về COCO-Pose

COCO8-Pose

  • Mô tả: Ultralytics COCO8-Pose là một tập dữ liệu phát hiện tư thế nhỏ gọn nhưng linh hoạt, bao gồm 8 hình ảnh đầu tiên của tập COCO train 2017, với 4 ảnh dành cho huấn luyện và 4 ảnh dành cho kiểm thử.
  • Đị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 tư thế người.
  • Số lượng lớp: 1 (Người).
  • Điểm mấu chốt: 17 điểm mấu chốt 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.
  • Cách sử dụng: Phù hợp để kiểm thử và gỡ lỗi các model phát hiện đối tượng, hoặc để thử nghiệm các phương pháp phát hiện mới.
  • Ghi chú bổ sung: COCO8-Pose lý tưởng cho việc kiểm tra nhanh và CI checks.
  • Đọc thêm về COCO8-Pose

Dog-Pose

  • Mô tả: Tập dữ liệu Dog Pose chứa 6.773 hình ảnh huấn luyện và 1.703 hình ảnh kiểm thử, cung cấp một nguồn tài nguyên đa dạng và phong phú để ước tính điểm mấu chốt của 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 của chó.
  • Số lượng lớp: 1 (Chó).
  • Điểm mấu chốt: Bao gồm 24 điểm mấu chốt được thiết kế riêng cho tư thế của chó, như các chi, khớp và vị trí đầu.
  • Cách sử dụng: Lý tưởng để huấn luyện các model ước tính tư thế chó trong nhiều tình huống khác nhau, từ nghiên cứu đến các ứng dụng thực tế.
  • Đọc thêm về Dog-Pose

Hand Keypoints

  • Mô tả: Tập dữ liệu tư thế các điểm mấu chốt bàn tay bao gồm gần 26 nghìn hình ảnh, với 18.776 hình ảnh dành cho huấn luyện và 7.992 cho kiểm thử.
  • Định dạng nhãn: Giống với định dạng Ultralytics YOLO mô tả ở trên, nhưng với 21 điểm mấu chốt cho bàn tay người và một chiều hiển thị.
  • Số lượng lớp: 1 (Bàn tay).
  • Điểm mấu chốt: 21 điểm mấu chốt.
  • Cách sử dụng: Rất tốt cho việc ước tính tư thế bàn tay người và nhận diện cử chỉ.
  • Đọc thêm về Hand Keypoints

Tiger-Pose

  • Mô tả: Tập dữ liệu Ultralytics Tiger Pose bao gồm 263 hình ảnh trích xuất từ một video YouTube, với 210 hình ảnh dành cho huấn luyện và 53 cho kiểm thử.
  • Định dạng nhãn: Giống với định dạng Ultralytics YOLO như đã mô tả ở trên, với 12 điểm mấu chốt cho tư thế động vật và không có chiều hiển thị.
  • Số lượng lớp: 1 (Hổ).
  • Điểm mấu chốt: 12 điểm mấu chốt.
  • Cách sử dụng: Rất tốt cho tư thế động vật hoặc bất kỳ tư thế nào không dựa trên cơ thể người.
  • Đọ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 riêng 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 quy định ở trên trong mục "Ultralytics YOLO format". Chuyển đổi các 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 file cấu hình YAML.

Công cụ chuyển đổi

Ultralytics cung cấp một công cụ chuyển đổi thuận tiện để chuyển đổi nhãn từ định dạng tập dữ liệu COCO phổ biến sang định dạng YOLO:

Ví dụ
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 tập dữ liệu COCO hoặc bất kỳ tập dữ liệu nào ở định dạng COCO sang định dạng Ultralytics YOLO. Tham số use_keypoints xác định liệu có bao gồm các điểm mấu chốt (cho ước tính tư thế) trong các nhãn đã chuyển đổi hay không.

Câu hỏi thường gặp (FAQ)

Định dạng Ultralytics YOLO cho ước tính tư thế là gì?

Định dạng Ultralytics YOLO cho các tập dữ liệu ước tính tư thế bao gồm việc gắn nhãn mỗi hình ảnh bằng một file văn bản tương ứng. Mỗi dòng của file 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 độ tâm đối tượng (x và y đã chuẩn hóa)
  • Chiều rộng và chiều cao đối tượng (đã chuẩn hóa)
  • Tọa độ điểm mấu chốt của đối tượng (pxn và pyn đã chuẩn hóa)

Đối với tư thế 2D, các điểm mấu chốt bao gồm tọa độ pixel. Đối với 3D, mỗi điểm mấu chốt còn có thêm cờ hiển thị (visibility flag). Để biết thêm chi tiết, xem Ultralytics YOLO format.

Làm thế nào để sử dụng tập dữ liệu COCO-Pose với Ultralytics YOLO?

Để sử dụng tập dữ liệu COCO-Pose với Ultralytics YOLO:

  1. Tải xuống tập dữ liệu và chuẩn bị các file nhãn của bạn theo định dạng YOLO.

  2. Tạo một file cấu hình YAML chỉ định đường dẫn tới các hình ảnh huấn luyện và kiểm thử, hình dạng điểm mấu chốt và tên lớp.

  3. Sử dụng file cấu hình để huấn luyện:

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

    Để biết thêm thông tin, hãy truy cập các phần COCO-Posetrain.

Làm cách nào để thêm tập dữ liệu của riêng tôi cho ước tính tư thế trong Ultralytics YOLO?

Để thêm tập dữ liệu của bạn:

  1. Chuyển đổi các chú thích của bạn sang định dạng Ultralytics YOLO.

  2. Tạo một file 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.

  3. Sử dụng file 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 đầy đủ, hãy xem phần Adding your own dataset.

Mục đích của file YAML tập dữ liệu trong Ultralytics YOLO là gì?

File 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 đường dẫn đến hình ảnh huấn luyện, kiểm thử và xác thực, 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. Đây là một 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 Dataset YAML format.

Làm cách nào để chuyển đổi nhãn tập dữ liệu COCO sang định dạng Ultralytics YOLO cho ước tính tư thế?

Ultralytics cung cấp một công cụ chuyển đổi để chuyển đổi nhãn tập dữ liệu COCO sang định dạng YOLO, bao gồm cả thông tin về đ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 tập dữ liệu COCO vào các dự án YOLO. Để biết chi tiết, vui lòng tham khảo phần Conversion Toolhướng dẫn tiền xử lý dữ liệu.

Bình luận