Ultralytics YOLO27:

Tổng quan về các dataset ước tính tư thế#

Các định dạng dataset được hỗ trợ#

Định dạng Ultralytics YOLO#

Định dạng nhãn dataset được sử dụng để huấn luyện các model pose của YOLO như sau:

  1. Một file văn bản cho mỗi hình ảnh: Mỗi hình ảnh trong dataset có một file văn bản tương ứng với cùng tên như file 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 file 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 class của đối tượng: Một số nguyên đại diện cho class 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.

Sau đây là ví dụ về định dạng nhãn cho một 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 với khả năng hiển thị của keypoint (bao gồm khả năng 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ố của class cho đố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 khả năng hiển thị là tùy chọn nhưng hữu ích cho các dataset có chú thích về hiện tượng che khuất.

Định dạng YAML của dataset#

Framework Ultralytics sử dụng định dạng file YAML để xác định cấu hình dataset và model cho việc huấn luyện các model ước tính tư thế. Sau đây là ví dụ về định dạng YAML được sử dụng để xác định một dataset pose:

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 train, valtest trỏ đến các hình ảnh huấn luyện, validation và test. Mỗi trường chấp 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 hình ả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 so 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 các hình ảnh không có nhãn hoặc kết hợp hình ảnh từ nhiều nguồn thành một split.

Đường dẫn ảnh dưới dạng file `*.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 là một dictionary gồm các tên class. Thứ tự của các tên phải khớp với thứ tự của chỉ mục class đối tượng trong các file dataset YOLO.

(Tùy chọn) flip_idx ánh xạ mỗi keypoint với ảnh phản chiếu của nó, nhờ đó phép tăng cường lật ngang giữ được tính nhất quán trái phải trên các skeleton đối xứng như cơ thể hoặc khuôn mặt người. Với năm landmark 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 được hoán đổi, còn mũi giữ nguyên chỉ số 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 huấn luyện và validation, ví dụ: [0.26, 0.25, 0.25, ...]. Độ dài danh sách phải bằng số lượng keypoint N từ kpt_shape, và mọi giá trị phải dương. Khi không được chỉ định, các sigma của COCO với 17 keypoint sẽ được sử dụng cho kpt_shape: [17, 3], còn 1/N đồng nhất sẽ được sử dụng trong các trường hợp khác.

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 dataset đượ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 mô hình ước lượng tư thế. Hầu hết các tập dữ liệu này cũng được lưu trữ trên Ultralytics Platform, nơi bạn có thể duyệt qua các hình ảnh và chú thích, xem số liệu thống kê về tập dữ liệu và nhân bản các tập dữ liệu để huấn luyện trên đám mây.

COCO-Pose#

  • Mô tả: COCO-Pose là một dataset ước tính tư thế người quy mô lớn, bao gồm các ảnh COCO 2017 có người được gắn chú thích keypoint.
  • Định dạng nhãn: Giống định dạng Ultralytics YOLO được mô tả ở trên, với các keypoint cho tư thế người.
  • Số lượng class: 1 (person).
  • Keypoint: 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 keypoint có một chiều khả năng hiển thị.
  • 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: Dataset này được xây dựng dựa trên thử thách COCO Keypoints 2017: 58,945 ảnh được gắn chú thích 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 ảnh đầu tiên của tập COCO train 2017, trong đó 4 ảnh dùng cho huấn luyện và 4 ảnh dùng cho validation.
  • Định dạng nhãn: Giống định dạng Ultralytics YOLO được mô tả ở trên, với các keypoint cho tư thế người.
  • Số lượng class: 1 (person).
  • Keypoint: 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 keypoint có một chiều khả năng hiển thị.
  • Cách sử dụng: Phù hợp để kiểm thử và debug các 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 rất phù hợp cho các kiểm tra sanity và kiểm tra CI.
  • Đọc thêm về COCO8-Pose

Dog-Pose#

  • Mô tả: Dataset Dog-Pose của Ultralytics gồm 6.773 ảnh huấn luyện và 1.703 ảnh validation để ước tính keypoint 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 keypoint đặc thù theo giải phẫu của chó.
  • Số lượng class: 1 (dog).
  • Keypoint: 24 keypoint, mỗi keypoint có một chiều khả năng hiển thị, được thiết kế cho các tư thế của chó như 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 bối cảnh khác nhau, từ nghiên cứu đến ứng dụng thực tế.
  • Ghi chú bổ sung: Các ảnh nguồn được lấy từ Stanford Dogs Dataset.
  • Đọc thêm về Dog-Pose

Keypoint bàn tay#

  • Mô tả: Dataset Hand Keypoints của Ultralytics gồm 26.768 ảnh, trong đó 18.776 ảnh được phân bổ cho huấn luyện và 7.992 ảnh cho validation.
  • Định dạng nhãn: Giống đị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 khả năng hiển thị.
  • Số lượng class: 1 (hand).
  • 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: Các chú thích keypoint được tạo bằng Google MediaPipe để đảm bảo tính nhất quán khi gắn nhãn.
  • Đọc thêm về Hand Keypoints

Tiger-Pose#

  • Mô tả: Dataset Tiger-Pose của Ultralytics gồm 263 ảnh lấy từ một video YouTube, trong đó 210 ảnh được phân bổ cho huấn luyện và 53 ảnh cho validation.
  • Định dạng nhãn: Giống đị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 khả năng hiển thị.
  • Số lượng class: 1 (tiger).
  • Keypoint: 12 keypoint.
  • Cách sử dụng: Phù hợp để ước tính tư thế động vật hoặc bất kỳ tư thế nào 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 sử dụng dataset đó để huấn luyện các 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 chỉ định ở trên trong phần "Định dạng Ultralytics YOLO". Chuyển đổi các chú thích sang định dạng bắt buộc và chỉ định các đường dẫn, số lượng class cũng như tên class trong file 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 ảnh thô lên, chú thích keypoint trong 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 một công cụ chuyển đổi thuận tiện để chuyển đổi nhãn từ định dạng COCO dataset 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 COCO dataset 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 (cho ước tính tư thế) vào các nhãn đã chuyển đổi hay không.

FAQ#

  • Định dạng Ultralytics YOLO cho các dataset ước tính tư thế yêu cầu gắn nhãn cho mỗi ảnh bằng một file văn bản tương ứng. Mỗi hàng trong file văn bản lưu trữ thông tin về một instance đối tượng:

    • Chỉ số class 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 đối tượng (đã chuẩn hóa)
    • Tọa độ keypoint của đối tượng (pxn và pyn đã chuẩn hóa)

    Đối với tư thế 2D, keypoint bao gồm tọa độ x và y đã chuẩn hóa. Khi có chiều khả năng hiển thị, mỗi keypoint cũng có một cờ khả năng hiển thị. Để biết thêm chi tiết, hãy xem Định dạng Ultralytics YOLO.

  • coco-pose.yaml đi kèm package và tải ả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")  # 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à xem trang Train để biết danh sách đầy đủ các argument.

  • Để thêm dataset của bạn:

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

    2. Tạo file cấu hình YAML chỉ định đường dẫn dataset, số lượng class và tên class.

    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)

      Để xem các bước đầy đủ, hãy tham khảo phần Thêm dataset riêng.

  • File YAML của dataset trong Ultralytics YOLO xác định cấu hình dataset và model cho quá trình huấn luyện. File này chỉ định đường dẫn đến ảnh huấn luyện, validation và test, shape của keypoint, tên class 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. Sau đâ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 nhãn COCO dataset sang định dạng YOLO, bao gồm 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 các COCO dataset vào các dự án YOLO. Để biết chi tiết, hãy tham khảo phần Công cụ chuyển đổihướng dẫn tiền xử lý dữ liệu.

Bình luận