使用神经网络(ICNet)对航拍图片(遥感图像)进行图像语义分割(数据集+代码+最终训练模型)

所有代码,数据集和模型下载地址: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 指定信息输出

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章