U-Net:医学图像分割
引言
目前来说,深度神经网络的训练需要许多已经标记好的数据样本这一个观点已经得到了广泛的认同。而如何依赖于较少量(并不是指非常少)的数据样本来更有效地进行网络的训练是一个很值得关注的问题。因此,一些常用的数据增强技巧和新型的网络结构有时候确实能起到很好的作用。U-Net正是一种这样的例子。
U-Net的网络结构使用了一种逐渐收缩的路径来获取图像的关注点,同时又使用一个对称扩张结构来进行高精度的定位。该网络可以利用较少的数据样本实行端到端的训练,并且可以获得较好的实验结果。更重要的是,在目前的GPU环境下能够得到秒级的分割效率。
网络结构
网络结构主要分为两个部分:
左边是一个逐渐收缩的传统卷积网络。收缩一端重复使用了3x3的卷积,同时后接一个Relu单元和一个以步长为2的2x2的池化层。在每一次下采样的时候,都会将通道数加倍。
右边是一个逐渐扩增的网络路径,每次都使用2x2的卷积做上采样操作(此处的上采样是卷积操作!)。同时,会叠加左侧相对应的裁切的特征图(使用了更多的context信息),随后使用两个带ReLU的3x3的卷积操作。在最后一层的时候使用1x1的卷积做操作将特征向量映射为一个所希望的类别。
为了保证最终输出的分割结果中没有缝隙,需要保证每个输入的patch的尺寸均需要时2x2池化尺寸的偶数倍。
训练
使用未分割的图像及其对应的分割图像作为训练数据,优化算法使用随机梯度下降。由于使用了unpadded的卷积,输出图像会比输入图像小一个边。为了较小负载的同时最大化利用GPU内存,我们更倾向于使用大的patch替代大的batchsize,同时较小单张图像的batch。由于使用的较大的 momentum值, 大量之前见过的训练样本会决定本次的优化。(?)
能量函数使用的是基于最终的特征图做的pixel-wise softmax ,再加上 一个交叉熵损失函数。
p
k
(
x
)
=
exp
(
a
k
(
x
)
)
∑
k
′
=
1
K
exp
(
a
k
′
(
x
)
)
p_k({\bf x}) = \frac{\exp(a_k({\bf x}))}{\sum_{k'=1}^{K}\exp(a_{k'}({\bf x}))}
pk(x)=∑k′=1Kexp(ak′(x))exp(ak(x))
E
=
∑
x
∈
Ω
w
(
x
)
log
(
p
l
(
x
)
(
x
)
)
)
l
∈
{
1
,
2
,
⋯
K
}
E = \sum_{{\bf x}\in \Omega}w({\bf x})\log(p_{l({\bf x})}({\bf x}))) \quad l \in\{1,2,\cdots K\}
E=x∈Ω∑w(x)log(pl(x)(x)))l∈{1,2,⋯K}
w
w
w是一个权重图,来使得一些强调一些像素点的重要性。权重图是根据ground truth预算好的,用来补偿在类别边界地区的差异性,从而让网络更加关注这些边界区域。
w
(
x
)
=
w
c
(
x
)
+
w
0
⋅
exp
(
−
(
d
1
(
x
)
+
d
2
(
x
)
)
2
2
σ
2
)
w({\bf x}) = w_c({\bf x})+w_0\cdot\exp(-\frac{(d_1({\bf x}) + d_2({\bf x}))^2}{2\sigma^2})
w(x)=wc(x)+w0⋅exp(−2σ2(d1(x)+d2(x))2)
w
c
w_c
wc用来权衡类别的频数;
d
1
d_1
d1表示到最近一个类别的边界距离,
d
2
d_2
d2表示到第二个最近类别的边界距离。
在含有多路径和多层的深度神经网络中,权重的初始化是一个非常重要的关注点。否则会导致有些地方过度激活而有些地方却没有任何贡献。理想情况中在初始的网络参数下各个特征图应该具有近似单位阵的方差。U-Net使用高斯分布来初始化权重。
数据增强
当训练样本较少时,数据增强可以有效地提高网络的泛化性和鲁棒性。U-Net训练过程中,通过将图像平移,旋转、弹性形变、灰度变化等操作进行了数据增强。其中数据的随机弹性形变是一个非常关键的数据增强概念。
参考
[1]: U-Net: Convolutional Networks for Biomedical Image Segmentation