Paper 整理: DenseASPP for Semantic Segmentation in Street Scenes

前言


"Paper 整理"系列只是試著將paper中的概念,或是將別人對paper的見解整理起來,幫助自己消化及日後複習。都會附上出處,如有侵權或錯誤煩請email告知:jason.eed05@gmail.com

論文連結




Semantic Segmentation (語義分割)


語義分割的任務是,給定一張圖片,經過語義分割後的結果就是一張包含若干種顏色的圖片。其中每一種顏色代表一個類別。


Semantic Segmentation in Street Scenes:


Paper 提到街景圖的語義分割,相比一般圖片的語義分割主要會多出兩個難題
  • 街景中物體有分遠近,故圖片中object 尺度會變化很大。一般 model 很難在圖片中某個範圍同時很好的分割大物體和小物體
  • 街景的語義分割需要有很大的 "Receptive field"
Receptive field 是指一個feature 或output 會被多少個input pixel 影響,也就是可以"感知到"輸入圖片多大的範圍。
Receptive field 不夠大,就很容易偵測不到大物件。比如一輛車很靠近你,你卻看不出那是一輛車,因為你的感知範圍太小了,一次只能看到車子的某個部分。這有點像瞎子摸象的概念,因為感受的範圍有限(大象的某個部位)所以看不出整體(一頭大象)

Related Work


CNN->FCN


原始的CNN是由convolutional layer, pooling, and fully connect layer 所構成。因為FC層,CNN最後的結果常會是一維的(ex. 每個類別各給一個機率值做圖片分類)

FCN (Fully Convolutional Network) 則是捨棄 FC layer,只剩下convolutional layer, pooling 等的tensor 運算,其輸出就可以是多維的,並可以控制成每個類別一個二維map,代表圖片每個位置於某類別的機率。FCN 就是因此在之前被廣為運用在語義分割這類應用上。

( CNN(上) 與 FCN(下)的比較 )

Pooling layer 的問題


CNN, FCN 中的 pooling layer 原本是用以提取"重點資訊"並以此擷取更高 level 的feature。
feature 的 level 舉例: 以一張貓的圖片為例,曲線、形狀屬於較低level;貓的腳、一隻貓屬於較高 level。

但是因為pooling layer 的 "提取重點",原本input 關於位置的訊息也會減少,最後如果要 up-sampling 或 deconvolution 的話結果也會不夠精細,accuracy 上不去。

Atrous Convolution (空洞捲積)

 

( 一般convolution(左) 與atrous convolution(右) )
source: https://towardsdatascience.com/review-dilated-convolution-semantic-segmentation-9d5a5bd768f5
一種解決pooling layer 所帶來問題的方式,是用空洞捲積代替pooling。空洞捲積和一般捲積一樣,只是在做捲積時中間會有擴張 (dilation)。

以一維來看,可以用以下圖片和公式幫助理解。式中d為擴張程度dilation rate:



因為空洞捲積沒有down-sampling 的動作,所以自然不需要up-sampling,也可以少掉up-sampling 所帶來的失真(可參考下圖)。
from: https://arxiv.org/pdf/1606.00915.pdf

此外因為atrous convolution 中間有擴張,所以同樣有pooling 提取higher level feature 的特性。

另外他的另一個好處,是比一般捲積層的感受範圍還要大些。以上面的動畫為例,右邊的空洞捲積可以看為5X5大小的捲積,只是擴張的部分權重是零。

dilation rate 越大,感受野越廣。但是也不能一味的擴張(像下面),不然paper 說捲積效果會變ineffective。
(不過paper 中dilation rate 有用到二十幾三十,所以其實以比例尺來看下面的kernel 其實是可以接受的?)


擴張 Receptive Field

另一個提升RF 的方法是在model 中加入更多層的convolutional layer。

以下面的例子來看,一個5X5 input size 經過兩次3X3 kernel,no padding & stride=1 的捲積下,最後的output 會是1X1。我們可以觀察,經過一次convolution 的每個output 感受範圍是3X3 (圖中粉紅色和淺藍色的部分),但再經過一次convolution,最右邊的output 便可感受到整個5X5 的input 了。

Paper 中有給一個公式,假設兩捲積的RF 分別是K1, K2,串接 (cascade) 在一起的RF 便會是 K1+K2-1。讀者可以用下面的例子加以驗證。

但也不能單純加太多層,不然會有gradient vanishing 等問題。
於是這篇paper 引用了 DenseNet 這個related work。其主要的理念是讓每層 layer 的輸入都是其之前每層layer 的 output。如此極致發揮 residual 理念的架構,自然在 gradient vanishing 方面解決得不錯。


Multi-size Detection: ASPP



Atrous Spatial Pyramid Pooling (ASPP) ,即有空洞捲積的金字塔結構 Pooling。此為對同一個 input feature,使用不同 dilation rate 的空洞捲積去處理它,並將得到的各個結果 concate
 在一起(parallel)。之後可能再透過 1X1 conv 控制 channel 數。


至於 related work 中提到 ASPP 的原因,是因為它在 multi-size detection 上有所表現。

Dense Atrous Spatial Pyramid Pooling (DenseASPP)


想法


Increase receptive field + multi-size detection ->
架構中既要有 DenseNet 的骨架 (cascade) 、 又要同時有 ASPP 的骨架!

架構



此架構融合了 cascade (藍色箭頭) 以及 parallel (紅色箭頭) 的特性,所以此 paper 表示它在 increase receptive field & multi-size detection 上都應該表現不錯。

減少參數:1X1 conv


我們可以看到,隨著後面 atrous convolution layer 的 input (前面層的 output concate) 越來越多,channel 也會越來越多。為了減少其中所需要的參數以及控制 input channel 數 (paper 中將它從原本 $C_l$ 減少到 $C_0/2$),我們在將 input 送進 atrous conv 前會先經過 1X1 conv
設 $n=C_0/8$ for all layers in DenseASPP,則 DenseASPP 參數數量為:

式中 L 為 DenseASPP 中 atrous layer 數,K為 kernel size。
如果沒有1X1 conv 的話參數數量可能就要有 $S=\sum_{l=1}^L [C_l \times K^2 \times n] $ 個。

Experiment

其他相關實驗結果做實作細節可以參考 paper 或這篇:https://blog.csdn.net/u011974639/article/details/80844304


沒有留言:

張貼留言