注:只为记录,知道网络架构
Paper:
Fully Convolutional Networks for Semantic Segmentation
网络:
FCN作为把深度学习应用于图像语义分割的开山之作,斩获CVPR2015的最佳论文。
网络图如下所示:
把一般用于分类网络的最后一层全连接层替换成卷积层,从而形成整个全卷积网络(Fully Convolutional Networks)。整个网络有三个要点:
Paper:
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
网络:
SegNet是语义分割中一种Encoder-Decoder模型的网络,网络图如下所示:
编码器(Encoder)部分有13个卷积层,与之相对应的解码器(Decoder)也有13个卷积层,整个流程就是卷积->下采样->->->上采样->卷积->->然后将最后一层的输出作为输入放入一个softmax-classifier(分类器),最终输出一个K(class的数量)个channel的概率图,从而得到分割图像。
#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)
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
Paper:
ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation
网络:
Enet是一种实时(也就是速度快)的语义分割网络,它的网络组成如下表显示(论文中没有结构图,QAQ我也比较懒就不画了…)
整个网络由七个部分组成,主要是由两个模块initial block和bottleneck module组成。下面先介绍这两个模块。
再回到网络表看整个网络,首先经过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得到输出。
作者在论文中阐述了一些网络设计的细节,我在这里就不做赘述了,有兴趣的同学可以去看一下。
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分别如下图所示:
Paper:
Densely Connected Convolutional Networks
网络:
DenseNet有着与ResNet类似的结构,ResNet是每个层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过逐像素相加。而在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起。如下图所示
下面根据论文来讲讲一些细节
Paper:
PixelNet: Towards a General Pixel-Level Architecture
网络
这篇论文没太看懂,但其核心思想在论文中是这么说的:作者通过实验论证了只需对每个图像采样一小部分的像素就足以进行学习,这是因为像素之间的空间相关性。这种采样也使得我们可以探索几种用于提高基于FCN的架构的效率和性能的方法。
论文中的结构图如下
看结构图好像还挺简单明了的,但是代码实现上有点搞不懂怎么处理的,论文中也没给代码…我太菜了。
(有机会再来看看这篇论文吧 /捂脸/捂脸/捂脸/)
Paper:
ICNet for Real-Time Semantic Segmentationon High-Resolution Images
网络
ICNet是针对高分辨率图像的实时语义分割网络,其网络结构图如下
Paper:
RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation
网络
RefineNet是一个用于高分辨率图像的分割模型,我觉得也只能用于高分辨率,因为小图根本无法支持那么多下采样= =。
网络结构如下图所示
一开始就有四个路径,每个路径分辨率逐渐降低,并且每条路径都有一个RefineNet。低层次的RefineNet输出特征图加入到上一层中。
下面给出RefineNet的具体内部结构图
可以看到在每一个RefineNet内部又有多尺度- -。所以说低分辨率的图根本禁不住这么多下采样
如图所示RefineNet主要由三个模块组成,下面依次介绍这三个模块:
Paper:
Pyramid Scene Parsing Network
网络
整个网络一目了然,首先经过一个CNN得到feature-map,然后进行不同尺度的pooling,PSPNet的亮点就在于这个Pyramid Pooling Module,此后的很多网络都采用或这借鉴了这个模块,它将此前的feature-map进行不同尺度的池化,以不同(更大)的感受野获得context information,然后进行卷积。论文中分别采用了1x1,2x2,3x3,6x6四个level的feature-map。然后与先前的feature-map 融合之后再进行卷积得到Prediction。
Paper
Understanding Convolution for Semantic Segmentation
网络结构
如图所示
Encoder部分用多次不同rate的膨胀卷积。
Decoder部分:标准的双线性插值是没有参数需要学习的,对于像素级的分割任务,会造成部分细节信息丢失。DUC模块则是将最后的Prediction分成 d 2 d^2 d2个通道去学习。假如原始图像大小为 H ∗ W H*W H∗W,卷积之后变为 H / d ∗ W / d H/d*W/d H/d∗W/d,用 h ∗ w h*w h∗w代替,具体为:先将原先的 h ∗ w ∗ c h∗w∗c h∗w∗c变成 h ∗ w ∗ ( d 2 ∗ L ) h∗w∗(d^2∗L) h∗w∗(d2∗L),L为分割的类别数目,将此后的输出reshape为 H ∗ W ∗ L H∗W∗L H∗W∗L,以此引入多个学习的参数,提升对细节的分割效果。
前后隔了一段阅读这两篇论文,发现网络结构惊人的相似,思路大致都是在不同大小的feature上进行多次的卷积。然后看了下两篇论文的作者,果不其然,是同一个人。
Paper:
LadderNet: Multi-path networks based on U-Net for medical image segmentation
ShelfNet for Fast Semantic Segmentation
网络结构
LadderNet如下图所示
ShelfNet结构如下图所示
可以看到两个结构的pipeline是及其相似的,区别在于LadderNet是以Unet的结构为基础的。两个网络都用了一个S-Block虽然在LadderNet中没有命名,但结构是一样的,即在residual block的基础上加了个参数共享。
Paper:
Dual Attention Network for Scene Segmentation
网络结构
网络如下图所示
DANet是一个全景分割网络,引入了自注意力机制,分为两个分支。这也是这篇论文的重点所在。看网络图还是很直观的,选取ResNet作为backbone,然后分别经过一个Position Attention Module和Channel Attention Module,最后做一个fusion然后得到Prediction。
下面就主要介绍一下Position Attention Module个Channel Attention Module
最后将两个module的输出相加就完事了。
Paper:
BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
网络结构
BiseNet考虑到spatial information和context information,通过提取这种两种特征,然后融合,平衡了速度与精度,得到了更好的分割效果。
网络图如下:
如图所示,整个网络分为两部分,Spatial path和Context path,Context path中有个Attention Refinement Module,最后有个Feature Fusion Module来融合两部分的信息。下面分别介绍各个组件。
Paper:
ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation
网络结构
ESPNet是轻量级网络中的佼佼者,充分利用了膨胀卷积,其核心为efficient spatial pyramid (ESP) module
主要分析下这个ESPmodule
假设输入的feature-map尺寸为 M ∗ W ∗ H ∗ M M*W*H*M M∗W∗H∗M,首先经过一个1x1卷积降维成 M ∗ W ∗ H ∗ N M*W*H*N M∗W∗H∗N,然后分成K个path进行膨胀卷积,每个path的卷积核个数为 M / N M/N M/N,且每个path的dilation rate是不同,形成一种金字塔结构,然后再将每个path的输出以上图所示的方式进行Sum Conact。
ESPNet中还结合了多尺度的输入,并且encoder层与对应的decoder层用通过卷积相结合。
Paper:
DenseASPP for Semantic Segmentation in Street Scenes
网络结构
DenseNet+ASPP…就不多说了,一目了然。
Paper:
Fast-SCNN: Fast Semantic Segmentation Network
网络结构
网络图如下:
这篇论文中的图真是一言难尽…属实有点丑。可以看到这篇论文的思想也是两个branch,一个Spatial information和一个Context information,网络中的卷积绝大多数都采用了depthwise separable convolution,从而提高了速度。
在Global Feature Extractor最后还采用了Pyramid Pooling来汇总基于不同区域的Context information。
这篇文章就到这里吧,其实还有很多网络没写,像经典的deeplab系列,Unet的一些变体啥的,那些准备另起炉灶了。其实写到这里可以感受到网络设计的技巧就那么些,当然,有些文章还是比较亮眼的。