(27)语义分割--cityscape数据集的读取和使用

本文档详细介绍了如何使用torch自带的dataset读取和分析CityScapes数据集,包括数据集的下载、目录结构、读取样本的尺寸以及图片和标签的对应关系,适用于深度学习中的语义分割任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、主要参考

(1)

图像分割cityscape数据集使用介绍 - 知乎

(2)torchvision支持很多现成的数据集

Datasets — Torchvision 0.13 documentation

 。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。

2、下载

 (1)找到CityScape他们家的主页,印象中要用.edu的邮箱注册比较好,注册后登录下载,而且好像迅雷无法直接下载。

(2)东西比较多,下载这两个文件就行,反正挺大的。

3、文件的结构

### 基于Cityscapes数据集的2024年语义分割模型代码 对于Cityscapes数据集上的最新语义分割模型,近年来的研究主要集中在提高推理速度的同时保持高精度。以下是基于当前研究趋势的一个推荐方案及其代码实现。 #### 推荐模型:改进版BiSeNet V2 BiSeNet系列因其高效的实时性能而广受关注。最新的版本(如BiSeNet V2)进一步优化了结构设计,在减少参数数量的情况下提升了准确性[^1]。该模型特别适合用于Cityscapes这样的街景图像分割任务。 以下是一个简单的PyTorch实现框架: ```python import torch import torch.nn as nn from torchvision import models class BiSeNetV2(nn.Module): def __init__(self, num_classes=19): super(BiSeNetV2, self).__init__() # 定义空间路径 (Spatial Path) self.spatial_path = nn.Sequential( nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2, padding=1) ) # 加载预训练的ResNet作为上下文路径的基础 resnet = models.resnet18(pretrained=True) modules = list(resnet.children())[:-2] self.context_path = nn.Sequential(*modules) # 融合模块 self.fusion_conv = nn.Conv2d(512, 128, kernel_size=1, stride=1) # 输出分类器 self.classifier = nn.Sequential( nn.Dropout(p=0.1), nn.Conv2d(128, num_classes, kernel_size=1) ) def forward(self, x): spatial_out = self.spatial_path(x) context_out = self.context_path(x) # 上采样并融合特征 fusion_out = torch.cat([spatial_out, nn.functional.interpolate(context_out, size=spatial_out.size()[2:], mode='bilinear', align_corners=False)], dim=1) fusion_out = self.fusion_conv(fusion_out) output = self.classifier(fusion_out) output = nn.functional.interpolate(output, size=x.size()[2:], mode='bilinear', align_corners=False) return output ``` 此代码片段展示了如何构建一个简化版的BiSeNet V2架构。实际应用中可能还需要调整超参数、加入更多复杂的注意力机制或轻量化策略以适应具体需求。 #### 数据加载与预处理 为了高效利用Cityscapes数据集,通常会自定义`Dataset`类来进行数据增强标准化处理[^3]。例如: ```python from torch.utils.data import Dataset, DataLoader from PIL import Image import os class CityScapesDataset(Dataset): def __init__(self, root_dir, split="train", transform=None): self.root_dir = root_dir self.split = split self.transform = transform self.image_paths = sorted(os.listdir(os.path.join(root_dir, 'leftImg8bit', split))) self.label_paths = sorted(os.listdir(os.path.join(root_dir, 'gtFine', split))) def __len__(self): return len(self.image_paths) def __getitem__(self, idx): img_name = self.image_paths[idx] label_name = self.label_paths[idx] image = Image.open(os.path.join(self.root_dir, 'leftImg8bit', self.split, img_name)).convert('RGB') label = Image.open(os.path.join(self.root_dir, 'gtFine', self.split, label_name)) if self.transform is not None: image = self.transform(image) label = self.transform(label) return image, label ``` 上述代码提供了基本的数据读取逻辑,并支持多种模式下的灵活切换。 #### 训练流程概览 在完成模型定义数据准备之后,可以通过标准的深度学习训练循环来优化模型权重。值得注意的是,现代方法往往采用混合数据集训练技术以提升泛化能力[^2],同时结合更先进的正则化手段防止过拟合。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值