1. 程式人生 > >語義分割之DeepLab v1、v2、v3、v3+個人總結

語義分割之DeepLab v1、v2、v3、v3+個人總結

1. 基本流程

在這裡插入圖片描述
deeplab v1、v2、v3也用到了空洞卷積–dilated convolution,因為這麼做可以獲得較大的感受野同時又不損失影象的解析度。

然而,經過了poolling,雖然可以提高影象的語義資訊(即"what"),卻會丟失解析度資訊(即"where")。這對精細的分割任務來說,會很有難度。

於是,本文應用了CRF(condition random field),對初步的pixel-level分類進行進一步的修正,是一種後處理的手段。

2. CRF

我們得到雙線性插值後的feature map,每個pixel處的特徵向量記為I = { I1,I2,…,In }, n為影象畫素的個數

,對 I 進行全域性觀測。
x= { L1,L2,…,Lnum_cls} 為畫素的label。
X={X1,X2,…,Xn} 表示輸出的標記序列,X取值於x。
此時,對於給定的觀測序列I,得到標記序列X的條件概率為:
在這裡插入圖片描述
其中,Z(I) 為規範化因子,表示X取所有不同L時,exp(-E(x|I)) 的和。形式類似於softmax

E(x|I)為能量函式(注意: 這裡的xi和xj表示畫素i和j的label,可能和上面的定義有衝突)。
在這裡插入圖片描述
能量函式由一元勢函式和二元勢函式組成。
一元勢函式為:
在這裡插入圖片描述
這裡的P(xi)則表示畫素i的標記為對應label的置信度。
二元勢函式為:
在這裡插入圖片描述
其中,
在這裡插入圖片描述
二元勢函式鼓勵位置相近且特徵相似的點屬於同一類。
如果位置相近且特徵相似卻不屬於同一類,則二元勢函式將會比較大,最終標記序列的條件概率也會比較小。

3. ASPP(Atrous Spatial Pyramid Pooling)

v2在用空洞卷積時,為了更好的分割各個尺度的物體,比如同一類物體在圖中既有很小的尺度又有很大的尺度。於是借鑑SPPNet裡的思想(不同尺度的roi pooling,組成特徵向量),對於同一個input feature map。將不同dilated rate得到的feature map進行了Eltwise Add。(dilated convolution中只是串聯)

這種金字塔結構可以獲得不同尺度的感受野的資訊,有利於提高分割效果。
在這裡插入圖片描述

4. DeepLab v3

首先還是再總結一下空洞卷積的好處

  1. 允許調整卷積核的感受野,獲得不同尺度的資訊,且不增加引數,且不減小解析度
  2. 允許顯式的控制特徵提取的密度。空洞卷積rate越大,會讓輸出的feature map提取到的特徵越密集。(feature map中很多grid cell都能提取到相同部分的特徵)

然後是v3的改進,新的ASPP
在這裡插入圖片描述
新的ASPP增加了一個1x1的卷積核,以及一個global ave pooling。最後concat,再經過一個1x1卷積輸出。(對了,這塊還引入了normalization)

關於引入global ave pooling,文中是這樣解釋的:
(1) 當空洞rate越大(eg: 卷積核的感受野和feature map一樣大),越來越多的kernel實際卷積到的是padded zero。當卷積核變得和feature map一樣大時,相當於卷積核退化成了1x1,因為padded feature map只有最中心的部分才是有效的。
(2) 為了解決上面的問題,同時為了加入全域性資訊。直接用global ave pooling。

5. Atrous Separable Convolution (v3+)

v3的幾個改進包括:

在這裡插入圖片描述
(2) 新的encoder-decoder結構
在這裡插入圖片描述
encoder和v3一樣。
(3) 新的Xception
在這裡插入圖片描述
max pooling被separable convolution with stride替換了。