一、写在前面:
网络架构的设计主要是基于CNN结构延伸出来的。主要的改进方式有两点:新神经架构的设计(不同深度,宽度,连接性或者拓扑结构)或设计新的组件(或者层)。下面我们逐个去分析了解。
本文涉及到的论文范围如下图:
二、网络架构的改进
2.1.1 FCN
传统的CNN分割,为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。缺点很多:比如存储开销大,计算效率低,像素块大小也限制了感知域的大小。基于存在的这些问题,由Long等人在2015年提出的FCN结构,第一个全卷积神经网络的语义分割模型。我们要了解到的是,FCN是基于VGG和AlexNet网络上进行预训练,然后将最后两层全连接层改为的卷积层。
FCN具体处理过程是怎么样的?从pool1开始,每个pool后图像都会变为上个池化后图像的1/2。Pool1为原图的1/2,以此类推,pool5后为原图的1/2^5,conv6,和conv7之后的图像保持不变,进行stride=32的反卷积,得到FCN-32s。也就是直接对pool5进行32倍上采样获得32
upsampled feature,再对32upsampled feature每个点做softmax predic
tion,就可以获得32*upsampled prediction(分割图)。
FCN这三个创新点有哪些?
全卷积:用于解决逐像素的预测问题。通过将基础网络最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。
反卷积:端到端的像素级语义分割需要输出大小和输入图像大小一致。但是传统的conv+pooling结构会缩小图片尺寸。基于此作者引入反卷积(deconvolution)操作,对缩小后的特征进行上采样,恢复原始图像大小。
跳跃结构:语义分割包括语义识别和目标定位。卷积网络的高层特征图可以有效的反应语义信息,而低层特征图可以有效反应目标的位置信息。语义分割任务同时进行语义识别和目标定位。作者提出的跨层连接结构(skip architecture),将低层的目标位置信息和高层语义信息进行融合,以此来提升语义分割性能。在此基础上进行2倍采样,2倍upsample 之后与pool4的像素点相加,进行stride=16的upsample,为此FCN-16s,重复上面类似的步骤,得到FCN-8s。
了解到以上信息,应该对FCN有个整体的认识了。还有一些细节部分,比如FCN采用的简单的softmax分类损失函数,采用双线性差值+反卷积进行上采样,在微调的时候没有采用类别平衡策略。分割结果来看,FCN-8s>FCN-16s>FCN-32s。也就是说使用多层特征融合有利于提高分割准确性。
2.1.2 SegNet
SegNet主要动机是在场景理解。它在设计的时候考虑的是预测期间保证内存和计算时间上的效率。其中,SegNet和FCN有很多相似之处,编码网络使用VGG16的前13层卷积;移除全连接;解码器使用从相应的编码器的max-pooling indices进行upsampling。
对比SegNet和FCN实现Decoder的过程。FCN是利用双线性插值初始化的反卷积进行上采样。而SegNet则是在每次pooling时,都存下最大值的位置,在upsample时将input值直接赋给相应的位置,其他位置的值置零。
2.1.3 U-Net
接下来,我们需要了解的是U-Net。U-net网络架构,由收缩路径(contracting path)和扩展路径(expanding path)组成。每一层使用两个3乘3的conv kernel,每次卷积都进行Relu和stride=2的maxpooling进行下采样。四次操作后输出结果称之为feature map。
2乘2的反卷积,上采样,通道数减半,并将左边对称位置的feature map copy到右边进行concate操作,来融合下采样的浅层位置信息和高层语义信息。合并后在进行3*3的卷积操作。最后output之前,通道数表示分类的类别产生N类分割结果,最后选择出概率值最大的分割结果,作为最后的分割图。
U-Net中常常会问为什么适用于医学图像这个问题.。首先分析医学影像数据特点:图像语义较为简单,结构较为固定:都是一个固定的器官的成像。而且器官本身结构固定,语义信息没有特别丰富,所以高级语义信息和低级特征都非常重要。(U-net的skip connection可以解决这个问题);数据量少:医学影像的数据较难获取,为了防止过拟合,设计的模型不宜过大;多模态:医学影像是具有多种模态的;可解释性:医生需要进一步指导病灶在哪一层,哪一层的哪个位置,分割结果能求体积么?而且U-Net在自然图像分割也取得了不错的效果。
需要注意的一点:Unet融合浅层信息是maxpooling之前还是之后的结果?是maxpooling之前的结果。因为Maxpooling之后会丢失准确的位置信息。
2.1.4 V-Net
V-Net也就是3D的U-net的一种版本,3D卷积,引入残差模块和U-Net的框架。整个网络分为压缩路径和非压缩路径,也就是缩小和扩大feature maps,每个stage将特征缩小一半,也就是128-128-64-32-16-8,通道上为1-16-32-64-128-256。每个stage加入残差学习以加速收敛。 图中的圆圈加交叉代表卷积核为5乘5乘5,stride为1的卷积,可知padding为2乘2乘2就可以保持特征大小不变。每个stage的末尾使用卷积核为2乘2乘2,stride为2的卷积,特征大小减小一半(把2x2 max-pooling替换成了2x2 conv.)。整个网络都是使用keiming等人提出的PReLU非线性单元。网络末尾加一个1乘1乘1的卷积,处理成与输入一样大小的数据,然后接一个softmax。
而且V-Net采用Dice coefficient损失函数,如下:
Pi为预测的前景,Gi为标记的前景,使用这个函数能有效避免类别不平衡的问题。
2.1.5 Dense-UNet
Dense U-net(原名:one-hundred layers Tiramisu Network)该架构是由密集连接块(dense block)构建的。该架构由向下过度的两个下采样路径和向上过度的两个上采样路径组成。且同样包含两个水平跳跃连接,下采样Dense 模块的输出与同水平的上采样Dense模块输入的相应特征图拼接在一起。上采样路径和下采样路径的连接模式并不完全相同:下采样路径中,每个密集块外有一条跳跃性连接,从而导致feature map数量线性增长,上采样中没有此操作。
主要创新点是融合了Dense-Net和U-Net网络。
2.1.6 DeepLab系列网络
DeepLabV1:首次把空洞卷积(dilated convolution) 引入图形分割领域, 融合卷积神经网络和概率图模型:CNN + CRF,提高了分割定位精度。
DeepLabV2:ASPP (扩张空间金字塔池化):CNN+CRF。
DeepLabV3:改进ASPP,多了1乘1卷积和全局平均池化(global avg pool);对比了级联和并联空洞卷积的效果。
DeepLabV3+:加入编解码架构思想,添加一个解码器模块来扩展DeepLabv3;将深度可分离卷积应用于ASPP和解码器模块;将改进的Xception作为Backbone。
2.1.7 PSPNet
PSPNet全名是Pyramid Scene Parsing Network(金字塔场景解析网络)。提出了金字塔池化模块(pyramid pooling module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。
输入图像后,使用预训练的带空洞卷积ResNet提取特征图。最终的特征映射大小是输入图像的1/8;在特征图上,我们使用C中的金字塔池化模块收集上下文信息。使用4层金字塔结构,池化内核覆盖了图像的全部、一半和小部分。他们被融合为全局先验信息;在c的最后部分将之前的金字塔特征映射与原始特征映射concate起来;在进行卷积,生成d中的最终预测图。
总结
基于深度学习的图像语义分割模型大多遵循编码器-解码器体系结构,如U-Net。近几年的研究成果表明,膨胀卷积和特征金字塔池可以改善U-Net风格的网络性能。
参考文献:
Deep Semantic Segmentation of Natural and Medical Images: A Review
附录: