Tổng quan về bộ dữ liệu phân đoạn ngữ nghĩa#
Phân đoạn ngữ nghĩa gán một nhãn lớp cho mọi pixel trong ảnh. Không giống phân đoạn đối tượng, phân đoạn ngữ nghĩa không tách riêng các đối tượng 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, trong đó mỗi pixel lưu một ID lớp.
Hướng dẫn này giải thích định dạng bộ dữ liệu đượ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 bộ dữ liệu tích hợp sẵn cho quá trình huấn luyện và validation.
Các định dạng dataset được hỗ trợ#
Có hai định dạng nhãn được hỗ trợ. Dataset loader chọn các mask PNG khi YAML của bộ dữ liệu định nghĩa key masks_dir, hoặc khi thư mục masks/ đã tồn tại ngay cạnh ảnh trong thư mục gốc của bộ dữ liệu; nếu không, loader sẽ chuyển sang nhãn polygon YOLO.
Định dạng mask PNG#
Bộ dữ liệu phân đoạn ngữ nghĩa sử dụng một file ảnh và một file mask cho mỗi sample. Mask là ảnh một kênh, thường ở định dạng PNG, trong đó mỗi giá trị pixel là chỉ mục lớp tương ứng với pixel trong ảnh.
- Các giá trị pixel
0,1,2, ... biểu thị các ID lớp từ mappingnamescủa bộ dữ liệu. - Giá trị pixel
255được coi là nhãn bỏ qua và bị loại khỏi quá trình tính loss và metric. - Các file mask phải sử dụng cùng stem với file ảnh tương ứng, ví dụ
frankfurt_000000_000294.png. - Theo mặc định, mask được tìm theo
.png; nếu không có, các phần mở rộng ảnh được hỗ trợ khác cũng được chấp nhận. Hãy sử 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 hỏng các giá trị pixel ID lớp.
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 bộ dữ liệu 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 bộ dữ liệu của bạn đã 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 bộ dữ liệu phân đoạn đối tượng để biết bố cục ở cấp độ dòng.
Nhánh này được tự động chọn khi YAML của bộ dữ liệu không có masks_dir và không tồn tại thư mục masks/ ngay cạnh ảnh trong thư mục gốc của bộ dữ liệu — 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 loader sẽ chuyển sang chế độ mask PNG và tìm mask ở đó. Cách hoạt động:
- Các polygon được chuyển đổi thành mask ngữ nghĩa cho từng ảnh tại thời điểm load, sau đó được 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 tại các vùng chồng lấn.
- Đa lớp (
N > 1trongnames): một lớpbackgroundbổ sung được thêm sau các lớp đã khai báo cho những pixel không được polygon nào bao phủ. Model được xây dựng vớiN + 1channel đầu ra và channel cuối cùng là background. - Đơn lớp (
N == 1trongnames): vẫn được huấn luyện với 1 lớp. Mask là nhị phân, trong đó lớp đã khai báo được biểu diễn bằng1và các pixel không được polygon nào bao phủ là0. Không có lớp background bổ sung nào được thêm vàonames. - Các pixel được thêm bởi padding trong quá trình augmentation (ví dụ crop ngẫu nhiên) vẫn sử dụng
255làm nhãn bỏ qua.
Sử dụng nhánh này khi dữ liệu của bạn đã được gán nhãn dưới dạng polygon đối tượng và bạn muốn xây dựng model phân đoạn ngữ nghĩa từ cùng các file đó.
Định dạng YAML của dataset#
Bộ dữ liệu phân đoạn ngữ nghĩa được cấu hình bằng các file YAML. Các trường chính gồm:
| Key | Mô tả |
|---|---|
path | Thư mục gốc của bộ dữ liệu. |
train | Đường dẫn ảnh huấn luyện tương đối so với path, hoặc một đường dẫn tuyệt đối. |
val | Đường dẫn ảnh validation tương đối so với path, hoặc một đường dẫn tuyệt đối. |
test | Đường dẫn ảnh test tùy chọn. |
masks_dir | Tên thư mục được sử dụng cho các mask ngữ nghĩa. Bỏ qua key này (khi không có thư mục masks/ tại thư mục gốc của bộ dữ liệu) để chuyển sang định dạng nhãn polygon YOLO. |
names | Mapping từ ID lớp sang tên lớp. |
label_mapping | Mapping tùy chọn từ ID của bộ dữ liệu 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 các ID lớp huấn luyện liên tiếp. Cityscapes và ADE20K có các mapping chuyển đổi ID nhãn gốc thành ID huấn luyện phân đoạn ngữ nghĩ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
# 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 dataset được hỗ trợ#
Ultralytics cung cấp các file YAML bộ dữ liệu phân đoạn ngữ nghĩa cho những bộ dữ liệu này. Xem trang tác vụ phân đoạn ngữ nghĩa để biết bảng benchmark model pretrained đầy đủ.
- Cityscapes: Dataset semantic segmentation cảnh đường phố đô thị với 19 lớp train.
- Cityscapes8: Một subset 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 semantic.
Thêm bộ dữ liệu của riêng bạn#
Tùy chọn A — mask PNG#
- Lưu ảnh của bạn trong các thư mục split 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 của mask là ID lớp. Sử dụng
255cho những pixel cần được bỏ qua. - Tạo YAML bộ dữ liệu với
path,train,val,masks_dirvànames. - Chỉ thêm
label_mappingkhi các ID trong mask cần được chuyển đổi thành các ID huấn luyện liên tiếp.
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
.txtchính xác như đối với phân đoạn đối tượng. - Tạo YAML bộ dữ liệu với
path,train,valvànames— bỏ quamasks_dir. - Đảm bảo không có thư mục
masks/tồn tại ngay cạnh ảnh trong thư mục gốc của bộ dữ liệu — chỉ riêng sự tồn tại của thư mục này cũng chuyển loader sang chế độ mask PNG, ngay cả khi YAML không cómasks_dir. - Không thêm mục "background" vào
names. Đối với bộ dữ liệu đa lớp, loader sẽ tự động thêm một lớp; đối với bộ dữ liệu đơn lớp, quá trình huấn luyện vẫn giữ 1 lớp — lớp đã khai báo trở thành1trong mask và các pixel không được bao 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ụ ngữ nghĩa, cùng tính năng chú thích thông minh có SAM hỗ trợ — chú thích trực tiếp trong trình duyệt rồi export hoặc huấn luyện trên bộ dữ liệu đã gán nhãn polygon mà không cần tự thiết lập bố cục này.
FAQ#
Mask phân đoạn ngữ nghĩa là các 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 đối tượng trong Ultralytics YOLO sử dụng các file văn bản chứa tọa độ polygon, mỗi dòng tương ứng với một instance đối tượng.
Giá trị pixel
255được sử dụng làm nhãn bỏ qua. Các pixel này được bỏ qua khi tính loss và metric, hữu ích cho các vùng void, pixel chưa được gán nhãn hoặc các lớp nằm ngoài tập nhãn huấn luyện.Có. Mỗi mask ngữ nghĩa phải có cùng file stem với ảnh tương ứng. Dataset loader thay thế thành phần thư mục
imagesbằngmasks_dirvà tìm các file mask tương ứng, đồng thời chuyển sang các phần mở rộng ảnh được hỗ trợ khác (.jpg,.tiff, v.v.) nếu không tìm thấy mask.png— dù chỉ nên dùng các định dạng không mất dữ liệu, vì cơ chế fallback không bắt buộc điều này.Có, nếu chúng đã khớp với các ID lớp
namescủa bạn. Nếu bộ dữ liệu nguồn sử dụng các ID không liên tiếp hoặc chứa các nhãn cần được bỏ qua, hãy thêm phầnlabel_mappingđể chuyển đổi các giá trị pixel nguồn thành ID huấn luyện.Có. Bộ dữ liệu phân đoạn đối tượng sử dụng nhãn polygon Ultralytics YOLO (một
.txtcho mỗi ảnh với các dòng<class-index> <x1> <y1> <x2> <y2> ...), và có thể tái sử dụng cùng các file đó cho phân đoạn ngữ nghĩa — chỉ cần bỏ quamasks_dirtrong YAML của bộ dữ liệu và đảm bảo không có thư mụcmasks/tồn tại ngay cạnh ảnh trong thư mục gốc của bộ dữ liệu (chỉ riêng sự tồn tại của thư mục này cũng kích hoạt chế độ mask PNG ngay cả khi chưa đặtmasks_dir). Sau đó loader chuyển đổi polygon thành mask cho từng ảnh ngay trong lúc chạy. Đối với bộ dữ liệu đa lớp (N > 1), một lớpbackgroundbổ sung được thêm vào và model được xây dựng vớiN + 1channel đầu ra. Đối với bộ dữ liệu đơn lớp (N == 1), quá trình huấn luyện vẫn giữ 1 lớp — mask biểu diễn lớp đã khai báo bằng1và các pixel không được bao phủ bằng0.Ultralytics cung cấp các file YAML bộ dữ liệu sẵn sàng sử dụng cho Cityscapes (19 lớp cảnh đô thị), subset Cityscapes8 nhẹ dành cho kiểm thử pipeline và ADE20K (150 lớp phân tích cảnh). Mỗi trang đều ghi rõ danh sách lớp, các bước tải xuống và một ví dụ huấn luyện đã được xác minh.