PyTorch 1.13下复现Deeplabv3:搞定Cityscapes数据集下载与预处理(附百度云链接)

张开发
2026/4/18 15:15:14 15 分钟阅读

分享文章

PyTorch 1.13下复现Deeplabv3:搞定Cityscapes数据集下载与预处理(附百度云链接)
PyTorch 1.13实战从零构建Deeplabv3语义分割模型含Cityscapes数据集优化方案当你在PyTorch 1.13环境下打开那个经典的Deeplabv3实现仓库时是否也遇到了满屏的版本警告Cityscapes数据集下载进度条卡在1%的绝望感或是预处理脚本里那些看似简单却让人抓狂的路径配置问题这篇文章将带你完整走通这个技术闭环——从数据集获取到最终训练出第一个可用的语义分割模型。1. 环境配置与版本适配策略PyTorch 1.13带来的新特性让许多老代码需要微调才能完美运行。我们先解决最棘手的版本兼容问题# 验证PyTorch版本 import torch print(fPyTorch版本: {torch.__version__}) # 应显示1.13.x关键依赖版本矩阵组件推荐版本最低要求备注PyTorch1.13.1≥1.10需CUDA 11.6torchvision0.14.1≥0.11匹配PyTorch主版本OpenCV4.6.0≥4.5图像预处理必需Pillow9.3.0≥8.0图像加载依赖注意避免混用conda和pip安装建议统一使用pip安装所有Python包常见的版本冲突通常出现在这两个地方torch.nn.functional.upsample已被torch.nn.functional.interpolate取代torchvision.models.resnet的预训练权重加载方式变更修正方案# 旧代码替换示例 # from torch.nn.functional import upsample from torch.nn.functional import interpolate as upsample # 权重加载方式更新 model.load_state_dict(torch.load(weights_path), strictFalse)2. Cityscapes数据集高效获取方案官方下载需要注册且速度极慢约50GB数据。这里提供三种可靠获取方式方案对比表获取方式速度完整性适用场景官方渠道极慢完整长期研究者百度云镜像快完整国内开发者精简版数据集极快80%样本快速验证推荐使用预处理好的百度云资源提取码hhk0已包含leftImg8bit_trainvaltest.zip和gtFine_trainvaltest.zip文件结构预先整理好解压即可用数据集目录结构应该是cityscapes/ ├── leftImg8bit │ ├── train │ ├── val │ └── test └── gtFine ├── train ├── val └── test重要解压后运行tree -d cityscapes -L 3确认目录层级3. 预处理脚本深度改造指南原版preprocess_data.py需要多处调整才能适配现代PyTorch环境主要修改点路径配置逻辑重构图像处理流程优化并行处理加速关键修改示例# 新路径配置方式支持环境变量 data_root os.getenv(CITYSCAPES_DIR, ./cityscapes) img_dir os.path.join(data_root, leftImg8bit) label_dir os.path.join(data_root, gtFine) # 替换过时的图像处理代码 def process_image(img_path): img cv2.imread(img_path) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 统一色彩空间 return torch.from_numpy(img).permute(2,0,1).float() / 255.0运行预处理# 添加环境变量可选 export CITYSCAPES_DIR./cityscapes # 执行预处理 python utils/preprocess_data.py --num-workers 84. 模型架构的现代化改造Deeplabv3的核心是ResNet骨干网络ASPP模块需要针对PyTorch 1.13做这些调整关键修改文件model/deeplabv3.pyASPP模块更新model/resnet.py适配新版本预训练权重train.py训练循环优化ResNet加载方式改造# 旧版方式已废弃 # from torchvision.models.resnet import resnet50 # 新版推荐 from torchvision.models import resnet50, ResNet50_Weights model resnet50(weightsResNet50_Weights.IMAGENET1K_V2)ASPP模块的现代实现class ASPP(nn.Module): def __init__(self, in_channels, out_channels256): super().__init__() self.conv1 nn.Conv2d(in_channels, out_channels, 1) self.conv2 nn.Conv2d(in_channels, out_channels, 3, padding6, dilation6) # 其他分支... def forward(self, x): return torch.cat([ F.relu(self.conv1(x)), F.relu(self.conv2(x)), # 其他分支输出... ], dim1)5. 训练流程的工业级优化针对Cityscapes数据特点我们需要调整标准训练配置超参数设置建议初始学习率0.01使用线性warmupBatch Size811GB显存优化器SGD with momentum0.9学习率策略多项式衰减训练启动命令python train.py \ --dataset-dir ./cityscapes \ --batch-size 8 \ --epochs 50 \ --lr 0.01 \ --weight-decay 1e-4训练监控技巧使用TensorBoard记录指标每5个epoch保存一次检查点验证集mIoU作为早停依据# 在train.py中添加监控 from torch.utils.tensorboard import SummaryWriter writer SummaryWriter() for epoch in range(epochs): # ...训练代码... writer.add_scalar(Loss/train, loss.item(), epoch) writer.add_scalar(mIoU/val, miou, epoch)6. 可视化与性能评估实战训练完成后使用改进版的visualization工具验证效果创建测试目录结构mkdir -p test_images/{input,output,overlay}修改后的run_on_seq.py核心逻辑def visualize_results(img_path): img load_image(img_path) pred model.predict(img) # 生成带透明度的叠加图 overlay blend_segmentation(img, pred, alpha0.5) # 保存三种输出 cv2.imwrite(ftest_images/input/{os.path.basename(img_path)}, img) cv2.imwrite(ftest_images/output/{os.path.basename(img_path)}, pred) cv2.imwrite(ftest_images/overlay/{os.path.basename(img_path)}, overlay)典型问题排查如果遇到CUDA内存不足torch.cuda.empty_cache()标签映射错误时检查print(np.unique(label.numpy())) # 应该只包含Cityscapes的19类ID在RTX 3060上训练50个epoch约需18小时最终mIoU应达到65%左右。第一个epoch完成后立即验证可以避免浪费计算资源——这是我在多次失败后总结出的宝贵经验。

更多文章