Link to this sectionTổng quan về tập 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 như phân đoạn cá thể, phân đoạn ngữ nghĩa không tách biệt 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à bản đồ lớp dày đặc, trong đó 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 các mô hình phân đoạn ngữ nghĩa YOLO của Ultralytics sử dụng và liệt kê các cấu hình tập dữ liệu tích hợp sẵn có để huấn luyện và xác thực.
Link to this sectionCá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 sẽ chọn đường dẫn dựa trên việc tập dữ liệu YAML có định nghĩa khóa masks_dir hay không.
Link to this sectionĐịnh dạng mặt nạ PNG#
Các tập dữ liệu phân đoạn ngữ nghĩa sử dụng một tệp ảnh và một tệp mặt nạ cho mỗi mẫu. Mặt nạ là một ảnh đơn kênh, thường là PNG, trong đó mỗi giá trị pixel là chỉ mục lớp tương ứng với pixel ả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 coi là nhãn bỏ qua và bị loại trừ khỏi quá trình tính toán mất mát và chỉ số. - Các tệp mặt nạ nên sử dụng cùng tên gốc với tệp ảnh tương ứng của chúng, ví dụ
frankfurt_000000_000294.png. - Theo mặc định, mặt nạ được phân giải là
.png; nếu thiếu, các phần mở rộng hình ả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 có mất dữ liệu (ví dụ:.jpg) sẽ làm hỏng các giá trị pixel ID lớp.
Bố cục mặc định giữ hình ảnh và mặt nạ trong các thư mục song song. Giá trị masks_dir từ tập dữ liệu YAML 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ẽ đi kèm với một mặt nạ tại masks/train/aachen_000000_000019.png khi masks_dir: masks.
Link to this sectionĐịnh dạng nhãn đa giác YOLO#
Nếu tập dữ liệu của bạn đã có các nhãn đa giác YOLO của Ultralytics (mỗi tệp .txt cho một ảnh với các hà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ừ chúng — không cần chuyển đổi sang mặt nạ PNG. Xem định dạng tập dữ liệu phân đoạn cá thể để biết bố cục theo hàng.
Đường dẫn này được chọn tự động khi tập dữ liệu YAML bỏ qua masks_dir. Hành vi:
- Các đa giác được chuyển đổi thành mặt nạ ngữ nghĩa 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 các đối tượng lớn hơn trong các vùng chồng lấp.
- Đa lớp (
N > 1trongnames): một lớpbackground(nền) bổ sung được thêm vào sau các lớp đã khai báo của bạn cho các pixel không bị đa giác nào bao phủ. Mô hình được xây dựng vớiN + 1kênh đầu ra và kênh cuối cùng là nền. - Đơ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ị dưới dạng1và các pixel không được che phủ bởi bất kỳ đa giác nào dưới dạng0. Không có lớp nền bổ sung nào được thêm vàonames. - Các pixel được thêm vào bởi đệm tăng cường (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 cá thể và bạn muốn có một mô hình phân đoạn ngữ nghĩa từ cùng các tệp đó.
Link to this sectionĐịnh dạng YAML tập dữ liệu#
Các tập dữ liệu 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 là:
| 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 xác thực tương đối so với path, hoặc đường dẫn tuyệt đối. |
test | Đường dẫn hình ảnh kiểm tra tùy chọn. |
masks_dir | Tên thư mục được sử dụng cho các mặt nạ ngữ nghĩa. 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 không 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ạ chuyển đổi các ID nhãn gốc thành các ID huấn luyện phân đoạn ngữ nghĩa YOLO và bỏ qua các nhãn không sử dụng.
Link to this sectionCách sử dụng#
Huấn luyện một mô hình 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)Link to this sectionCác tập dữ liệu được hỗ trợ#
Ultralytics cung cấp các tệp YAML tập dữ liệu phân đoạn ngữ nghĩa cho các tập dữ liệu sau:
- Cityscapes: Tập dữ liệu phân đoạn ngữ nghĩa cảnh đường phố đô thị với 19 lớp huấn luyện.
- Cityscapes8: Một tập con gồm 8 ảnh Cityscapes để kiểm tra nhanh và kiểm tra CI.
- ADE20K: Tập dữ liệu phân tích cú pháp cảnh với 150 lớp ngữ nghĩa.
Link to this sectionThêm tập dữ liệu của riêng bạn#
Link to this sectionTùy chọn A — Mặt nạ PNG#
- Lưu hình ảnh của bạn trong các thư mục phân tách 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 sang 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: buildingLink to this sectionTùy chọn B — Nhãn đa giác#
- Sắp xếp hình ảnh và các tệp đa giác
.txtchính xác như đối với phân đoạn cá thể. - 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 giữ nguyên ở mức 1 lớp — lớp bạn đã khai báo sẽ trở thành1trong mặt nạ và các pixel chưa được che phủ sẽ trở thành0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carLink to this sectionFAQ#
Link to this sectionSự khác biệt giữa mặt nạ phân đoạn ngữ nghĩa và nhãn phân đoạn cá thể là gì?#
Mặt nạ phân đoạn ngữ nghĩa là các bản đồ pixel dày đặc. Mỗi pixel lưu trữ một ID lớp và có một ảnh mặt nạ cho mỗi ảnh huấn luyện. Nhãn phân đoạn cá thể 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 cá thể đối tượng.
Link to this sectionGiá 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 quá trình tính toán mất mát và chỉ số, điều này hữu ích cho các vùng trống, pixel không được gắn nhãn hoặc các lớp nằm ngoài tập nhãn huấn luyện.
Link to this sectionTê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ạ ngữ nghĩa phải có cùng tên gốc 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.
Link to this sectionTô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 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ị bỏ qua, hãy thêm phần label_mapping để chuyển đổi các giá trị pixel nguồn sang các ID huấn luyện.
Link to this sectionTôi có thể sử dụng tập dữ liệu phân đoạn cá thể của mình để huấn luyện phân đoạn ngữ nghĩa không?#
Có. Các tập dữ liệu phân đoạn cá thể sử dụng nhãn đa giác YOLO của Ultralytics (mỗi tệp .txt cho một ảnh với các hàng <class-index> <x1> <y1> <x2> <y2> ...), và các tệp tương tự có thể được sử dụng lại cho phân đoạn ngữ nghĩa — chỉ cần bỏ qua masks_dir từ YAML tập dữ liệu. Trình tải chuyển đổi đa giác thành mặt nạ cho mỗi ảnh ngay khi chạy. Đố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), quá trình huấn luyện giữ nguyên ở mức 1 lớp — mặt nạ hiển thị lớp bạn đã khai báo dưới dạng 1 và các pixel không được che phủ dưới dạng 0.