深度学习系列分割网络模型(FCNUnetUnet++SegNetRefineNet)

Posted Python编程和深度学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习系列分割网络模型(FCNUnetUnet++SegNetRefineNet)相关的知识,希望对你有一定的参考价值。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

内容目录

1、FCN2、Unet3、Unet++4、SegNet5、RefineNet

1、FCN

《Fully Convolutional Networks for Semantic Segmentation》https://arxiv.org/abs/1411.4038
FCN是不含全连接层的全卷积网络,对图像进行像素级的分类,解决了图像的语义分割问题,可以接受任意尺寸的图像大小,采用反卷积对最后一个特征图(feature map)进行处理,使其恢复到输入图像的尺寸,对每个像素产生一个预测,反卷积和卷积类似,都是相乘相加的运算。只不过后者是多对一,前者是一对多,网络结构:


FCN有几个版本,FCN-32s、FCN-16s、FCN-8s,分别对应反卷积的步长stride。FCN32s在第五个下采样之后直接经过一个反卷积上采样为输入图像大小。FCN16s做了两次反卷积,把第四个下采样的结果也做一次反卷积融合起来,第二次反卷积的步长为16。FCN8s做了三次反卷积,进一步融合了第三个下采样的预测结果,第三次反卷积的步长为8,而FCN8s效果最好,说明了较浅层的预测结果包含更多细节特征。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)


深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

2、Unet

《U-Net: Convolutional Networks for Biomedical Image Segmentation》
https://arxiv.org/pdf/1505.04597.pdf
Unet的结构是先编码(下采用)再解码(上采样)的U形结构,保持输入和输出大小一样。在FCN中,Skip connection的联合是通过对应像素的求和,而U-Net则是对其的channel的concat过程。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

3、Unet++

UNet++: A Nested U-Net Architecture for Medical Image Segmentation
https://arxiv.org/pdf/1807.10165.pdf
Unet++借鉴了DenceNet的密集连接,对Unet改进的点主要是skip connection,下图所示,其中黑色部分代表的就是原始Unet结构,绿色代表添加的卷积层,蓝色代表改进的skip connection,每一个水平层就是非常标准的DenseNet的结构。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

还引入了deep supervision深度监督的思路。网络的loss函数是由不同层得到的分割图的loss的平均,每层的loss函数为DICE LOSS和Binary cross-entropy LOSS之和,引入DSN(deep supervision net)后,通过model pruning(模型剪枝)能够实现模型的两种模式:高精度模式和高速模式。

4、SegNet

《A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》 https://arxiv.org/abs/1511.00561
Segnet和Unet有点像,它采用的是编码-解码的结构,这样的对称结构有种自编码器的感觉在里面,先编码再解码。这样的结构主要使用了反卷积和上池化。解码器通过池化索引来实现非线性的上采样,这个池化索引是由与解码器相对应的编码器进行最大池化操作计算得到的。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

在SegNet中的Pooling比其他Pooling多了一个Pooling Index功能,也就是每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置。Upsamping就是Pooling的逆过程(index在Upsampling过程中发挥作用),Upsamping使得图片变大2倍。我们清楚的知道Pooling之后,每个filter会丢失了3个权重,这些权重是无法复原的,但是在Upsamping层中可以得到在Pooling中相对Pooling filter的位置。SegNet在Unpooling时用index信息,直接将数据放回对应位置,后面再接Conv训练学习。

5、RefineNet

《Multi-Path Refinement Networks for High-Resolution Semantic Segmentation》https://arxiv.org/abs/1611.06612
U-Net在上采样后直接和encoder的feature map进行级联,而RefineNet模型通过ResNet进行下采样,之后经过4个RefineNet module进行上采样,得到原来大小的特征图。把encoder产生的feature和上一阶段decoder的输出同时作为RefineNet module的输入,在RefineNet module中进行一系列卷积,融合,池化,使得多尺度特征的融合更加深入。
另一创新点就是RefineNet模块中的链式残余池化,使用不同尺寸的窗口池化,并且使用残余连接和可学习的权重把他们融合起来。

深度学习系列(四)分割网络模型(FCN、Unet、Unet++、SegNet、RefineNet)

下图是单独一个refineNet的结构


每个RefineNet module包含4个部分
1-Residual convolution unit :对ResNet block进行2层的卷积操作。注意这里有多个ResNet block作为输入。
2-Multi-resolution fusion:将1中得到的feature map进行加和融合。
3-Chained residual pooling :该模块用于从一个大图像区域中捕捉背景上下文。注意:pooling的stride为1。
4-Output convolutions:1个RCUs构成。
RefineNet还有一些变体,分别为仅使用1个RefineNet模块,2个RefineNet模块级联,4个RefineNet模块级联且
使用两种尺度输入。


给大家一个多个分割网络的pytorch实现,如:Deeplabv3, Deeplabv3_plus, PSPNet, UNet, UNet_AutoEncoder, UNet_nested, R2AttUNet, AttentionUNet, RecurrentUNet, SEGNet, CENet, DsenseASPP, RefineNet, RDFNet。链接:

https://github.com/Minerva-jiezhao/Pytorch-Segmentation-multi-models


以上是关于深度学习系列分割网络模型(FCNUnetUnet++SegNetRefineNet)的主要内容,如果未能解决你的问题,请参考以下文章

Keras深度学习实战(18)——语义分割详解

深度学习系列卷积神经网络模型(从LeNet-5到Inception V4)

LesionNet 医疗图像分割网络模型实现皮肤病灶分割

Keras深度学习实战(17)——使用U-Net架构进行图像分割

「深度学习一遍过」必修18:基于pytorch的语义分割模型实现

深度学习7 Transformer系列实例分割Mask2Former