U-net论文解析

论文题目:U-Net: Convolutional Networks for Biomedical Image Segmentation

论文地址:https://arxiv.org/pdf/1505.04597v1.pdf

本论文主要亮点:

(1)改进了FCN,把扩展路径完善了很多,多通道卷积与类似FPN(特征金字塔网络)的结构相结合。

(2)利用少量数据集进行训练测试,为医学图像分割做出很大贡献。

由于文章比较短,我在这里先贴出主要翻译:

 

摘要

训练DNN需要很多数据,这是业内公认。本文提出了一种网络结构和一种训练策略,训练策略基于对数据增强方法的使用,以便对有限的标记样本进行充分利用。

1、 简介

该结构包含一个用于捕捉语义的收缩路径和一个用于精准定位的对称扩展路径。该网络只使用少量数据,就可以训练出一个端对端(图像入,图像出)网络,并且性能很好(跑赢使用滑窗法的CNN方法,该方法之前是基于)。我们的结构在透射光显微镜图像数据集上获得了ISBI2015关键。我们的结构速度也非常快,处理一副512*512的图像,在最新的GPU上不到1s。

CNN之前一直面临的困境有两方面的原因,一是没有足够的标记数据,二是人们使用的网络规模一直很小。

Krizhevsky在ImageNet数据集上使用了8层CNN和百万级别的参数数量,同时他使用的训练集规模也在百万。他之后CNN的网络规模越来越大。

过去在CNN用于分类任务时,人们只能图像输入,标签输出,但是在许多视觉任务中,比如生物医学图像处理中,人们希望得到针对每个像素的分类结果,还有,获取大量的医学图像数据用于训练是不可能的。

因此,Ciresan训练了一种滑窗网络用来预测每个像素的标签,该网络的输入是以像素为中心的一个区域。

该网络的优点有: 
1、网络具有局部感知能力 
2、用于训练的样本数量远大于训练图像的数量 
该网络获得了EM分割挑战 ISBI2012冠军。

该网络的缺点有: 
1、对于每个patch(以像素为中心的区域)都要运行一次检测,所以速度很慢,并且由于patch的重叠,所以有很多运行都是多余的 
2、必须在局部标记准确性和语义的确定之间进行权衡,大的patch需要更多的池化层,但是池化层降低了局部标记的准确性,而小的patch无法获得充分的语义信息

本文中我们的设计基于一种更加优雅的结构,FCN,我们对这种结构进行了一定的修改和拓展,以使其使用更少的训练图像,产生更高精度的分割。

FCN的主要思想是对常规的收缩网络进行补充,补充的内容是连续的layer,在这些层中,池化操作被上采样操作代替。因此,这些层提高了输出的解析度(resolution)。为了局部化(图像局部像素的label一样),将从收缩网络得到的高维特征与上采样的结果相结合,这样连续的卷积层就能从这种结合中汇聚更加准确的输出。

我们对FCN的重要改进之一是在上采样部分,我们也有大量的feature channels,这些feature channel允许网络将范围信息(context)传播到高分辨率层扩展层或多或少对称于收缩层产生了一个U型的结构。该网络不包含任何全连接层,只使用每次卷积的有效部分,如,分割映射只包含像素,后面的高维特征包含全部语义信息。该方法允许任意大小的图像通过overlap-tile策略进行无缝分割。overlap-tile策略就是,要预测一个batch的标签,你必须输入比之大的一个框的图像,输入图像没有的部分,用镜像法外推。这种策略对于将网络应用于大型图像是有非常重要的意义的,否则可能会受到GPU内存的限制。

我们的任务中训练数据非常少,所以我们对仅有的数据进行弹性形变操作,以获得更多的数据。这样使得网络可以学习到形变特征。生物医学图像形变非常常见。【他们的这种方法等于加入了额外特征】数据增强的的学习不变性数据已经发表在Dosovitskiy的论文中,在非监督特征学习那部分。

另一个挑战是分割开连在一起的同种细胞,最终,我们提出使用加权损失,这样分离*连在一起的细胞的label功能*获得更大的权重。

我们的方法在比赛中拿了头筹。

2、 网络结构

收缩路径就是常规的卷积网络,它包含重复的2个3x3卷积,紧接着是一个RELU,一个max pooling(步长为2),用来降采样,每次降采样我们都将feature channel减半。扩展路径包含一个上采样(2x2上卷积),这样会减半feature channel,接着是一个对应的收缩路径的feature map,然后是2个3x3卷积,每个卷积后面跟一个RELU,因为每次卷积会丢失图像边缘,所以裁剪是有必要的,最后来一个1x1的卷积,用来将有64个元素的feature vector映射到一个类标签,整个网络一共有23个卷积层。

为了允许对最终的分割map**无缝tile**,选择输入tilesize非常重要因为这样所有的2x2的max池化操作应用到偶数x和y

U-net论文解析_第1张图片

3、训练

输入图像和他们对应的分割map用来训练网络,用得方法是SGD,框架是caffe。由于unpadded卷积,输入图像大于输出图像,大一个border width常数。为了降低系统消耗,并且最大利用GPU memory,我们对大batch使用了大的输入tiles,因此降低了单图像的batch。对应地,我们使用了一个高的momentum(0.99),这样大量的训练数据决定当前优化步骤的更新。

能量函数是用softmax函数计算最后一步算出的feature map,该feature map用交叉熵损失函数处理,再用softmax。 
softmax公式如下: 


ak(x)表示每一像素点(x)对应特征通道(k)的得分 
K是类的数量 ,pk(x)是类k的对像素点x的分类结果 
然后交叉熵对于每个像素点的进行惩罚,惩罚所用的公式为: 


是每个像素的真实标签 
是之前介绍的权重图,用来让某些像素更加重要

 

我们预先计算每个真实样本的权重图,以补偿训练数据集中某个类的像素的不同频率,并强制网络学习我们在接触的细胞之间引入的小分离边界。

分离边界是用形态学operation计算的,然后使用以下公式计算权重图:

 

 

ωc:Ω→R是用来平衡类频率的权重图 
d1:Ω→R表示到背景的某个像素点到最近细胞边界的距离 
d2:Ω→R表示到背景的某个像素点到第二近的细胞边界的距离 
经过实验,我们将的设置为ω0=10,σ≈5个像素

权重初始化相当重要,我们使用高斯分布初始化权重,标准差为,其中N表示一个神经元的输入节点是的数量,如,对于一个3x3的卷积,前一层有64个feature channel,那么N=3∗3∗64=576

3.1、数据增强

当只有一点点训练数据的时候,数据增强就是必要的,它可以教给网络什么是任务所需的不变的东西,什么是需要学习的属性,例如显微镜图像,我们初期要做平移、旋转不变性的复制,还有变形的健壮性,以及灰度值差异(亮度)。尤其是对训练数据进行随机形变,感觉这是在用少量训练数据做数据增强时的核心方法。我们使用随机位移矢量在粗糙的3×3网格上生成平滑变形。位移矢量是从标准差为10的高斯分布中采样的。然后使用双三次方插值计算每个像素位移。 收缩路径末端的dropout层执行进一步的隐式数据增强。

4、实验

实验部分就是一些表格,对比了不同算法在一些数据集上的表现,这里就不一一列出了。

5、结论

u-net架构在不同的生物医学分割应用中实现了非常好的性能。 由于具有弹性变形的数据增强功能,它只需要很少的注释图像,并且在NVidia Titan GPU(6 GB)上的训练时间非常短,只需要10个小时。 我们提供完整的Caffe 实现和训练好的网络。 我们相信,u-net架构可以轻松应用于更多的任务。

 

这里做出几点解析:

(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类,选择它作为输入给交叉熵进行反向传播训练。

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

U-net论文解析_第2张图片

这个是怎么理解的呢,你先看看要分割的图和金标准:

U-net论文解析_第3张图片

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

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

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

U-net论文解析_第4张图片

(5)关于数据增强:

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

     总结

U-net网络是在众多网络中比较简单的一个网络,容易应用和改进,有很大的改进空间,我在想能不能用U-net做自然图像分割,估计已经有人做出来了。

                                                        谢谢大家,我叫冯爽朗!

 

你可能感兴趣的:(深度学习)