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:
- 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 độ 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- Độ 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ớiValueErrorkhi 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 🚀 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.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-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: 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.
Cách sử dụng#
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:
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:
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ểu | Mặc định | Mô tả |
|---|---|---|---|
data | str | bắ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_model | str | 'yolo26x.pt' | Đường dẫn đến model phát hiện YOLO để phát hiện đối tượng ban đầu. |
sam_model | str | '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). |
device | str | '' | Thiết bị tính toán (ví dụ: 'cuda:0', 'cpu' hoặc '' để tự động phát hiện thiết bị). |
conf | float | 0.25 | Ngưỡng confidence của model phát hiện YOLO để lọc các kết quả phát hiện yếu. |
iou | float | 0.45 | Ngưỡng IoU cho Non-Maximum Suppression để lọc các hộp chồng lấn. |
imgsz | int | 640 | Kí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_det | int | 300 | Số lượng kết quả phát hiện tối đa trên mỗi ảnh để tiết kiệm bộ nhớ. |
classes | list[int] | None | Danh sách chỉ số class cần phát hiện (ví dụ: [0, 1] cho người và xe đạp). |
output_dir | str | None | Thư 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_cocotừ moduleultralytics.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.zipHã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_annotatenhư 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.