Link to this sectionTổng quan về tập dữ liệu phân đoạn thực thể (Instance Segmentation)#
Phân đoạn thực thể là một tác vụ thị giác máy tính bao gồm việc xác định và phân tách các đố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 tập dữ liệu được hỗ trợ bởi Ultralytics YOLO cho các tác vụ phân đoạn thực thể, cùng với các hướng dẫn về cách chuẩn bị, chuyển đổi và sử dụng các tập dữ liệu này để huấn luyện các model của bạn.
Link to this sectionCác định dạng tập dữ liệu được hỗ trợ#
Link to this sectionĐịnh dạng Ultralytics YOLO#
Định dạng nhãn tập dữ liệu được sử dụng để huấn luyện các model phân đoạn YOLO như sau:
- Một tệp văn bản cho mỗi ảnh: Mỗi ảnh trong tập dữ liệu có một tệp văn bản tương ứng với cùng tên với tệp ảnh và phần mở rộng ".txt".
- Một hàng cho mỗi đối tượng: Mỗi hàng trong tệp văn bản tương ứng với một thực thể đối tượng trong ảnh.
- Thông tin đối tượng trên mỗi hàng: Mỗi hàng chứa các thông tin sau về thực thể đối tượng:
- Chỉ số lớp đối tượng: Một số nguyên đại diện cho lớp của đối tượng (ví dụ: 0 cho người, 1 cho xe hơi, v.v.).
- Tọa độ bao quanh đối tượng: Các tọa độ bao quanh vùng mask, được chuẩn hóa để nằm trong khoảng từ 0 đến 1.
Định dạng cho một dòng đơn trong tệp tập dữ liệu 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 lớp đối tượng, và <x1> <y1> <x2> <y2> ... <xn> <yn> là các tọa độ đa giác đã 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] tương ứng với chiều rộng và chiều cao của hình ảnh). Các tọa độ được phân cách bằng dấu cách.
Dưới đây là một ví dụ về định dạng tập dữ liệu YOLO cho một hình ảnh đơn có hai đối tượng, bao gồm một phân đoạn 3 điểm và một phân đoạn 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 bắt buộc 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>
Link to this sectionĐịnh dạng YAML cho tập dữ liệu#
Framework Ultralytics sử dụng định dạng tệp YAML để xác định tập dữ liệu và cấu hình model cho việc huấn luyện các Model Phân đoạn. Đây là ví dụ về định dạng YAML được sử dụng để xác định một tập dữ liệu 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 và val chỉ định đường dẫn đến các thư mục chứa ảnh huấn luyện và ảnh xác thực tương ứng.
names là một từ điển chứa tên các lớp. Thứ tự các tên phải khớp với thứ tự các chỉ số lớp đối tượng trong các tệp tập dữ liệu YOLO.
Link to this sectionCá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)Link to this sectionCác tập dữ liệu đượ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 thực thể. Dưới đây là danh sách các tập dữ liệu thường được sử dụng nhất:
- Carparts-seg: Một tập dữ liệu chuyên dụng tập trung vào việc phân đoạn các bộ phận ô tô, lý tưởng cho các ứng dụng ô tô. Nó bao gồm nhiều loại phương tiện với các chú thích chi tiết về từng thành phần của xe.
- COCO: Một tập dữ liệu toàn diện cho object detection, phân đoạn và chú thích, bao gồm hơn 200 nghìn hình ảnh có dán nhãn trên nhiều danh mục khác nhau.
- COCO8-seg: Một tập con nhỏ gọn gồm 8 hình ảnh của COCO được thiết kế để thử nghiệm nhanh việc huấn luyện model phân đoạn, lý tưởng cho các kiểm tra CI và xác thực quy trình làm việc trong repository
ultralytics. - COCO128-seg: Một tập dữ liệu nhỏ hơn cho các tác vụ instance segmentation, chứa một tập con gồm 128 hình ảnh COCO với các chú thích phân đoạn.
- Crack-seg: Một tập dữ liệu được thiết kế riêng cho việc phân đoạn các vết nứt trên nhiều bề mặt khác nhau. 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, nó cung cấp hình ảnh chi tiết để huấn luyện các model nhận diện các điểm yếu về cấu trúc.
- Package-seg: Một tập dữ liệu dành riêng cho việc phân đoạn các loại vật liệu và hình dạng đóng gói khác nhau. Nó đặc biệt hữu ích cho logistics và tự động hóa kho bãi, hỗ trợ phát triển các hệ thống xử lý và phân loại gói hàng.
Link to this sectionThêm tập dữ liệu của riêng bạn#
Nếu bạn có tập dữ liệu của riêng mình và muốn sử dụng nó để huấn luyện các model phân đoạn với định dạng Ultralytics YOLO, hãy đảm bảo rằng nó tuân theo định dạng được chỉ định ở trên trong mục "Định dạng Ultralytics YOLO". Chuyển đổi các chú thích của bạn sang định dạng bắt buộc và chỉ định các đường dẫn, số lượng lớp và tên lớp trong tệp cấu hình YAML. Hãy giữ images/ và labels/ làm 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 khớp nhau; việc đặt các tệp .txt nhãn trong thư mục hình ảnh có thể khiến model bỏ lỡ nhãn.
Link to this sectionChuyển đổi định dạng nhãn#
Link to this sectionĐịnh dạng tập dữ liệu COCO sang định dạng YOLO#
Bạn có thể dễ dàng chuyển đổi các nhãn từ định dạng tập dữ liệu COCO phổ biến sang định dạng YOLO bằng cách sử dụ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 tập dữ liệu COCO hoặc bất kỳ tập dữ liệu nào ở định dạng COCO sang định dạng Ultralytics YOLO.
Hãy nhớ kiểm tra kỹ xem tập dữ liệu bạn muốn sử dụng có tương thích với model của bạn và tuân theo các quy ước định dạng cần thiết hay không. Các tập dữ liệu được định dạng đúng cách là yếu tố then chốt để huấn luyện thành công các model phân đoạn.
Link to this sectionTự động dán nhãn (Auto-Annotation)#
Auto-annotation là một tính năng thiết yếu cho phép bạn tạo tập dữ liệu phân đoạn bằng cách sử dụng một model phát hiện đã được huấn luyện trước. Nó cho phép bạn dán nhãn nhanh chóng và chính xác một lượng lớn hình ảnh mà không cần dán nhãn thủ công, giúp tiết kiệm thời gian và công sức.
Link to this sectionTạo tập dữ liệu phân đoạn bằng cách sử dụng model phát hiện#
Để tự động dán nhãn tập dữ liệu của bạn bằng cách sử dụng framework Ultralytics, bạn có thể sử dụng hàm auto_annotate như hiển thị 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ố | Loại | Mặc định | Mô tả |
|---|---|---|---|
data | str | bắt buộc | Đường dẫn đến thư mục chứa các hình ảnh mục tiêu để chú thích hoặc phân đoạn. |
det_model | str | 'yolo26x.pt' | Đường dẫn model phát hiện YOLO cho phát hiện đối tượng ban đầu. |
sam_model | str | 'sam_b.pt' | Đường dẫn model SAM cho 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 của 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 chéo. |
imgsz | int | 640 | Kích thước đầu vào để thay đổi kích thước hình ảnh (phải là bội số của 32). |
max_det | int | 300 | Số lượng phát hiện tối đa trên mỗi hình ảnh để tối ưu bộ nhớ. |
classes | list[int] | None | Danh sách các chỉ số 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 nhãn (mặc định: thư mục ngang hàng <data>_auto_annotate_labels). |
Hàm auto_annotate nhận đường dẫn đến hình ảnh của bạn, cùng với các đối số tùy chọn để chỉ định các model phát hiện đã được huấn luyện trước, ví dụ: YOLO26, YOLO11, hoặc các models 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 đó và thư mục đầu ra để lưu các kết quả đã được dán nhãn.
Bằng cách tận dụng sức mạnh của các model đã được huấn luyện trước, auto-annotation có thể giảm đáng kể thời gian và công sức cần thiết để tạo ra các tập dữ liệu 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à nhà phát triển làm việc với các bộ sưu tập hình ảnh lớn, vì nó cho phép họ tập trung vào việc phát triển và đánh giá model thay vì dán nhãn thủ công.
Link to this sectionTrực quan hóa Chú thích Tập dữ liệu#
Trước khi huấn luyện model, việc trực quan hóa các chú thích tập dữ liệu thường rất hữu ích để đảm bảo chúng chính xác. Ultralytics cung cấp một hàm tiện ích 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,
)Hàm này vẽ các hộp bao (bounding box), dán nhãn các đối tượng bằng tên lớp 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 bất kỳ lỗi chú thích nào trước khi huấn luyện.
Link to this sectionChuyển đổi Mask phân đoạn sang định dạng YOLO#
Nếu bạn 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)Tiện ích 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 vào thư mục đầu ra đã chỉ định.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionUltralytics YOLO hỗ trợ những định dạng tập dữ liệu nào cho phân đoạn thực thể?#
Ultralytics YOLO hỗ trợ một số định dạng tập dữ liệu cho phân đoạn thực thể, với định dạng chính là định dạng Ultralytics YOLO của riêng nó. Mỗi hình ảnh trong tập dữ liệu của bạn cần một tệp văn bản tương ứng với thông tin đối tượng được phân đoạn thành nhiều dòng (một dòng cho mỗi đối tượng), liệt kê chỉ mục lớp và các tọa độ bao quanh đã chuẩn hóa. Để biết thêm hướng dẫn chi tiết về định dạng tập dữ liệu YOLO, hãy truy cập Tổng quan về tập dữ liệu phân đoạn thực thể.
Link to this sectionLàm thế nào để tôi có thể chuyển đổi chú thích tập dữ liệu COCO sang định dạng YOLO?#
Việc chuyển đổi các chú thích định dạng COCO sang định dạng YOLO rất đơn giản bằng cách sử dụng các công cụ của 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 đổi các chú thích tập dữ liệu COCO của bạn sang định dạng YOLO bắt buộc, giúp nó phù hợp để huấn luyện các model YOLO của bạn. Để biết thêm chi tiết, hãy tham khảo Chuyển đổi hoặc Port định dạng nhãn.
Link to this sectionLàm thế nào để tôi chuẩn bị một tệp YAML cho việc huấn luyện các model Ultralytics YOLO?#
Để chuẩn bị một tệp 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 tập dữ liệu và tên lớp. 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 bạn cập nhật các đường dẫn và tên lớp theo tập dữ liệu của mình. Để biết thêm thông tin, hãy kiểm tra phần Định dạng YAML của tập dữ liệu.
Link to this sectionTính năng auto-annotation trong Ultralytics YOLO là gì?#
Auto-annotation trong Ultralytics YOLO cho phép bạn tạo các chú thích phân đoạn cho tập dữ liệu của mình bằng cách sử dụng một model phát hiện đã được huấn luyện trước. Điều này làm giảm đáng kể nhu cầu dá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") # or sam_model="mobile_sam.pt"Hàm này tự động hóa quy trình gán nhãn (annotation), giúp nó nhanh chóng và hiệu quả hơn. Để biết thêm chi tiết, hãy khám phá Auto-Annotate Reference.