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} \theta_i(x_i) + \sum_{ij} \theta_{ij} (x_i, x_j)\)\(\theta_{ij}\) 與位置、顏色有關
實際使用中,使用平均場近似方法
后續論文
-
Rethinking Atrous Convolution for Semantic Image Segmentation
-
Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
-
Understanding Convolution for Semantic Segmentation
