【Semantic Segmentation】U-Net: Convolutional Networks for Biomedical Image Segmentation 论文解析(转)
0. 前言
今天读了U-Net觉得很不错,同时网上很多很好很详细的讲解,因此就不再自己写一个overview了,互联网的意义就是给了我们相互学习,相互借鉴的黄金机会(懒惰完美的接口)。
1. 第一篇
1. 按论文章节回顾具体内容
1. Abstract
在本文中我们提出了一种网络结构和训练策略,它依赖于充分利用数据增强技术来更高效地使用带有标签的数据。在U-net的结构中,包括捕获一个上下文信息的收缩路径和一个允许精确定位的对称拓展路径。这种方法可以使用非常少的数据完成端到端的训练,并获得最好的效果。
1. Introduction
CNN 存在很久了,但是一直受限于过大的数据量和神经网络的规模,并没有获得很大的成功,直至 Krizhevsky 才开始爆发。但是将 CNN 用于生物医学图像存在着两点困难,首先CNN常用于分类,但是生物医学往往关注的是分割之类的定位任务;其次医学图像很难获得那么大规模的数据。
以往解决上面两点困难的方法是使用滑窗的方法,为每一个待分类的像素点取周围的一部分邻域输入。这样的方法有两点好处,首先它完成了定位的工作,其次因为每次取一个像素点周围的邻域,所以大大增加了训练数据的数量。但是这样的方法也有两个缺点,首先通过滑窗所取的块之间具有较大的重叠,所以会导致速度变慢(由FCN的论文分析可知,前向传播和反向传播的速度都会变慢);其次是网络需要在局部准确性和获取上下文之间进行取舍。因为更大的块需要更多的池化层进而降低了定位的准确率,但是小的块使网络只看到很小的一部分上下文。现在一种常见的作法是将多个层放在一起进行考虑(比如说FCN)。
我们修改并延展了 FCN 的网络结构,使之在仅使用少量的数据进行训练的情况下获得精确的分割结果,具体结构如下图所示
图 1 U-net 网络结构图
如上图所示,这里我们假设U- net 的最低分辨率为 32*32。每一个蓝色的块代表一个多通道的特征图。特征图的通道数被标注在块的顶部。X-Y尺寸设置在块的左下边缘。箭头代表着不同的操作。其中左半部分是收缩路径,右半部分扩展路径。
FCN的主要思想是使用连续的层补充通常的收缩网络,其中的池化层被上采样层取代。因此这些曾增加了输出层的分辨率。为了定位,来自收缩路径的高分辨率与上采样输出相结合。基于这个信息,一个连续的卷积层可以学习组装(集成)更精确的输出。
U-net 与 FCN 的不同在于,U-net 的上采样依然有大量的通道,这使得网络将上下文信息向更高层分辨率传播。作为结果,扩展路径多多少少与收缩路径对称,形成一个U的形状。网络没有全连接层并且只是用每一个卷积层的有效部分,例如分割图(指图像的输出)只包含这样的一些像素点,它们的上下文(它周围的像素点)都出现在了输入图像中。这种策略使得我们通过一个 Overlap-tile 策略可以使得任意大小的输入图像都可以获得一个无缝分割。
Overlap-tile 策略如下图所示
图2 Overlap-tile 策略示意图
上图是针对任意大小的输入图像的无缝分割的 Overlap-tile 策略。如果我们要预测黄色框内区域(即对黄色的内的细胞进行分割,获取它们的边缘),需要将蓝色框内部分作为输入。缺失的数据使用镜像进行补充。因为进行的是 valid 卷积(即上文讲的只取有效部分,可以理解为 0 padding),所以需要取比黄色框大的图像来保证上下文的信息是有意义的,缺失的部分用镜像的方法补充是填充上下文信息最好的方法了~
或许你会有一个问题,为什么作为一种全卷积神经网络不直接输入整张图像,还在做分块呢?答案是因为内存限制,需要分块输入。虽然还是要分块处理,但比之前的滑窗取块要好很多,一方面不用取那么多块,另一方面块之间也没有那么大的区域重叠。通过Overlap-tile 策略可以将图像分块输入,否则的话就只能对图像进行 resize 了,但是这样会降低输入图像的分辨率。
应用弹性形变进行大量的数据增强。这允许网络可以学习到这种形变的不变性,并且并不要求在带有标签的原始语料库进到这样的变化(指弹性形变)。
进行细胞的分割,另一种挑战是同一类物体的分类,如下图所示
图3 .像素点分类权重示意图
上图是用DIC(二次干涉对比)显微技术记录的玻璃上的 HeLa 细胞。其中图 (a) 是原始图像;图 (b) 是基于 gt 的分割覆盖。其中不同的颜色表示不同的 HeLa 细胞示例。图 © 是生成的分割掩膜,其中白色部分是前景,黑色部分是后景;图 (d) 是像素级损失权重图,使得网络强制学习边缘像素。
为了解决这个问题,作者使用加权损失,对于位与细胞接触部分的像素加大权重,如图 (d) 中的红色的部分。
2. Network Architecture
网络结构就是最上面的那张图,其中需要注意的是,每经过一次上采样都会将通道数减半,再与收缩路径对应的特征图进行拼接。在拼接之前进行 crop 是必要的,因为两者的尺寸并不相同(主要是因为 valid conv 造成的)。最后一层使用 1×1 大小的卷积核,将通道数降低至特定的数量(如像素点的类别数量)。
网络对于输入的大小也是有要求的。为了使得输出的分割图无缝拼接,重要的是选择输入块的大小,以便所有的 2×2 的池化层都可以应用于偶数的 x 层和 y 层。一个比较好的方法是从最下的分辨率从反向推到,比如说在网络结构中,最小的是 32×32 ,沿着收缩路径的反向进行推导可知,输入图像的尺寸应该为 572×572。
3. Training
作者使用 caffe 框架,并且采用带动量的SGD方法,其中动量的值设为 momentum=0.99。动量设这么大的原因是这样可以使用大量先前看到的训练样本确定当前最优步骤中的更新。相比于大的 batchsize,作者喜欢大的 input tiles (指的是 oveelap-tile)中的那种图像块,因此我们可以将一个 batch 缩小为一个当张图片的输入。
能量函数通过结合交叉熵损失函数的最后特征图上的像素级 soft-max 值来计算。其中 soft-max 的计算方法如下
![70](https://i-blog.csdnimg.cn/blog_migrate/c9358cdfccb3964ed23b3f95afa0a0f4.png)
其中 αk(x) 代表在位置 x 处的像素在特征图中的第 k 层的激活值,其中 x∈Ω,Ω⊂Z2 ,即 x 属于空间