毕业设计 U-Net遥感图像语义分割(源码+论文)

article/2025/8/18 4:07:35

文章目录

  • 0 项目说明
  • 1 研究目的
  • 2 研究方法
  • 3 研究结论
  • 4 论文目录
  • 5 项目源码
  • 6 最后


0 项目说明

**基于 U-Net 网络的遥感图像语义分割 **

提示:适合用于课程设计或毕业设计,工作量达标,源码开放

实验训练使用 Anaconda 版 Python 3.7 下的 TensorFlow-GPU1.8
后期图像生成由于 GPU 显存限制,使用 TensorFlow 的 CPU 版本进行计算预测图计算。


1 研究目的

U-Net 是一种由全卷积神经网络启发的对称结构网络,在医疗影像分割领域取得了很好的效果。 此次研究尝试使用 U-Net 网络在对多光谱遥感影像数据集上进行训练,尝试使用卷积神经网络自动分割出建筑,希望能够得到一种自动分割遥感影像的简便方法。

2 研究方法

首先提出了一种基于遥感图像类别比率的交叉熵损失函数——类别平衡交叉熵。并与应用于医疗图像分割的 U-Net 相结合,将其应用于遥感图像语义分割。

在 Inria Aerial Image Labeling Dataset 训练数据集上分别使用交叉熵损失函数和类别平衡交叉熵损失函数进行训练,得到两个训练好的卷积神经网络。再利用这两个网络在 Inria Aerial Image Labeling Dataset 测试数据集上生成预测图像进行比对。

3 研究结论

两种方法在正确率和交叉熵上没有太大差别,以交叉熵作为损失函数略优于以类别平衡交叉熵方法。但是这两种方法在F1 Score 上有较大差别。交叉熵的 F1 Score 为 0.47,类别平衡交叉熵的F1 Score 为 0.51,类别平衡交叉熵较交叉熵提高了 8.5%。
在这里插入图片描述

4 论文目录

第一章 绪论
1.1 研究背景与意义
1.2 国内外研究现状
1.2.1 语义分割研究现状
1.2.2 将深度学习应用于遥感图像分割现状
1.3 本文的主要工作
1.4 论文章节安排
第二章 背景知识
2.1 全卷积网络
2.2 使用全连接网络进行精准分割
2.2.1 线性结构网络
2.2.2 对称结构网络
第三章 实验设计
3.1 数据集选择及处理
3.2 图像处理流程设计
3.2.1 网络结构
3.2.2 卷积核初始化方案
3.2.3 输出图像恢复及优化
3.3 损失设计
3.3.1 交叉熵
3.3.2 带权重的交叉熵
3.3.3 类别平衡交叉熵
3.4 结果评估
3.5 具体实现
3.5.1 实验平台
3.5.2 模型实现
第四章 实验
4.1 网络初始化设计
4.2 实验结果
4.2.1 第一组:交叉熵
4.2.2 第二组:类别平衡交叉熵
4.2.3 结果分析
4.3 典型错误
4.3.1 建筑过大
4.3.2 错认
4.3.3 树木和光影
4.4 最终结果
第五章 总结和展望
5.1 全文总结
5.2 未来展望
致谢
参考文献

5 项目源码

from glob import glob
from PIL import Image
from os import path, makedirs
import numpy as np
from itertools import count, cycle
import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')color_class_dict = {(0,): 1, (255,): 0}
n_class = len(list(color_class_dict.keys()))def name_generator(file_path, ex_name=None, cycle_num=None):if len(file_path.split('.')) == 2:  # file_path带扩展名true_file_name = path.basename(file_path).split('.')[-2]true_file_type = path.basename(file_path).split('.')[-1]else:  # file_path不带拓展名true_file_name = path.basename(file_path)true_file_type = Noneif not ex_name:true_file_type = Noneelif ex_name is not None:true_file_type = ex_nameif cycle_num is not None:for i in cycle(range(cycle_num)):if true_file_type is not None:yield true_file_name + '_' + str(i) + '.' + true_file_typeelse:yield true_file_name + '_' + str(i)else:for i in count(0):if true_file_type is not None:yield true_file_name + '_' + str(i) + '.' + true_file_typeelse:yield true_file_name + '_' + str(i)def resize_image(image_path, new_width, new_height, save_dir=None):image = Image.open(image_path)image = image.resize((new_width, new_height))if save_dir is not None:file_name = path.basename(image_path)image.save(path.join(save_dir, file_name))else:image.save(image_path)def split_image(image_path,split_width,split_height,save_dir,save_as_img=False):# 按下面顺序分割:# 1 2 3# 4 5 6image = Image.open(image_path)image_width, image_height = image.sizeif image_width % split_width or image_height % split_height:raise ValueError('该图像大小为:{}x{};不能被等分为{}x{}的图像'.format(image_width, image_height, split_width, split_height))new_name = name_generator(image_path, ex_name=False)for i in range(0, image_height, split_height):for j in range(0, image_width, split_width):cutting_box = (j, i, j + split_width, i + split_height)slice_of_image = image.crop(cutting_box)if save_as_img:slice_of_image.save(path.join(save_dir,next(new_name) + '.png'))else:slice_of_image = np.array(slice_of_image)np.save(path.join(save_dir, next(new_name)), slice_of_image)def glut_image(image_list, glut_cols, glut_rows, image_width, image_height,save_path):glutted_image = Image.new('RGB', (image_width * glut_cols, image_height * glut_rows))k = 0for i in range(glut_rows):for j in range(glut_cols):# 判断image_list是不是字符串# paste_it = Image.open(image_list[k])paste_it = image_list[k]glutted_image.paste(paste_it, (j * image_width, i * image_height))k += 1glutted_image.save(save_path)def color_to_class(image_path, save_path=None):raw_image = np.load(image_path)raw_image = np.reshape(raw_image,(raw_image.shape[0], raw_image.shape[1], -1))[rows, cols, _] = raw_image.shapeclassed_image = np.zeros((rows, cols, n_class))for i in range(rows):for j in range(cols):classed_image[i, j, color_class_dict[tuple(raw_image[i, j])]] = 1if save_path is not None:np.save(path.join(save_path,path.basename(image_path).split('.')[-2]),classed_image)else:return classed_imagedef output_map_to_class(output_map):most_possible_label = np.argmax(output_map, 2)classed_image = np.zeros(shape=output_map.shape)[rows, cols] = most_possible_label.shapefor i in range(rows):for j in range(cols):classed_image[i, j, most_possible_label[i, j]] = 1return classed_imagedef class_to_color(classed_image):reverse_color_class_dict = dict(zip(color_class_dict.values(), color_class_dict.keys()))colored_image = np.zeros(shape=(classed_image.shape[0],classed_image.shape[1],len(list(color_class_dict.keys())[0])))for i in range(classed_image.shape[0]):for j in range(classed_image.shape[1]):for k in range(n_class):if classed_image[i][j][k] == 1:colored_image[i][j] = reverse_color_class_dict[k]return colored_image

6 最后


http://chatgpt.dhexx.cn/article/4gRTvtO6.shtml

相关文章

基于深度学习的遥感影像语义分割数据预处理

基于深度学习的遥感影像语义分割数据预处理 第一次处理数据,不熟练,仅供参考 数据预处理工具:Arcgis 第一步:下载遥感影像tif数据 根据实际需求选择感兴趣的遥感影像区域 数据来源:Google卫星影像 第二步&#xff1…

语义分割—遥感影像数据标签制作(ARCGIS)

目录 制作标签 转为tif格式 制作标签 1.新建文件夹链接 2.右键新建的文件夹,新建一个shp文件 3.要素类型选择面要素,并为shp文件命名 此处可以配置与依赖图层相同的坐标系,也可以在转为.tif的时候修改环境里的两个选项统一坐标系 4.右键文…

语义分割:遥感影像标签制作

1、打开一张遥感影像,或者航片 2.新建shp:在对应文件夹下,右键新建shpfile 选择面,添加坐标系与影像坐标系相同 3.开始编辑新建的shp 选择面,沿图像四周紧贴图像画矩形 4. 保存编辑内容后停止编辑否则无法添加字段&…

LaTeX的斜体,粗体

参考 LaTeX的斜体,粗体 - 云社区 - 腾讯云 写文章的小伙伴应该知道,在文章中,变量是需要斜体的,那么怎么才是斜体呢 首先,在LATEX中,强调可以以斜体形式展现出来。那么强调命令是如何体现的呢&#xff1a…

LaTeX 加粗

本系列文章由 yhl_leo 出品,转载请注明出处。 文章链接: http://blog.csdn.net/yhl_leo/article/details/50997822 LaTeX中文本加粗的方法,给出代码示例,一看就懂: \documentclass{article} \usepackage{amsmath}\beg…

【LaTex 中英文样式加粗】自由选择中英文字体样式,中英文字体粗黑程度设置

🌼 在本文中,选择楷体样式,以及加粗的楷体。 ▚ 01 设置全文字体 1.1 中文 以设置中文为楷体为例: 在\documentclass{article}与\begin{document}之间,添加语句\setCJKmainfont[AutoFakeBold2.5,ItalicFont{楷体}]{…

LaTeX表格字体加粗(解决文本变宽问题)

latex中对文本加粗常用的方法是 \textbf{*} 在表格中,这个命令也同样生效。但它会使文本变宽,如 尝试的方法 网上找了很多办法,想改变表格加粗的宽度,常见是是调整LaTeX字体,如下 Command Nominal Point Size …

Latex排版小技巧0001:中文字体加粗

论文排版时中文字体加粗 在设置CJK字体过程中添加[AutoFakeBold {3.17}]设置,参数 “3.17” 用于指定加粗程度。加粗时使用 latex 默认加粗指令 \textbf 即可。 \setallmainfonts{Times New Roman}\setCJKmainfont[AutoFakeBoldtrue]{SimSun}\newCJKfontfamily{\h…

latex中如何加粗字体?

加粗代码: \textbf{文字} 效果图:

LaTeX中\textbf无法将汉字进行加粗

场景 利用\textbf对汉字进行加粗: \textbf{模型复杂度}显示如下: 可以发现,确实没有被加粗。 解决 一开始设置了全局字体为宋体: \setCJKmainfont{SimSun}注释掉即可。

解决LaTeX英文字体加粗失效、无法加粗问题

文章目录 一、前言二、具体问题三、解决办法四、使用效果 一、前言 最近使用 LaTeX 作为模板写实验报告、论文时,在自己写的 cls 文件里定义好了各种字体及格式,但是在使用过程中却出现了部分问题。 二、具体问题 标题、摘要里的英文字体并不能像中文字…

LaTex常用技巧3:加粗字体

截图来自[1] 普通加粗 \mathbf 斜体加粗 \usepackage{bm} \bm 矩阵、向量的加粗需要使用。 相关参考 [1]latex矩阵加粗

【latex】Latex如何加粗文字;表格中如何加粗文字而不让文本变宽

问题 latex中对文本加粗常用的方法是 \textbf{*}在表格中,这个命令也同样生效。但它会使文本变宽,如 尝试 网上找了很多办法,想改变表格加粗的宽度,常见是是调整LaTeX字体,如下 Command Nominal Point Size …

vmware 安装报错:failed to install hcmon drivers 完美解决(含VMware15激活码)

首先绝大部分使用网上的方法,删除各种驱动和注册表都是结果都是失败的:再次安装的结果仍然是: 在网上搜寻几天找到一位大神博客,完美解决,试了之后的结果是完美安装,搬运如下: 解决方法&…

安装VMware WorkStation

安装VMware准备: 软件准备: VMware-workstation-full-12.1.1-3770994.exe 秘钥准备: 1、双击VMware-workstation-full-12.1.1-3770994.exe,进行安装如下图所示: 2、弹出的界面中选择“我接受许可协议中的条款”&…

虚拟机安装以及镜像激活码下载

虚拟机的概念和作用,这里不再阐述,不明白的可以自行百度。 需要注意的是,穿越火线无需虚拟机即可多开,安装虚拟机 后台 挂机刷经验,英雄联盟使用虚拟机可以后台挂机刷金币。 〓-------------------------- -------- --…

Deepin 系统下安装VMware并激活.

打开深度商店:搜索VMware,并下载安装. 打开启动器:点击VMware-install, 填写你的管理员密码.(如果当出现这个页面,同时按住ctrl alt A 键 会卡掉.按esc 退出,因该是一个bug) 然后就是下一步. 最后完成安装. 然后打开VMware Workstation.输入密钥. CG54H-D8D0H-H8DHY-C6X7X-…

MacBook Pro完整卸载及安装激活VMware Fusion13.0.0教程

目录 一、MacBook Pro 卸载原有的VMware Fusion二、MacBook Pro下载并安装激活VMware Fusion2.1 下载并安装于Ventura 13.0.1系统2.1.1 下载地址2.1.2 安装2.1.3 激活 VMware Fusion 13.0.0 一、MacBook Pro 卸载原有的VMware Fusion 具体操作过程可以详见: mac完整…

vmware license 激活指导—cuixf@DC

1. 登录www.vmware.com/code/OEM-name 以IBM 为例,则输入www.vmware.com/code/ibm; 2. 如果没有在vmware系统注册过帐号,请点击new customer Register,输入一些客户信息,注册帐号,此邮箱帐号即是管理license的管理员,注…

VMware 虚拟机的安装教程 图文步骤附激活码

VMware Workstation 安装一个win10的虚拟机 1.打开VMware 2.点击创建新的虚拟机 3.选择自定义高级 4.个人建议先选择第三个选项 5.选择你需要装的系统6.下面选择系统的版本 7.位置选择你需要装的系统的镜像 8.如果是Windows系统就选择 BIOS linux系统就选择UEFI 9.内核数…