【神经网络深度学习】--语义分割 Unet

2023-10-27


Unet 发表于 2015 年,属于 FCN 的一种变体。Unet 的初衷是为了解决生物医学图像的问题,由于效果确实很好后来也被广泛的应用在语义分割的各个方向,如卫星图像分割,工业瑕疵检测等。

Unet 跟 FCN 都是 Encoder-Decoder 结构,结构简单但很有效。

Encoder 负责特征提取,可以将各种特征提取网络放在这个位置。
Decoder 恢复原始分辨率,该过程比较关键的步骤就是 upsampling 与 skip-connection。
 

 Unet主要可分为三部分来看分别为左(特征提取),中(拼接),右(上采样)

特征提取部分:它是一个收缩网络,通过四个下采样,使图片尺寸减小,在这不断下采样的过程中,特征提取到的是浅层信息。具体过程是,输入图片然后经过两个卷积核(3x3后面紧跟着一个Relu)以论文原图为例:输入572x572,经过两个卷积核(大小为3x3)大小从572-570-568,然后经过一个Maxpool(2x2)图片尺寸变为284这即为一个完整的下采样,接下来三个也是如此。在下采样的过程中,通道数翻倍,例如图上的从64-128。
copy and crop拼接:在UNet有四个拼接操作。有人也叫Skip connect,目的是融合特征信息,使深层和浅层的信息融合起来,在拼接的时候要注意,不仅图片大小要一致,特征的维度(channels)也要一样,才可以拼接。
上采样部分 up-conv,也叫扩张网络,图片尺寸变大,提取的是深层信息,使用了四个上采样,在上采样的过程中,图片的通道数是减半的,与左部分的特征提取通道数的变化相反。在上采样的过程融合了左边的浅层的信息即拼接了左边的特征。
 

Upsampling 上采样常用的方式有两种:1.FCN 中介绍的反卷积;2. 插值。

1、反卷积:

①卷积后,结果图像比原图小:称之为valid卷积

②卷积后,结果图像与原图大小相同:称之为same卷积

③卷积后,结果图像比原图大:称之为full卷积

其中,full卷积其实就是反卷积的过程。到这里应该可以意识到,反卷积实际上也是一种特殊的卷积方式,它可以通过full卷积将原图扩大,增大原图的分辨率,所以对图像进行反卷积也称为对图像进行“上采样”。因此,也可以很直接地理解到,图像的卷积和反卷积并不是一个简单的变换、还原过程,也就是先把图片进行卷积,再用同样的卷积核进行反卷积,是不能还原成原图的,因为反卷积后只是单纯地对图片进行扩大处理,并不能还原成原图像。图4所展示的例子可以很好地说明这一现象:


         图  卷积(上)与反卷积(下)

 
由图可见,蓝色是3×3的卷积核,在原图进行卷积和反卷积后,最后得到的图像跟原图是不一致的。因此,通过反卷积并不能还原卷积之前的矩阵,只能从大小上进行还原,因为反卷积的本质还是卷积。如果想要还原成原图像,只能通过专门设计不同的卷积核来实现。

2、插值:bilinear 双线性插值的综合表现较好也较为常见 。双线性插值的计算过程没有需要学习的参数,实际就是套公式。

[补充]
1、U-Net数据输入
由于在不断valid卷积过程中,会使得图片越来越小,为了避免数据丢失,在图像输入前都需要进行镜像扩大,如图所示:


可以看到图像在输入前,四个边都进行了镜像扩大操作,以保证在通过一系列的valid卷积操作之后的结果能够与原图大小相一致。
由于有些计算机的内存较小,无法直接对整张图片进行处理(医学图像通常都很大),会采取把大图进行分块输入的训练方式,最后将结果一块块拼起来。
为了避免在拼接过程中边缘部分出现不连接等问题,在训练前,每一小块都会选择镜像扩大而不是直接补0扩大,以保留更多边缘附近的信息。 

2、卷积核中的数值如何确定?
权值的确定一般都是经过“初始化→根据训练结果逐步调整→训练精度达到目标后停止调整→确定权值”这样一个过程,因此U-net卷积核中数值的确定过程也是类似的,一开始也是先用随机数(服从高斯分布)进行初始化,后面则根据前面提到的损失函数逐步对数值进行调整,当训练精度符合要求后停止,即能确定每个卷积核中的数值(即权值)。

而调整卷积核数值的过程,实际上就是U-net的训练过程,当卷积核结束训练确定数值后,则U-net训练完成。

3、U-net训练深度如何确定?
这跟全连接神经网络中“神经网络层数如何确定”这样一个问题是类似的,目前也没有一个专门的标准,一般根据经验选取,或设置多种不同的深度,通过训练效果来选择最优的层数。U-net原文中也没有提到为什么要选择4层,可能是在该训练项目中,4层的分割效果最好。

4、如何解决U-net训练样本少的问题?

医学影像数据存在一个共同的特点,就是样本量一般较少,当训练样本过少时,容易使得训练效果不佳。解决该问题的方法是数据增强,数据增强可以在训练样本较少时,也能够让神经网络学习到更多的数据特征,不同的训练任务,数据增强的方法也不尽相同。由于U-net文章中的任务是分割Hela细胞,作者选择了弹性变换的方式进行数据增强,如图所示:


弹性变换其实就是把原图进行不同的弹性扭曲,形成新的图片,扩大样本量,由于这种弹性变化在细胞中是十分常见的,人为增加这种数据量能够让U-net学习到这种形变的不变性,当遇到新的图像时候可以进行更好地分割。 

5、U-net可以如何改进?

①可以对U-net中的损失函数进行改进。损失函数有很多种,U-net原文中采用的是有权重的交叉熵损失函数,主要为了更好地分离粘连在一起的同类细胞设计的,如果分割的任务不同,也可以往损失函数中添加权重或进行其他的改进,以增强分割的准确性和鲁棒性。

②可以对U-net结构进行改进,如采用U-net++网络,如图所示:

U-net++是在深度为4层的U-net基础上,把1~3层的U-net也全部组合到一起(图中左上角最小的三角形为深度为1层的U-net,第二个三角形为深度为2层的U-net,以此类推,把4个深度的U-net组合在一起),这个U-net++能够把每个深度的训练效果相互融合相互补充,可以对图像进行更为精确的分割。
————————————————
版权声明:本文为CSDN博主「阿玉婷子在学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46720482/article/details/125164892

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【神经网络深度学习】--语义分割 Unet 的相关文章

  • 蛋白+小分子配体md(详细保姆教程)

    继续搬一点近期飞书文档模拟的到博客里 参考博客 Gromac中文教程 https jerkwin github io GMX GMXtut 5 E6 A6 82 E8 BF B0 https www jianshu com p b10fe4
  • 基于Python的爬虫设计与数据分析 计算机毕业设计源码37836

    目 录 摘要 1 绪论 1 1课题背景 1 2研究目的及意义 1 3爬虫技术 1 4django框架介绍 2 1 5论文结构与章节安排 3 2 基于Python的爬虫设计与数据分析分析 4 2 1 可行性分析 4 2 2 系统流程分析 4
  • 用户积分营销的三种方式

    私域流量时代下 商家们都纷纷搭建私域流量池来实现引流 增长 但是如果商家只是单纯地通过搭建私域流量池来实现用户进行转化 出来的效果是非常缓慢的 同时对于用户留存以及用户粘性的提升帮助不是太大 因此 我们需要设计一种新的玩法去进行私域流量池运
  • 设置DialogFragment背景透明

    设置DialogFragment背景透明的方法如下 1 在onCreateView 方法中设置弹窗内部的背景透明 Override public View onCreateView LayoutInflater inflater Nulla
  • postman下载文件乱码

    环境 postman v8 0 7 遇到的问题 postman下载文件时乱码 解决方案 不要用send 用边上小箭头里的send and Download
  • JS 鼠标粒子效果

随机推荐

  • UE虚幻引擎教程_生成云平台指定路径下的exe文件

    市面上大量优秀的游戏都是基于UE制作的 UE虚幻引擎制作的作品可以在windows mac linux以及ps4 x boxone ios android甚至是html5等平台上运行 本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE
  • 创建操作符(初稿)

    just 将一个或多个对象转换成发射这个或这些对象的一个Observable from 将一个Iterable 一个Future或者一个数组转换成一个Observable create 使用一个函数从头创建一个Observable defe
  • vim 插入模式小技巧

    1 vim插入模式快捷键 ctrl h 删除上一个字符 ctrl w 删除上一个单词 ctrl u 删除当前行 这三个快捷键也适用与终端中 2 终端中的快捷键 ctrl a 快速移动到行首 ctrl e 快速移动到行末 ctrl b 向前移
  • 面试题-网络

    以下所有整理内容都是我从第一次面试开始 将所有遇到的问题整合后的结果 所有的内容都是我在面试中真实遇到的问题 有BAT这样的大厂 也有很多小厂 在面试超过20家之后 遇到的绝大多数问题都开始重复 这份资料给我的面试带来了非常多的便利 现在我
  • 大数据单机学习环境搭建(12)Azkaban的简单使用

    专题 大数据单机学习环境搭建和使用 1 登录和密码修改 2 新建工程 2 1新建工程 2 2创建zip文件 2 3添加文件到项目 3 任务执行 3 1立即执行 3 2 设置定时任务 4 依赖任务建立 大数据单机学习环境搭建 12 Azkab
  • OpenCV Mat数据类型指针ptr的使用

    常用形式 mat ptr
  • leetcode-340 Longest Substring with at most k-distinct characters(至多包含 K 个不同字符的最长子串)

    题目描述 给定一个字符串 s 找出 至多 包含 k 个不同字符的最长子串 T 示例 1 输入 s eceba k 2 输出 3 解释 则 T 为 ece 所以长度为 3 示例 2 输入 s aa k 1 输出 2 解释 则 T 为 aa 所
  • 【项目实战】SpringBoot多环境(dev、test、prod)配置

    一 三套环境介绍 1 1 开发环境 dev 开发环境是程序猿们专门用于开发的服务器 配置可以比较随意 为了开发调试方便 一般打开全部错误报告 1 2 测试环境 test 一般是克隆一份生产环境的配置 一个程序在测试环境工作不正常 那么肯定不
  • 用scrapy爬虫无数据

    TOC 用scrapy爬虫不到数据 求大神解决 运行后终端显示 D BaiduNetdiskDownload jobui gt C Users admin AppData Local Programs Python Python36 32
  • 【转载】【stm32】一键下载电路

    原创Nerute 2018 11 18 01 11 10 2361 首先感谢正点原子的开源资料 下面贴上正点原子一键下载电路的原理图 很显然 核心是一块CH340芯片 什么是CH 请看手册 再来就是引脚说明 了解一键之前 我们还得知道 st
  • jenkins-自动化打包部署

    环境 centos 7 2或者更新 rmp包 官方下载地址 Redhat Jenkins Packages java 1 8 0 安装 root jenkins yum install wget java 1 8 0 y root jenk
  • 滤波算法(一)

    滤波算法 算法一 一阶滤波算法 低通滤波器 首先要讲的是一阶滤波算法 也就是低通滤波算法 这个滤波算法对于低频的噪声具有非常好的效果 对于0到一定频率的信号是能够无失真接收的 这个算法通过硬件的电路推导 因其十分的简单 一阶滤波算法为 滤波
  • 认识正则表达式

    正则表达式re 正则表达式 re 是一套字符串数据筛选规范 在各种语言中 c c java python 都是通用的 对数据进行清洗 在不同的语言中使用流程不同 python中的用法 import re 导入re模块 自带库 result
  • Andriod 应用两种设计风格

    Andriod 应用两种设计风格 仿 iOS 风格 Andriod Design
  • db2插入 timestamp 类型 慎用

    表结构 create table tableName id varchar 8 not null date time timestamp 正确的方式 insert into tableName id date time values 000
  • Activity过度动画

    Activity过度动画 java代码 res文件 enter anim xml exit anim xml java代码 button setOnClickListener new View OnClickListener Overrid
  • c语言数字转字符串不用函数,不使用c的任何库函数 实现字符串到整数的转换 整数到字符串的转换...

    转载请标明出处 http www cnblogs com NongSi Net p 6805844 html 今天主要总结下 完成编程 1 除printf函数之外 不用任何c语言库函数 实现将字符串转化为整数的函数myatoi 可以支持负整
  • 大数据时代的Tcaplus游戏存储

    大数据时代的Tcaplus游戏存储 shiweizhang 2015 10 27 1 7k浏览 游戏开发数据分析场景 想免费获取内部独家PPT资料库 观看行业大牛直播 点击加入腾讯游戏学院游戏开发行业精英群711501594 摘要 大数据具
  • 怎么使用maven?

    文章目录 Maven环境搭建 创建maven项目 添加依赖 插件 添加依赖 javax servlet api 和 javax servlet jsp api 添加maven插件 运行项目 使用命令行方式运行项目 使用本地tomcat运行m
  • 【神经网络深度学习】--语义分割 Unet

    Unet 发表于 2015 年 属于 FCN 的一种变体 Unet 的初衷是为了解决生物医学图像的问题 由于效果确实很好后来也被广泛的应用在语义分割的各个方向 如卫星图像分割 工业瑕疵检测等 Unet 跟 FCN 都是 Encoder De