Cityscapes数据集下载与使用全指南:从零开始掌握计算机视觉基准数据

1次阅读
没有评论

共计 2590 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

背景介绍

Cityscapes 数据集是计算机视觉领域,尤其是自动驾驶和场景理解任务中最常用的基准数据集之一。它包含了从 50 个不同城市采集的高质量街景图像,涵盖了各种天气条件和季节变化。数据集提供了精细的像素级标注,支持语义分割、实例分割和全景分割等多种任务。对于刚入门计算机视觉的新手来说,掌握 Cityscapes 数据集的使用是迈向实际项目开发的重要一步。

Cityscapes 数据集下载与使用全指南:从零开始掌握计算机视觉基准数据

下载指南

官方 vs 镜像源速度对比

直接从 Cityscapes 官网下载数据集可能会遇到速度慢的问题,特别是对于国内用户。这时可以考虑使用镜像源:

  • 官方源:https://www.cityscapes-dataset.com/
  • 国内镜像:一些高校和云服务提供商可能有镜像

实际测试中,国内用户使用镜像源通常能获得 5 -10 倍的下载速度提升。

断点续传技巧

对于大文件下载,推荐使用支持断点续传的工具:

  1. 使用 wget 下载(支持断点续传)

    wget -c https://example.com/cityscapes.tar.gz

  2. 使用 aria2c(多线程下载,速度更快)

    aria2c -x16 -s16 -c https://example.com/cityscapes.tar.gz

文件校验方法

下载完成后,务必验证文件完整性:

  1. 使用 MD5 校验

    md5sum cityscapes.tar.gz

  2. 或者使用 SHA1

    sha1sum cityscapes.tar.gz

将输出与官方提供的校验值对比,确保文件完整无误。

数据结构解析

目录树说明

解压后的 Cityscapes 数据集通常包含以下主要目录:

  • leftImg8bit:包含原始 RGB 图像
  • train
  • val
  • test
  • gtFine:精细标注
  • train
  • val
  • test
  • gtCoarse:粗略标注(可选)

标注格式详解

Cityscapes 的标注使用 JSON 格式存储,包含以下关键信息:

  • objects:场景中的各种对象
  • polygons:对象的边界多边形
  • labels:对象的类别标签

实战代码

使用 OpenCV 加载并可视化语义分割标注

import cv2
import numpy as np
from cityscapesscripts.helpers.labels import trainId2label

def visualize_segmentation(img_path, label_path):
    # 加载原始图像
    img = cv2.imread(img_path)

    # 加载标注图像
    label = cv2.imread(label_path, cv2.IMREAD_GRAYSCALE)

    # 创建彩色标注图像
    colored_label = np.zeros((label.shape[0], label.shape[1], 3), dtype=np.uint8)

    for train_id, label_info in trainId2label.items():
        if label_info.ignoreInEval:
            continue
        colored_label[label == train_id] = label_info.color

    # 混合显示
    blended = cv2.addWeighted(img, 0.7, colored_label, 0.3, 0)
    cv2.imshow('Segmentation', blended)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

将 Cityscapes 转换为 COCO 格式

import json
import os
from pathlib import Path
from typing import Dict, List

class CityscapesToCOCOConverter:
    def __init__(self, cityscapes_root: str, output_path: str):
        self.cityscapes_root = Path(cityscapes_root)
        self.output_path = Path(output_path)
        self.coco_data = {"images": [],
            "annotations": [],
            "categories": []}

    def convert(self):
        try:
            self._create_categories()
            self._process_images()
            self._save_coco()
        except Exception as e:
            print(f"Conversion failed: {str(e)}")
            raise

    def _create_categories(self):
        # 实现类别转换逻辑
        pass

    def _process_images(self):
        # 实现图像处理逻辑
        pass

    def _save_coco(self):
        with open(self.output_path, 'w') as f:
            json.dump(self.coco_data, f)

避坑指南

内存优化技巧

Cityscapes 图像分辨率很高(2048×1024),处理时容易内存溢出:

  1. 使用生成器 (Generator) 而非一次性加载所有图像
  2. 适当降低图像分辨率(但要注意保持长宽比)
  3. 使用内存映射文件处理大数组

常见标签映射错误

  • 混淆 trainId 和 id:trainId 用于训练,id 用于可视化
  • 忽略 ignoreInEval 标签:这些标签在评估时应被忽略

多 GPU 训练时的数据分片策略

  1. 使用 DistributedSampler 确保每个 GPU 获取不同数据
  2. 调整 batch size 时要考虑显存限制
  3. 验证数据在不同 GPU 间的分布是否均衡

延伸思考

开发自定义数据集

  1. 收集与 Cityscapes 相似的街景图像
  2. 使用相同目录结构和标注格式
  3. 确保标注质量与原始数据集相当

与其他数据集联合使用

Cityscapes 可以与 BDD100K、Mapillary 等数据集结合使用:

  1. 统一标注格式
  2. 处理不同数据集的标签差异
  3. 注意不同数据集间的 domain gap

进一步学习资源

  1. Cityscapes 官方文档:https://www.cityscapes-dataset.com/
  2. 相关论文:《The Cityscapes Dataset for Semantic Urban Scene Understanding》
  3. GitHub 上的开源实现:cityscapesScripts

通过本指南,希望你能快速掌握 Cityscapes 数据集的使用方法,在计算机视觉项目中取得好成绩!

正文完
 0
评论(没有评论)