Tổng quan về bộ dữ liệu phân đoạn thể hiện
Phân vùng thể hiện là một tác vụ thị giác máy tính liên quan đến việc xác định và phân định 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 bộ dữ liệu được Ultralytics YOLO hỗ trợ cho các tác vụ phân vùng thể hiện, cùng với hướng dẫn về cách chuẩn bị, chuyển đổi và sử dụng các bộ dữ liệu này để huấn luyện mô hình của bạn.
Các Định Dạng Tập Dữ Liệu Được Hỗ Trợ
Định dạng Ultralytics YOLO
Định dạng nhãn bộ dữ liệu được sử dụng để huấn luyện các mô hình phân đoạn YOLO như sau:
- Một tệp văn bản cho mỗi hình ảnh: Mỗi hình ảnh trong bộ dữ liệu có một tệp văn bản tương ứng có cùng tên với tệp hình ả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ể hiện đối tượng trong hình ảnh.
- Thông tin đối tượng trên mỗi hàng: Mỗi hàng chứa thông tin sau về thể hiện đối tượng:
- Chỉ mục 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 độ hộp giới hạn đối tượng: Tọa độ hộp giới hạn xung quanh vùng mặt nạ, được chuẩn hóa giữa 0 và 1.
Định dạng cho một hàng duy nhất trong tệp bộ 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ỉ số của lớp cho đối tượng và <x1> <y1> <x2> <y2> ... <xn> <yn>
là tọa độ bao của mặt nạ phân đoạn của đối tượng. Các tọa độ được phân tách bằng dấu cách.
Đây là một ví dụ về định dạng bộ dữ liệu YOLO cho một hình ảnh duy nhất với hai đối tượng được tạo thành từ một đoạn 3 điểm và một đ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
Mẹo
- Độ dài của mỗi hàng không nhất thiết phải bằng nhau.
- Mỗi nhãn phân đoạn phải có một tối thiểu 3 điểm xy:
<class-index> <x1> <y1> <x2> <y2> <x3> <y3>
Định dạng YAML bộ dữ liệu
Framework Ultralytics sử dụng định dạng tệp YAML để xác định cấu hình bộ dữ liệu và mô hình để huấn luyện Mô hình Phân đoạn. Dưới đây là một ví dụ về định dạng YAML được sử dụng để xác định bộ dữ liệu 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
Hàm train
và val
các trường chỉ định đường dẫn đến các thư mục chứa hình ảnh huấn luyện và 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ủa các tên phải khớp với thứ tự của các chỉ mục lớp đối tượng trong các tệp bộ dữ liệu YOLO.
Cách sử dụng
Ví dụ
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640
Các bộ dữ liệu được hỗ trợ
Ultralytics YOLO hỗ trợ nhiều bộ dữ liệu khác nhau cho các tác vụ phân đoạn thể hiện. Dưới đây là danh sách các bộ dữ liệu được sử dụng phổ biến nhất:
- COCO: Một bộ dữ liệu toàn diện cho phát hiện đối tượng, phân đoạn và tạo chú thích, nổi bật với hơn 200 nghìn hình ảnh được gắn nhãn trên nhiều danh mục.
- COCO8-seg: Một tập hợp con nhỏ gọn gồm 8 ảnh của COCO, được thiết kế để kiểm tra nhanh quá trình huấn luyện mô hình 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
ultralytics
kho lưu trữ. - COCO128-seg: Một bộ dữ liệu nhỏ hơn cho các tác vụ phân đoạn thể hiện (instance segmentation), chứa một tập hợp con gồm 128 hình ảnh COCO với các chú thích phân đoạn.
- Carparts-seg: Một bộ dữ liệu chuyên biệt tập trung vào phân đoạn các bộ phận xe hơi, lý tưởng cho các ứng dụng ô tô. Nó bao gồm nhiều loại xe với chú thích chi tiết về các thành phần xe riêng lẻ.
- Crack-seg: Một bộ dữ liệu được thiết kế riêng cho việc phân đoạn các vết nứt trên các bề mặt khác nhau. 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 mô hình xác định các điểm yếu 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 tự động hóa kho bãi và hậu cần, hỗ trợ phát triển các hệ thống để xử lý và phân loại gói hàng.
Thêm tập dữ liệu của riêng bạn
Nếu bạn có bộ dữ liệu của riêng mình và muốn sử dụng nó để huấn luyện các mô hình 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 phần "Đị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.
Chuyển Đổi hoặc Điều Chỉnh Định Dạng Nhãn
Định Dạng Tập Dữ Liệu COCO sang Định Dạng YOLO
Bạn có thể dễ dàng chuyển đổi nhãn từ định dạng bộ dữ liệu 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 bộ dữ liệu COCO hoặc bất kỳ bộ dữ liệu nào ở định dạng COCO sang định dạng Ultralytics YOLO.
Hãy nhớ kiểm tra kỹ xem bộ dữ liệu bạn muốn sử dụng có tương thích với mô hình của bạn hay không và tuân theo các quy ước định dạng cần thiết. Các bộ dữ liệu được định dạng đúng cách là rất quan trọng để huấn luyện các mô hình phát hiện đối tượng thành công.
Tự động Chú thích
Tự động chú thích là một tính năng thiết yếu cho phép bạn tạo bộ dữ liệu phân đoạn bằng mô hình phát hiện được huấn luyện trước. Nó cho phép bạn nhanh chóng và chính xác chú thích một số lượng lớn hình ảnh mà không cần gán nhãn thủ công, giúp tiết kiệm thời gian và công sức.
Tạo Bộ dữ liệu Phân đoạn bằng Mô hình Phát hiện
Để tự động chú thích bộ dữ liệu của bạn bằng khung Ultralytics, bạn có thể sử dụng auto_annotate
hàm như được hiển thị bên dưới:
Ví dụ
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.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 hình ảnh mục tiêu để chú thích hoặc phân đoạn. |
det_model |
str |
'yolo11x.pt' |
Đường dẫn mô hình phát hiện YOLO để phát hiện đối tượng ban đầu. |
sam_model |
str |
'sam_b.pt' |
Đường dẫn mô hình SAM để phân đoạn (hỗ trợ các biến thể SAM, SAM2 và mô hình mobile_sam). |
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 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 ảnh để tiết kiệm bộ nhớ. |
classes |
list[int] |
None |
Danh sách các chỉ số lớp để phát hiện (ví dụ: [0, 1] cho người và xe đạp). |
output_dir |
str |
None |
Thư mục lưu trữ cho các chú thích (mặc định là '.\/labels' tương ứng với đường dẫn dữ liệu). |
Hàm auto_annotate
function 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 mô hình phát hiện được huấn luyện trước, ví dụ: YOLO11, YOLOv8 hoặc khác mô hình và các mô hình phân đoạn, ví dụ: SAM, SAM2 hoặc MobileSAM, thiết bị để chạy các mô hình và thư mục đầu ra để lưu các kết quả đã được chú thích.
Bằng cách tận dụng sức mạnh của các mô hình đã được huấn luyện trước, 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 ra các bộ 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 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á mô hình thay vì gán nhãn thủ công.
Trực quan hóa chú thích bộ dữ liệu
Trước khi huấn luyện mô hình của bạn, việc trực quan hóa các chú thích của bộ dữ liệu thường 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 giới hạn, gắ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.
Chuyển đổi mặt nạ phân vùng sang định dạng YOLO
Nếu bạn có mặt nạ 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 hình ảnh mặt nạ nhị phân thành định dạng phân đoạn YOLO và lưu chúng trong thư mục đầu ra được chỉ định.
Câu hỏi thường gặp
Ultralytics YOLO hỗ trợ những định dạng bộ dữ liệu nào cho phân đoạn thể hiện?
Ultralytics YOLO hỗ trợ một số định dạng bộ dữ liệu để phân đoạn thể hiện, với định dạng chính là định dạng Ultralytics YOLO của riêng nó. Mỗi hình ảnh trong bộ 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 hàng (mỗi hàng một đối tượng), liệt kê chỉ mục lớp và tọa độ bao quanh được chuẩn hóa. Để biết hướng dẫn chi tiết hơn về định dạng bộ dữ liệu YOLO, hãy truy cập Tổng quan về Bộ dữ liệu Phân đoạn Thể hiện.
Làm cách nào để chuyển đổi chú thích của bộ dữ liệu COCO sang định dạng YOLO?
Việc chuyển đổi chú thích định dạng COCO sang định dạng YOLO rất đơn giản bằng các công cụ Ultralytics. Bạn có thể sử dụng convert_coco
function từ ultralytics.data.converter
module:
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 annotation của bộ dữ liệu COCO của bạn sang định dạng YOLO cần thiết, làm cho nó phù hợp để huấn luyện các mô hình YOLO của bạn. Để biết thêm chi tiết, hãy tham khảo Chuyển đổi hoặc Chuyển đổi Định dạng Nhãn.
Làm cách nào để chuẩn bị tệp YAML để huấn luyện các mô hình Ultralytics YOLO?
Để chuẩn bị tệp YAML để huấn luyện các mô hình YOLO với Ultralytics, bạn cần xác định đường dẫn tập dữ liệu và tên lớp. Dưới đây là một 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
Đảm bảo bạn cập nhật các đường dẫn và tên class (lớp) theo dataset (bộ dữ liệu) của bạn. Để biết thêm thông tin, hãy xem phần Định dạng YAML Dataset.
Tính năng tự động chú thích trong Ultralytics YOLO là gì?
Tự động chú thích trong Ultralytics YOLO cho phép bạn tạo chú thích phân đoạn cho bộ dữ liệu của mình bằng mô hình phát hiện được huấn luyện trước. Điều này làm giảm đáng kể nhu cầu gán nhãn thủ công. Bạn có thể sử dụng auto_annotate
function như sau:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"
Chức năng này tự động hóa quy trình chú thích, làm cho nó nhanh hơn và hiệu quả hơn. Để biết thêm chi tiết, hãy khám phá Tham khảo Chú thích tự động.