目录
论文下载链接指路:https://arxiv.org/abs/1505.04597
1.引言
CNN(卷积神经网络)在许多视觉识别任务中表现出色,但其成功训练通常需要大量的标注数据。然而,在biomedical image segmentation task,通常只有少量的标注图像可用。为此U-Net提出了一种基于数据增强(Data augmentation)的网络架构和训练策略,实现有效地利用有限的标注样本。U-Net的架构包括一个收缩路径和一个与之对称的扩展路径,这使得该网络能够从很少的图像中做到端对端训练。
1.1端到端训练(End to End Training)
这里仅作一些概念解释,关于U-Net中端到端训练特点,将在下文技术部分详细展开。
端到端训练是一种机器学习方法,其中模型从输入到输出的整个过程在一个整体框架中进行训练,即模型的直接接受原始输入数据,并最终输出预测结果,中间的所有步骤和转换都是在一个统一的模型中完成的,整个模型参数通过共同优化来进行调整。
在端到端训练中,模型的目标是最小化输入和输出之间的某种损失函数(①损失函数:衡量模型预测结果与真实标签之间的误差。②U-Net中使用的是在分类任务中常见的交叉熵损失函数)
2.网络架构
U-Net的架构主要有两个主要部分组成:收缩路径(Contracting Path)和扩展路径(Expansive Path),形成了一个对称的U型结构。
Fig1.U-Net的网络架构
2.1收缩路径
主要功能是逐步减小特征图的空间分辨率,同时增加特征图深度(即特征通道数),以提取图像的上下文信息。
2.1.1概述
收缩路径由多个卷积层和池化层交替组成,每个卷积层用于特征提取,而池化层用于下采样,减小特征图的尺寸,同时保留重要的特征信息。
2.1.2各层操作
每个操作模块包括两次卷积操作和一次池化操作,以下是逐层的详细解释:
1.第一层
输入图像块:572x572x1(单通道灰度图像)
卷积层1:
- 3x3卷积+ReLU,输出尺寸:570x570x64
- 这表示使用了64个卷积核,每个卷积核大小为3x3,输出特征图通道数变为64
卷积层2:
- 3x3卷积+ReLU,输出尺寸:568x568x64
- 继续使用64个卷积核,每个卷积核大小为3x3,输出特征图通道数保持64
最大池化层:
- 2x2最大池化(stride=2)
- 输出尺寸:284x284x64
2.第二层
卷积层3:
- 3x3卷积+ReLU,输出尺寸:282 x 282 x 128
- 这表示使用了128个卷积核,每个卷积核大小为3x3,输出特征图通道数变为128
卷积层4:
- 3x3卷积+ReLU,输出尺寸:280x280x128
- 继续使用128个卷积核,每个卷积核大小为3x3,输出特征图通道数保持128
最大池化层:
- 2x2最大池化(stride=2),输出尺寸:140x140x128
3.第三层
卷积层5:
- 3x3卷积+ReLU,输出尺寸:138x138x256
- 这表示使用了256个卷积核,每个卷积核大小为3x3,输出特征图通道数变为256
卷积层6:
- 3x3卷积+ReLU,输出尺寸:136x136x256
- 继续使用256个卷积核,每个卷积核大小为3x3,输出特征图通道数保持256
最大池化层:
- 2x2最大池化(stride=2)
- 输出尺寸:68x68x256
4.第四层
卷积层7:
- 3x3卷积+ReLU,输出尺寸:66x66x512
- 这表示使用了512个卷积核,每个卷积核大小为3x3,输出特征图通道数变为512
卷积层8:
- 3x3卷积+ReLU,输出尺寸:64x64x512
- 继续使用512个卷积核,每个卷积核大小为3x3,输出特征图通道数保持512
最大池化层:
- 2x2最大池化(stride=2)
- 输出尺寸:32x32x512
5.第五层(瓶颈层)
卷积层9:
- 3x3卷积+ReLU,输出尺寸:30x30x1024
- 这表示使用了1024个卷积核,每个卷积核大小为3x3,输出特征图通道数变为1024
卷积层10:
- 3x3卷积+ReLU,输出尺寸:28x28x1024
- 继续使用1024个卷积核,每个卷积核大小为3x3,输出特征图通道数保持1024
2.1.3卷积层详细解释
1.3*3卷积操作
3x3卷积操作是CNN中一种常用的卷积核尺寸,表示卷积核的宽度和高度均为3像素。具体来说,每个卷积核覆盖一个3x3的像素区域,并通过滑动窗口的方式在输入特征图上移动,以提取图像局部特征。
卷积操作公式的解释:
output:输出特征图的宽度或高度
input:输入特征图的宽度或高度
填充:在输入特征图的边缘添加的像素数,用于保持输出特征图的尺寸不变。常见的填充的有“valid(无填充)”和“same(填充使输出尺寸与输入相同)”
在U-Net的第一层卷积中:
- 输入尺寸:572
- 卷积核尺寸:3
- 填充:0(没有填充,即valid卷积)
- 步幅:1
根据公式,计算输出尺寸:
因此,经过卷积操作后,特征图的宽度和高度都变为570。
卷积操作公式[1]计算输出特征图的尺寸,具体卷积计算[2](详见滑动窗口部分)生成输出特征图,两者共同实现CNN中的特征提取和表示。
滑动窗口:卷积操作中卷积核在输入特征图上移动的过程,卷积核通过滑动窗口逐步覆盖输入特征图的每个局部区域,进行卷积计算。
- 窗口大小:滑动窗口的大小等于卷积核的尺寸即3*3
- 步幅(stride):滑动窗口每次移动的步长,卷积核每次移动1个像素
- 卷积计算:滑动窗口覆盖的每个位置上,卷积核与输入特征图的局部区域进行点积运算,生成输出特征图的一个像素值。
操作示例:假设我们有一个5*5的输入特征图,和一个3*3卷积核
输入特征图:
3*3卷积核:
滑动窗口在输入特征图上移动,每次覆盖3*3的区域,进行点积运算,并生成一个输出值。在U-Net中设置步幅为1且没有填充,输出特征图的尺寸为3*3:
其中每个输出值的计算如下[2]:
=(1*1)+(2*0)+(3*1)+(0*0)+(1*1)+(2*0)+(1*1)+(2*0)+(0*1)=7
以此类推,计算出所有的输出值。
特征提取:通过3*3卷积,网络可以捕获局部的空间特征,如边缘、纹理和简单的形状等。这些局部特征可以在后续层中进一步组合,形成更高级的特征表示。
2.ReLU激活函数
ReLU(rectified linear unit)激活函数是一种常用的非线性激活函数,其作用是引入非线性特性,是网络能够学习和表达更复杂的特征。
定义:
ReLU函数的公式为:.即如果输入
小于0,则输出0,否则输出
。
图像表示如下:
y
|
| /
| /
| /
| /
|------/----------------> x
引入非线性:
- 卷积操作本质上是线性变换,即使堆叠多个卷积层,输出仍然是输入的线性组合。线性模型的表达能力有限,难以处理复杂的非线性关系。
- ReLU激活函数通过将负值部分置0,引入非线性,使得网络能够学习和表示更复杂的特征和模式。
加速训练:
- ReLU函数计算简单,梯度为1(对于正值部分),避免了梯度消失问题,能够加速网络训练的收敛速度。【梯度消失问题:通常发生在深层神经网络中,尤其在使用sigmoid或tanh激活函数时,这些函数在输入值极端(非常大或非常小)时,其导数趋近于0,导致反向传播过程中梯度逐渐减小,使得网络难以训练】
- 与其他激活函数(eg.sigmoid或tanh)相比,ReLU函数具有更快的计算速度和更好的性能。
3.总结
每个3x3卷积操作后加上ReLU激活函数,能够确保网络在特征提取过程中引入非线性,增强特征表示能力,避免梯度消失问题,并提高训练效率。3x3卷积核能够捕获局部特征,ReLU激活函数则确保网络能够学习和表达复杂的非线性关系,这种组合使得U-Net在处理生物医学图像分割任务时具有优异的表现。
2.1.4(池化层)详细解释
池化层在CNN中起着减少空间分辨率、降低计算量、保留重要特征和提高不变性的作用。U-Net中选用最大池化层(Max Pooling)通过选择局部区域的最大值,强调显著特征,避免特征平滑,提高特征选择性。
1.最大池化层作用
最大池化层通过在输入特征图上滑动一个固定大小的窗口(通常是2x2窗口),选择窗口中的最大值作为输出特征图的一个像素值。
- 降低空间分辨率:减少特征图的宽度和高度,stride=2宽度和高度减少为原来的1/2,从而降低计算量。
- 保留重要特征:通过选择局部窗口的最大值,保留最显著的特征,使得网络能够更专注于重要特征。
- 增加不变性:增加特征对位置和形状变化的不变性,使网络对输入图像的平移、旋转等变化具有更强的鲁棒性。
2.最大池化层的计算过程
- 选择窗口大小:U-Net中选择2*2的窗口,即在每个2*2的局部区域内进行最大值选择。
- 滑动窗口:以步幅(stride=2)在输入特征图上滑动,即每次滑动两个像素。
- 选择最大值:在每个窗口内选择最大值作为输出特征图的对应像素值。
示例:
假设有一个4x4的输入特征图,使用2x2的最大池化窗口和步幅为2。(滑动顺序为从上到下,从左到右)
输出尺寸:
输入特征图
初始位置(左上角):
- 滑动窗口覆盖输入特征图的左上角2*2区域,
- 选择最大值:
滑动窗口右移:
- 滑动窗口向右移动2个像素,覆盖输入特征图的第3列和第4列。
- 选择最大值:
滑动窗口下移:
- 滑动窗口向下移动2个像素,覆盖输入特征图的第3行和第4行。
- 选择最大值:
滑动窗口向右移
- 滑动窗口向右移动2个像素,覆盖输入特征图的第3列和第4列。
- 选择最大值:
输出特征图
2.1.5收缩路径的特点和优势
- 多层卷积:
通过多层卷积操作,逐步提取图像的局部特征,并将其组合成更高级的抽象特征,增加了网络的表达能力。
- 逐步下采样:
每次池化操作后,特征图的空间分辨率减半,特征通道数增加,逐步捕获图像的全局上下文信息。
这种逐步下采样的过程有助于捕获更大的感受野,使网络能更好的理解图像的复杂结构和关系。
- 高效特征提取:
收缩路径通过交替的卷积和池化操作,高效地提取和压缩特征,使得后续的扩展路径能够利用这些高层次的特征进行精确分割。
2.1.6关于收缩路径的一些问题解答
Q1:为什么每层要设置两个卷积层?
A1:在CNN中,每层设置两个连续的卷积层是一种常见的设计策略,尤其在U-Net中,这种设计有助于提高网络的特征提取能力和表示能力,确保能够精确地定位和分割复杂的图像结构。
Q2:最大池化层究竟归于哪一层?
A2:最大池化层(Max Pooling Layer)的具体位置可以归属于它的上层卷积层或下层卷积层,主要取决于描述方式和设计意图。无论如何,最大池化层的主要作用是减少特征图的空间分辨率,提取显著特征,增加感受野,从而提高网络的计算效率和特征提取能力。在U-Net中,每个卷积层之后的最大池化操作帮助网络逐层提取更高层次的特征,并为后续的上采样提供了丰富的特征信息。
Q3:感受野为什么会随着层数增加而增大?
A3:感受野是指CNN中一个特定的神经元在输入层上所能看到的区域。感受野决定了一个神经元的输出值受到输入图像上多少区域的影响。在U-Net的收缩路径上,每次卷积操作都会增加感受野,因为每个卷积核都覆盖了一定范围的输入区域,最大池化的下采样操作通过整合更大范围的输入信息,显著增加感受野。
计算感受野:
-
第一层卷积:
- 卷积核大小:3x3
- 感受野:3x3
-
第二层卷积:
- 卷积核大小:3x3
- 感受野:5x5(因为每个神经元的感受野覆盖前一层的3x3区域,而前一层的每个神经元又各自有3x3的感受野,因此总的感受野是3 + 2 = 5)
-
最大池化:
- 池化窗口大小:2x2
- 步幅:2
- 感受野:10x10(因为每个池化单元覆盖的区域是2x2,而前一层的感受野是5x5,因此总的感受野是5 * 2 = 10)
Q4.为什么第五层被称为瓶颈层?
A4:因为它是网络中最狭窄的部分,同时也是特征信息最丰富的部分。
2.2扩展路径(Expansive Path)
扩展路径主要是用来逐步恢复在收缩路径中被压缩的特征图的空间分辨率。,同时结合跳跃连接的高分辨率特征,实现图像分割。扩展路径与收缩路径相对称,使U-Net形成一个对称大的U形结构。在这里我们再插入U-Net的网络架构图方便我们对照理解。
主要步骤
1.上采样(up-sampling):将特征图的分辨率恢复得更高。
2.跳跃连接(Skip Connections):将收缩路径中的高分辨率特征图与上采样后的特征图拼接。
3.卷积操作(Convolution Operations):对拼接后的特征图进行卷积,进一步提取和融合特征。
由于卷积操作我们在2.1.3已经涉及,下面的篇幅我们主要针对上采样卷积和跳跃连接两种操作展开。
2.2.1上采样操作的详细解读
上采样是将特征图的分辨率恢复到更高的一种操作。在U-Net中采用上采样卷积(up-conv)也称转置卷积或反卷积来实现上采样。上采样卷积通过扩展特征图来实现上采样的效果。
1.上采样卷积的原理
转置卷积的工作原理可以理解成为普通卷积的反向操作。普通卷积通过滑动卷积核在输入图像上进行操作,计算出输出特征图。而转置卷积则是通过将小的输入特征图“扩展”成更大的输出特征图,恢复其空间分辨率。
下面我们看一个2*2,步幅为2的转置卷积核是如何实现提高特征图分辨率的。
step1:输入特征图和步幅为2的2*2转置卷积核
输入特征图:
[ a, b ]
[ c, d ]
卷积核:
[ w1, w2 ]
[ w3, w4 ]
step2:初始化输出特征图
对于2x2输入特征图,使用2x2卷积核和步幅为2的情况,输出特征图尺寸为 (2-1)*2 + 2 = 4。 初始化一个全零的4x4输出特征图:
输出特征图:
[ 0, 0, 0, 0 ]
[ 0, 0, 0, 0 ]
[ 0, 0, 0, 0 ]
[ 0, 0, 0, 0 ]
step3:扩展操作
将输入特征图中的每个值乘以卷积核,并将结果添加到 输出特征图的相应位置。具体操作如下:
- 对于输入特征图中的第一个元素a,将卷积核应用到输出特征图的左上角:
a * w1 加到位置 (0, 0)
a * w2 加到位置 (0, 1)
a * w3 加到位置 (1, 0)
a * w4 加到位置 (1, 1)
更新后的输出特征图:
[ a*w1, a*w2, 0, 0 ]
[ a*w3, a*w4, 0, 0 ]
[ 0, 0, 0, 0 ]
[ 0, 0, 0, 0 ]
同理对输入特征图其余元素作上述操作,最后得到最终的输出特征图
[ a*w1, a*w2, b*w1, b*w2 ]
[ a*w3, a*w4, b*w3, b*w4 ]
[ c*w1, c*w2, d*w1, d*w2 ]
[ c*w3, c*w4, d*w3, d*w4 ]
2.上采样卷积的具体实现
在U-Net中,上采样卷积是使用2x2转置卷积,步幅为2。每次上采样操作会将特征图的空间分辨率提高一倍,同时将特征通道数减半。
上采样卷积会将分辨率提高为原来的一倍
1.步幅为2:转置卷积通过在输入特征图中插入零元素,并使用步幅为2的卷积核进行卷积操作,使输出特征图的每个维度增加一倍。
2.卷积核大小:使用2x2的卷积核在插入零元素的特征图上滑动,每个卷积核的输出结果被放置在输出特征图的相应位置,从而实现分辨率的增加。
上采样卷积会将特征通道数减半
1.卷积核数量:在上采样过程中,转置卷积的卷积核数量设置为输入通道数的一半,这样可以控制输出特征图的通道数。
2.信息融合:通过减少通道数,可以更有效地整合高分辨率的特征信息,同时降低计算复杂度。
2.2.2跳跃连接详细解读
在U-Net中提到的“Copy and Crop”操作就是跳跃连接的一部分,它的作用是将收缩路径中的特征图直接复制后进行裁剪,然后与扩展路径中的上采样特征图进行拼接。这种操作保留了细节信息,增强了特征融合。
2.2.3U-Net扩展路径详细过程
从瓶颈层到第四层
-
瓶颈层
- 输入特征图尺寸:28x28x1024
- 经过两次3x3卷积和ReLU激活,输出特征图尺寸:28x28x1024
-
上采样操作
- 使用2x2转置卷积(Transposed Convolution),将28x28x1024的特征图上采样到56x56x512
-
跳跃连接
- 从收缩路径中获取对应层的特征图:56x56x512
- 拼接特征图:将56x56x512的特征图与上采样后的特征图拼接,得到56x56x1024
-
卷积操作
- 使用两个3x3卷积和ReLU激活,输出尺寸:52x52x512
从第四层到第三层
-
上采样操作
- 使用2x2转置卷积,将52x52x512的特征图上采样到104x104x256
-
跳跃连接
- 从收缩路径中获取对应层的特征图:104x104x256
- 拼接特征图:将104x104x256的特征图与上采样后的特征图拼接,得到104x104x512
-
卷积操作
- 使用两个3x3卷积和ReLU激活,输出尺寸:100x100x256
从第三层到第二层
-
上采样操作
- 使用2x2转置卷积,将100x100x256的特征图上采样到200x200x128
-
跳跃连接
- 从收缩路径中获取对应层的特征图:200x200x128
- 拼接特征图:将200x200x128的特征图与上采样后的特征图拼接,得到200x200x256
-
卷积操作
- 使用两个3x3卷积和ReLU激活,输出尺寸:196x196x128
从第二层到第一层
-
上采样操作
- 使用2x2转置卷积,将196x196x128的特征图上采样到392x392x64
-
跳跃连接
- 从收缩路径中获取对应层的特征图:392x392x64
- 拼接特征图:将392x392x64的特征图与上采样后的特征图拼接,得到392x392x128
-
卷积操作
- 使用两个3x3卷积和ReLU激活,输出尺寸:388x388x64
最后一层(输出层)
- 卷积操作
- 使用1x1卷积将388x388x64的特征图通道数减少到所需的输出通道数(例如1个通道用于二分类)
- 最终输出尺寸:388x388x1(假设进行二分类)
2.2.4关于扩展路径一些问题的解答
Q1.为什么输出层最后要使用1x1卷积操作将特征图通道数转为2?
A1:医学图像分割任务中,目标是将特定的解剖结构(如肿瘤、器官)从背景中分离出来。因此,图像的每个像素要么属于目标,要么属于背景,这就是二分类问题。在 U-Net 中,为了实现二分类输出,需要在最后一层使用2个1x1卷积将特征图的通道数转换为所需的输出通道数。
具体示例
假设在扩展路径的最后一层,我们的特征图尺寸为 ,我们希望将其转换为二分类输出,即每个像素要么属于目标类,要么属于背景类。具体步骤如下:
输入特征图:
1x1卷积核:
这里我们使用2个1x1卷积核,因为我们需要两个输出通道,分别表示目标类和背景类。
通过1x1卷积操作(这里的*是卷积运算符)
得到特征图的尺寸为.