从零开始:DeepLabV3+在Cityscapes数据集上的完整训练流程
1. 环境准备与数据下载第一次接触DeepLabV3和Cityscapes数据集时我被这个组合的潜力所吸引——它能精准识别街景中的车辆、行人、建筑物等元素就像给计算机装上了透视眼。但真正开始实操时发现从环境搭建到数据处理的每个环节都有不少细节需要注意。Cityscapes数据集需要从官网注册下载建议直接选择leftImg8bit_trainvaltest.zip11GB和gtFine_trainvaltest.zip241MB这两个核心文件。下载速度可能较慢我用axel多线程下载器能提速3倍axel -n 8 https://www.cityscapes-dataset.com/file-handling/?packageID1预训练模型建议选择Xception65 backbone的版本这个在官方Model Zoo里标注为Cityscapes fine-tuned的模型。我测试发现用这个初始化比随机初始化训练快2倍以上最终mIoU能提升约5个百分点。下载后记得用tar命令解压tar -xzvf deeplabv3_cityscapes_train_2018_02_06.tar.gz目录结构建议按这个方式组织后续脚本调用会非常方便~/cityscapes_project ├── datasets │ ├── leftImg8bit # 原始图像 │ └── gtFine # 标注文件 ├── scripts # cityscapesScripts └── pretrained # 预训练模型2. 数据预处理实战技巧原始Cityscapes标注是JSON格式的需要转换成DeepLabV3能读取的PNG标注图。这里有个坑官方脚本默认生成的标签是33类的但实际训练只需要19类。我修改了createTrainIdLabelImgs.py中的标签映射规则# 在cityscapesScripts/helpers/labels.py中修改 trainId2label { 0: Label(road, 0, 0, flat, True, True, True), # ...保留前19个有效类别 255: Label(void, 255, 255, void, False, False, True) }生成TFRecord时最容易卡在内存不足。我的经验是分批次处理修改convert_cityscapes.sh中的并行参数# 原命令会OOM改为每次处理8张 NUM_PROCESSES8转换完成后检查生成的TFRecord文件大小是否正常。正常情况每个train_fine-xxxxx-of-00010文件约200MB如果发现文件特别小可能是标签转换出了问题。3. 模型训练参数详解训练命令看着简单但每个参数都影响最终效果。这是我调整多次后的黄金配置python deeplab/train.py \ --training_number_of_steps30000 \ # Cityscapes需要更长训练 --train_batch_size8 \ # 显存12G可用此值 --base_learning_rate0.007 \ # 比默认值更稳定 --fine_tune_batch_normtrue \ # 小批量时务必开启 --initialize_last_layerfalse # 避免破坏预训练特征几个关键调整点学习率策略Cityscapes场景复杂我用余弦退火cosine_decay比阶梯式下降效果更好数据增强在input_preprocess.py中添加随机亮度调整delta0.2和饱和度缩放0.9-1.1损失函数原版交叉熵损失在困难样本上表现不佳可尝试添加OHEM模块用TensorBoard监控时重点看这些曲线mIoU验证集上的均值交并比超过0.7说明训练有效total_loss稳定下降且无剧烈波动learning_rate正常呈平滑变化曲线4. 验证与可视化进阶验证阶段最容易遇到的报错是Unknown split name。这是因为新版本代码规范了数据划分命名必须使用--eval_splitval_fine # 不是val或validation可视化时有个实用技巧修改vis.py中的add_colormap函数让输出更接近Cityscapes官方配色def _cityscapes_palette(): return np.array([ [128, 64,128], # road [244, 35,232], # sidewalk [ 70, 70, 70], # building # ...其他类别配色 ], dtypenp.uint8)遇到预测结果边缘锯齿严重的情况可以在model.py中增大atrous_rates为[6,12,18,24]测试时使用多尺度融合测试时增强后处理用CRF细化边缘5. 常见问题排查手册问题1训练初期loss为NaN检查数据归一化Cityscapes像素值应除以255.0降低初始学习率到0.001试运行100步确认标注图中没有异常值全0或全255问题2验证mIoU始终为0检查eval.py和train.py的--model_variant是否一致确认验证集路径包含gtFine/val目录在datasets/cityscapes.py中核对num_classes参数问题3GPU显存不足减小train_crop_size到513x513使用--batch_norm_decay0.9减轻显存压力尝试NVIDIA Apex混合精度训练实际项目中我发现用DeepLabV3处理1024x2048分辨率图像时Xception65在2080Ti上batch_size只能设到2。后来改用MobileNetV2作为backbone在保持80%精度的同时batch_size能提升到8训练速度加快3倍。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450519.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!