目录
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进行优化不是单方面进行的,意味着你可以在各个方面同时进行优化,比如同时对编码器和跳跃连接路径进行优化。或者,在编码器优化时,同时使用空洞卷积和自适应路径等,提出一种空洞卷积自适应的模块。
但同时,不是说组合的模块越多,网络优化效果就一定越好。引入的模块越多,他会导致模型的参数量越大,与此同时,模型的训练难度也就越大。如何在模型性能与轻量化之间做好平衡,也是我们需要进行考虑的。