Dataset之Cityscapes:语义城市景观分割数据集Cityscapes的简介、下载及使用方法详解

CSDN 2024-09-09 11:01:02 阅读 57

Cityscapes 数据集是一个非常重要且广泛使用的数据集,主要用于自动驾驶和计算机视觉研究。通过本文的介绍,你不仅了解了 Cityscapes 数据集的简介,还掌握了安装和使用该数据集的方法。希望这篇博客能帮助你在未来的项目中高效地使用 Cityscapes 数据集。

在这里插入图片描述


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:<code>gylzbk)

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

Dataset之Cityscapes:语义城市景观分割数据集Cityscapes的简介、下载及使用方法详解

简介数据集结构应用领域

安装注册和下载文件结构安装依赖

使用方法数据预处理加载数据读取图像和标签

数据增强和批处理深度学习模型训练示例:使用 TensorFlow 进行训练

结论

简介

Cityscapes 是一个用于语义城市景观分割的广泛使用的数据集。它包含从50个不同城市采集的高分辨率图像,主要用于自动驾驶和计算机视觉研究。Cityscapes 数据集的主要任务是对城市场景中的每个像素进行分类,从而实现图像的逐像素注释。它提供了丰富的标签,包括道路、人行道、建筑物、交通标志、行人、车辆等。

在这里插入图片描述

数据集结构

Cityscapes 数据集包括以下几种文件:

彩色图像:这些是城市街景的实际图像。实例分割标签:每个实例的像素级标注。语义分割标签:每个类的像素级标注。散布式标注文件:包括训练、验证和测试集。

数据总量:

2975 张训练图像500 张验证图像1525 张测试图像

应用领域

语义分割实例分割自动驾驶计算机视觉研究与开发

安装

Cityscapes 数据集因为其大规模的数据量,不直接通过pip等包管理工具安装。你需要先注册并下载数据集。以下是详细的步骤:

注册和下载

注册:首先,你需要在 Cityscapes官网 上注册一个账号。登录:使用注册的账号登录官网。下载:登录后,你可以选择需要的数据集进行下载,如原始图像、标注文件等。数据集较大,请确保有足够的存储空间。

文件结构

下载完成后,解压后的文件结构通常如下:

<code>cityscapes/

├── gtFine/

│ ├── train/

│ ├── val/

│ └── test/

└── leftImg8bit/

├── train/

├── val/

└── test/

gtFine 目录包含标注好的图像(详细标注)。leftImg8bit 目录包含原始的高分辨率图像。

安装依赖

在使用数据集之前,请确保安装了以下主要依赖项:

pip install numpy matplotlib opencv-python

使用方法

数据预处理

加载和处理 Cityscapes 数据集通常涉及读取图像和标签、对其进行预处理并转换为适合模型训练的数据格式。下面是一个简单的示例,展示如何加载和处理 Cityscapes 数据集。

加载数据

import os

import cv2

import numpy as np

import matplotlib.pyplot as plt

# 数据根目录路径

ROOT_DIR = 'path/to/cityscapes/'

# 训练图像和标注路径

TRAIN_IMG_DIR = os.path.join(ROOT_DIR, 'leftImg8bit/train/')

TRAIN_LABEL_DIR = os.path.join(ROOT_DIR, 'gtFine/train/')

# 示例:列出某个城市的所有图像和标签

city = 'berlin'

img_paths = os.listdir(os.path.join(TRAIN_IMG_DIR, city))

label_paths = os.listdir(os.path.join(TRAIN_LABEL_DIR, city))

读取图像和标签

def load_image(image_path):

return cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2RGB)

def load_label(label_path):

return cv2.imread(label_path, cv2.IMREAD_GRAYSCALE)

# 示例:读取一张图像和相应的标签

img_path = os.path.join(TRAIN_IMG_DIR, city, img_paths[0])

label_path = os.path.join(TRAIN_LABEL_DIR, city, label_paths[0])

image = load_image(img_path)

label = load_label(label_path)

# 显示图像和标签

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)

plt.title('Image')

plt.imshow(image)

plt.subplot(1, 2, 2)

plt.title('Label')

plt.imshow(label, cmap='gray')code>

plt.show()

数据增强和批处理

在实际训练中,为了提高模型的泛化能力,通常会对图像进行数据增强。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 定义数据增强器

datagen = ImageDataGenerator(

rotation_range=10, # 随机旋转角度

width_shift_range=0.1, # 水平平移

height_shift_range=0.1, # 垂直平移

shear_range=0.1, # 随机错切变换

zoom_range=0.1, # 随机缩放

horizontal_flip=True, # 随机水平翻转

fill_mode='nearest' # 填充模式code>

)

# 示例:应用数据增强

image_aug = next(datagen.flow(np.expand_dims(image, 0)))[0].astype(np.uint8)

# 显示增强后的图像

plt.figure(figsize=(6, 6))

plt.title('Augmented Image')

plt.imshow(image_aug)

plt.show()

深度学习模型训练

在这部分,我们将展示如何使用深度学习框架(如 TensorFlow / PyTorch)对 Cityscapes 数据集进行语义分割模型的训练。

示例:使用 TensorFlow 进行训练

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Conv2D, MaxPooling2D, UpSampling2D

# 定义简单的卷积神经网络

def create_model(input_shape):

model = Sequential()

model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=input_shape))code>

model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))code>

model.add(MaxPooling2D((2, 2)))

model.add(UpSampling2D((2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))code>

model.add(UpSampling2D((2, 2)))

model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))code>

model.add(Conv2D(1, (1, 1), activation='sigmoid', padding='same'))code>

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])code>

return model

# 创建模型

model = create_model(input_shape=(256, 256, 3))

# 打印模型架构

model.summary()

由于完整的 Cityscapes 数据集非常大,训练整个数据集需要大量的硬件资源和时间。为了示例,我们只展示一个简单的训练步骤。

# 假设我们已经有一个图像和对应的标签

image_resized = cv2.resize(image, (256, 256))

label_resized = cv2.resize(label, (256, 256))

# 扩展维度以适应模型输入

image_resized = np.expand_dims(image_resized, axis=0)

label_resized = np.expand_dims(label_resized, axis=0)

label_resized = np.expand_dims(label_resized, axis=-1)

# 训练模型

model.fit(image_resized, label_resized, epochs=5)

结论

Cityscapes 数据集是一个非常重要且广泛使用的数据集,主要用于自动驾驶和计算机视觉研究。通过本文的介绍,你不仅了解了 Cityscapes 数据集的简介,还掌握了安装和使用该数据集的方法。希望这篇博客能帮助你在未来的项目中高效地使用 Cityscapes 数据集。Happy coding!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。