FCN - Fully Convolutional Networks for Semantic Segmentation
-
全卷积网络
- 将全连接层转换为卷积层,使得输入的图片大小不受限制。
- 输入经过一系列的 Conv-Pooling 后,feature map 比原图小 (FCN经过了五层 Pooling)
为了实现pixel-wise prediction,可以采用最近邻上采样或者shift-and-stitch方法。或者使用双线性插值上采样法 - 基于 Patchwise 采样的训练方法可以缓解类别不平衡问题和空间相关性问题,但损失了一部分全局信息,是有损采样。而FCN将整张图片作为输入去训练,保留了全局信息
- Pooling 操作会使计算量下降,具有尺度不变性
-
架构
FCN-32s - VGG16 (将全连接转换成卷积 4096 - 4096) -> 21 Conv 1x1 -> bilinear upsampling 32x -> crop -> softmax loss
【这里的 filters 为21,是因为数据集中一共有21类】
输入图片在第一层卷积前,padding 100
转为卷积的 FC6,FC7 后面接0.5 dropout
双线性插值可以用 deconvolution 代替。根据实验结果,双线性插值与反卷积产生的效果差别不大。pad the input and crop 使得输入可以为任意大小且输出与输入的大小相同
网络权重通过迁移对应数据集上的分类网络得到
FCN-16s - 计算 Pooling 4 -> 21 Conv 1x1 -> crop 和 FC7 -> 21 Conv 1x1 -> deconv/s2,然后相加 -> deconv/s16 -> crop -> softmax loss
FCN-8s 同理,但一共训练了三次,先迁移 VGG16,训练 FCN-32s,然后迁移并训练 FCN-16s,最后迁移训练 FCN-8s -
实验框架
在整张图像上训练的效果与固定输入图片大小,然后 sampling patch【即 crop randomly 】相同
不需要对 class balancing 单独处理
最后一层 deconv 转换成双线性,前面的 deconv 在双线性初始化的情况下再训练
【然而,开源的代码中全部使用双线性插值的方法】
SegNet - A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
-
max-pooling 与 sub-sampling 降低了特征的分辨率能力(即无法把握图片的局部信息)
SegNet将低分辨率特征映射到输入分辨率级别。【采用 memorized max-pooling indices 可以获得更准确的边界位置信息】
retrain boundary information in feature maps
efficient memory and computation
end-to-end -
结构
- encoder - 使用 VGG16 的结构,去掉了最后两层全连接。即 Conv - BN - ReLU 2 2 3 3 3,五次MaxPooling
- decoder - 将 encoder 翻转过来。这里的上采样:Max Pooling时保存位置索引。上采样时恢复,其他位置置0。这样的优点是增加边界描述信息,减少网络参数,具有通用性
-
补充
训练过程中增加了类别平衡。一个类别对应的权重为:该类别在训练图片中的占比的中位数。
作者之后又提出了 Bayesian SegNet
DeconvNet - Learning Deconvolution Network for Semantic Segmentation
-
FCNs 的限制
- 感受野固定,对于过大的物体可能只看到局部,过小的物体被当作背景
(skip architecture 在边界信息和语义信息中进行权衡) - 物体的细节结构在encoder过程中丢失
(bilinear interpolation 直接将 coarse feature maps 扩大32倍)
- 感受野固定,对于过大的物体可能只看到局部,过小的物体被当作背景
-
本文结构与 SegNet主要区别是
DeconvNet 在 7x7 feature maps【即 max pooling 5 的输出】后面接了两个全连接层
即与VGG相同 -
VGG的输出 1 x 1 x 4096 (deonv7/s1)-> 7 x 7 x 512 (unpool)-> 14 x 14 x 512,然后通过 deconv 和 unpool 交替出现的结构
这里反卷积为 kernel 3 strides 1 pad 1,即 feature maps 大小不变
-
Unpool captures example-specific structures
Unpool追踪物体的信息
Deconv captures class-specific structures
Deconv确定是哪类物体 -
训练过程
分两步训练:简单样本 -> 复杂样本 (目标:instance-wise)
图片被分为多张proposals,最终将这些proposals聚合
fully-connected CRF
Ensemble
ENet - A Deep Neural Network Architecture for Real-Time Semantic Segmentation
-
结构
end-to-end 和 real time
input -> initial block -> bottleneck
-
策略
-
图片分辨率 feature map resolution
下采样缺点:损失空间信息,特别是边缘信息;语义分割要求输出的大小与输入相同,使用上采样会增加模型大小与计算代价
下采样优点:更大的感受野,有利于区别不同的类(更具有判别性)【结合 dilated convolution 获得更大的感受野】
对于损失空间信息的缺点来说,FCN 采用增加特征图维度的方法,SegNet 采用记录 MaxPooling 的索引,ENet 在上采样时,使用反卷积而不是卷积,同时像 SegNet 一样记录 MaxPooling 的索引位置。同时,下采样率仅为 8x -
较早的下采样 early downsampling
视觉信息有较大的空间冗余,作者认为最初的网络层不应该有助于分类,相反,应作为特征处理器和图像预处理器 -
decoder 结构小于 encoder 结构,不是镜像对称的
encoder 负责信息处理和过滤,decoder 上采样编码器的输出。 -
identify mappings in deep residual networks 指出卷积前加 ReLU 和 BN 的效果好。这里使用 PReLU 代替 ReLU
-
Information-preserving dimensionality changes
使用 initial block,10倍速度加速
下采样时 projection 1x1/s2 转变为 2x2/s2 -
factorizing filters - 5 x 5 -> 1 x 5 + 5 x 1
-
Dilated convolution
获得更大的感受野。但是,交叉使用不同 rate 的空洞卷积的效果更好。
本文中, dilated 1 -> dilated 2 -> asymmetric 5 -> dilated 4 -> dilated 1 -> dilated 8 -> asymmetric 5 -> dilated 16 -
Regularization 使用了 Spatial Dropout。dropout rate 0.01
-
Deeplab -Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
DCNN 具有平移不变性,使网络学到抽象的判别特征 abstract data representation
但损失了空间信息,不适合 dense prediction
语义分割面临三个挑战
-
reduced feature resolution 由于下采样使得特征精度下降 -> atrous convolution
-
存在不同尺度大小的物体 -> atrous spatial pyramid pooling ASPP
-
平移不变性导致位置信息精度下降及边界信息丢失 -> fully connected pairwise CRF
空洞卷积扩大感受野的同时不需要增加参数和计算量
方法
-
空洞卷积:在不增加计算量的情况下扩大感受野,因此可以减小降采样率
-
ASPP:Pool5 后,使用 rate 为 6,12,18,24 的空洞卷积,然后经过 FC7 1x1 + FC8 1x1,最后四路相加合并
-
FC CRF:每个像素 i 具有类别标签 (x_i) 与观察值 (y_i)。
(P(X=x|I) = frac{exp(-E(X|I))}{Z(I)})
(E(X|I) = sum_{i} heta_i(x_i) + sum_{ij} heta_{ij} (x_i, x_j))( heta_{ij}) 与位置、颜色有关
实际使用中,使用平均场近似方法
后续论文
-
Rethinking Atrous Convolution for Semantic Image Segmentation
-
Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
-
Understanding Convolution for Semantic Segmentation