[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation


论文地址:
https://arxiv.org/abs/1505.04597
代码地址:
http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net
https://github.com/zhixuhao/unet
https://github.com/yihui-he/u-net
https://blog.****.net/u014722627/article/details/60883185
https://www.cnblogs.com/CZiFan/p/10799472.html

补充材料:
https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/


论文翻译

[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation

摘要

成功训练一个深度网络需要大量已标注的训练样本。在这篇论文中,我们提出了一个新的网络和训练策略。为了更有效的利用标注数据,我们使用数据扩张的方法(data augmentation)。我们的网络由两部分组成:一个收缩路径(contracting path)来获取上下文信息以及一个对称的扩张路径(expanding path)用以精确定位。我们使用这个网络获得了赢得了ISBI cell tracking challenge 2015。不仅如此,这个网络非常的快,对一个512*512的图像,使用一块GPU只需要不到一秒的时间。网络获取地址(基于caffe):http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net

1. 介绍

在过去的两年中,深度卷积网络在许多视觉识别任务中的表现都超过了当前的技术水平。虽然卷积网络已经存在很长时间了,但是由于可用训练集的大小和考虑的网络的大小,它们的成功是有限的。Krizhevsky等人对[7]的突破是由于对一个8层的大网络进行了监督训练,在100万张训练图像的ImageNet数据集上有数百万个参数。从那时起,甚至更大更深的网络被训练成[12]。

卷积网络的典型用法是在分类任务中,图像的输出是单个类标签。然而,在许多视觉任务中,特别是在生物医学图像处理中,需要的输出应该包括定位,即定位。类标签应该被分配给每个像素。此外,成千上万的训练图像通常超出了生物医学任务的范围。因此,Ciresan等人在滑动窗口设置中训练网络,通过提供像素周围的局部区域(patch)作为输入来预测每个像素的类标签。首先,这个网络可以完成定位工作。其次,以patch表示的训练数据远远大于训练图像的数量。这个网络以绝对优势赢得了ISBI 2012的EM分割挑战赛(EM segmentation challenge)。

显然,Ciresan等人的[1]策略有两个缺点。首先,它非常慢,因为每个patch(补丁)都必须单独运行网络,而且由于重叠的patch存在大量冗余。其次,要在局部准确性获取整体上下文信息之间存在权衡。较大的patch需要更多的最大池层,这会降低定位精度,而较小的patch只允许网络看到很少的上下文。最近的一些方法[11, 4]提出了一种考虑多层特征的分类器输出。好的定位和上下文的使用是可以同时进行的。

在本文中,我们构建了一个更优雅的架构,即所谓的“全卷积网络”(fully convolutional network)[2]。我们修改和扩展了这个架构,使其可以仅使用少量训练图片就可以工作,获得更高的分割准确率,网络如下图所示。因此,这些层增加了输出的分辨率。为了进行定位,收缩路径的高分辨率特征与上采样输出相结合。然后,一个连续的卷积层可以学习根据这些信息组装更精确的输出。
[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation
Fig.1: U-net架构(最低分辨率为32x32像素的示例)。每个蓝色框对应于多通道特征图。通道数在框顶部表示。x-y尺寸提供在盒子的左下边缘。白框表示复制的特征图。箭头表示不同的操作。

我们架构中的一个重要修改是,在上采样部分,我们还有大量的特征通道,这些通道允许网络将上下文信息传播到更高分辨率的层。因此,扩展路径或多或少与收缩路径对称,并产生一个U型架构。网络没有任何完全连接的层,只使用每个卷积的有效部分,即,分割图只包含在输入图像中提供完整上下文的像素。该策略允许通过重叠策略对任意大的图像进行无缝分割(见图2)。为了预测图像边界区域的像素,通过镜像输入图像来推断缺失的上下文。这种平铺策略对于将网络应用于大型图像非常重要,否则分辨率将受到GPU内存的限制。

[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation
Fig.2: 用于任意大图像的无缝分割的重叠平铺策略(这里是EM堆栈中神经元结构的分割)。预测黄色区域中的分割,需要蓝色区域内的图像数据作为输入。 通过镜像推断缺少输入数据。

对于我们的任务,可用的训练数据很少,我们通过对可用的训练图像应用弹性变形来使用过量的数据扩充。这使得网络可以学习这些变形的不变性,而不需要在带注释的图像语料库中查看这些转换。这在生物医学分割中尤为重要,因为变形曾经是组织中最常见的变化,而真实的变形可以有效地模拟。

Dosovitskiy等人的[2]研究表明,在无监督特征学习的范围内,数据增强对学习不变性的价值。在许多细胞分割任务中的另一个挑战是分离相同类的触摸对象(见图3)。为此,我们建议使用加权损失,即接触细胞之间的分离背景标签在损失函数中获得较大的权重。

[论文笔记]:U-Net: Convolutional Networks for Biomedical Image SegmentationFig.3: 用DIC(微分干涉对比)显微术记录的玻璃上的HeLa细胞。(a)原始图像。(b)覆盖真确标记的标签的分割。 不同的颜色表示HeLa细胞的不同情况。(c)生成分割掩膜(白色:前景,黑色:背景)。(d)以像素为单位的权重映射,以迫使网络学习边界像素。

得到的网络适用于各种生物医学分割问题。在这篇论文中,我们展示了在EM栈(一个正在进行的竞争始于ISBI 2012年)中神经元结构的分割结果,我们在这方面的表现优于Ciresan等人的[1]网络。此外,我们在2015年ISBI细胞追踪挑战赛的光镜图像中展示了细胞分割的结果。在这里,我们获得了两个最具挑战性的2D透射光数据集的巨大优势。

2. 网络结构

网络架构如图1所示。它由收缩路径(左侧)和扩展路径(右侧)组成。契约路径遵循典型的卷积网络架构。它包括重复应用两个3×33\times3的卷积(无填充卷积)(整体以3×33\times3卷积为主),每个卷积后面都有一个校正的线性单元(ReLU)和一个2×22\times2最大池操作,其中步长stride=2stride=2用于下采样。在每个向下采样的步骤中,我们将特征通道的数量增加一倍。每一步的扩张路径由一个上采样upsampling特性映射,后跟2×22\times2卷积(“up-convolution”)将特征通道数量减半,与来自收缩路径的相应裁剪特征映射串联,以及两个3×33\times3卷积,每一个都有ReLU紧随其后。因为在每个卷积中边界像素的损失,裁剪是必要的。为了实现输出分割图的无缝平铺(参见图2),选择输入切片大小非常重要,以便将所有2×22\times2最大池操作应用到具有偶数xxyy大小的层。

3. 训练

利用Caffe的随机梯度SGD下降法训练网络。

由于未经填充的卷积,输出图像比输入图像的边界宽度要小一个常数。

为了最大限度的使用GPU显存,比起输入一个大的batch size,我们更倾向于大量输入tiles,将批处理减少到单个图像。我们使用了很高的momentum(0.99),以便大量看到以前的训练样本确定当前优化步骤中的更新。最后一层使用交叉熵函数与Softmax。

交叉熵函数为:

E=xΩw(x)log(pl(x)(x))E=\sum_{x\in \Omega}w(x)log(p_{l(x)}(x))

Softmax为:

pk(x)=exp(ak(x))/(k=1Kexp(ak(x)))p_k(x)=exp(a_k(x))/(\sum_{k^{'}=1}^K exp(a_{k^{'}}(x)))

其中,ak(x)a_k(x)代表第kk个通道,第xΩx\subset \Omega个位置的**,其中,ΩZ2\Omega\subset Z^2KK是类的数量,pk(x)p_k(x)是近似的最大函数。例如,对kkpk(x)1p_k(x)\approx 1有最大的**ak(x)a_k(x),对其他kkpk(x)1p_k(x)\approx 1。交叉熵在每个位置惩罚pl(x)(x)p_{l(x)}(x)11的偏差。l:Ω{1,,K}l:\Omega \rightarrow\{1,\cdots, K\}是每个像素的真实标签,ΩR\Omega \rightarrow R是一个权重图。

为了使某些像素点更加重要,我们在公式中引入了w(x)w(x)。我们对每一张标注图像预计算了一个权重图,来补偿训练集中每类像素的不同频率,使网络更注重学习相互接触的细胞之间的小的分割边界。我们使用形态学操作计算分割边界。权重图计算公式如下:

w(x)=wc(x)+w0exp((d1(x)+d2(x))22σ2)w(x)=w_c(x)+w_0\cdot exp(-\frac{(d_1(x)+d_2(x))^2}{2\sigma^2})

其中,wc:ΩRw_c:\Omega \rightarrow R是平衡类频率的权重映射,d1:ΩRd_1:\Omega \rightarrow R代表最近细胞到边界的距离,d2:ΩRd_2:\Omega \rightarrow R代表第二近细胞到边界的距离,在实验中设置为w0=10w_0=10σ=5\sigma=5像素。

网络中权重的初始化:

我们的网络的权重由高斯分布初始化,分布的标准差为2/N\sqrt{2/N}NN为每个神经元的输入节点数量。例如,对于一个上一层是6464通道的3×33\times3卷积核来说,N=9×64=576N = 9\times64 = 576

3.1 数据增强

当只有很少的训练样本可用时,数据增强是让网络获得不变性和鲁棒性的关键。对于本论文要处理的显微镜下的图像,我们首先需要的是平移和旋转不变性,以及对形变和灰度变化的鲁棒性。将训练样本进行随机弹性形变是训练分割网络的关键。我们使用随机位移矢量在粗糙的3×33\times3网格上生成平滑变形(smooth deformations)。位移是从1010像素标准偏差的高斯分布中采样的。然后使用双三次插值计算每个像素的位移。在contracting path的末尾采用v层更进一步增加数据。(即,主要做了两个方面的数据增强:1. 图片的形变处理;2. Dropout层的使用
(就 IBSI 2012 数据集来讲,它仅仅有 30 张 512×512512\times512 的图像作为训练集)

4. 实验

我们演示了U-Net在三个不同的细分任务中的应用。第一个任务是电子显微记录中神经元结构的分割。图2显示了一个数据集示例和我们获得的分段。我们提供完整的结果作为补充资料。数据集是由EM分割挑战[14]提供的,该挑战始于2012年ISBI会议,目前仍对新的贡献开放。训练数据是一组3030张果蝇一龄幼虫腹神经索(VNC)连续切片透射电镜图像(512×512512\times512像素)。每个图像都配有相应的完全注释的细胞(白色)和细胞膜(黑色)的地面真相分割地图。测试集是公开的,但其分割地图是保密的。通过将预测的膜概率图发送给组织者,可以得到评价。评估是通过在1010个不同的水平上对地图进行阈值化,并计算“扭曲误差”、“Rand误差”和“像素误差”[14]。U-Net(平均超过77个旋转版本的输入数据)在没有进一步预处理或后处理的情况下获得了0.00035290.0003529的翘曲误差(新的最佳值,见表1)和0.03820.0382的随机误差。

这明显优于Ciresan等人的滑动窗口卷积网络结果,[1]的最佳提交的翘翘误差为0.0004200.000420,rand误差为0.05040.0504。就rand误差而言,在这个数据集上唯一性能更好的算法是使用Ciresan等人的概率图上应用的高度数据集特定的后处理方法。我们也将U-Net应用到光镜下的细胞分割任务中。这项分段任务是2014和2015年ISBI细胞跟踪挑战的一部分[10,13]。第一组数据集“PhC-U373”2包含胶质母细胞瘤-星形细胞瘤U373细胞,这些细胞位于聚丙烯酰亚胺基质上,通过相衬显微镜记录(见图4a、b和Supp.材料)。它包含3535个部分注释的训练图像。这里我们实现平均借据(“十字路口在联盟”)的$92%$,这是明显比第二个最好的算法为83%83\%(见表2)。第二个数据集“DIC-HeLa”3海拉细胞在平板玻璃(DIC)微分干涉对比显微镜记录的(参见图3,图4 c, d和增刊。材料)。它包含2020个部分注释的训练图像。在这里,我们实现了77.5%77.5\%的平均IOU,明显好于第二好的算法(46%46\%)。

[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation
[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation
Fig. 4: ISBI细胞追踪挑战的结果。(a)"PhC-U373"数据集的输入图像的一部分。(b)具有手动正确标记的分割结果(青色掩膜 + 黄色边框)(c)"DIC-HeLa"数据集的输入图像。(d)具有手动正确标记的分割结果(黄色边框 + 随机彩色掩膜)。
[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation

5. 结论

U-Net架构在非常不同的生物医学分割应用上取得了非常好的性能。由于数据增加与弹性变形,它只需要非常少的注释图像,并有一个非常合理的训练时间只有10小时,在NVidia Titan GPU (6GB)。我们提供完整的基于[6]的实现和训练有素的网络。我们确信U-Net体系结构可以很容易地应用于更多的任务。


内容总结

U-Net 网络架构

  • 左侧:收缩路径遵循典型卷积神经网络的的结构, 重复使用的223×33\times3 卷积(无填充卷积),每一组卷积后紧跟着一个ReLU和一个步长为 222×22\times2 的最大池化max pooling操作进行下采样,每次下采样后将特征通道feature channel的数目变为原来 22 倍。

  • 右侧:扩张路径中每一步都包含对特征映射进行上采样紧跟着一个 2×22\times2 的卷积,将特征通道feature channel的数目变为原来 1/21/2 倍,与来自收缩路径的对应的裁剪特征图feature map进行连接,以及223×33\times3 卷积,每个卷积后都跟随着一个ReLU。由于边缘像素的丢失,在拼接之前进行crop 裁剪特征图feature map是必要的,因为两者的尺寸并不相同(主要是因为 valid conv 造成的)。在最后一层,111×11\times1 的卷积将每6464个分量特征向量映射到一个类标签。

  • 整个网络有23个卷积层。

网络对于输入的大小也是有要求的。为了使得输出的分割图无缝拼接,重要的是选择输入块的大小,以便所有的 2×22\times2 的池化层都可以应用于偶数的 xx 层和 yy 层。一个比较好的方法是从最下的分辨率从反向推到,比如说在网络结构中,最小的是 32×3232\times32 ,沿着收缩路径的反向进行推导可知,输入图像的尺寸应该为 572×572572\times572

[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation

最大池化层,下采样过程:

输入为572×572572\times572的灰度图,经过223×3×643\times3\times64(64个卷积核,得到64个特征图)的卷积核进行卷积操作后,变为568×568×64568\times568\times64大小的图像。然后进行2×22\times2的最大池化操作变为284×284×64284\times284\times64。(3×33\times3卷积之后跟随有ReLU非线性变换)。

按照上述过程重复进行44次,即进行 (3×33\times3 卷积 + 2×22\times2 池化)x 4次,在每进行一次池化之后的第一个3×33\times3卷积操作,3×33\times3卷积核数量成倍增加。

达到最底层时即第44次最大池化之后,图像变为32×32×51232\times32\times512大小,然后再进行22次的3×3×10243\times3\times1024的卷积操作,最后变化为28×28×102428\times28\times1024的大小。

反卷积层,上采样过程:

此时图像的大小为28×28×102428\times28\times1024,首先进行2×22\times2的反卷积操作使得图像变化为56×56×51256\times56\times512大小,然后对对应最大池化层之前的图像的复制和剪裁(copy and crop),与反卷积得到的图像拼接起来得到56×56×102456\times56\times1024大小的图像,然后再进行3×3×5123\times3\times512的卷积操作。

按照上述过程重复进行44次,即进行(2×22\times2 反卷积 + 3×33\times3 卷积)x 4次,在每进行一次拼接之后的第一个3×33\times3卷积操作,3×33\times3卷积核数量成倍减少。

达到最上层时即第44次反卷积之后,图像变为392×392×64392\times392\times64的大小,进行复制和剪裁然后拼接得到392×392×128392\times392\times128的大小,然后再进行两次3×3×643\times3\times64的卷积操作,得到388×388×64388\times388\times64大小的图像,最后再进行一次1×1×21\times1\times2的卷积操作。

深度学习—图像卷积与反卷积(最完美的解释)

U-Net究竟输入了什么

首先,数据集我们的原始图像的尺寸都是512×512512 \times 512的。为了能更好的处理图像的边界像素,U-Net使用了镜像操作(Overlay-tile Strategy)来解决该问题。镜像操作即是给输入图像加入一个对称的边(图2),那么边的宽度是多少呢?一个比较好的策略是通过感受野确定。因为有效卷积是会降低Feature Map分辨率的,但是我们希望512×512512 \times 512的图像的边界点能够保留到最后一层Feature Map。所以我们需要通过加边的操作增加图像的分辨率,增加的尺寸即是感受野的大小,也就是说每条边界增加感受野的一半作为镜像边。
[论文笔记]:U-Net: Convolutional Networks for Biomedical Image Segmentation
根据图1中所示的压缩路径的网络架构,我们可以计算其感受野:

rf=(((0×2+2+2)×+2+2)×2+2+2)×2+2+2=60rf=(((0\times2+2+2)\times+2+2)\times2+2+2)\times2+2+2=60

这也就是为什么U-Net的输入数据是572×572572\times572的。572572的卷积的另外一个好处是每次降采样操作的Feature Map的尺寸都是偶数,这个值也是和网络结构密切相关的。

训练

  • Input/Output:输入为572×572572\times572分辨率的图像,标签为388x388的分割图;
  • Batch-size:batch_size为11
  • Optimizer:SGD(随机梯度下降)优化器,momentum(动量)为0.990.99
  • Criterion:交叉熵损失函数,通过预先计算每个真实分割的权重图,来补偿训练集中不同类别的不同频率,并迫使网络学习我们的触摸单元之间引入的小分离边界。分离边界使用形态学操作来计算,计算权重图通过公式w(x)=wc(x)+w0exp((d1(x)+d2(x))22σ2)w(x)=w_c(x)+w_0\cdot exp(-\frac{(d_1(x)+d_2(x))^2}{2\sigma^2}),其中,wc:ΩRw_c:\Omega \rightarrow R是平衡类频率的权重映射,d1:ΩRd_1:\Omega \rightarrow R代表最近细胞到边界的距离,d2:ΩRd_2:\Omega \rightarrow R代表第二近细胞到边界的距离,在实验中设置为w0=10w_0=10σ=5\sigma=5像素;
  • initialize:文中提出使用标准偏差为2/N\sqrt{2/N}的高斯分布来初始化卷积网络的kernel,其中NN表示一个神经元输入节点的数量。例如,对于一个上一层是6464通道的3×33\times3卷积核来说,N=9×64=576N = 9\times64 = 576
  • data augmentation:文中主要使用移位、旋转、变形、灰度值变化等数据增强方法,其中似乎是训练样本的随机弹性变形是训练具有很少标签的分割网络的关键。文中使用随机位移矢量在粗糙的3×33\times3网络上生成平滑变形,位移从1010像素便准偏差的高斯分布中采样,然后使用双三次插值计算每个像素位移。下采样路径末尾的dropout层执行进一步的隐式数据增强(这一点似乎网络结构图没有体现,按文中的意思应该是在下采样路径末尾加入了dropout层从而防止过拟合而达到相当于图像增强的效果)。

输入图像和它对应的分割特征图是使用随机梯度下降SGD进行训练网络。 但是由于无填充卷积,输出的边界比输入小一个恒定的边界框度,为了最大限度地降低开销并最大限度地利用GPU内存,我们倾向于在大批量大小的情况下使用大的输入切片,将批量缩小为单个图像。因此,我们使用一个高动量 momentum=0.99。动量设这么大的原因是这样可以使用大量先前看到的训练样本确定当前最优步骤中的更新。相比于大的 batchsize,作者喜欢大的 input tiles (指的是 oveelap-tile)中的那种图像块,因此我们可以将一个 batch 缩小为一个当张图片的输入。

通过在最后的特征图上softmax的输出结果计算交叉熵损失函数,以此来作为整个网络的损失函数。其中 softmax 输出层的计算方法如下:

pk(x)=exp(ak(x))/(k=1Kexp(ak(x)))p_k(x)=exp(a_k(x))/(\sum_{k^{'}=1}^K exp(a_{k^{'}}(x)))

其中,ak(x)a_k(x)代表在位置xx处的像素在特征图中的第kk层的**值,其中,xΩx\in \OmegaΩZ2\Omega\subset Z^2,即xx属于空间Ω\Omega,而空间Ω\Omega是整数集合Z2Z^2的子集。KK是像素点的类别总数,pk(x)p_k(x)是近似最大函数。这里面的定义和我们平时使用的 softmax 是一样的。损失函数是交叉熵损失函数,或者也可以成为 log-likelihood,具体如下所示:

E=xΩw(x)log(pl(x)(x))E=\sum_{x\in \Omega}w(x)log(p_{l(x)}(x))

为了使某些像素点更加重要,我们在公式中引入了w(x)w(x)。我们对每一张标注图像预计算了一个权重图,来补偿训练集中每类像素的不同频率,使网络更注重学习相互接触的细胞之间的小的分割边界。我们使用形态学操作计算分割边界。权重图计算公式如下:

w(x)=wc(x)+w0exp((d1(x)+d2(x))22σ2)w(x)=w_c(x)+w_0\cdot exp(-\frac{(d_1(x)+d_2(x))^2}{2\sigma^2})

其中,wc:ΩRw_c:\Omega \rightarrow R是平衡类频率的权重映射,d1:ΩRd_1:\Omega \rightarrow R代表最近细胞到边界的距离,d2:ΩRd_2:\Omega \rightarrow R代表第二近细胞到边界的距离,在实验中设置为w0=10w_0=10σ=5\sigma=5像素。

网络中权重的初始化:

我们的网络的权重由高斯分布初始化,分布的标准差为2/N\sqrt{2/N}NN为每个神经元的输入节点数量。例如,对于一个上一层是6464通道的3×33\times3卷积核来说,N=9×64=576N = 9\times64 = 576

本文的创新点

  1. 提出了 U-net 这种网络结构。它同时具有捕捉上下文信息的收缩路径和允许精确定位的对称扩展路径;并且与 FCN 相比,U-net 的上采样依然有大量的通道,这使得网络将上下文信息向更高层分辨率传播。改进了FCN,把扩展路径完善了很多,多通道卷积与类似FPN(特征金字塔网络)的结构相结合。
  2. Overlap-tile 策略。这种方法用于补全输入图像的上下文信息,可以解决由于现存不足造成的图像分块输入的问题。
  3. 使用随机弹性形变进行数据增强。
  4. 使用加权损失。预先计算权重图,一方面补偿了训练数据每类像素的不同频率,另一方面使网络更注重学习相互接触的细胞间的边缘。

但是上面的这些创新点并不是适合所有的任务,比如说对刚体进行分割,那么就很难通过弹性形变进行数据增强。

实践中需要注意的技巧

  1. 因为使用了 valid conv ,所以采用 Overlap - tile 策略补充图像,其中空白的部分用镜像的方法进行补充。
  2. 因为有池化层,因此要保证输入的图像在经过每一次池化的时候都要是边长偶数。这点与与一般的卷积神经网络不同,因为一般的网络会使用 padding ,这样会保证卷积前后的大小不变,但是 valid conv 会使卷积后的尺寸变小,所以要特别注意输入图像的尺寸。一个比较好的方法是从最小分辨率出发沿收缩路径的反方向进行计算,得到输入图像的尺寸。
  3. 预先计算权重图,以此计算后面的加权损失函数
  4. 加权损失的权重中有一部分是经验值,因此对于不同的任务可以进行调整(只是理论上可以进行调整,并没有试验过)
  5. 使用标准差为2/N\sqrt{2/N}的高斯分布来进行初始化,其中需要注意的是,对于不同的卷积层,N 的大小也是不同的。
  6. 在收缩路径的最后部加入了 dropout ,隐式地加强了数据增强。

U-net 与 FCN 的不同

FCN(fully convolutional network)的主要思想是:使用连续的层补充通常的收缩网络,其中的池化层被上采样层取代。因此这些曾增加了输出层的分辨率。为了使用局部的信息,在网络收缩过程(路径)中产生的高分辨率特征(high resolution features) ,被连接到了修改后网络的上采样的结果上。基于这个信息,一个连续的卷积层可以学习组装(集成)更精确的输出。

这种策略使得我们通过一个 Overlap-tile 策略可以使得任意大小的输入图像都可以获得一个无缝分割。

U-Net与FCN(fully convolutional natwork)不同的是,U-Net在上采样部分依然有大量的特征通道(feature channels),这使得网络可以将上下文信息向更高的分辨率层(higher resolution layers)传播。结果是,扩张路径基本对称于收缩路径,形成一个U的形状。网络不存在任何全连接层FC layers(fully connected layers),并且,只使用每个卷积的有效部分。例如,分割图(segmentation map)只包含这样一些像素点,这些像素点的完整上下文都出现在输入图像中。为了预测图像边界区域的像素点,我们采用镜像图像的方式补全缺失的环境像素。这种策略使得我们通过一个 Overlap-tile 策略可以使得任意大小的输入图像都可以获得一个无缝分割。因为如果不这么做,GPU显存会限制图像分辨率。

图3是针对任意大小的输入图像的无缝分割的 Overlap-tile 策略。如果我们要预测黄色框内区域(即对黄色的内的细胞进行分割,获取它们的边缘),需要将蓝色框内部分作为输入。缺失的数据使用镜像进行补充。因为进行的是 valid 卷积(即上文讲的只取有效部分,可以理解为 0 padding),所以需要取比黄色框大的图像来保证上下文的信息是有意义的,缺失的部分用镜像的方法补充是填充上下文信息最好的方法。

或许你会有一个问题,为什么作为一种全卷积神经网络不直接输入整张图像,还在做分块呢?答案是因为内存限制,需要分块输入。虽然还是要分块处理,但比之前的滑窗取块要好很多,一方面不用取那么多块,另一方面块之间也没有那么大的区域重叠。通过Overlap-tile 策略可以将图像分块输入,否则的话就只能对图像进行 resize 了,但是这样会降低输入图像的分辨率。

由于我们的训练数据太少,因此我们采用弹性形变的方式增加数据。这可以让模型学习得到形变不变性。这对医学图像分割是非常重要的,因为组织的形变是非常常见的情况,并且计算机可以很有效的模拟真实的形变。在[3]中指出了在无监督特征学习中,增加数据以获取不变性的重要性。

在细胞分割任务中的另一个挑战是,如何将同类别的相互接触的目标分开。我们提出了使用一种带权重的损失(weighted loss)。在损失函数中,分割相互接触的细胞获得了更大的权重。

几点解析

1、文中所说的Ciresan训练了一种滑窗网络的定位准确性和上下文间不可兼得问题:

因为大的patches需要更多的max-pooling层这样减小了定位准确性(为什么?因为你是对以这个像素为中心的点进行分类,如果patch太大,最后经过全连接层的前一层大小肯定是不变的,如果你patch大就需要更多的pooling达到这个大小),因为Pooling层会降低分辨率,丢失信息),而小的patches只能看到很小的局部信息,包含的背景信息不够。许多现在的方法使用不同层的特征来同时兼容定位和利用context。

2、网络结构中的一些问题:

右边的网络expansive path:使用上采样与左侧contracting path ,pooling层的featuremap相结合,然后逐层上采样到392X392的大小heatmap。(pooling层会丢失图像信息和降低图像分辨率且是不可逆的操作,对图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样?:因为上采样可以补足一些图片的信息,但是信息补充的肯 定不完全,所以还需要与左边的分辨率比较高的图片相连接起来(直接复制过来再裁剪到与上采样图片一样大小),这就相当于在高分辨率和更抽象特征当中做一个折中,因为随着卷积次数增多,提取的特征也更加有效,更加抽象,上采样的图片是经历多次卷积后的图片,肯定是比较高效和抽象的图片,然后把它与左边不怎么抽象但更高分辨率的特征图片进行连接),我在这里有一个想法,可不可不做串联(concat),将左边复制裁剪后的特征与右边相对于的特征做elementwise操作会怎么样?

3、网络输出与Loss问题

网络在扩张路径最后经过了两次卷积,达到最后的heatmap,再用一个1X1的卷积做分类,有没有发现这里最终输出的是两个通道的特征图,这里是分成两类,背景和前景,因为这个是对医学图像做的处理,只分背景和前景,所以用的是两个神经元做卷积,得到最后的两张heatmap,例如第一张表示的是第一类的得分(即每个像素点对应第一类都有一个得分),第二张表示相同位置的像素点的第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax类,选择它作为输入给交叉熵进行反向传播训练。

在这里有一个权重的分配问题:

w(x)=wc(x)+w0exp((d1(x)+d2(x))22σ2)w(x)=w_c(x)+w_0\cdot exp(-\frac{(d_1(x)+d_2(x))^2}{2\sigma^2})

这是给像素分配权重然后进行加权,d1(x)表示图中某一背景像素点到离这个点最近的细胞边界的距离,d2(x)表示离这个像素点第二近的细胞的距离,你们可以举一下特例算一下这个权重公式会发现(距离越远,后面那一块越小,几乎为0,所以你看到的远离细胞的地方,基本上权值都是一样的,接近于Wc),即在细胞边界附近的像素点给的权重会大一些,离细胞比较远的像素点的权重会小一些,为什么这么做呢?因为,如果同类细胞贴的比较近,可能就会增大训练的难度,减少准确率,毕竟卷积会考虑该像素点周围的一些特征,而两个相同的类的细胞贴在一起,就容易误判,所以对这种两个相同类贴在一起的细胞边界,给予较大的权重,使的训练之后分类分割更准确。

4、图像输入与输出不一样大的问题:

网络的输入与输出的图像不一样大,因为在网络做卷积的过程中没有进行pad,导致每次卷积都会有些损失,到最后导致输出小于输入,其实在进行Loss回归的过程中,是用金标准上的每个点与输出的图像的每个点进行对比,然后得到Loss,但是这个不一样大怎么进行每个像素点的对比,这个时候作者是这样做的,他把输入图像先扩大,怎么扩大呢,就是对图像做镜像操作,四个边做镜像往外翻一下就扩大了图像,你看看下图就知道了,然后把扩大后的图像输入网络,然后输出后刚好和金标准的图像大小是一样的,这样就可以进行Loss回归了。

5、关于数据增强:

其实数据增强在现在来看已经很普遍了,很容易理解了,就是为了防止过拟合,让网络不易学习到数据的细节方面,在本文中,医学图像是怎么做数据增强的呢,这个时候就是把输入图像与金标准做同等的变化,输入图像怎么办,金标准怎么变,说起来比较好弄,但是做起来比较难,有一个比较巧妙的方法就是,把输入图像看做一个通道,金标准看做一个通道,两个通道合成一个图像,用Keras里的数据增强函数就可以一步完成了两种图像的增强。



参考:

https://cloud.tencent.com/developer/article/1531884

https://blog.****.net/natsuka/article/details/78565229

https://blog.****.net/fg13821267836/article/details/94649116

https://blog.****.net/dugudaibo/article/details/82934731

https://blog.****.net/hjimce/article/details/50268555

https://www.cnblogs.com/kk17/p/9883565.html

https://blog.****.net/Gavinmiaoc/article/details/94858249

http://www.mamicode.com/info-detail-2434687.html

https://www.cnblogs.com/kk17/p/9883565.html