本文主要是对 U-Net 论文中主要内容的提炼,中间加入了一些自己的理解,有些地方自己不是很懂,所以直接采用了直译的方式。建议大家去阅读原文。
U-Net 的主要优点是可以用更少的训练样本达到更好的效果,并且速度很快,这对于训练数据较少的医学图像处理相关的问题来说是十分重要的。U-Net论文地址:U-Net论文
一、前人工作
文章首先总结了前人工作的一些特点,前人的工作(主要是一些卷积神经网络模型)有两大局限,第一是受制于可利用的训练样本不够多的问题,第二是网络模型太过复杂而导致的训练速度较慢。卷积神经网络模型主要用于分类任务,而对于医学图像处理这类分类问题就要求对每个像素进行分类(是前景还是背景),也就是所谓的定位(localization)问题。
后来有人提出了滑动窗口(sliding-window)的方法,也就是每次把当前像素的相邻像素,即一个窗口作为输入。滑动窗口的好处是可以让网络实现定位(即对每个像素进行分类),同时每个滑动窗口都相当于一个训练样本,这样增加了可利用的训练样本的数量。当然了这种方式也存在着两个问题,第一是因为要对不同大小、不同位置的窗口进行遍历,所以训练速度会很慢;第二是因为窗口之间存在重叠,所以有点冗余了,换句话说,如果想要得到更好的精度,就要增加窗口的数量和大小,而如果要提高训练速度就就必须减少窗口的数量和大小,这是一对矛盾。
二、U-Net 技术要点
U-Net 之所以叫这个名字是因为其网络模型的形状类似于字母 ‘U’ 。U-Net 的结构包括一个收缩路径(contracting path)和一个扩张路径(expanding path),前者用来捕获上下文信息,后者用来精确定位。这两者又分别可看作是一个编码器和一个解码器。
由于重叠平铺(overlap-tile)策略所以使得模型可以处理任意大小的输入图片。由于图像边界区域的像素上下文会缺失,所以可以通过对输入图像进行镜像来推断。
为了解决训练数据较少的问题,在该模型中使用了大量的数据增强,比如对已有的训练图像进行塑性变形。
U-Net 这篇论文当时是针对于生物医学图像进行分割的,可以理解为对含有很多细胞的图像进行分割。所以就存在一个同类相邻物体(比如相邻的细胞)之间的分割问题,为此提出了一个加权损失(weighted loss),在相邻细胞的分割标签会在损失函数中有个较大的权重。
三、U-Net 网络结构
前面说过 U-Net 由一个收缩路径和一个扩张路径组成,收缩路径中的基本组成元素是两个 3 × 3 3\times3 3×3 的无填充卷积,每个卷积后都跟着一个 ReLU 激活函数,然后是一个 2 × 2 2\times2 2×2 的步长为2的最大池化操作,以上步骤重复多次。每个池化操作后通道数就会加倍。扩张路径与之大体相反,基本元素是一个 2 × 2 2\times2 2×2 的卷积(up-convolution),拼接上收缩路径中对应的特征图(即跳跃连接),然后是两个 3 × 3 3\times3 3×3 的卷积操作,每个卷积后面跟着一个 ReLU 激活函数。以上步骤重复多次,在扩张路径的最后一层有一个额外的 1 × 1 1\times1 1×1 的卷积操作,这个卷积的目的是让输出映射到想要的大小。