注:只为记录,知道网络架构
图像语义分割网络
1. FCN
Paper:
Fully Convolutional Networks for Semantic Segmentation
网络:
FCN作为把深度学习应用于图像语义分割的开山之作,斩获CVPR2015的最佳论文。
网络图如下所示:

把一般用于分类网络的最后一层全连接层替换成卷积层,从而形成整个全卷积网络(Fully Convolutional Networks)。整个网络有三个要点:
- 卷积层(Convolution):用于特征提取。
- 上采样(Upsampling):FCN中的上采样选择的是反卷积操作(Deconvolution)
- 跳连层(Skip layer fusion):由于直接将最后一层进行上采样比较粗糙,会丢失大量信息,所以将前面比较lower的feature-map与最后的输出进行融合(在FCN中,fusion采用的是逐像素相加)。所以,出于对选取feature-map的不同产生了FCN-32S,FCN-16S,FCN-8S。如下图所示:

FCN整个网络还是比较清晰的,作为开山之作,本篇的内容也由此展开!
2.SegNet
Paper:
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
网络:
SegNet是语义分割中一种Encoder-Decoder模型的网络,网络图如下所示:

编码器(Encoder)部分有13个卷积层,与之相对应的解码器(Decoder)也有13个卷积层,整个流程就是卷积->下采样->->->上采样->卷积->->然后将最后一层的输出作为输入放入一个softmax-classifier(分类器),最终输出一个K(class的数量)个channel的概率图,从而得到分割图像。
- 值得一提的是SegNet在下采样池化的过程中记住了Pooling的位置信息,从而在进行上采样池化时即使不需要进行学习也能保留大量信息。下图描述了SegNet与FCN上采样的区别。

pytorch直接提供了这个pooling Indices的接口
#Encoder部分的下采样,x_01,x_10d为上一个卷积层的输出
import torch.nn.functional as F
x_0, indices_0 = F.max_pool2d(x_01, kernel_size=2, stride=2, return_indices=True)
#Decoder部分的上采样
x_0d = F.max_unpool2d(x_10d, indices_0, kernel_size=2, stride=2, output_size=dim_0)
3.Unet
Paper:
U-Net: Convolutional Networks for Biomedical Image Segmentation
网络
Unet是图像语义分割中的一个经典的网络,也是一个典型的Encoder-Decoder模型,因其网络模型呈现一个U字形而得名,其网络如下图所示:
根据网络图来看,整个架构还是很intuitive的,Encoder部分不断地进行卷积,下采样,然后Decoder部分进行卷积上采样。要注意的是在Decoder部分采用了一个跳连结构(Skip connection),这与FCN的Skip layer fusion有些类似。Unet将Encoder部分对应的low-level的feature-map与Decoder部分的feature-map相加然后进行卷积,这里的相加采用的concatenate,就是堆积木一样叠在一起。
Unet-family
Unet发表于2015的MICCAI,在医学图像领域有着卓越的表现。在Unet的基础上,大量学者及研究人员开发出了各种Unet的变体形式,如U-Net, R2U-Net, Attention U-Net, Attention R2U-Net,后续可能会记录部分Unet的变体。Github上有一个Unet-family的项目罗列了各种Unet
Unet-family
4.Enet
Paper:
ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation
网络:
Enet是一种实时(也就是速度快)的语义分割网络,它的网络组成如下表显示(论文中没有结构图,QAQ我也比较懒就不画了…)

整个网络由七个部分组成,主要是由两个模块initial block和bottleneck module组成。下面先介绍这两个模块。
- initial block
initial block的组成很简单,如下图所示,就是将input分别经过一3x3,stride=2的卷积以及一个MaxPooling,然后连接起来,这里的卷积操作所用的filter个书为13,再加上MaxPooling的三个通道,就是得到16个channel的输出,与网络表中的Section 1也对应上了。

- bottleneck module
bottleneck module借鉴了ResNet的residual block,如下图所示

得到输入之后,有两个分支,一个分支直接做MaxPooling,另一个分支做convolution,这里采用了两个1*1的卷积块分别用来压缩和扩展通道数,目的是减少计算量,中间的卷积层可采用普通卷积,膨胀卷积(dilated convolution)或者非对称卷积(asymmetric convolution)。
再回到网络表看整个网络,首先经过Section 1的初始化模块,然后经过Section 2的下采样,接着进入Section 3的下采样,Section 3中的每个卷积层采用不同的卷积操作,然后重复Section 3 即进行Section 4,注意在Section 4中丢弃了bottleneck module2.0,即不再下采样,这就完成了Encoder部分,接着进入Decoder部分Section 5 和Section 6。论文中提到,在Section 6的上采样过程中不使用pooling indices,其原因是,第一次下采样是卷积和pooling同时进行的。最后经过一个full conv得到输出。
作者在论文中阐述了一些网络设计的细节,我在这里就不做赘述了,有兴趣的同学可以去看一下。
5. LinkNet
Paper:
LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation
网络:
“Unlike existing neural network architectures which are being used for segmentation, our novelty lies in the way we link each encoder with decoder.”LinkNet的创新点是将Encoder部分与Decoder部分的feature-map融合起来。网络结构如下图所示:

正如图中所看到的,解码的时候将Encoder部分的feature-map加进来然后输入下一个Decoder Block。其中的Encoder Block和Decoder Block分别如下图所示:


6.DenseNet
Paper:
Densely Connected Convolutional Networks
网络:
DenseNet有着与ResNet类似的结构,ResNet是每个层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过逐像素相加。而在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起。如下图所示

下面根据论文来讲讲一些细节
- Dense connectivity:将每一层的feature-map都直接连接到后面的所有层中 x l = H l ( [ x 0 , x 1 , . . . , x ( l − 1 ) ] ) x_l=H_l([x_0,x_1,...,x_(l-1)]) xl=Hl([x0,x1,...,x(

本文详细介绍了从FCN到Fast-SCNN等17种图像语义分割网络的架构与特点,涵盖了FCN、SegNet、Unet、Enet、LinkNet、DenseNet、PixelNet、ICNet、RefineNet、PSPNet、HDC-DUC、ShelfNet、LadderNet、DANet、BiseNet、ESPNet、DenseASPP和Fast-SCNN等网络,深入解析了各网络的创新点和应用场景。

8112

被折叠的 条评论
为什么被折叠?



