Ultralytics YOLO27:

Tổng quan về các dataset phân đoạn instance#

Phân đoạn instance là một tác vụ thị giác máy tính, bao gồm việc xác định và phân định từng đối tượng riêng lẻ trong một hình ảnh. Hướng dẫn này cung cấp tổng quan về các định dạng dataset được Ultralytics YOLO hỗ trợ cho các tác vụ phân đoạn instance, cùng hướng dẫn 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 các model phân đoạn 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 độ đa giác đối tượng: Các điểm (x, y) phác thảo mặt nạ 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 file dataset phân đoạn như sau:

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

Trong định dạng này, <class-index> là chỉ mục của class dành cho đối tượng, còn <x1> <y1> <x2> <y2> ... <xn> <yn> là các tọa độ polygon đã chuẩn hóa của mask phân đoạn 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 hình ả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 hình ảnh đơn có hai đối tượng, 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 phân đoạn phải có tối thiểu 3 điểm (x, y): <class-index> <x1> <y1> <x2> <y2> <x3> <y3>
  • Mọi đối tượng đều cần một đa giác. Các hàng định dạng detect (<class-index> <x_center> <y_center> <width> <height>) không mang đa giác nào, và tập dữ liệu phân đoạn có số lượng hộp và đa giác khác nhau sẽ bị từ chối bằng một ValueError khi các nhãn của nó được tải.

Đị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 phân đoạn. Dưới đây là ví dụ về định dạng YAML dùng để xác định một dataset phân đoạn:

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, 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-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 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.

Cách sử dụng#

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Các dataset được hỗ trợ#

Ultralytics YOLO hỗ trợ nhiều tập dữ liệu khác nhau cho các tác vụ phân đoạn cá thể. Dưới đây là danh sách các tập dữ liệu được sử dụng phổ biến nhất. 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 thống kê tập dữ liệu và nhân bản chúng để huấn luyện trên đám mây.

  • Carparts-seg: Một dataset chuyên biệt tập trung vào việc phân đoạn các bộ phận ô tô, phù hợp cho các ứng dụng ô tô. Dataset này bao gồm nhiều loại phương tiện với chú thích chi tiết cho từng bộ phận ô tô.
  • COCO: Một dataset toàn diện cho phát hiện đối tượng, phân đoạn và tạo chú thích, gồm hơn 200K hình ảnh được gán nhãn trong nhiều danh mục.
  • COCO8-seg: Một tập con nhỏ gọn gồm 8 hình ảnh của COCO, được thiết kế để kiểm thử nhanh việc huấn luyện model phân đoạn, phù hợp cho các lượt kiểm tra CI và xác thực workflow trong repository ultralytics.
  • COCO128-seg: Một dataset nhỏ hơn cho các tác vụ phân đoạn instance, chứa một tập con gồm 128 hình ảnh COCO với chú thích phân đoạn.
  • Crack-seg: Một dataset được thiết kế cho việc phân đoạn các vết nứt trên nhiều loại bề mặt. Dataset này thiết yếu cho 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 các điểm yếu kết cấu.
  • Package-seg: Một dataset dành riêng cho việc phân đoạn nhiều loại vật liệu và hình dạng bao bì. Dataset này đặc biệt hữu ích cho tự động hóa logistics và 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 bạn có dataset riêng và muốn sử dụng dataset đó để huấn luyện các model phân đoạn theo định dạng Ultralytics YOLO, hãy đảm bảo dataset tuân theo định dạng được nêu ở 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 và tên class trong file cấu hình YAML. Giữ images/labels/ trong các thư mục riêng biệt ở cùng một cấp, với cấu trúc thư mục con tương ứng; đặt các file nhãn .txt trong thư mục hình ảnh có thể khiến model bỏ sót nhãn.

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

Chuyển đổi định dạng COCO Dataset 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ô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.

Hãy nhớ kiểm tra kỹ xem dataset bạn muốn sử dụng có tương thích với model hay không và có 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 các model phân đoạn hiệu quả.

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

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

Tạo dataset phân đoạn 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 function auto_annotate như dưới đây:

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 các ảnh mục tiêu cần gán nhãn 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ợ trọng số 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 độ tin cậy phát hiện YOLO để lọc các detection yếu.
ioufloat0.45Ngưỡng IoU cho Non-Maximum Suppression để lọc các box chồng lấp.
imgszint640Kích thước đầu vào để resize ảnh (phải là bội số của 32).
max_detint300Số detection tối đa trên mỗi ảnh để sử dụng bộ nhớ hiệu quả.
classeslist[int]NoneDanh sách index lớp cần phát hiện (ví dụ: [0, 1] cho người và xe đạp).
output_dirstrNoneThư mục lưu các annotation (mặc định: thư mục cùng cấp với <data>_auto_annotate_labels).

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

Bằng cách khai thác 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 các dataset phân đoạn 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 các bộ sưu tập hình ảnh lớn, vì cho phép họ tập trung vào việc phát triển và đánh giá model thay vì chú thích thủ công.

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

Trước khi huấn luyện model, việc trực quan hóa các chú thích dataset thường rất hữu ích để đảm bảo chúng chính xác. Ultralytics cung cấp một utility function cho mục đích này:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Function này vẽ các bounding box, gán nhãn đối tượng 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 mọi lỗi chú thích trước khi huấn luyện.

Chuyển đổi mask phân đoạn sang định dạng YOLO#

Nếu có các mask phân đoạn ở định dạng nhị phân, bạn có thể chuyển đổi chúng sang định dạng phân đoạn YOLO bằng cách sử dụng:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Utility này chuyển đổi các hình ảnh mask nhị phân sang định dạng phân đoạn YOLO và lưu chúng trong thư mục đầu ra được chỉ định.

FAQ#

  • Ultralytics YOLO hỗ trợ một số định dạng dataset cho phân đoạn instance, trong đó định dạng chính là định dạng Ultralytics YOLO riêng. Mỗi hình ảnh trong dataset cần có một file văn bản tương ứng chứa thông tin đối tượng được phân đoạn thành nhiều dòng (mỗi dòng cho một đối tượng), liệt kê chỉ mục class và các tọa độ bounding đã 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ề các dataset phân đoạn instance.

  • Việc chuyển đổi chú thích từ định dạng COCO sang định dạng YOLO rất đơn giản khi sử dụng các công cụ Ultralytics. Bạn có thể sử dụng function 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 đổi các chú thích dataset COCO của bạn sang định dạng YOLO bắt buộc, giúp dataset phù hợp để huấn luyện các 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 cho việc huấn luyện các model YOLO với Ultralytics, bạn cần xác định các đường dẫn dataset và tên class. Dưới đây là ví dụ về 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 đảm bảo cập nhật các đường dẫn và tên class theo 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 các chú thích phân đoạn cho dataset bằng model phát hiện đã pretrained. Tính năng này giúp giảm đáng kể nhu cầu gán nhãn thủ công. Bạn có thể sử dụng function 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")  # or sam_model="mobile_sam.pt"

    Function này tự động hóa quy trình chú thích, 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