语义分割模型——浅谈U-net相关理论

news2024/10/7 8:21:16

目录

1 U-net简介

1.1 U-net是什么

1.2 U-net的创新点及优势

2 U-net改进思路

2.1 编码器优化

2.2 跳跃连接优化

2.3 解码器优化

2.4 其他优化方式

2.5 注意事项


1 U-net简介

1.1 U-net是什么

Ronneberger等人于2015年基于FCN(全卷积神经网络)下提出的U型结构语义分割模型,提出时主要用于医学图像分割。

其结构如下图所示,左右对称,由网络左侧的编码器)路径、右侧的解码器路径和跳跃连接路径3部分组成:

(此图引用自 宋杰,李彩霞,李慧婷. 基于U-Net网络的医学图像分割研究综述[J]. 计算机技术与发展,2024, 34(01): 9-16.)

编码器(Encoder)路径:编码器路径又被称为收缩网络,通过4个连续的下采样(Downsampling)操作,达到图像尺寸变小,通道数翻倍的目的。而每一个下采样操作都有2个连续的3*3卷积+ReLU函数和1个最大池化操作组成。在这不断的下采样过程中,网络可以获取到图像的浅层特征信息。

解码器(Decoder)路径:解码器路径又被称为扩张网络,通过4个连续的上采样(Upsampling)操作,达到图像尺寸变大,通道数减半的目的。同理,每一个下采样操作都由对应2个连续的3*3反卷积组成,实现对图像尺寸的扩大。在这不断的上采样过程中,网络可以获取到图像的深层特征信息。

跳跃连接(Skip connection)路径:U-net在每一层的编码器和解码器之间设立了跳跃连接路径对二者进行连接,帮助模型将同一层相同尺寸的图像特征进行拼接。

最后,网络会进行一次1*1卷积,输出最后的分割图像。

因此,我们一般把U-net称之为基于Encoder-Decoder 架构下的语义分割网络。这种架构下Encoder 负责特征提取,Decoder 恢复原始分辨率。简单,但很有效,所以U-net在小样本数据集中也能发挥良好的效果。

1.2 U-net的创新点及优势

对比于同样基于Encoder-Decoder 架构进行设计的语义分割网络Segnet,U-net的创新点在于跳跃连接路径的设立,帮助模型成功将深层特征信息和浅层特征信息融合起来,实现粗粒度特征与细粒度特征的有效融合。

所以U-net最大的优势就在于可以跳跃连接路径为网络提供了更精细的图像特征,帮助网络实现像素级别的语义分割。

同时,U-net网络结构简单,所以运行速度快,针对小数据集进行训练不容易出现过拟合的问题。

再者,Encoder-Decoder 架构使得U-net网络易于进行改进,提升模型的精度。

2 U-net改进思路

2.1 编码器优化

U-net网络中每一次下采样核心是通过两个连续的3*3卷积进行的,为什么选用3*3卷积?U-net论文中提到其实卷积核的大小是可以自己定义的,所以你可以使用5*5卷积、7*7卷积都没关系。具体需要你根据你的数据集进行实验调整,但可以得知的是卷积核越小,能够大大地降低网络的总体计算复杂性。(1*1卷积不具有提升感受野的作用,即在降维时使用)

同时,模型中所选用的卷积神经网络的卷积核核大小是不变的,导致了感受野的固定,使得模型无法根据图像中目标对象的尺寸和形状进行调整。所以,对网络进行优化可以针对这个3*3卷积进行替换,下面时一些可供参考的思路:

(1)使用ASPP(空洞空间金字塔池化)模块进行下采样操作。

ASPP模块是Chen等在Deeplab v2模型中提出的基于组合空洞卷积的特征提取模块。空洞卷积对比于常规卷积,可以通过超参数“扩张率”获得不同的感受野,也就是说同样的3*3卷积,通过设置不同的扩张率可以获得不更大的感受野。因此,在此基础上,通过组合空洞卷积的方式,可以帮助模型在不同的感受野下对图像进行特征提取。

ASPP模块就是基于此类思路下进行设计的,其结构如图所示。

ASPP使用了四种不同膨胀率的空洞卷积块(包括卷积、BN、激活层)和一个全局平均池化块(包括池化、卷积、BN、激活层)得到一共五组feature map,将其concat起来之后获得输出。

(2)使用自适应卷积路径模块进行下采样操作。

既然只使用一种卷积核大小的卷积无法解决问题,那么是否可以同时使用多种卷积核大小的卷积,并根据图像调整对应卷积核大小的卷积的权重?这就是自适应卷积路径模块,其是基于SK-Net进行设计得出的,结构如下图所示:

其中 ,黄色和绿色代表两种不同卷积核大小的卷积,获取初始feature map之后进行相加,获得融合后的feature map。然后再通过全局平均池化、fc层等操作,得到两个维度与初始feature map相同的feature map。再对得到的两个feature map进行softmax处理,获得两个feature map对应的权重值,和初始feature map进行相乘,得到权重调整后的feature map。最后,再进行相加,得到输出。

此类自适应模块还可以继续进行拓展,拓展到3个卷积路径、4个卷积路径等等,需要根据数据集自己进行实验调整。

当然,除了使用自适应路径,Jin等还提出使用可变性卷积的方式,来帮助模型针对图像中不同尺寸、形状的目标对象进行自适应调整。此处不进行展开,感谢的读者可自行查阅对应的论文:Jin Q, Meng Z, Pham T D, et al. Dunet: A deformable network for retinal versel segmentation[J]. Knoeledge-Based Systems, 2019, 178(15): 149-162.

(3)和前两种思路类似,还可以使用Inception模块进行下采样操作。

Inception模块通过把不同的卷积核组合在一起,增大整体的感受野,结构如图形所示:

 其中,3*3卷积和5*5卷积之前的1*1卷积作用为减少参数,通过降维控制网络的计算复杂度。

2.2 跳跃连接优化

U-net于跳跃连接阶段将编码器和解码器的特征进行连接,帮助网络获取到了更精细的特征。但是深层特征和浅层特征是属于两种存在语义差距的特征,直接将二者进行融合,效果不佳,所以可以进行进一步优化。

此类问题,一般通过引入注意力机制进行解决。通过不同的注意力,可以赋予下采样的特征更多的位置信息等信息,在不同维度(通道,空间,坐标等)捕获不同的特征信息,进行加权等。

下面对一些比较典型的改进进行描述:

(1)Attention U-net:

Attention U-net是Oktay等人[17] 提出了一种基于栅格的注意力门(Attention Gate,AG)的语义分割网络,其结构如图所示:

可以看到, Attention U-net其实就是U-net的结构下,在跳跃连接路径上添加了注意力门(AG),然后对下采样的结果进行优化。其核心在于将U-net下采样过程的输出结果经过AG过滤(添加注意力系数,该系数中包含一个gating vector,包含图像的上下文信息),识别显著的图像区域,修剪特征响应,只保留与特定任务相关的激活,再与上采样结果进行连接,以消除跳接过程中的噪声和无关信息。

(2)CBAM:

CBAM则是Woo等提出的一种可以即插即用的组合注意力机制模块,其结构如图所示:

它由串行的通道注意力以及空间注意力组成,分别在通道维度和空间维度捕获图像特征信息,实现多层次的注意力操作。

类似于Attention U-net,我们可以在U-net的跳跃连接路径上引入CBAM,对U-net下采样过程的输出结果进行多层次的注意力,以赋予下采样结果更多的位置信息。

值得注意的是,原CBAM模块中是先进行通道注意力,再进行空间注意力。而在实际应用中,我们可以根据数据集进行调整,通道注意力与空间注意力的组合方式可以发生一定的变化。(甚至可以采取并行的方式)

拓展来说,我们还可以将通道注意力和空间注意力的一种换成其他注意力,或许也可以取得更好的效果。

2.3 解码器优化

U-net网络中主要通过反卷积的方式还原图像尺寸,但此类方式容易忽略了底层的内容,无法对图像的局部信息变化具有良好的反应能力。如果使用邻插值法和双线性插值法则会使得网络忽略了语义信息。

总体来说,针对解码器进行优化的研究不算多,改进的思路也比较有限,改进后性价比也远不如对编码器进行改进来得高,所以下面只列出一个相关改进思路供参考:

在上采样阶段引入上采样算子,通过加权组合在以每个位置为中心的预定义区域内重组特征,以内容感知的方式生成权重,每个位置都有多组这样的上采样权重。然而,这些权重并不作为网络参数学习,而是使用一个轻量级的,带有softmax 激活函数的全卷积模块来实时预测。

Wang J, Chen K, XU R, et al. CARAFE: Content-Aware ReAssembly of FEatures[C]//2019 IEEE/CVF International Conference on Computer Vision (ICCV). IEEE, 2020.

2.4 其他优化方式

除了上述优化方式,我们还可以通过改进U-net连接方式进行优化,比较出名的就是U-net++了。

U-net++是Zhou等提出了全连接U-net模型,该模型通过增加U-net网络1-4层每一层的编码器和解码器相互之间的跳跃连接路径,增加梯度流。即将每一层的编码器和解码器之间都进行相连,其结构如图所示:

该结构的下U-net可以获取所有网络深度下的图像特征,并从中学习不同层次的特征的重要性。

2.5 注意事项

当然,对U-net进行优化不是单方面进行的,意味着你可以在各个方面同时进行优化,比如同时对编码器和跳跃连接路径进行优化。或者,在编码器优化时,同时使用空洞卷积和自适应路径等,提出一种空洞卷积自适应的模块。

但同时,不是说组合的模块越多,网络优化效果就一定越好。引入的模块越多,他会导致模型的参数量越大,与此同时,模型的训练难度也就越大。如何在模型性能与轻量化之间做好平衡,也是我们需要进行考虑的。

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

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

相关文章

【一般排查思路】针对银河麒麟高级服务器操作系统磁盘空间已满

1. 本身磁盘空间已满 有时候我们会看到服务器上有提示“设备上没有空间”,如图1。 图 1 如果是磁盘本身空间已满,我们可以借助du工具来排查,比如首先cd / 切换到根目录,然后 du -sh * | sort -rh | head -n 3查看空间占用最大的…

基于Springboot的在线动漫信息平台

基于SpringbootVue的在线动漫信息平台的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 热门动漫 文章专栏 会员分享 论坛信息 动漫资讯 后台登录 动漫分类管…

【Redis】Redis 非关系型数据库 安装、配置、使用(全集)

目录 Redis 第一章 1、什么是redis 2、安装redis 1-7 8 3、redis使用 第二章 1、redis的使用 1、使用方式 2、使用Java代码使用redis 3、优化连接redis 2、五种数据类型 常用命令 string hash list set zset 不同数据类型存、取、遍历的方法 3、redis在项目…

C++ | Leetcode C++题解之第49题字母异位词分组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash [fn hash<int>{}] (const array<int, 26>&…

d12(121-125)-勇敢开始Java,咖啡拯救人生

目录 JDK8前的Date SimpleDateFormat 解析字符串时间成为日期对象 秒杀 Calendar JDK8之后的时间 LocalDate LocalTime LocalDateTime LocalDate 获取日期对象中的信息 修改某信息 把某信息加/减多少 获取指定时间的LocalDime对象 判断两日期对象 是否相等 在前还是…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别 一、简单介绍 二、简单进行人脸训练与识别 1、LBPH…

基于Spring Boot的考研资讯平台设计与实现

基于Spring Boot的考研资讯平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看首页、考…

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中&#xff0c;提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了&#xff0c;询问公司开发也不知道如何处理&#xff0c;我是如何重启kafka消息中间件使system系统服务正常运行&#xff1f; 查看kafka的安装位置 在下面的…

【UE5】蓝图通信方式

目录 1、直接通信 2、getAllActorsOfClass 3、getAllActorsOfClassWithTag 4、通过射线检测 5、接口 6、事件分发器 7、SpawnActor 8、调用控制台命令 9、关卡蓝图中直接调用 创建两个Actor蓝图 1、直接通信 场景中 2、getAllActorsOfClass 3、getAllActorsOfClassWit…

编写一个Java类 输入手机号码,验证其是否合法的完整实例

每个人的手机号码都是不一样的&#xff0c;那我们该如何保证用户输入的是合法的手机号码呢&#xff1f;这就需要我们在代码中对这个手机号进行验证&#xff0c;不能随便输入11位数字就行了。这时&#xff0c;就需要对用户传递过来的字符串参数进行校验。 下面我们介绍使用Java…

【Java数据结构】初步认识ArrayList与顺序表

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…

从零开始安装 stable diffusion webui v1.9.3 (windows10)

从零开始安装 stable diffusion webui v1.9.3 (windows10) CUDA 安装 CUDA 12.1 | https://developer.nvidia.com/cuda-toolkit-archive CUDNN 8.x | https://developer.nvidia.com/rdp/cudnn-archive 安装路径 F:/CUDA/v12.1 安装git git官网 | https://git-scm.com/ 安…

html显示PDF并兼容IE浏览器的解决方案

方案一、vue-pdf插件 缺点&#xff1a;IE11显示空白&#xff0c;编译后的Edge测试环境可以正常线上&#xff0c;打到线上报错&#xff0c;谷歌和百分浏览器显示完美 1、vue 只显示核心代码&#xff0c;需要安装vue-pdf插件 <vue-pdf :src"ivcPdfUrl"></v…

决策树分析及其在项目管理中的应用

决策树分析是一种分类学习方法&#xff0c;其主要用于解决分类和回归问题。在决策树中&#xff0c;每个内部节点表示一个属性上的测试&#xff0c;每个分支代表一个属性输出&#xff0c;而每个叶节点则代表类或类分布。通过从根节点到内部节点的路径&#xff0c;可以构建一系列…

commvault学习(6):备份oracle(包括oracle的安装)

1.环境 CS、MA&#xff1a;一台windows server2012 客户端&#xff1a;2台安装了oracle11g的windows server2008 1.1 windows server2008安装oracle11g &#xff08;1&#xff09;右击安装包内的setup&#xff0c;以管理员方式运行 &#xff08;2&#xff09;取消勾选接收安…

PFA容量瓶耐受强酸强碱进口特氟龙材质定容瓶

PFA容量瓶&#xff0c;也叫特氟龙容量瓶&#xff0c;是用于配制标准浓度溶液的实验室器皿&#xff0c;是有着细长颈、梨形肚的耐强腐蚀平底塑料瓶&#xff0c;颈上有标线&#xff0c;可直接配置标准溶液和准确稀释溶液以及制备样品溶液。 因其有着不易碎、材质纯净、化学稳定性…

用docker方式安装openGauss数据库的事项记录

文章目录 &#xff08;一&#xff09;背景&#xff08;二&#xff09;安装&#xff08;2.1&#xff09;安装docker&#xff08;2.2&#xff09;安装openGauss &#xff08;三&#xff09;运行&#xff08;3.1&#xff09;运行openGauss镜像&#xff08;3.2&#xff09;连接open…

docker安装【zookeeper】【kafka】【provectuslabs/kafka-ui】记录

目录 1.安装zookeeper:3.9.2-jre-172.安装kafka:3.7.03.安装provectuslabs/kafka-ui &#xff08;选做&#xff09;新环境没有jdk&#xff0c;安装jdk-17.0.10备用 mkdir -p /export/{data,apps,logs,conf,downloads}cd /export/downloadscurl -OLk https://download.oracle.…

ABAP json解析使用引用代替预定义数据结构

背景&#xff1a;在解析JSON数据时&#xff0c;通常会事先为定义相应的ABAP数据结构。但是&#xff0c;当遇到一些结构纵深较为复杂的情况时&#xff0c;会比较麻烦。 处理&#xff1a;使用引用类型来定义结构中的纵深部分来达到“省事”的目的&#xff0c;缺点在于访问时需要使…

rust中结构体的属性默认是不能修改的,要想修改可以有两种方式

Rust中结构体里面的属性默认是不支持修改的&#xff0c;而且默认不是pub的&#xff0c;要想修改的话&#xff0c;有两种方式&#xff0c;我以为和python里面的类似呢&#xff0c;但是还是需要一点技术含量的。如果想在引到外部修改&#xff0c;需要声明pub&#xff0c;如果想在…