news 2026/4/19 0:31:33

【实战部署指南】DDRNet 从零到一:Cityscapes 数据集训练、测试与自定义数据迁移全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【实战部署指南】DDRNet 从零到一:Cityscapes 数据集训练、测试与自定义数据迁移全流程解析

1. 环境准备与工程部署

第一次接触DDRNet时,我被它的实时语义分割能力惊艳到了。这个由哈尔滨工业大学团队提出的轻量级网络,在保持高精度的同时还能达到实时推理速度,特别适合需要快速响应的场景。不过在实际部署过程中,确实遇到了不少需要手动调整的地方,这里把我踩过的坑都整理出来。

1.1 硬件与软件环境配置

推荐使用Ubuntu 18.04或20.04系统,搭配NVIDIA显卡驱动版本≥450。我实测过RTX 2080Ti和RTX 3090都能完美运行。软件依赖方面,需要准备:

  • Python 3.7+(建议使用conda管理环境)
  • PyTorch 1.7+(与CUDA版本匹配)
  • OpenCV 4.0+(用于图像处理)
  • Apex混合精度库(可选但推荐)

安装基础依赖的命令如下:

conda create -n ddrnet python=3.8 -y conda activate ddrnet pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html pip install opencv-python tqdm pyyaml

1.2 工程获取与结构调整

官方提供了两个代码仓库:

  1. 原始论文实现(仅含预训练模型):https://github.com/ydhongHIT/DDRNet
  2. 社区增强版(完整训练代码):https://github.com/chenjun2hao/DDRNet.pytorch

建议采用第二个仓库作为基础,下载后重命名为DDRNet_project。然后将第一个仓库中的预训练模型(如ddrnet23slim_cityscapes.pth)放入pretrained_models目录。

文件目录建议这样组织:

├── Datasets │ ├── cityscapes │ └── custom_data └── Projects ├── DDRNet_project └── other_projects

2. Cityscapes数据集测试实战

2.1 数据准备与预处理

Cityscapes数据集需要官网注册下载(约70GB),包含5000张精细标注的城市街景图。下载后解压到Datasets/cityscapes目录,结构应为:

cityscapes ├── gtFine │ ├── train │ ├── val │ └── test └── leftImg8bit ├── train ├── val └── test

2.2 关键代码修改点

在测试预训练模型时,有几个必须修改的地方:

  1. 修改ddrnet_23_slim.yaml
DATASET: TEST_SET: 'test.lst' # 必须包含"test"关键字 TEST: MODEL_FILE: 'pretrained_models/ddrnet23slim_cityscapes.pth'
  1. 调整demo.py避免多GPU报错:
# 注释掉分布式相关代码 # torch.cuda.set_device(args.local_rank) # torch.distributed.init_process_group(...)
  1. 重写function.py中的test函数:
def test(config, test_dataset, testloader, model): # 添加自定义颜色映射 COLOR = [(0,0,0), (128,64,128), ...] # 19类Cityscapes标准色 ... # 修改结果保存逻辑 cv2.imwrite(os.path.join(sv_path, name[0]+".png"), blended_img)

2.3 运行测试命令

单GPU测试示例:

export CUDA_VISIBLE_DEVICES=0 python tools/demo.py --cfg experiments/cityscapes/ddrnet23_slim.yaml

测试结果会保存在output/cityscapes/ddrnet23_slim/test_results下,包含原图、分割结果和叠加效果。

3. Cityscapes完整训练流程

3.1 训练配置调整

  1. 修改ddrnet23_slim.yaml
DATASET: ROOT: '/path/to/Datasets/cityscapes' TEST_SET: 'val.lst' # 训练时需改回验证集 TRAIN: BATCH_SIZE_PER_GPU: 8 BASE_LR: 0.01
  1. 分布式训练参数:
GPUS: (0,1) # 仅表示GPU数量,实际ID由命令行指定

3.2 启动训练

双卡训练示例:

export CUDA_VISIBLE_DEVICES=2,3 python -m torch.distributed.launch --nproc_per_node=2 tools/train.py --cfg experiments/cityscapes/ddrnet23_slim.yaml

训练过程中会输出各类指标:

  • mIoU:平均交并比(目标0.75+)
  • Loss:建议观察验证集损失
  • Speed:FPS(RTX 3090约45fps)

3.3 训练技巧

  1. 学习率策略:初始0.01,每40epoch衰减0.1
  2. 数据增强:随机缩放(0.5-2.0)、水平翻转
  3. 早停机制:验证集mIoU连续3epoch不提升时停止

4. 自定义数据集迁移指南

4.1 数据准备规范

自定义数据集需按以下结构组织:

custom_data ├── images │ ├── train │ ├── val │ └── test └── labels ├── train ├── val └── test

同时需要准备三个列表文件:

  • train.lst:格式images/train/001.jpg labels/train/001.png
  • val.lst:同上格式
  • test.lst:测试集列表

4.2 核心代码适配

  1. 新建数据集类(以custom.py为例):
class CustomDataset: def __init__(self): self.mean = [0.485, 0.456, 0.406] # 自定义均值 self.std = [0.229, 0.224, 0.225] # 自定义方差 self.label_mapping = {0:0, 1:1,...} # 标签映射 self.class_weights = [1.0, 2.0,...] # 类别权重
  1. 修改模型文件:
# 在ddrnet_23_slim.py中 num_classes = cfg.DATASET.NUM_CLASSES # 替换固定值19
  1. 配置文件调整:
DATASET: NAME: 'custom' NUM_CLASSES: 10 # 自定义类别数 ROOT: '/path/to/custom_data' MODEL: PRETRAINED: '' # 从头训练置空

4.3 迁移训练建议

  1. 小数据策略:
  • 冻结骨干网络初始层
  • 使用更强的数据增强
  • 减小batch size(建议≥4)
  1. 混合精度训练:
python -m torch.distributed.launch --nproc_per_node=2 --amp tools/train.py --cfg experiments/custom.yaml
  1. 微调技巧:
  • 初始学习率降低10倍(如0.001)
  • 仅训练最后3个模块
  • 使用标签平滑正则化

实际项目中,我在一个包含8类的工业缺陷数据集上实现了0.82mIoU,推理速度保持在35fps(RTX 2080Ti)。关键是要确保标注质量,特别是边缘细节的准确性。数据增强方面,随机旋转和颜色抖动对提升泛化能力效果显著。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 0:31:32

从零搭建AI开发环境:Anaconda、PyTorch与PyCharm一站式配置指南

1. 环境准备:从硬件到软件的全面检查 第一次配置AI开发环境时,我踩过不少坑。最惨的一次是装完所有软件才发现显卡驱动不兼容,不得不全部重装。为了避免你们重蹈覆辙,我们先从硬件检查开始。 首先确认你的Windows电脑是否配备NVID…

作者头像 李华
网站建设 2026/4/19 0:27:07

TS概率预测系统(TS-PFS)白皮书

TS概率预测系统(Probabilistic Forecasting System)白皮书—— 不确定性下的智能决策引擎技术支持:拓世网络技术开发部适用领域v1.0 2026-04-18 AI Technical Architecture Group 金融风控 / 供应链 / B2B销售 / 工业物联网摘要传统预测系统输…

作者头像 李华
网站建设 2026/4/19 0:17:00

具身Agent:从数字世界走向物理世界的下一跃

我将为您创建一篇关于具身Agent的深度技术博客。这是一个引人入胜的主题,涉及AI从数字世界向物理世界的重要转变。 具身Agent:从数字世界走向物理世界的下一跃 关键词 具身认知、人工智能、机器人学、传感器融合、物理交互、自主系统、人机协作 摘要 本文深入探讨具身Ag…

作者头像 李华
网站建设 2026/4/19 0:14:24

深度学习篇---变长序列维度处理

处理变长序列是时序预测中的一个核心工程挑战。现实中的数据(如金融交易流水、传感器日志、用户行为序列)天然就是长短不一的,但深度学习模型(特别是利用GPU并行计算时)要求输入必须是规整的张量。针对这个问题&#x…

作者头像 李华