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