Ultralytics YOLO27:

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ừ mapping names củ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ư .png hoặ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 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 > 1 trong names): một lớp background bổ 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ới N + 1 channel đầu ra và channel cuối cùng là background.
  • Đơn lớp (N == 1 trong names): 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ằng 1 và 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ào names.
  • 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 255 là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:

KeyMô tả
pathThư 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_dirTê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.
namesMapping từ ID lớp sang tên lớp.
label_mappingMapping 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/cfg/datasets/cityscapes8.yaml
# 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.zip

Sử 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:

Ví dụ
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#

  1. Lưu ảnh của bạn trong các thư mục split như images/trainimages/val.
  2. 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/trainmasks/val.
  3. Đảm bảo các giá trị pixel của mask là ID lớp. Sử dụng 255 cho những pixel cần được bỏ qua.
  4. Tạo YAML bộ dữ liệu với path, train, val, masks_dirnames.
  5. Chỉ thêm label_mapping khi 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: building

Tùy chọn B — nhãn polygon#

  1. Sắp xếp ảnh và các file polygon .txt chính xác như đối với phân đoạn đối tượng.
  2. Tạo YAML bộ dữ liệu với path, train, valnamesbỏ qua masks_dir.
  3. Đả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.
  4. 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ành 1 trong mask và các pixel không được bao phủ trở thành 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Ultralytics 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 images bằng masks_dir và 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 names củ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ần label_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 .txt cho 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ỏ qua masks_dir trong YAML của bộ dữ liệu và đả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 kích hoạt chế độ mask PNG ngay cả khi chưa đặt masks_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ớp background bổ sung được thêm vào và model được xây dựng với N + 1 channel đầ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ằng 1 và các pixel không được bao phủ bằng 0.

  • 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.

Bình luận