Tổng quan về các tập dữ liệu Semantic Segmentation
Semantic segmentation gán một nhãn lớp cho mọi pixel trong hình ảnh. Không giống như instance segmentation, semantic segmentation không phân tách các đối tượng riêng lẻ thuộc cùng một lớp. Mục tiêu huấn luyện là một bản đồ lớp dày đặc (dense class map), nơi mỗi pixel lưu trữ một ID lớp.
Hướng dẫn này giải thích định dạng tập dữ liệu được sử dụng bởi các mô hình semantic segmentation Ultralytics YOLO và liệt kê các cấu hình tập dữ liệu tích hợp sẵn cho việc huấn luyện và kiểm thử (validation).
Các định dạng tập dữ liệu được hỗ trợ
Hai định dạng nhãn được hỗ trợ. Trình tải tập dữ liệu (dataset loader) sẽ chọn đường dẫn dựa trên việc tệp YAML của tập dữ liệu có định nghĩa khóa masks_dir hay không.
Định dạng mặt nạ (mask) PNG
Các tập dữ liệu semantic segmentation sử dụng một tệp hình ảnh và một tệp mặt nạ cho mỗi mẫu. Mặt nạ là một hình ảnh đơn kênh, thường là định dạng PNG, trong đó giá trị của mỗi pixel là chỉ số lớp tương ứng với pixel của hình ảnh.
- Các giá trị pixel
0,1,2, ... đại diện cho các ID lớp từ ánh xạnamescủa tập dữ liệu. - Giá trị pixel
255được xử lý như nhãn bỏ qua (ignore label) và bị loại trừ khỏi tính toán hàm mất mát (loss) và các chỉ số đánh giá (metric). - Các tệp mặt nạ nên có cùng tên gốc (stem) với tệp hình ảnh tương ứng, ví dụ:
frankfurt_000000_000294.png. - Các phần mở rộng tệp mặt nạ được hỗ trợ là
.png,.PNG,.bmpvà.tif.
Bố cục mặc định lưu trữ hình ảnh và mặt nạ trong các thư mục song song. Giá trị masks_dir từ tệp YAML của tập dữ liệu sẽ thay thế thành phần đường dẫn images để tìm các mặt nạ.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Ví dụ, một hình ảnh tại images/train/aachen_000000_000019.png sẽ được ghép cặp với một mặt nạ tại masks/train/aachen_000000_000019.png khi masks_dir: masks.
Định dạng nhãn đa giác (polygon) YOLO
Nếu tập dữ liệu của bạn đã có sẵn nhãn đa giác Ultralytics YOLO (một tệp .txt mỗi ảnh với các hàng <class-index> <x1> <y1> <x2> <y2> ...), bạn có thể huấn luyện semantic segmentation trực tiếp từ đó — không cần chuyển đổi sang mặt nạ PNG. Xem định dạng tập dữ liệu instance segmentation để biết bố cục theo từng hàng.
Đường dẫn này được chọn tự động khi tệp YAML của tập dữ liệu bỏ qua masks_dir. Hành vi:
- Các đa giác được chuyển đổi thành mặt nạ semantic cho mỗi ảnh tại thời điểm tải, được sắp xếp theo diện tích để các đối tượng nhỏ hơn sẽ đè lên đối tượng lớn hơn tại các vùng chồng lấp.
- Đa lớp (
N > 1trongnames): một lớpbackgroundbổ sung được thêm vào sau các lớp bạn đã khai báo cho các pixel không nằm trong bất kỳ đa giác nào. Mô hình được xây dựng vớiN + 1kênh đầu ra và kênh cuối cùng là background. - Đơn lớp (
N == 1trongnames): vẫn được huấn luyện như 1 lớp. Mặt nạ là nhị phân, với lớp bạn khai báo hiển thị là1và các pixel không nằm trong bất kỳ đa giác nào là0. Không có lớp background bổ sung nào được thêm vàonames. - Các pixel được thêm vào bởi kỹ thuật augmentation padding (ví dụ: cắt ngẫu nhiên) vẫn sử dụng
255làm nhãn bỏ qua.
Sử dụng đường dẫn này khi dữ liệu của bạn đã được gắn nhãn dưới dạng đa giác instance và bạn muốn một mô hình semantic segmentation từ chính các tệp đó.
Định dạng YAML của tập dữ liệu
Các tập dữ liệu semantic segmentation được cấu hình bằng các tệp YAML. Các trường chính bao gồm:
| Khóa | Mô tả |
|---|---|
path | Thư mục gốc của tập dữ liệu. |
train | Đường dẫn hình ảnh huấn luyện tương đối so với path, hoặc đường dẫn tuyệt đối. |
val | Đường dẫn hình ảnh kiểm thử tương đối so với path, hoặc đường dẫn tuyệt đối. |
test | Đường dẫn hình ảnh kiểm thử tùy chọn. |
masks_dir | Tên thư mục được sử dụng cho các mặt nạ semantic. Hãy bỏ qua khóa này để chuyển sang định dạng nhãn đa giác YOLO. |
names | Ánh xạ từ ID lớp sang tên lớp. |
label_mapping | Ánh xạ tùy chọn từ các ID tập dữ liệu nguồn sang các ID huấn luyện hoặc ignore_label. |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8/
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
# └── cityscapes8 ← downloads here (small subset)
# └── images
# └── masks
# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
masks_dir: masks # semantic mask directory
# Cityscapes 19-class labels
names:
0: road
1: sidewalk
2: building
3: wall
4: fence
5: pole
6: traffic light
7: traffic sign
8: vegetation
9: terrain
10: sky
11: person
12: rider
13: car
14: truck
15: bus
16: train
17: motorcycle
18: bicycle
# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
-1: ignore_label
0: ignore_label
1: ignore_label
2: ignore_label
3: ignore_label
4: ignore_label
5: ignore_label
6: ignore_label
7: 0
8: 1
9: ignore_label
10: ignore_label
11: 2
12: 3
13: 4
14: ignore_label
15: ignore_label
16: ignore_label
17: 5
18: ignore_label
19: 6
20: 7
21: 8
22: 9
23: 10
24: 11
25: 12
26: 13
27: 14
28: 15
29: ignore_label
30: ignore_label
31: 16
32: 17
33: 18
# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zipSử dụng label_mapping khi các ID mặt nạ nguồn chưa khớp với các ID lớp huấn luyện liên tục. Cityscapes và ADE20K bao gồm các ánh xạ giúp chuyển đổi ID nhãn gốc thành ID huấn luyện semantic segmentation YOLO và bỏ qua các nhãn không sử dụng.
Cách sử dụng
Huấn luyện mô hình semantic segmentation YOLO26 bằng Python hoặc CLI:
from ultralytics import YOLO
# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")
# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Các tập dữ liệu được hỗ trợ
Ultralytics cung cấp các tệp YAML tập dữ liệu semantic segmentation cho các tập dữ liệu sau:
- Cityscapes: Tập dữ liệu semantic segmentation cảnh phố đô thị với 19 lớp huấn luyện.
- Cityscapes8: Một tập con gồm 8 hình ảnh của Cityscapes dùng cho kiểm tra nhanh và CI.
- ADE20K: Tập dữ liệu phân tích cảnh (scene parsing) với 150 lớp semantic.
Thêm tập dữ liệu của riêng bạn
Lựa chọn A — Mặt nạ PNG
- Lưu hình ảnh của bạn trong các thư mục phân chia như
images/trainvàimages/val. - Lưu mỗi mặt nạ đơn kênh cho mỗi hình ảnh trong các thư mục mặt nạ tương ứng, như
masks/trainvàmasks/val. - Đảm bảo các giá trị pixel mặt nạ là các ID lớp. Sử dụng
255cho các pixel cần bỏ qua. - Tạo một tệp YAML tập dữ liệu với
path,train,val,masks_dirvànames. - Chỉ thêm
label_mappingkhi các ID mặt nạ của bạn cần chuyển đổi thành các ID huấn luyện liên tục.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
2: buildingLựa chọn B — Nhãn đa giác
- Bố trí hình ảnh và các tệp đa giác
.txtgiống hệt như đối với instance segmentation. - Tạo một tệp YAML tập dữ liệu với
path,train,valvànames— bỏ quamasks_dir. - Không thêm mục "background" vào
names. Đối với các tập dữ liệu đa lớp, trình tải sẽ tự động thêm một mục; đối với các tập dữ liệu đơn lớp, quá trình huấn luyện vẫn ở mức 1 lớp — lớp bạn khai báo sẽ trở thành1trong mặt nạ và các pixel không được bao phủ sẽ trở thành0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carCâu hỏi thường gặp
Sự khác biệt giữa mặt nạ semantic segmentation và nhãn instance segmentation là gì?
Mặt nạ semantic segmentation là các bản đồ pixel dày đặc. Mỗi pixel lưu trữ một ID lớp và có một hình ảnh mặt nạ cho mỗi hình ảnh huấn luyện. Nhãn instance segmentation trong Ultralytics YOLO sử dụng các tệp văn bản với tọa độ đa giác, mỗi hàng cho một đối tượng instance.
Giá trị pixel nào bị bỏ qua trong quá trình huấn luyện?
Giá trị pixel 255 được sử dụng làm nhãn bỏ qua. Các pixel này bị bỏ qua trong tính toán loss và metric, điều này hữu ích cho các vùng trống, pixel không có nhãn hoặc các lớp nằm ngoài tập nhãn huấn luyện.
Tên tệp mặt nạ có cần khớp với tên tệp hình ảnh không?
Có. Mỗi mặt nạ semantic nên có cùng tên gốc tệp với hình ảnh tương ứng. Trình tải tập dữ liệu thay thế thành phần thư mục images bằng masks_dir và tìm kiếm các tệp mặt nạ khớp với nhau.
Tôi có thể sử dụng trực tiếp các ID nhãn của tập dữ liệu gốc không?
Có, nếu chúng đã khớp với các ID lớp trong names của bạn. Nếu tập dữ liệu nguồn sử dụng các ID không liên tục hoặc bao gồm các nhãn cần bỏ qua, hãy thêm phần label_mapping để chuyển đổi các giá trị pixel nguồn thành các ID huấn luyện.
Tôi có thể sử dụng tập dữ liệu instance segmentation của mình để huấn luyện semantic segmentation không?
Có. Các tập dữ liệu instance segmentation sử dụng nhãn đa giác Ultralytics YOLO (một tệp .txt mỗi ảnh với các hàng <class-index> <x1> <y1> <x2> <y2> ...), và các tệp đó có thể được tái sử dụng cho semantic segmentation — chỉ cần bỏ qua masks_dir khỏi tệp YAML tập dữ liệu. Trình tải sẽ tự động chuyển đổi đa giác thành mặt nạ cho mỗi ảnh. Đối với các tập dữ liệu đa lớp (N > 1), một lớp background bổ sung được thêm vào và mô hình được xây dựng với N + 1 kênh đầu ra. Đối với các tập dữ liệu đơn lớp (N == 1), huấn luyện vẫn ở mức 1 lớp — mặt nạ hiển thị lớp bạn đã khai báo là 1 và các pixel không được bao phủ là 0.