Dataset Cityscapes#
Dataset Cityscapes là một benchmark phân đoạn ngữ nghĩa quy mô lớn về các cảnh đường phố đô thị được ghi lại tại 50 thành phố châu Âu, gồm 2.975 ảnh huấn luyện được gán nhãn 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 cho nghiên cứu xe tự hành và nhận thức cảnh đô thị với các model Ultralytics YOLO.
Tính năng chính#
- Các annotation 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 cung cấp 1.525 ảnh test, nhưng các mask được phát hành của chúng chỉ gán nhãn xe chủ thể và đường viền ảnh — annotation thực tế của các lớp bị giữ lại, và để có điểm số chính thức trên test set, cần gửi prediction tới server đánh giá Cityscapes.
- Dataset bao phủ 19 lớp đánh giá, trải rộng qua các nhóm flat, human, vehicle, construction, object, nature và sky.
- Cityscapes cung cấp các metric đánh giá được chuẩn hóa 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 của các model.
- Trước khi bắt đầu tải xuống thủ công ~11 GB, hãy kiểm tra nhanh pipeline huấn luyện của bạn với subset Cityscapes8 gồm 8 ảnh.
Cấu trúc bộ dữ liệu#
Cấu hình Ultralytics yêu cầu layout sau khi chuẩn bị như sau:
cityscapes/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── masks/
├── train/
├── val/
└── test/Cityscapes không hỗ trợ tự động tải archive. Hãy 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 ~11 GB), rồi giải nén cả hai vào thư mục gốc dataset cityscapes. Ultralytics sẽ tự động sắp xếp lại chúng theo layout images/ và masks/ nêu trên trong lần đầu tiên bạn huấn luyện.
Các mask ngữ nghĩa là các file PNG một kênh. ID label gốc của Cityscapes được ánh xạ sang 19 train ID tiêu chuẩn thông qua section label_mapping, còn các label 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á.
Các mask gtFine/test được phát hành công khai chỉ gán nhãn vùng xe chủ thể và đường viền ảnh — mọi lớp khác đều là void. Hãy tính mIoU trên split val để đánh giá cục bộ; để có điểm số chính thức trên test set, cần gửi prediction tới server đá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 lĩnh vực phân đoạn ngữ nghĩa, đặc biệt cho xe tự hành, các hệ thống hỗ trợ người lái nâng cao (ADAS) và robot đô thị.
Các ảnh độ phân giải cao và annotation chi tiết của dataset cũng khiến nó trở nên hữu ích cho nghiên cứu về phân tích cảnh theo thời gian thực, nhận thức làn đường và chướng ngại vật, cũng như mọi tác vụ yêu cầu khả năng hiểu dày đặc ở cấp pixel trong các môi trường đô thị phức tạp. Các model phân đoạn ngữ nghĩa YOLO26 được pretrained đạt tới 83.6 mIoU trên validation set của Cityscapes — xem trang model phân đoạn ngữ nghĩa để biết bảng benchmark đầy đủ. Bạn có thể tổ chức, trực quan hóa và quản lý dữ liệu Cityscapes trong suốt quy trình phát triển model bằng Ultralytics Platform.
YAML của bộ dữ liệu#
File YAML của dataset định nghĩa các path, class, thư mục mask và mapping label của Cityscapes. File cityscapes.yaml được duy trì tại https://github.com/ultralytics/ultralytics/blob/main/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ể sử dụng các đoạn code sau. Để xem danh sách đầy đủ các argument khả dụng, hãy tham khảo trang Training của model.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
# Train the 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 yêu cầu sự cho phép riêng từ nhóm Cityscapes.
Nếu sử dụng dataset Cityscapes trong công việc nghiên cứu hoặc phát triển, vui lòng trích dẫn bài báo sau:
@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 ra và duy trì tài nguyên giá trị 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à các tác giả, hãy truy cập website dataset Cityscapes.
FAQ#
Dataset Cityscapes là một benchmark phân đoạn ngữ nghĩa quy mô lớn về các 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. 19 lớp đánh giá được gán nhãn chi tiết, hình ảnh độ phân giải cao và metric Intersection over Union trung bình được chuẩn hóa (mIoU) khiến nó trở thành một trong những benchmark được trích dẫn nhiều nhất cho các 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ể sử dụng các đoạn code sau. Để xem danh sách chi tiết các argument khả dụng, hãy tham khảo trang Training của model.
Ví dụ huấn luyệnfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="cityscapes.yaml", epochs=100, imgsz=1024)Sau khi chuẩn bị, dataset được tổ chức thành các thư mục
images/{train,val,test}/vàmasks/{train,val,test}/, trong đó mỗi ảnh đi kèm một mask PNG một kênh. File YAML của Ultralytics ghép mỗi ảnh với mask tương ứng thông qua fieldmasks_dir: masksvà sử dụnglabel_mappingđể chuyển ID label gốc của Cityscapes thành 19 train ID liên tiếp tiêu chuẩn, đồng thời ánh xạ các label bị bỏ qua và void sang255. Các mask trong splittestchỉ gán nhãn vùng xe chủ thể và đường viền, vì vậy hãy sử dụngvalđể kiểm tra mIoU cục bộ.Có. Hãy tạo tài khoản trên website Cityscapes và tải các archive
leftImg8bit_trainvaltest.zipvàgtFine_trainvaltest.zip(tổng cộng ~11 GB). Giải nén cả hai vào thư mục gốc datasetcityscapes— Ultralytics sẽ tự động sắp xếp lại chúng theo layoutimages/vàmasks/dự kiến trong lần đầu tiên bạn huấn luyện.Các mask nguồn của Cityscapes lưu ID label gốc, khác với 19 train ID được sử dụng để đánh giá. Section
label_mappingchuyển các label hợp lệ thành các class ID liên tiếp0–18và gán255cho các label 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 các sản phẩm phái sinh. Hãy liên hệ trực tiếp với nhóm Cityscapes để biết các lựa chọn cấp phép thương mại.