所有代码,数据集和模型下载地址:https://github.com/wangye707/ICNet-paddlepaddle
本博客主要做部分内容讲解
1.数据集介绍以及预处理
1.1数据集介绍
上图中左侧为航拍原图,右侧为标签(类别标签 像素值分别为 0,1,2,3,4,所以人的肉眼不能够分辨出区别,本文对标签进行可 视化处理 (实际训练中不做可视化处理),植被用绿色,道路用黑色,建筑用灰色, 水体用蓝色,以及其背景用白色标注)
1.2 图片裁剪、镜像和旋转
裁剪:
镜像和选装:
2.代码执行过程
2.1 环境说明
本次采用的深度学习环境为飞桨(paddlepaddle),神经网络模型采用ICNet,相关核心依赖包的版本关系为:
- numpy == 1.18.1
- opencv-python == 4.2.0.32
- paddlepaddle-gpu == 1.7.1.post97
- pandas == 0.25.3
注意:操作系统尽量采用linux。
2.2 执行方式
执行方式请参考我的github:https://github.com/wangye707/ICNet-paddlepaddle
各位如果觉得有用的话麻烦点个 star,感谢!有问题也可以在Issues下留言。
1.下载代码:
git clone https://github.com/wangye707/ICNet-paddlepaddle.git
2.进入到ICNet-paddlepaddle目录下(为了方便观看,本次在windows目录下进行,实际路径为linux下)
开始把百度云中下载的数据集放过来
如果您也下载了已经训练的模型,并且想再用默认的模型路径,请先手动新建 chkpnt文件夹,然后放入即可,如下图所示:
3.执行代码:
1.图片裁剪
python preprocess.py
2.训练神经网络
简化版本,均使用默认参数请执行:
python train.py
指定参数请执行:
python train.py --batch_size=64 --checkpoint_path=chkpnt --init_model=chkpnt/1000 --use_gpu=True
说明:checkpoint_path: 模型将保存的路径,默认为10000步保存一次。
init_model: 预训练模型的路径,本次没有给出预训练模型。
模型恢复训练方式: 指定最新的模型路径来恢复训练,记得修改当
前迭代步数以保证正常训练(如在1000步时终止
,记得修改迭代步数从1000开始,而不是默认参数0)
3.评估网络模型
python eval.py --model_path=chkpnt/400000
说明:model_path是指定的模型文件路径
4.通过已训练完成的网络模型预测图片
直接预测:
python infer1.py --model_path=chlpnt/400000 --images_path=/dataset/origin/5.png
膨胀预测优化(推荐使用):
python infer_exp.py --model_path=chlpnt/400000 --images_path=/dataset/origin/5.png
3.后期优化
3.1 膨胀预测:
膨胀预测的主要思想是每次预测仅仅保留图片的中心部分,其余地方舍弃,而舍 弃的地方通过滑动切割的思想也会成为其他预测图的中心区域,该方法避免因边界的 特征提取问题而产生拼接痕接,影响最终分割效果。膨胀预测主要思想如图 3.13 所 示,填充一倍的边框来确保膨胀预测时保留中心区域,以 256*256 为滑动窗口大小, 每次保留中心的 128*128,步长设置为 128。通过此膨胀预测,使得航拍图片最终拼 接无痕,提升庞大尺寸图片的分割效果。(执行方式在上面有提到)
膨胀预测结果展示:
3.2 图片融合
参考代码:https://blog.csdn.net/qq_28626909/article/details/105569221
3.3 指定信息输出