Tổng quan về các dataset phân đoạn ngữ nghĩa#
Phân đoạn ngữ nghĩa gán một nhãn class cho mọi pixel trong ảnh. Khác với phân đoạn đối tượng, phân đoạn ngữ nghĩa không tách riêng từng đối tượng thuộc cùng một class. Mục tiêu huấn luyện là một bản đồ class dày đặc, trong đó mỗi pixel lưu một ID class.
Hướng dẫn này giải thích định dạng dataset được các model phân đoạn ngữ nghĩa Ultralytics YOLO sử dụng và liệt kê các cấu hình dataset tích hợp sẵn để huấn luyện và xác thực.
Các định dạng dataset được hỗ trợ#
Có hỗ trợ hai định dạng nhãn. Trình tải dataset chọn mask PNG khi YAML của dataset định nghĩa khóa masks_dir, hoặc khi thư mục masks/ đã tồn tại bên cạnh ảnh tại thư mục gốc của dataset; nếu không, trình tải sẽ dùng nhãn polygon YOLO.
Định dạng mask PNG#
Dataset phân đoạn ngữ nghĩa sử dụng một tệp ảnh và một tệp mask cho mỗi mẫu. Mask là ảnh một kênh, thường ở định dạng PNG, trong đó giá trị của mỗi pixel là chỉ số class tương ứng với pixel ảnh.
- Các giá trị pixel
0,1,2, ... biểu thị ID class theo mappingnamescủa dataset. - Giá trị pixel
255được xem là nhãn cần bỏ qua và không được tính vào loss hoặc metric. - Tệp mask nên dùng cùng tên gốc với tệp ảnh tương ứng, ví dụ
frankfurt_000000_000294.png. - Theo mặc định, mask được tìm dưới dạng
.png; nếu không tìm thấy, các phần mở rộng ảnh được hỗ trợ khác cũng được chấp nhận. Hãy dùng các định dạng không mất dữ liệu như.pnghoặc.tiff, vì nén mất dữ liệu (ví dụ.jpg) làm sai lệch giá trị pixel ID class.
Bố cục mặc định đặt ảnh và mask trong các thư mục song song. Giá trị masks_dir từ YAML của dataset thay thế thành phần đường dẫn images để tìm mask.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Ví dụ, ảnh tại images/train/aachen_000000_000019.png được ghép với mask tại masks/train/aachen_000000_000019.png khi masks_dir: masks.
Định dạng nhãn polygon YOLO#
Nếu dataset đã có nhãn polygon Ultralytics YOLO (một .txt cho mỗi ảnh với các dòng <class-index> <x1> <y1> <x2> <y2> ...), bạn có thể huấn luyện phân đoạn ngữ nghĩa trực tiếp từ các nhãn này — không cần chuyển đổi mask PNG. Xem định dạng dataset phân đoạn đối tượng để biết bố cục ở cấp dòng.
Đường dẫn này được tự động chọn khi YAML của dataset không có masks_dir và không tồn tại thư mục masks/ bên cạnh ảnh tại thư mục gốc của dataset — hãy xóa hoặc đổi tên mọi thư mục masks/ còn sót lại, nếu không trình tải sẽ chuyển về chế độ mask PNG và tìm mask ở đó. Cách hoạt động:
- Khi tải dữ liệu, các polygon được chuyển đổi thành mask ngữ nghĩa cho từng ảnh và sắp xếp theo diện tích để các đối tượng nhỏ hơn ghi đè lên đối tượng lớn hơn ở những vùng chồng lấp.
- Nhiều class (
N > 1trongnames): một classbackgroundbổ sung được thêm sau các class đã khai báo để biểu thị những pixel không thuộc polygon nào. Model được tạo vớiN + 1kênh đầu ra và kênh cuối cùng là nền. - Một class (
N == 1trongnames): vẫn được huấn luyện như một class. Mask là mask nhị phân, trong đó class đã khai báo được biểu thị bằng1, còn các pixel không thuộc polygon nào được biểu thị bằng0. Không thêm class nền nào vàonames. - Các pixel được thêm vào bằng phần đệm khi tăng cường dữ liệu (ví dụ: cắt ngẫu nhiên) vẫn dùng
255làm nhãn cần bỏ qua.
Sử dụng đường dẫn này khi dữ liệu đã được gán nhãn dưới dạng polygon đối tượng và bạn muốn tạo model phân đoạn ngữ nghĩa từ cùng các tệp đó.
Định dạng YAML của dataset#
Dataset phân đoạn ngữ nghĩa được cấu hình bằng các tệp YAML. Các trường chính gồm:
| Khóa | Mô tả |
|---|---|
path | Thư mục gốc của dataset. |
train | Đường dẫn ảnh huấn luyện tương đối so với path hoặc đường dẫn tuyệt đối. |
val | Đường dẫn ảnh xác thực tương đối so với path hoặc đường dẫn tuyệt đối. |
test | Đường dẫn ảnh kiểm tra không bắt buộc. |
masks_dir | Tên thư mục dùng cho mask ngữ nghĩa. Bỏ qua khóa này (khi không có thư mục masks/ tại thư mục gốc của dataset) để chuyển sang định dạng nhãn polygon YOLO. |
names | Mapping từ ID class sang tên class. |
label_mapping | Mapping không bắt buộc từ ID dataset nguồn sang 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 ID mask nguồn chưa khớp với ID lớp huấn luyện liên tục. Cityscapes và ADE20K có các ánh xạ chuyển ID nhãn gốc thành ID huấn luyện phân đoạn ngữ nghĩa của YOLO và bỏ qua các nhãn không được sử dụng.
Cách sử dụng#
Huấn luyện model phân đoạn ngữ nghĩa YOLO26 bằng Python hoặc CLI:
from ultralytics import YOLO
# Tải model phân đoạn ngữ nghĩa đã pretrained
model = YOLO("yolo26n-sem.pt")
# Huấn luyện trên dataset phân đoạn ngữ nghĩa Cityscapes8
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Dataset được hỗ trợ#
Ultralytics cung cấp các file YAML dataset phân đoạn ngữ nghĩa cho những dataset này. Xem trang tác vụ phân đoạn ngữ nghĩa để biết bảng benchmark model pretrained đầy đủ.
- Cityscapes: Dataset phân đoạn ngữ nghĩa cảnh đường phố đô thị với 19 lớp huấn luyện.
- Cityscapes8: Tập con Cityscapes gồm 8 ảnh để kiểm thử nhanh và kiểm tra CI.
- ADE20K: Dataset phân tích cảnh với 150 lớp ngữ nghĩa.
Thêm dataset của riêng bạn#
Tùy chọn A — Mask PNG#
- Lưu ảnh vào các thư mục phân tách như
images/trainvàimages/val. - Lưu một mask một kênh cho mỗi ảnh trong các thư mục mask tương ứng, chẳng hạn
masks/trainvàmasks/val. - Đảm bảo các giá trị pixel trong mask là ID lớp. Sử dụng
255cho các pixel cần bỏ qua. - Tạo YAML dataset với
path,train,val,masks_dirvànames. - Chỉ thêm
label_mappingkhi cần chuyển đổi ID mask thành 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: buildingTùy chọn B — Nhãn polygon#
- Sắp xếp ảnh và các file polygon
.txtgiống hệt như đối với phân đoạn instance. - Tạo YAML dataset với
path,train,valvànames— không bao gồmmasks_dir. - Đảm bảo không có thư mục
masks/bên cạnh ảnh trong thư mục gốc dataset — chỉ cần thư mục này tồn tại là trình tải chuyển sang chế độ mask PNG, ngay cả khi YAML không cómasks_dir. - Không thêm mục "background" vào
names. Với dataset nhiều lớp, trình tải sẽ tự động thêm một lớp; với dataset một lớp, quá trình huấn luyện vẫn giữ 1 lớp — lớp bạn khai báo trở thành1trong mask và các pixel không được phủ trở thành0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platform cung cấp công cụ chú thích polygon cho tác vụ phân đoạn ngữ nghĩa cùng tính năng chú thích thông minh có hỗ trợ SAM — chú thích trực tiếp trên trình duyệt rồi xuất hoặc huấn luyện trên dataset có nhãn polygon thu được mà không cần tự thiết lập cấu trúc này.
Câu hỏi thường gặp#
Mask phân đoạn ngữ nghĩa là bản đồ pixel dày đặc. Mỗi pixel lưu một ID lớp và mỗi ảnh huấn luyện có một ảnh mask. Nhãn phân đoạn instance trong Ultralytics YOLO dùng các file văn bản chứa tọa độ polygon, mỗi hàng tương ứng với một đối tượng instance.
Giá trị pixel
255được dùng làm nhãn bỏ qua. Các pixel này không được tính vào loss và metric, rất hữu ích với vùng void, pixel chưa gán nhãn hoặc lớp nằm ngoài tập nhãn huấn luyện.Có. Mỗi mask ngữ nghĩa cần có cùng tên gốc file với ảnh tương ứng. Trình tải dataset thay thành phần thư mục
imagesbằngmasks_dirvà tìm các file mask khớp tên; nếu không tìm thấy mask.png, trình tải sẽ dùng các phần mở rộng ảnh được hỗ trợ khác (.jpg,.tiff, v.v.) — tuy nhiên chỉ nên dùng định dạng không mất dữ liệu vì cơ chế dự phòng không kiểm tra điều này.Có, nếu các ID đó đã khớp với ID lớp
namescủa bạn. Nếu dataset nguồn dùng ID không liên tục hoặc có các nhãn cần bỏ qua, hãy thêm phầnlabel_mappingđể chuyển giá trị pixel nguồn thành ID huấn luyện.Có. Dataset phân đoạn instance sử dụng nhãn polygon Ultralytics YOLO (mỗi ảnh có một
.txtvới các hàng<class-index> <x1> <y1> <x2> <y2> ...), và có thể dùng lại chính các file này cho phân đoạn ngữ nghĩa — chỉ cần không bao gồmmasks_dirtrong YAML dataset và đảm bảo không có thư mụcmasks/bên cạnh ảnh trong thư mục gốc dataset (chỉ cần thư mục này tồn tại là chế độ mask PNG được kích hoạt, ngay cả khi không đặtmasks_dir). Sau đó, trình tải chuyển polygon thành mask cho từng ảnh ngay khi chạy. Với dataset nhiều lớp (N > 1), một lớpbackgroundbổ sung sẽ được thêm vào và model được tạo vớiN + 1kênh đầu ra. Với dataset một lớp (N == 1), quá trình huấn luyện vẫn giữ 1 lớp — mask biểu thị lớp bạn khai báo bằng1và các pixel không được phủ bằng0.Ultralytics bao gồm các file YAML dataset sẵn dùng cho Cityscapes (19 lớp cảnh đô thị), tập con Cityscapes8 gọn nhẹ để kiểm thử pipeline và ADE20K (150 lớp phân tích cảnh). Mỗi trang mô tả danh sách lớp chính xác, các bước tải xuống và ví dụ huấn luyện đã được xác minh.