Ultralytics YOLO27:
Get Started

Tổng quan về dataset Instance Segmentation#

Instance segmentation là một tác vụ thị giác máy tính nhằm xác định và phân định từng đối tượng riêng lẻ trong ảnh. Hướng dẫn này tổng quan về các định dạng dataset được Ultralytics YOLO hỗ trợ cho tác vụ instance segmentation, đồng thời hướng dẫn cách chuẩn bị, chuyển đổi và sử dụng các dataset này để huấn luyện model.

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 model segmentation YOLO như sau:

  1. 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".
  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 đối tượng trong ảnh.
  3. 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 độ polygon của đối tượng: Các điểm (x, y) xác định đường bao mask của đối tượng, được chuẩn hóa trong khoảng từ 0 đến 1.

Định dạng của một dòng trong tệp dataset segmentation như sau:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

Trong định dạng này, <class-index> là chỉ số lớp của đối tượng, còn <x1> <y1> <x2> <y2> ... <xn> <yn> là tọa độ polygon đã chuẩn hóa của mask segmentation của đối tượng (các giá trị nằm trong [0, 1] theo chiều rộng và chiều cao của ảnh). Các tọa độ được phân tách bằng dấu cách.

Dưới đây là ví dụ về định dạng dataset YOLO cho một ảnh đơn có hai đối tượng, lần lượt gồm một segment 3 điểm và một segment 5 điểm.

0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104
Mẹo
  • Độ dài của mỗi dòng không nhất thiết phải bằng nhau.
  • Mỗi nhãn segmentation phải có tối thiểu 3 điểm (x, y): <class-index> <x1> <y1> <x2> <y2> <x3> <y3>
  • Mỗi object cần có polygon. Các hàng ở định dạng detect (<class-index> <x_center> <y_center> <width> <height>) không có polygon, và dataset segmentation có số lượng box và polygon không khớp sẽ bị từ chối với ValueError khi tải nhãn.

Đị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 quá trình huấn luyện Segmentation Models. Sau đây là ví dụ về định dạng YAML dùng để xác định dataset segmentation:

ultralytics/cfg/datasets/coco8-seg.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← 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-seg # 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)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Cá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.

Đường dẫn ảnh trong tệp `*.txt`
path: datasets/coco8-seg # 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 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.

Cách sử dụng#

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-seg.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-seg.yaml", epochs=100, imgsz=640)

Dataset được hỗ trợ#

Ultralytics YOLO hỗ trợ nhiều dataset cho các tác vụ instance segmentation. Sau đây là danh sách những dataset được sử dụng phổ biến nhất. 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 ảnh và annotation, xem thống kê dataset và sao chép dataset để huấn luyện trên cloud.

  • Carparts-seg: Dataset chuyên biệt tập trung vào segmentation các bộ phận ô tô, lý tưởng cho các ứng dụng trong ngành ô tô. Dataset bao gồm nhiều loại xe với annotation chi tiết cho từng bộ phận.
  • COCO: Dataset toàn diện phục vụ phát hiện object, segmentation và tạo chú thích, gồm hơn 200K ảnh được gán nhãn thuộc nhiều danh mục.
  • COCO8-seg: Tập con nhỏ gọn gồm 8 ảnh từ COCO, được thiết kế để kiểm thử nhanh quá trình huấn luyện model segmentation, lý tưởng cho các bước kiểm tra CI và xác thực workflow trong repository ultralytics.
  • COCO128-seg: Dataset nhỏ hơn dành cho các tác vụ instance segmentation, chứa tập con gồm 128 ảnh COCO có annotation segmentation.
  • Crack-seg: Dataset dành riêng cho segmentation vết nứt trên nhiều bề mặt. Dataset này rất cần thiết cho việc bảo trì cơ sở hạ tầng và kiểm soát chất lượng, cung cấp hình ảnh chi tiết để huấn luyện model nhận diện điểm yếu kết cấu.
  • Package-seg: Dataset dành riêng cho segmentation nhiều loại vật liệu và hình dạng bao bì. Dataset đặc biệt hữu ích trong logistics và tự động hóa kho hàng, hỗ trợ phát triển các hệ thống xử lý và phân loại kiện hàng.

Thêm dataset của riêng bạn#

Nếu có dataset riêng và muốn dùng dataset đó để huấn luyện model segmentation theo định dạng Ultralytics YOLO, hãy đảm bảo dataset tuân theo định dạng được mô tả ở trên trong phần "Định dạng Ultralytics YOLO". Chuyển đổi annotation sang định dạng bắt buộc và chỉ định đường dẫn, số lượng class cùng tên class trong file cấu hình YAML. Giữ images/ và labels/ trong các thư mục riêng biệt ở cùng cấp, với cấu trúc thư mục con khớp nhau; đặt các file nhãn .txt trong thư mục ảnh có thể khiến model bỏ sót nhãn.

Chuyển đổi hoặc chuyển đổi định dạng nhãn#

Chuyển định dạng dataset COCO sang định dạng YOLO#

Bạn có thể dễ dàng chuyển đổi nhãn từ định dạng dataset COCO phổ biến sang định dạng YOLO bằng đoạn mã sau:

Ví dụ
from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Có thể sử 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.

Hãy nhớ kiểm tra kỹ xem dataset bạn muốn sử dụng có tương thích với model và tuân theo các quy ước định dạng cần thiết hay không. Dataset được định dạng đúng là yếu tố quan trọng để huấn luyện model segmentation hiệu quả.

Tự động gán nhãn#

Tự động gán nhãn là tính năng thiết yếu cho phép tạo dataset segmentation bằng model phát hiện đã được pretrained. Tính năng này giúp bạn gán nhãn nhanh chóng và chính xác cho số lượng lớn ảnh mà không cần gán nhãn thủ công, tiết kiệm thời gian và công sức.

Tạo Dataset Segmentation bằng Model Phát hiện#

Để tự động gán nhãn cho dataset bằng framework Ultralytics, bạn có thể sử dụng hàm auto_annotate như minh họa bên dưới:

Ví dụ
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
Đối sốKiểuMặc địnhMô tả
datastrbắt buộcĐường dẫn đến thư mục chứa ảnh mục tiêu cần chú thích hoặc phân đoạn.
det_modelstr'yolo26x.pt'Đường dẫn đến model phát hiện YOLO để phát hiện đối tượng ban đầu.
sam_modelstr'sam_b.pt'Đường dẫn đến model SAM để phân đoạn (hỗ trợ các weight của SAM, SAM 2, MobileSAM và SAM 3).
devicestr''Thiết bị tính toán (ví dụ: 'cuda:0', 'cpu' hoặc '' để tự động phát hiện thiết bị).
conffloat0.25Ngưỡng confidence của model phát hiện YOLO để lọc các kết quả phát hiện yếu.
ioufloat0.45Ngưỡng IoU cho Non-Maximum Suppression để lọc các hộp chồng lấn.
imgszint640Kích thước đầu vào để thay đổi kích thước ảnh (nếu cần, làm tròn lên bội số của 32).
max_detint300Số lượng kết quả phát hiện tối đa trên mỗi ảnh để tiết kiệm bộ nhớ.
classeslist[int]NoneDanh sách chỉ số class cần phát hiện (ví dụ: [0, 1] cho người và xe đạp).
output_dirstrNoneThư mục lưu chú thích (mặc định: thư mục cùng cấp với <data>_auto_annotate_labels).

Hàm auto_annotate nhận đường dẫn đến ảnh của bạn cùng các đối số tùy chọn để chỉ định model phát hiện đã được pretrained, chẳng hạn như YOLO26, YOLO11 hoặc các model khác; model segmentation, chẳng hạn như SAM, SAM 2, MobileSAM hoặc SAM 3; thiết bị chạy các model; và thư mục đầu ra để lưu kết quả đã gán nhãn.

Bằng cách tận dụng sức mạnh của các model pretrained, tính năng tự động gán nhãn có thể giảm đáng kể thời gian và công sức cần thiết để tạo dataset segmentation chất lượng cao. Tính năng này đặc biệt hữu ích cho các nhà nghiên cứu và developer làm việc với bộ sưu tập ảnh lớn, vì họ có thể tập trung vào phát triển và đánh giá model thay vì gán nhãn thủ công.

Trực quan hóa chú thích dataset#

Trước khi huấn luyện model, bạn thường nên trực quan hóa annotation của dataset để đảm bảo annotation chính xác. Ultralytics cung cấp một hàm tiện ích cho mục đích này. Hàm chỉ đọc nhãn box ở định dạng detect (<class-index> <x_center> <y_center> <width> <height>), vì vậy không thể phân tích cú pháp các file nhãn polygon segmentation:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Định nghĩa ánh xạ nhãn với tất cả nhãn lớp đã được chú thích.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Đường dẫn ảnh đầu vào.
    "path/to/annotations.txt",  # Đường dẫn tệp chú thích của ảnh.
    label_map,
)

Hàm này vẽ bounding box, gắn nhãn object bằng tên class và điều chỉnh màu văn bản để dễ đọc hơn, giúp bạn xác định và sửa lỗi annotation trước khi huấn luyện.

Chuyển đổi Mask Segmentation sang Định dạng YOLO#

Nếu bạn có ảnh mask grayscale trong đó giá trị pixel là chỉ số class + 1 (0 là nền), bạn có thể chuyển đổi ảnh sang định dạng segmentation YOLO bằng cách sử dụng:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# Dành cho các dataset như COCO có 80 class
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Tiện ích này chuyển đổi ảnh mask sang định dạng segmentation YOLO và lưu vào thư mục đầu ra được chỉ định.

Câu hỏi thường gặp#

  • Ultralytics YOLO hỗ trợ một số định dạng dataset cho instance segmentation, trong đó định dạng chính là định dạng Ultralytics YOLO. Mỗi ảnh trong dataset cần có một file văn bản tương ứng chứa thông tin object được phân đoạn thành nhiều hàng (mỗi object một hàng), liệt kê chỉ số class và tọa độ polygon đã chuẩn hóa. Để xem hướng dẫn chi tiết hơn về định dạng dataset YOLO, hãy truy cập Tổng quan về Dataset Instance Segmentation.

  • Có thể dễ dàng chuyển annotation từ định dạng COCO sang định dạng YOLO bằng các công cụ Ultralytics. Bạn có thể sử dụng hàm convert_coco từ module ultralytics.data.converter:

    from ultralytics.data.converter import convert_coco
    
    convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

    Script này chuyển annotation của dataset COCO sang định dạng YOLO bắt buộc, giúp dataset phù hợp để huấn luyện model YOLO. Để biết thêm chi tiết, hãy tham khảo Chuyển hoặc Chuyển đổi Định dạng Nhãn.

  • Để chuẩn bị file YAML huấn luyện model YOLO bằng Ultralytics, bạn cần xác định đường dẫn dataset và tên class. Sau đây là ví dụ cấu hình YAML:

    # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
    
    # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
    # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
    # Example usage: yolo train data=coco8-seg.yaml
    # parent
    # ├── ultralytics
    # └── datasets
    #     └── coco8-seg ← 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-seg # 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)
    
    # Classes
    names:
      0: person
      1: bicycle
      2: car
      3: motorcycle
      4: airplane
      5: bus
      6: train
      7: truck
      8: boat
      9: traffic light
      10: fire hydrant
      11: stop sign
      12: parking meter
      13: bench
      14: bird
      15: cat
      16: dog
      17: horse
      18: sheep
      19: cow
      20: elephant
      21: bear
      22: zebra
      23: giraffe
      24: backpack
      25: umbrella
      26: handbag
      27: tie
      28: suitcase
      29: frisbee
      30: skis
      31: snowboard
      32: sports ball
      33: kite
      34: baseball bat
      35: baseball glove
      36: skateboard
      37: surfboard
      38: tennis racket
      39: bottle
      40: wine glass
      41: cup
      42: fork
      43: knife
      44: spoon
      45: bowl
      46: banana
      47: apple
      48: sandwich
      49: orange
      50: broccoli
      51: carrot
      52: hot dog
      53: pizza
      54: donut
      55: cake
      56: chair
      57: couch
      58: potted plant
      59: bed
      60: dining table
      61: toilet
      62: tv
      63: laptop
      64: mouse
      65: remote
      66: keyboard
      67: cell phone
      68: microwave
      69: oven
      70: toaster
      71: sink
      72: refrigerator
      73: book
      74: clock
      75: vase
      76: scissors
      77: teddy bear
      78: hair drier
      79: toothbrush
    
    # Download script/URL (optional)
    download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

    Hãy cập nhật đường dẫn và tên class cho phù hợp với dataset của bạn. Để biết thêm thông tin, hãy xem phần Định dạng YAML của Dataset.

  • Tính năng tự động gán nhãn trong Ultralytics YOLO cho phép bạn tạo annotation segmentation cho dataset bằng model phát hiện đã được pretrained. Tính năng này giảm đáng kể nhu cầu gán nhãn thủ công. Bạn có thể sử dụng hàm auto_annotate như sau:

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")  # hoặc sam_model="mobile_sam.pt"

    Hàm này tự động hóa quy trình gán nhãn, giúp quy trình nhanh hơn và hiệu quả hơn. Để biết thêm chi tiết, hãy xem Tài liệu tham khảo về Tự động Gán nhãn.

Bình luận