最近开始尝试医疗影像分割的任务,先从之前的Unet开始阅读,记录一部分笔记以供回顾。
论文地址:http://www.arxiv.org/pdf/1505.04597.pdf
摘要
作者提出了一个相对当时来说全新的网络,Unet。Unet主要由contracting path(特征提取通路),symmetric expanding path(合成扩张通路)组成,运行速度很快,且远胜于当时最好的方法——基于滑动窗口。在生物医学中应用CNN有很多难点,其中之一便是医学图像数据往往比较稀有。因此,论文也提出了一些新的数据增强的思路。
1.网络结构
图像分割任务其实和图像分类任务有很多相似之处,区别在于图像分割任务需要将每一个像素都分类,而图像分类则只需要将整张图片分类。或者换个说法,图像分割不仅需要分类,还需要定位,定位分类结果的位置。在生物医学领域,大规模的数据集往往是难以获得的,因此Ciresan等人训练了一个基于滑动窗口(sliding-window)的网络,对每一个需要预测的像素,输入其局部的图像信息(patch),然后对改像素进行分类。对输入的图像分割成patch然后输出对应像素的类别可以有效地扩充数据集。
然而,Ciresan等人的方法有两个明显的缺点
- 分别对每一个像素进行分类,使得在分割整张图片时运行非常缓慢,其中有大量冗余的计算,不同像素间进行分类时计算的特征图不能共享
- 需要平衡定位和patch的大小,更大的patch输入需要更多的max-pooling层,但这会降低对像素定位的精度,而小的patch则意味着网络或许的信息过于局部,无法纵览全局。
因此,作者借鉴FCN(fully convolutional network)提出了Unet,其中没有使用任何的全连接层,几乎都是卷积层和池化层的搭配。左边部分为contracting path,由连续的卷积层来提取特征,并不断缩小特征图的尺寸,并增加特征图的通道数。右边部分为symmetric expanding path,通过上采样改变输出特征图的尺寸。同时,为了定位(分割 ≈ 分类+定位)由contracting path得到的不同尺度的特征图与上采样得到的对应尺度的特征图做拼接(concat)。
U-Net中的所有 3 * 3的卷积层都是无padding的,也就是每经过一个卷积层,特征图长宽维度各减少2个像素。
最终输出层使用1 * 1的卷积,调整通道数至物体类别数,得到分割结果。
图1
值得注意的是,FCN 中深层信息与浅层信息融合是通过对应像素相加(add)的方式,而 Unet 是通过拼接的方式。其实在 ResNet 与 DenseNet 中也有一样的区别,Resnet 使用了对应值相加,DenseNet 使用了拼接。个人理解在相加的方式下,feature map 的维度没有变化,但每个维度都包含了更多特征,对于普通的分类任务这种不需要从 feature map 复原到原始分辨率的任务来说,这是一个高效的选择;而拼接则保留了更多的维度/位置 信息,这使得后面的 layer 可以在浅层特征与深层特征*选择,这对分割这种需要将输入像素级地恢复到原始图像的任务来说更有优势。
而在具体拼接时,由于不同层的分辨率或者说尺寸有些许差异,例如图1中在contracting path中经过2次卷积得到的64 * 568 * 568地特征图,需要经过中心裁剪(crop)为64 * 392 * 392才能拼接,并得到128 * 392 * 392,即通道数相加。
而在symmetric expanding path中Upsampling 上采样常用的方式有两种:1.FCN 中的转置卷积;2. 插值。文中使用了插值的方式,具体是bicubic(双三次插值)。此外,在其他的插值实现方式中,bilinear (双线性插值)的综合表现较好也比较常见 。
2.无缝分割
总体的U-Net结构是对称的,但是输出的分辨率小于输入,因为无论左边右边,每次无padding的卷积操作都减小了特征图的尺寸。
作者这样设计的原因,主要在于应用场景。U-Net可以被应用于任意较大尺寸的生物医学图像的无缝分割。对于较大的输入图像,例如训练的是572 * 572的输入尺寸,而实际需要输入5720 * 5720 的尺寸并进行分割,受输入大小的限制,可以采用slide window的形式遍历整张大图像,每次通过网络产生当前区域的分割输出。最后将所有的silding windows无缝拼接起来就可以完成整张超大尺寸的图像(5720 * 5720)的分割任务。
图2
另外,当位于图像的边界区域时,采用将图像按水平竖直方向镜像翻转的方式补充空缺区域,也是保持着完成利用图像信息的思想。文中将其称之为Overlap-tile , 具体操作结果如下图所示:
3. 数据增强
由于医学图像分割的任务数据集往往比较小,因此作者充分利用弹性形变对训练集进行扩充。这将一定程度上迫使网络学习到在弹性形变中的,待检测物体(如细胞)图像数据中的不变量。这一方法对于生物医学的图像分割非常重要,人为的对图像进行形变处理,可以很容易且有效地模拟出真实生物细胞或组织的形变。
具体而言,对于显微图像,主要需要平移和旋转不变性以及对变形和灰度变化的鲁棒性。特别是训练样本的随机弹性变形是训练一个只有很少注释图像的分割网络的关键。作者使用3×3的coarse grid上进行随机替换向量以生成平滑的变形图像。随机替换的内容是从标准偏差为10像素的高斯分布中采样的。然后使用双三次插值计算每像素的替换。contracting path末端的Drop-out层实现了进一步的隐式数据扩充。
4.Weighted Loss及训练过程
在生物医学图像分割时还面临一个问题,即对相互接触的同类物体进行分割。文中采取的做法是对每个像素位置分配权重,计算加权损失,在训练过程中以期更好地分割各物体的边界。这一部分的笔记主要参考:https://zhuanlan.zhihu.com/p/128539526,博主写得很好,因此摘录过来借鉴学习。
公式1主要是用来计算soft-max
Loss采用交叉熵损失,error的形式为:
下图d展示了loss权重的分布,在边界区域权重比较高,可以看到边界区域的权重至少在8以上,颜色越鲜艳(约接近红色),权重越高,相当于强制网络增加对边界样本的学习。
图3
网络初始化采用Gaussian分布,方差为:
N 表示和一个神经元节点连接的输入结点的数量。例如对于3 * 3的卷积,特征通道为64的层,则N= 3 * 3 * 64 = 576。
5.评价指标
本文使用的评价指标包括wraping error,Rand error,pixel error以及IoU。
5.1warping error
warping error是基于拓扑不变性衡量分割质量。当pixel error很大当分割效果更好可以引入warping error,主要用来衡量分割目标的拓扑形状效果。
将ground truth L*保持拓扑不变(没有分裂、合并、产生或消去空洞、增加或减少物体数量等,可以增减像素的数量),并只在一定范围产生像素变化,得到许多L,计算预测输出 T和 L 间的最小距离作为warping error结果。计算公式如下:
即实现预测和ground truth拓扑一致需要变化的最少像素数量。
5.2 Random error
Rand error是根据Rand Index而来,是一种聚类的评价指标。即将分割任务看作是一种对像素的聚类,来衡量分割质量。
定义SC和 SK 分别表示图片输入 I 上的真实类别和预测结果。图片I共有n个像素,不同位置的像素两两配对,则排列组合后共有C(2 n)个像素对。
定义 a 表示在 SC 和 SK 上都属于同一类的像素对数量。 b表示在 SC 和 SK 上都属于不同类的像素对数量。则此处的Rand Index(兰德指数)的计算公式为:
即RI数值越大,可以反映聚类的效果越好。也即预测的结果越好。
Rand Error 计算公式为:
5.3 Pixel Error
pixel error 则是根据每个像素位置计算分类错误的数量。
即Pixel Error = 预测错误的像素个数 / 总像素个数。对于二进制的labels,欧式距离和汉明距离结果相同。
Pixel error过于敏感,会考虑所有分割细节,warping error 和 Rand error则相对缓和,更倾向于形态和整体的分割质量,在生物医学图像分割上是较为合理的评价指标。
5.4 交并比(IOU intersection over union)
- 记 I 为预测结果的像素集合与ground truth的像素集合的交集
- 记 U 为预测结果的像素集合与ground truth的像素集合的并集
IOU = I / U
IOU越大,说明预测结果与ground truth的重叠比例越大。
6.实验结果
6.1 在EM segmentation challenge上的结果:
由于U-Net的边界loss设计,U-Net拥有最低的warping error,反映较好地分割了不同的物体。rand error 和 pixel error也和其他方法相差不大。
6.2 在ISBI数据集上的IoU结果:
7 .U-Net总结
UNet的设计,为当时的分割任务带来了很多新的思路,很多方法沿用至今,也产生了很多变体,如U-Net++和U-Net3+等。后续再补上相关的论文笔记。