深度学习| U-Net网络

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.mzph.cn/news/124730.shtml

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

相关文章

Flutter PopupMenuButton下拉菜单

下拉菜单是移动应用交互中一种常见的交互方式,可以使用下拉列表来展示多个内容标签,实现页面引导的作用。在Flutter开发中,实现下拉弹框主要有两种方式,一种是继承Dialog组件使用自定义布局的方式实现,另一种则是使用官方的PopupMenuButton组件进行实现。 如果没有特殊的…

Android任务栈和启动模式

Andrcid中的任务栈是一种用来存放Activity实倒的容器。任务最大的特点就是先进后出,它主要有两个基本操作,分别是压栈和出栈。通常Andaid应用程序都有一个任务栈,每打开一个Activity时,该Activity就会被压入任务栈。每销毁一个Act…

Unity Animator cpu性能测试

测试案例: 场景中共有4000个物体,挂在40个animtor 上,每个Animator控制100个物体的动画。 使用工具: Unity Profiler. Unity 版本: unity 2019.4.40f1 测试环境: 手机 测试过程: 没有挂…

VNC图形化远程连接Ubuntu服务器

我的Ubuntu版本22.04.3,带有gnome图形桌面。配置过程参考了几篇博客,大致流程如下。因为是配置完之后才整理的流程,可能有疏漏。 Ubuntu服务器上的配置 1.先在服务器上下载vnc server(任何一种版本均可) vncserver有…

新电脑第一次重启后蓝屏

新电脑第一次重启后蓝屏 悲惨事故,远程参加插电第一次开机,按“FNShiftF10”启动cmd窗口输入oobe\bypassnro 回车重启跳过网络连接,设置一个用户名密码设置为空,不设密码确定,进入系统软件操作磁盘操作(磁盘…

Angular-05:管道

① 介绍1.1 基本用法1.2 管道参数1.3 链式管道1.4 纯管道1.5 非纯管道 ② 内置管道③自定义管道 ① 介绍 管道:pipe 。在angular中处理组件模板的数据格式。管道操作符 | ,连接模板表达式中左边输入数据和右边的管道。 1.1 基本用法 例:这里…

82.二分查找

目录 什么是二分查找 一、左闭右闭写法[left,right] 代码演示: 二、左闭右开写法[left,right] 代码演示: 今天进行了二分查找的学习。 什么是二分查找 二分查找(Binary Search)是一种常用的搜索算法,也被称为折…

VS Code2023安装教程(最新最详细教程)附网盘资源

目录 一.简介 二.安装步骤 三.VS Code 使用技巧 网盘资源见文末 一.简介 VS Code是一个由微软开发的跨平台的轻量级集成开发环境(IDE),被广泛用于编写各种编程语言的代码。它支持多种编程语言,并且可以通过插件扩展功能。 以…

Undefined reference错误处理及Linux设置动态链接库so的默认搜索路径

文章目录 1 问题的提出2 问题的分析3 问题的解决3.1 Windows的VS修改配置属性3.2 Linux系统里添加搜索路径json在/usr/llib目录中libcryto.so在/usr/lib64文件夹中 Linux设置动态链接库so的默认搜索路径方法一:修改 ld.so.conf 文件方法二:修改环境变量方…

为什么 hooks 不能放在循环或者条件判断语句里?

React 官网介绍了 Hook 的这样一个限制: 不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层以及任何 return 之前调用他们。遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用。这让 R…

matlab 布尔莎七参数坐标转换模型

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重,把自己当个人。 一、算法原理 算法原理与实现代码已在免费文章:布尔莎七参数坐标转换模型一文中给出,不想看付费文章直接跳转即可。 二、代码实现 clc; clear; close all; %% --

08 _ 栈:如何实现浏览器的前进和后退功能?

浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退…

Java中的锁:类型,比较,升级与降级

在Java中,锁是一种用于实现并发控制的重要工具。在多线程环境中,锁可以确保数据的一致性和完整性。Java提供了多种类型的锁,包括内置的synchronized关键字,ReentrantLock类以及更高级的并发工具,如StampedLock和ReadWr…

软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化

一、计算机网络 1.1、考情分析 2.1 TCP/IP协议簇 2.1.1常见协议及功能 网际层是整个TCP/IP体系结构的关键部分,其功能是使主机可以把分组发往任何网络并使分组独立地传向目标。 POP3: 110 端口,邮件收取SMTP: 25 端口,邮件发送FTP: 20数据端口/21控制…

Python异常处理

文章目录 异常格式异常类型自定义抛出异常类 异常格式 异常处理格式(else和finally可省略) try:path1(可能发送异常的部分) except:path2 else:path3 finally:path4如果没发送异常,执行path1, path3, path4 如果发送…

nextcloud+onlyoffice环境搭建(在线 or 离线)

1.安装 MySQL(有MySQL就可以不装) docker run -itd --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot --restartalways -e TZ"Asia/Shanghai" -v /home/docker/workspace/mysql:/var/lib/mysql mysql:latest --lower_case_table_na…

正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563

上一章学习了STM32MP1内置RTC外设,了解了Linux系统下RTC驱动框架。一般的应用场合使用SOC内置的RTC就可以了,而且成本也低,但是在一些对于时间精度要求比较高的场合,SOC内置的RTC就不适用了。这个时候需要根据自己的应用要求选择合…

uni-app——如何阻止事件冒泡

引言 在开发移动应用程序时,我们经常需要处理用户交互事件。然而,有时候这些事件会冒泡,导致意外的行为和不良用户体验。在本文中,我们将探讨如何使用UniApp框架来阻止事件冒泡,并提供一些示例代码来帮助您理解如何实…

吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1

Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中,它不仅可以让您创作,还可以编辑、聆听和录制,以及导入和导出乐谱。如果有人感兴趣的话,录音是在八个轨道上进行的,你可以为每个轨道单独…

【go】两数求和

文章目录 题目代码解法2 代码仓库 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案…