深度学习| U-Net网络

news2024/11/17 16:33:06

U-Net网络

  • 基础知识
    • 和CNN的关系
    • 反卷积
    • ReLU激活函数
  • U-Net入门
    • U-Net网络结构图
    • 为什么需要跳跃连接
    • U-Net的输入
    • U-Net的应用

基础知识

理解U-Net网络结构需要相关知识点。

和CNN的关系

U-Net也是CNN(Convolutional Neural Network,卷积神经网络)的一种,所以也会涉及CNN的原理。关于CNN的一些内容,在之前的一篇文章介绍过“深度学习|CNN卷积神经网络”,这边就简单再说一下CNN原理中的“卷积、池化、全连接”,因为这些在后面U-Net结构理解的时候会用到。

卷积:主要作用是提取特征,通过一个过滤器/卷积核来过滤图像各个小区域,从而得到各个小区域的特征。

池化:提取某个区域的总结特征,主要作用是下采样(Downsampling),能够数据降维,但是不会损坏识别结果。

全连接:主要作用是分类。通过卷积层和池化层的出来的特征,需要让全连接层对前面总结好的特征做分类判断。

不过U-Net网络,全是卷积和池化层,没有全连接层。

反卷积

卷积后,通常有3种结果:

  1. valid卷积:结果图比原图小。
  2. same卷积:结果图和原图一样大。
  3. full卷积:结果图比原图大。

而其中的full卷积,就是反卷积又叫做上采样。关于以上三种卷积是如何形成,主要是源于在做卷积的时候,原图进行扩大的程度。

valid卷积:结果图比原图小。卷积的时候不对原图进行扩展或者扩展比较小。
在这里插入图片描述
same卷积:结果图和原图一样大。卷积的时候扩展一下原图,例如上面3×3的卷积,不做扩展导致每次边缘的像素点都没成为过卷积的中心像素,只需要对原图扩展一下就能包含边缘像素,从而实现same卷积。这种扩展操作,通常叫做padding。
在这里插入图片描述
full卷积:结果图比原图大。卷积的时候把原图比same卷积更大比例补0扩展。
在这里插入图片描述
在这里插入图片描述

ReLU激活函数

激活函数:神经网络中,每个节点代表一种特定输出函数,负责将神经元的输入映射到输出端。通常称为激活函数。

为什么要引入非线性激活函数:激活函数全用线性的,那样无论神经网络有多少层,输出都是输入线性组合,和没有隐藏层的效果差不多了。引入非线性函数作为激活函数,这样深层神经网络才有了意义,不再是输入的线性组合,而是可以逼近任意函数,更好拟合复杂的数据。另外,神经网络本身就是模拟生物神经元,生物神经元的行为本来就是非线性的。

ReLU函数的表达式:
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
从表达式看ReLU函数实际就是把大于0的数保留,小于0的数直接清零。

为什么使用ReLU激活函数:

  • ReLU没有复杂的运算,计算简单高效,收敛速度也快。 Sigmoid等函数,算激活函数和反向传播求误差梯度时,涉及到指数、求导、除法等运算,计算量大。
  • ReLU函数没有饱和区,不存在梯度消失问题。Sigmoid接近包和区时候,变换太慢,导数趋于0,而产生信梯度消失的情况,导致无法完成深层网络训练。
  • ReLU使得一部分神经元输出为0,造成了网络的稀疏性,减少了参数之间相互依赖关系,一定程度上缓解了过拟合问题。

ReLU缺点:学习率过大的时候,可能造成大部分神经元清零。

补充:经典的Sigmoid函数,其表达式为 σ ( x ) = 1 / ( 1 + e − x ) \sigma(x)=1/(1+e^{-x}) σ(x)=1/(1+ex),能够把值映射到0~1。
在这里插入图片描述

U-Net入门

U-Net网络结构图

在这里插入图片描述
从上面的网络结构图来看,就知道为什么是U-Net了,网络结构就是一个U型。经典的编码器解码器结构,左边部分是编码器,右边部分是解码器。左边部分又被称为收缩路径,右边又被称为扩展路径,中间同一个曾灰色的箭头线被称为跳跃连接(Skip Connection)。

图中不同颜色箭头的解释:

  1. 蓝紫箭头:3×3卷积核做卷积,再用ReLU激活函数输出特征通道。
  2. 灰色箭头:进行裁剪和复制。
  3. 红色箭头:2×2池化核进行最大池化/下采样。
  4. 绿色箭头:2×2卷积核做反卷积/上采样
  5. 青蓝箭头:1×1卷积核做卷积。

对上图结构部分做详细解释,其它部分可以自己参考详细解释来理解:

  • 最左上角处理:输入图片大小为572×572,经过64个3×3的卷积核进行卷积,再通过ReLU函数后得到64个570×570的特征通道。把这570×570×64的结果再经过64个3×3的卷积核进行卷积,同样通过ReLU函数后得到64个568×568的特征提取结果。这就是第一层的处理,然后通过2×2的池化核,对图片下采样为原来大小的一半284×284×64。把284×284×64的结果,经过128个3×3×64的卷积核进行卷积,得到282×282×128(这部分实际上是对284×284×64全部做128个卷积)。
    在这里插入图片描述
  • 最右上角处理:392×392×128白蓝框来源于两个部分,蓝色部分是下面一层上采样/反卷积,196×196×128通过64个2×2卷积核反卷积,得到392×392×64;白色部分是同一层复制裁剪得到的,左边568×568×64结果复制再裁剪,得到392×392×64。蓝紫色箭头的过程不再多做解释,和“最左上角处理”介绍的是一样的。最右边最后一个青蓝箭头变换,388×388×64通过2个1×1的卷积核,得到388×388×2。在这里插入图片描述

为什么需要跳跃连接

  1. 反卷积只能扩大图片,不能还原图片,为了减少数据丢失,通过跳跃连接把同一层下采样的图片裁剪相同大小后增加特征层。大小不一致需要裁剪,主要是因为每次卷积都会丢失边界像素。
  2. 结合深层信息和浅层信息,深层信息就是经过多次下采样后的低分辨率信息,能够提供分割目标在整个图片像素中上下文语义西悉尼,可以理解为特征,有助于物体的分类;浅层信息,通过跳跃连接从编码器传递到解码器上的高分辨率信息,能够给分割提供更加精细的特征。

U-Net的输入

由于不断valid卷积,边缘信息不够,卷积后图片越来越小,最终得到输出是会比输入要小的。为了保证操作后结果和原图大小一致,在输入前都会图片进行镜像扩展操作。

另外原作还用了Overlap-tile策略。医学图像通常都很大,不可能把原图输入网络,所以会进行切片,为了图片拼接部分分割更准确,采用了Overlap-tile策略,就是切片之间会有重叠。
在这里插入图片描述
上面这张原图就做了镜像扩充,做了切片裁剪,输入蓝色部分图片通过U-Net最后能得到黄色有效区域处理结果。而Overlap-tile的切片重叠,应该指的是蓝色框会重叠。

U-Net的应用

主要解决的是医学领域的图像分割问题,目前基模型及其变种广泛应用于医学生物图像分割。

为什么适用于医学图像分割:

  • 医学图像由于涉及病人隐私以及难获取等问题,数据相对较少,U-Net使用了丰富数据增强策略来扩充数据集,例如随机旋转、翻转、缩放等,可以提高模型的泛化能力和鲁棒性。
  • U-Net模型是轻量级网络,参数量少,不容易过拟合,训练速度快。
  • U-Net支持多通道多模态的医学图像输入,能够充分利用不同模态之间信息。多模态,例如MRI图像可能包含T1、T2、FLAIR等通道。
  • 医学图像本身语义的信息就比较简单,结构比较谷顶。医学图像的信息密度远远不及平时拍的照片,应用场景也比较针对性,要做眼底就用眼底OCT,要做脑就用脑CT和脑MRI,都是针对固定的器官成像。所以高级语义信息和低级特征都显得很重要,U-Net的跳跃连接就排上用场了,就是结构图中灰色的箭头,结合低分辨率(提供物体类别标识的依据)和高分辨率信息(提供精确分割定位依据)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络架构学习1

文章目录 网络架构学习11. 传统CNN卷积神经网络1.1 基本思想1.2 VCG16(经典CNN网络架构之一) 2. 两种经典的网络架构2.1 FCN网络2.2 U-Net网络 3. FCNVMB(基于U-Net架构)3.1 FCNVMB 主要思想3.2 FCNVMB 提供的其他思想 网络架构学习1 1. 传统CNN卷积神经网络 1.1 基本思想 C…

Android SurfaceFlinger做Layer合成时,如何与HAL层进行交互

目录 零、本文讨论问题的范围一、问题:SurfaceFlinger图层合成选择实现方式的两难1.1 从OpenGL ES、HWC本身来讲1.2 以HWC为主导的判断逻辑 二、SurfaceFlinger与HAL层进行交互的具体实现框架2.1 SurfaceFlinger 调用 OpenGL ES 流程2.2 FrameBuffer2.3 SurfaceFlin…

c语言从入门到实战——数组

数组 前言1. 数组的概念2. 一维数组的创建和初始化2.1 数组创建2.2 数组的初始化2.3 数组的类型 3. 一维数组的使用3.1 数组下标3.2 数组元素的打印3.3 数组的输入 4. 一维数组在内存中的存储5. sizeof计算数组元素个数6. 二维数组的创建6.1 二维数组得概念6.2 二维数组的创建 …

Java集成腾讯云OCR身份证识别接口

一、背景 项目用到身份证识别获取人员信息的功能,于是想到了腾讯云提供这样的API。在整合代码过程都很顺利,利用腾讯云官方SDK很快集成进来。但是在上测试环境部署时有了新的问题,通过Nginx代理后的环境无法访问到目标腾讯云接口,…

buuctf_练[CSCCTF 2019 Qual]FlaskLight

[CSCCTF 2019 Qual]FlaskLight 文章目录 [CSCCTF 2019 Qual]FlaskLight掌握知识解题思路关键paylaod 掌握知识 内置函数的过滤,globals变量的过滤,调用内部变量或函数的OS函数进行命令执行 解题思路 打开题目链接,很明显看标题和内容是fla…

【动态基础】从暴力递归到动态规划

C面经汇总 系列综述: 目的:本系列是个人整理为了秋招和实习面试的,整理期间苛求每个知识点,平衡背诵量与深入程度。 来源:材料主要源于算法大神(左程云)教你从暴力递归到动态规划进行的&#xf…

vue实现连接线

效果展示 实现代码 下载插件npm install --save leader-line-vue <template><div class"wrap"><div ref"start" class"start">start</div><div ref"end" class"end">end</div></d…

数据结构时间复杂度(补充)和空间复杂度

Hello&#xff0c;今天事10月27日&#xff0c;距离刚开始写博客已经过去挺久了&#xff0c;我也不知道是什么让我坚持这么久&#xff0c;但是学校的课真的很多&#xff0c;很少有时间多出来再学习&#xff0c;有些科目马上要考试了&#xff0c;我还不知道我呢不能过哈哈哈&…

Django 全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置&#xff1a;settings.py2.1 注册 APP&#xff1a;INSTALLED_APPS2.2 模板路径&#xff1a;TEMPLATES2.3 静态文件&#xff1a;STATICFILES_DIRS2.4 数据库&#xff1a;DATABASES2.5 允许访问的主机&#xff1a;ALLOWED_HOSTS 1 …

[SQL开发笔记]UPDATE 语句:更新表中的记录

一、功能描述&#xff1a; UPDATE 语句&#xff1a;用于更新表中的记录 二、UPDATE 语句语法详解&#xff1a; UPDATE 语法 UPDATE table_nameSET column1value1,column2value2,...WHERE some_columnsome_value; 参数说明&#xff1a; 1.table_name&#xff1a;要修改的表…

【Docker】github Actions自动构建

通过github的Actions 实现代码push仓库后自动构建容器并发布到DockerHub. 创建项目 首先我们创建一个项目,这里我就用Vue项目进行演示. npm init vuelatest Actions-demo-swback进去项目&#xff0c;按照提示执行 npm install npm run dev 启动项目. 首先保证项目的正常启动…

DAY36 738.单调递增的数字 + 968.监控二叉树

738.单调递增的数字 题目要求&#xff1a;给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单…

Python机器学习基础(一)---数据集加载的方法

几个数据集加载的方式 鸢尾花练习资源(这个资源有瑕疵&#xff0c;index列和Species 都是带”“的字符串 导致一些加载现实问题&#xff0c;从而验证 还是pandas最好用) "index","Sepal.Length","Sepal.Width","Petal.Length","…

echarts中横向柱状图的数字在条纹上方

实现效果&#xff1a; 数字在条纹的上方 实现方法&#xff1a;这些数字是用新添加一个坐标轴来实现的 直接添加坐标轴数字显示是在条纹的正右边 所以需要配置一下偏移 完整代码 var option {grid: {left: "3%",right: "4%",bottom: "3%",cont…

FreeROTS 任务通知和实操 详解

目录 什么是任务通知&#xff1f; 任务通知值的更新方式 任务通知的优势和劣势 任务通知的优势 任务通知的劣势 任务通知相关 API 函数 1. 发送通知 2. 等待通知 任务通知实操 1. 模拟二值信号量 2. 模拟计数型信号量 3. 模拟事件标志组 4. 模拟消息邮箱 什么是任务…

高防CDN:网络攻防的坚强防线

在当今数字化时代&#xff0c;网络攻击已经成为一种常态&#xff0c;对企业和个人的网络资产构成了严重威胁。为了应对这些风险&#xff0c;高防CDN&#xff08;Content Delivery Network&#xff09;已经崭露头角&#xff0c;它不仅提供内容分发&#xff0c;还整合了强大的网络…

电脑上使用的备忘记事软件哪一款好用点?

生活中充斥着大大小小的任务&#xff0c;如工作方面、学习方面、生活方面等&#xff0c;多种事务掺杂交错在一起非常容易忘记&#xff0c;为避免忘记重要的事情&#xff0c;大家可以借助电脑上好用的备忘录工具来进行记事。 支持在电脑上使用的备忘录软件是比较多的&#xff0…

论文阅读 - Learning Human Interactions with the Influence Model

NIPS01 早期模型 要求知识背景&#xff1a; 似然函数&#xff0c;极大似然估计、HMM、期望最大化 目录 1 Introduction 2 The Facilitator Room 3 T h e I n f l u e n c e M o d e l 3 . 1 ( R e ) i n t r o d u c i n g t h e I n f l u e n c e M o d e l 3 . 2 L e…

SpringCloud Alibaba【三】Gateway

Gateway配置与使用 前言新建gateway子项目pom.xml配置文件启动类访问接口方式 测试拓展 前言 在工作中遇到一种情况&#xff0c;一个父项目中有两个子项目。实际使用时&#xff0c;需要外网可以访问&#xff0c;宝信软件只能将一个端口号发布在外网上&#xff0c;所以需要运用…

多线程---线程安全问题及解决

文章目录 一个线程不安全的案例造成线程不安全的原因抢占式执行多个线程修改同一个变量修改操作不是原子的内存可见性问题指令重排序问题 如何让线程变得安全&#xff1f;加锁volatile 一个线程不安全的案例 题目&#xff1a;有较短时间让变量count从0加到10_0000 解决方案&a…