Ultralytics YOLO27:

Dataset Cityscapes#

Dataset Cityscapes là benchmark phân đoạn ngữ nghĩa quy mô lớn về cảnh đường phố đô thị, được ghi hình tại 50 thành phố châu Âu, với 2.975 ảnh huấn luyện được chú thích chi tiết và 500 ảnh validation thuộc 19 lớp. Đây là một trong những dataset được sử dụng rộng rãi nhất trong nghiên cứu xe tự hành và tìm hiểu cảnh đô thị bằng model Ultralytics YOLO.

Tính năng chính#

  • Các chú thích chi tiết của Cityscapes gồm 2.975 ảnh huấn luyện và 500 ảnh validation thuộc 19 lớp; archive cũng có 1.525 ảnh kiểm thử, nhưng mask được phát hành chỉ gán nhãn cho xe của chính phương tiện và đường viền ảnh — chú thích lớp thực tế không được công bố, và để có điểm số chính thức trên tập kiểm thử, cần gửi dự đoán đến máy chủ đánh giá Cityscapes.
  • Dataset bao gồm 19 lớp đánh giá thuộc các nhóm phẳng, con người, phương tiện, công trình, vật thể, thiên nhiên và bầu trời.
  • Cityscapes cung cấp các metric đánh giá tiêu chuẩn như Intersection over Union trung bình (mIoU) cho phân đoạn ngữ nghĩa, giúp so sánh hiệu quả hiệu năng model.
  • Trước khi quyết định tải thủ công khoảng ~11 GB, hãy kiểm tra sơ bộ pipeline huấn luyện bằng tập con Cityscapes8 gồm 8 ảnh.

Cấu trúc dataset#

Cấu hình Ultralytics yêu cầu cấu trúc sau khi chuẩn bị:

cityscapes/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── masks/
    ├── train/
    ├── val/
    └── test/
Yêu cầu tải xuống thủ công

Cityscapes không hỗ trợ tải archive tự động. Tạo tài khoản trên website Cityscapes, sau đó tải các archive leftImg8bit_trainvaltest.zip và gtFine_trainvaltest.zip (tổng cộng khoảng ~11 GB) rồi giải nén cả hai vào thư mục gốc dataset cityscapes. Ultralytics tự động sắp xếp lại chúng theo cấu trúc images/ và masks/ nêu trên khi bạn huấn luyện lần đầu.

Mask ngữ nghĩa là các file PNG một kênh. ID nhãn Cityscapes gốc được ánh xạ sang 19 ID huấn luyện tiêu chuẩn thông qua phần label_mapping, còn nhãn bị bỏ qua hoặc void được ánh xạ sang 255 để loại khỏi quá trình huấn luyện và đánh giá.

Lưu ý

Mask gtFine/test được phát hành công khai chỉ gán nhãn cho xe của chính phương tiện và vùng viền ảnh — mọi lớp khác đều là void. Tính mIoU trên phần tách val để đánh giá cục bộ; để có điểm số chính thức trên tập kiểm thử, cần gửi dự đoán đến máy chủ đánh giá Cityscapes.

Ứng dụng#

Cityscapes được sử dụng rộng rãi để huấn luyện và đánh giá các model deep learning trong phân đoạn ngữ nghĩa, đặc biệt là cho xe tự hành, hệ thống hỗ trợ lái xe nâng cao (ADAS) và robot đô thị.

Ảnh độ phân giải cao và chú thích chi tiết của Cityscapes cũng rất hữu ích cho nghiên cứu phân tích cảnh theo thời gian thực, tìm hiểu làn đường và chướng ngại vật, cùng mọi tác vụ cần hiểu biết dày đặc ở cấp pixel về môi trường đô thị phức tạp. Các model phân đoạn ngữ nghĩa YOLO26 pretrained đạt mIoU tối đa 83.6 trên tập validation Cityscapes — xem trang model phân đoạn ngữ nghĩa để biết bảng benchmark đầy đủ. Bạn có thể sắp xếp, trực quan hóa và quản lý dữ liệu Cityscapes xuyên suốt quy trình phát triển model bằng Ultralytics Platform.

YAML của dataset#

File YAML dataset xác định đường dẫn, lớp, thư mục mask và ánh xạ nhãn của Cityscapes. File cityscapes.yaml được duy trì tại https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/cityscapes.yaml.

ultralytics/cfg/datasets/cityscapes.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes
# Example usage: yolo semantic train data=cityscapes.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes ← downloads here (11 GB)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes # dataset root dir
train: images/train # train images (relative to 'path') 2975 images
val: images/val # val images (relative to 'path') 500 images
test: images/test # test images (relative to 'path') 1525 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

# Preparation script (requires manual Cityscapes download)
download: |
  from pathlib import Path
  from shutil import copy2

  cityscapes_dir = Path(yaml["path"])  # dataset root dir
  # Download and extract the official Cityscapes leftImg8bit and gtFine archives into cityscapes_dir first.
  leftimg8bit_dir = cityscapes_dir / "leftImg8bit"
  gtfine_dir = cityscapes_dir / "gtFine"

  for split in ("train", "val", "test"):
      print(f"Processing {split} set")
      src_image_dir = leftimg8bit_dir / split
      dst_image_dir = cityscapes_dir / "images" / split
      dst_mask_dir = cityscapes_dir / "masks" / split
      dst_image_dir.mkdir(parents=True, exist_ok=True)
      dst_mask_dir.mkdir(parents=True, exist_ok=True)

      image_paths = sorted(src_image_dir.rglob("*_leftImg8bit.png"))
      for image_path in image_paths:
          relative_path = image_path.relative_to(src_image_dir)
          mask_path = gtfine_dir / split / relative_path.parent / image_path.name.replace(
              "_leftImg8bit.png", "_gtFine_labelIds.png"
          )
          if not mask_path.exists():
              raise FileNotFoundError(f"Mask not found for {image_path}: {mask_path}")

          image_name = image_path.name.replace("_leftImg8bit", "")
          mask_name = mask_path.name.replace("_gtFine_labelIds", "")
          copy2(image_path, dst_image_dir / image_name)
          copy2(mask_path, dst_mask_dir / mask_name)

Cách sử dụng#

Để huấn luyện model YOLO26n-sem trên dataset Cityscapes trong 100 epoch với kích thước ảnh 1024, bạn có thể dùng các đoạn mã sau. Để xem danh sách đầy đủ các tham số hiện có, hãy tham khảo trang Huấn luyện model.

Ví dụ huấn luyện
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-sem.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện model
results = model.train(data="cityscapes.yaml", epochs=100, imgsz=1024)

Trích dẫn, giấy phép và lời cảm ơn#

Cityscapes được phát hành theo giấy phép phi thương mại tùy chỉnh — miễn phí cho nghiên cứu học thuật và đánh giá, nhưng việc sử dụng thương mại, cấp phép hoặc phân phối lại dữ liệu cần có sự cho phép riêng từ nhóm Cityscapes.

Nếu sử dụng dataset Cityscapes trong nghiên cứu hoặc công việc phát triển, vui lòng trích dẫn bài báo sau:

Trích dẫn
@inproceedings{Cordts2016Cityscapes,
  title={The Cityscapes Dataset for Semantic Urban Scene Understanding},
  author={Cordts, Marius and Omran, Mohamed and Ramos, Sebastian and Rehfeld, Timo and Enzweiler, Markus and Benenson, Rodrigo and Franke, Uwe and Roth, Stefan and Schiele, Bernt},
  booktitle={Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2016}
}

Chúng tôi xin ghi nhận đóng góp của nhóm Cityscapes trong việc tạo và duy trì tài nguyên quý giá này cho cộng đồng xe tự hành và thị giác máy tính. Để biết thêm thông tin về dataset Cityscapes và những người tạo ra dataset, hãy truy cập website dataset Cityscapes.

Câu hỏi thường gặp#

  • Dataset Cityscapes là benchmark phân đoạn ngữ nghĩa quy mô lớn về cảnh đường phố đô thị tại 50 thành phố châu Âu, được sử dụng rộng rãi làm tham chiếu tiêu chuẩn cho nghiên cứu xe tự hành và ADAS. Với 19 lớp đánh giá được chú thích chi tiết, ảnh độ phân giải cao và metric Intersection over Union trung bình (mIoU) được chuẩn hóa, đây là một trong những benchmark được trích dẫn nhiều nhất cho model hiểu cảnh dày đặc.

  • Để huấn luyện model YOLO26n-sem trên dataset Cityscapes trong 100 epoch với kích thước ảnh 1024, bạn có thể dùng các đoạn mã sau. Để biết danh sách chi tiết các tham số hiện có, hãy tham khảo trang Huấn luyện model.

    Ví dụ huấn luyện
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("yolo26n-sem.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
    
    # Huấn luyện model
    results = model.train(data="cityscapes.yaml", epochs=100, imgsz=1024)
  • Sau khi chuẩn bị, dataset được sắp xếp thành các thư mục images/{train,val,test}/ và masks/{train,val,test}/, mỗi ảnh đi kèm một mask PNG một kênh. File YAML Ultralytics ghép từng ảnh với mask thông qua trường masks_dir: masks, đồng thời dùng label_mapping để chuyển ID nhãn Cityscapes gốc thành 19 ID huấn luyện liên tục tiêu chuẩn, ánh xạ các nhãn bị bỏ qua và void thành 255. Mask trong phần tách test chỉ gán nhãn cho xe của chính phương tiện và vùng viền, vì vậy hãy dùng val để kiểm tra mIoU cục bộ.

  • Có. Tạo tài khoản trên website Cityscapes và tải các archive leftImg8bit_trainvaltest.zip và gtFine_trainvaltest.zip (tổng cộng khoảng ~11 GB). Giải nén cả hai vào thư mục gốc dataset cityscapes — Ultralytics tự động sắp xếp lại chúng theo cấu trúc images/ và masks/ mong đợi khi bạn huấn luyện lần đầu.

  • Mask nguồn của Cityscapes lưu ID nhãn gốc, khác với 19 ID huấn luyện dùng trong đánh giá. Phần label_mapping chuyển nhãn hợp lệ thành ID lớp liên tục 0–18, đồng thời gán 255 cho các nhãn bị bỏ qua và void để loại chúng khỏi loss và metric trong quá trình huấn luyện và validation.

  • Không. Cityscapes được phát hành theo giấy phép phi thương mại, cho phép nghiên cứu học thuật, giảng dạy và đánh giá nhưng cấm sử dụng thương mại, cấp phép hoặc bán dataset hay sản phẩm phái sinh. Liên hệ trực tiếp với nhóm Cityscapes để tìm hiểu các lựa chọn cấp phép thương mại.

Bình luận