参考资料
Pytorch深度学习实战教程(三):UNet模型训练,深度解析!
深入理解深度学习分割网络Unet——U-Net: Convolutional Networks for Biomedical Image Segmentation
1、标题
U-Net: Convolutional Networks for Biomedical Image Segmentation
U-Net:用于生物医学图像分割的卷积网络
本论文提出的语义分割模型在FCN基础上进行改进,只需很少的样本,就得到更高的分割精度。相比与FCN,本文提出的模型在上采样部分的卷积层有更多的通道,这可以将context信息传播到更高分辨率的层。本文的提出的模型中,用于特征提取的收缩网络,和用于还原分辨率的扩张网络,呈现对称的U型架构,因此称为U-net。
2、概述
Mask = Function(I)
- 什么是图像分割问题呢? 简单的来讲就是给一张图像,检测是用框出框出物体,而图像分割分出一个物体的准确轮廓。也这样考虑,给出一张图像 I,这个问题就是求一个函数,从I映射到Mask。至于怎么求这个函数有多种方法。我们可以看到这个图,左边是给出图像,可以看到人和摩托车,右边是分割结果。
- 在语义分割领域,基于深度学习的语义分割算法开山之作是全卷积网络FCN(由于网络中只有卷积没有全连接,所以这个网络又叫全卷积网络),而UNet是遵循FCN的原理,并进行了相应的改进,使其适应小样本的简单分割问题。
- 在此之前深度学习一般用在分类和检测问题上。由于用到CNN,所以最后提取的特征的尺度是变小的。和我们要求的函数不一样,我们要求的函数是输入多大,输出有多大。为了让CNN提取出来的尺度能到原图大小,FCN网络利用上采样和反卷积到原图像大小。然后做像素级的分类。可以看图二,输入原图,经过VGG16网络,得到特征map,然后将特征map上采样回去。再将预测结果和ground truth每个像素一一对应分类,做像素级别分类。也就是说将分割问题变成分类问题,而分类问题正好是深度学习的强项。如果只将特征map直接上采样或者反卷积,明显会丢失很多信息。
- FCN采取解决方法是将pool4、pool3、和特征map融合起来,由于pool3、pool4、特征map大小尺寸是不一样的,所以融合应该前上采样到同一尺寸。这里的融合是拼接在一起,不是对应元素相加。
- FCN是深度学习在图像分割的开山之作,FCN优点是实现端到端分割等,缺点是分割结果细节不够好,可以看到图四,FCN8s是上面讲的pool4、pool3和特征map融合,FCN16s是pool4和特征map融合,FCN32s是只有特征map,得出结果都是细节不够好,具体可以看自行车。
3、网络结构
非常直观的“U”形网络结构,分别是进行了四次下采样(图中红色向下的箭头),文中将这部分称为“contracting path”,和四次上采样(图中绿色向上的箭头),在文中这部分称为与“contracting path”近似对称的“expansive path”。U-Net是端到端的训练,同时作者在论文最初也提到该结构训练速度快。
U-net架构:每个蓝框是一个feature map,它上面的数字表示该feature map的通道数(channel),feature map的左下角是它的尺寸。白色方框是从contracting path裁剪复制到expanding path上的feature map。
箭头表示不同的操作:
第一个蓝紫的箭头表示3*3的无填充valid卷积,一次卷积操作后特征图尺寸减小2(例第一次卷积操作后尺寸由572*572输出570*570),如下图,每次卷积后再接RELU激活;
第二个灰色箭头就是复制和裁剪啦,需要裁剪的原因是卷积过程中会有边界像素的丢失;
第三个红色箭头表示大小2*2,步长为2的最大池化操作,即图像分称不重叠的2*2大小的小框,每个小框中保留最大的值,经过最大池化操作后特征图尺寸数变为一半,如下图;需要注意的是为了保证输出分割图的无缝衔接,需要确保输入图像的尺寸(x-size和y-size)必须是偶数;