Laplacian Pyramid Reconstruction and Refinement for Semantic Segmentation論文解讀

Introduction

這篇文章介紹了空間信息與語義信息的原則並提出兩種方法顯著提高了分割的結果:
首先,文章提出池化破壞了通道內部的空間信息,因爲池化之前的卷積可以認爲其融合了多個通道空間信息並編碼得到高維向量。當然這個問題大家都知道。越低的層得到的分割邊緣越清晰位置越明確分辨率也越高,但很多錯誤分類結果;而高層得到的分割則更正確但邊緣也更模糊,不夠銳利。於是文章使用了一種data-adapted的基礎函數來做上採樣,使性能得到了顯著提高。
深層特徵與淺層特徵
隨後,文章認爲相比於以前通過拼接或是相加對於空間信息的恢復與跨層的信息融合都不太好。拼接會來帶特徵向量的高緯度,也即會使通道的數量顯著增加,而加法並不能很好地利用起空間與語義信息的相關性,並不是一個很好的trade-off,因爲高分辨率的預測結果會因感受野過小而存在很多噪聲預測或者說錯誤預測,文章發現相比於底層的語義信息,高分辨率的預測結果對最終的預測幾乎沒有什麼影響,因爲其大部分內容都被神經網絡選擇性忽略。
於是文章受到ResNet思想的影響,使用網絡去學習殘差分割,即利用底層的高分辨率分割結果去學習如何銳化高層的低分辨率結果,使其邊緣更加接近真實分割。

Reconstruction with learned basis function

如果是簡單得對得到的低分辨率的分割結果進行上採樣得到,那麼特徵圖的通道數也會很快地坍塌成類別的數目,比如說從4096變爲21,這樣會丟失掉很多已經被編碼的信息,而這也是文章想要避免的,因此,文章使用了一種通過數據學到的basis function來擴展網絡的空間信息的表達能力,這個方法被文章稱爲“Reconstruction”,重構。
圖像的重構是通過反捲積(Deconvolution)來完成的。要注意的是,文章使用的反捲積是和AlexNet中的pooling一樣具有重疊,假設我們想要得到比原圖大4x的重構特徵圖,那就使用一組卷積覈對圖像進行反捲積,卷積核大小爲8*8而不是7*7,步進爲4,如果有21種分類,那麼卷積核的通道數爲21*10=210,其中的10就是一組basis function的數量。
如果想要提高插值的性能,我們通常會把雙線性插值替換爲更厲害的樣條插值。

樣條方程是一類分段光滑、並且在各段交接處也有一定光滑性的函數。樣條一詞來源於工程繪圖人員爲了將一些指定點連接成一條光順曲線所使用的工具,即富有彈性的細木條或薄鋼條。由這樣的樣條形成的曲線在連接點處具有連續的坡度與曲率。分段低次多項式、在分段處具有一定光滑性的函數插值就是模擬以上原理發展起來的,它克服了高次多項式插值可能出現的振盪現象,具有較好的數值穩定性和收斂性,由這種插值過程產生的函數就是多項式樣條函數。

比較
文章認爲在第一個卷積層使用更大的卷積核比如5*5要比使用1*1好,因爲這也類似於樣條插值需要考慮每個點和相鄰點的關係。而得到的210通道的特徵圖被文章稱爲”coefficients”,這是網絡學習到的與basis function進行反捲積的參數。

有的文章真的很喜歡亂起名,就叫feature map不好麼?

而basis function又是怎麼來的呢?
basis function是網絡學習到的參數,但它的初始化不是和其他卷積層一樣的。文章對要分的每一個類從訓練數據中提取了10000塊兒圖像,每一塊兒塊兒都是32*32大小而且至少2%的像素是屬於這個類。通過對這10000塊兒進行PCA,對每一類得到k個basis function。利用得到的basis function對卷積核進行初始化,類似於在反捲積的時候使用雙線性插值初始化,總之就是一種初始化方式。
basis function
有意思的是,文章發現端到端的訓練對basis function幾乎沒有什麼影響,訓練中這些濾波器的改變量非常的小(10^-7)

Laplacian Pyramid Refinement

這部分介紹網絡的結構,以及網絡是如何使用殘差的

一般情況下有兩種類型的圖像金字塔常常出現在文獻和以及實際運用中。他們分別是:
* 高斯金字塔(Gaussianpyramid): 用來向下採樣,主要的圖像金字塔
* 拉普拉斯金字塔(Laplacianpyramid): 用來從金字塔低層圖像重建上層未採樣圖像,在數字圖像處理中也即是預測殘差,可以對圖像進行最大程度的還原,配合高斯金字塔一起使用。
兩者的簡要區別:高斯金字塔用來向下降採樣圖像,而拉普拉斯金字塔則用來從金字塔底層圖像中向上採樣重建一個圖像。

network
文章使用了非常多的模塊來完成分割,首先右上角的模塊是用來生成邊界的掩膜(Boundary mask)的。通過正反的最大值池化相加,如果不是邊界的地方會相互抵消爲0,而邊界的池化結果總是一大一小,相加不爲0,通過控制池化的大小,就可以控制mask的線條粗細。
每一部分網絡的輸出,都會被送入重構模塊生成該分辨率大小的分割圖,而每一個分割圖都會產生softmax loss並回傳梯度,低分辨率的分割圖經過上採樣生成與上一個分辨率一樣大小的分割圖,再生成mask,與該層的分割圖進行點乘,再於上一層的分割圖相加,得到refine後的分割圖,並把這個分割圖作爲本層最終的結果,送入再下一層並求softmax loss,以此類推。

Conclusion

總體而言,這篇文章的思路非常有趣,使用池化而不是卷積來生成邊界的mask,沒有加入額外的參數量,使用mask也類似於加入了注意力機制,告訴網絡每一層的預測結果哪些重要哪些不重要,再利用相加把這層的影響疊加到上一層的分割上,使深層的分割更多得決定分類,淺層的分割更多得決定邊緣,得到更精確的分割結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章