U-Net:生物医学的图像分割 笔记

参考博客:https://blog.csdn.net/haiyonghao/article/details/80683358

                  https://blog.csdn.net/zxyhhjs2017/article/details/78659044

                 https://blog.csdn.net/mieleizhi0522/article/details/82025509

 

摘要

我们知道训练深度神经网络需要大量的数据。本文提出来一种网络结构和一种训练策略,训练策略基于对数据增强方法的使用,以便对有限的标记样本进行充分利用。

1、介绍

该结构包含一个用于捕捉上下文语义信息的收缩路径(contracting path)和一个用于精准定位的对称扩展路径(expanding path)。该网络只使用少量数据,就可以训练出一个端对端(图像入,图像出)网络,并且性能很好(跑赢使用滑窗法的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、网络结构

 左边的收缩网络就是常规的卷积网络,它包含重复的两个3×3的卷积核,紧接着是一个RELU,一个max pooling(步长为2),用来降采样,每次降采样,feature map变为原来的一半,但是在卷积部分feature channel再倍增一倍。右边的扩展路径包含一个上采样卷积(2×2上卷积),这里会减半feature channel,并与左侧contracting path ,pooling层的featuremap相结合,然后逐层上采样到392X392的大小heatmap。因为每次卷积会丢失图像边缘,所以裁剪是有必要的,最后来一个1x1的卷积,用来将有64个元素的feature vector映射到一个类标签,整个网络一共有23个卷积层。

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

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)是类kk的对像素点x的分类结果 
然后交叉熵对于每个像素点的pl(x)(x)进行惩罚,惩罚所用的公式为:

                                 

是每个像素的真实标签 

是之前介绍的权重图,用来让某些像素更加重要

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

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

                               

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

 

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

4、数据增强

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

5、实验

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

6、结论

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层会丢失图像信息和降低图像分辨率且是不可逆的操作,对图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样?:因为上采样可以补足一些图片的信息,但是信息补充的肯 定不完全,所以还需要与左边的分辨率比较高的图片相连接起来(直接复制过来再裁剪到与上采样图片一样大小),这就相当于在高分辨率和更抽象特征当中做一个折中,因为随着卷积次数增多,提取的特征也更加有效,更加抽象,上采样的图片是经历多次卷积后的图片,肯定是比较高效和抽象的图片,然后把它与左边不怎么抽象但更高分辨率的特征图片进行连接)。

     

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

   

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

                                               

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

                   

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

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

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

                                        

 (5)关于数据增强:

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

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值