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:
- 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".
- 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.
- 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- Độ 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ộtValueErrorkhi 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 🚀 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 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.
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 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#
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/ và 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:
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:
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 các ảnh mục tiêu cần gán nhãn 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ợ trọng số 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 độ tin cậy phát hiện YOLO để lọc các detection yếu. |
iou | float | 0.45 | Ngưỡng IoU cho Non-Maximum Suppression để lọc các box chồng lấp. |
imgsz | int | 640 | Kích thước đầu vào để resize ảnh (phải là bội số của 32). |
max_det | int | 300 | Số detection tối đa trên mỗi ảnh để sử dụng bộ nhớ hiệu quả. |
classes | list[int] | None | Danh sách index lớp 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 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_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 đổ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.zipHã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_annotatenhư 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.