1. 程式人生 > >deeplabcv2 的 Atrous Convolution(帶孔卷機核),感受野,及tensorflow實現crf的一點理解。

deeplabcv2 的 Atrous Convolution(帶孔卷機核),感受野,及tensorflow實現crf的一點理解。

首先是因為做影象分割,所以使用deeplab。思想基本和fcn一樣。先卷機提取特徵,然後闊尺寸至原影象大小。

普通fcn先把影象padding至很大(據說是邊緣補100個0),然後一層層下來,pool (stride=2)或者是卷機( stride=2)5次,影象縮小了32倍,所以之前才需要把影象放大,不然最後得到的特徵圖就太小了。但是補0加大了噪聲。。。

deeplabcv2 採用的新做法是:在pool5開始用一種新的卷機核 Atrous Convolution,hole演算法

把conv5 開始起的conv都換成atrous conv 並且con的stride和pool的stride都給的1,使得影象不再縮小。並且保證感受野不變。如下圖:

普通的卷集核在stride=1後,感受野就變小了(7---5),


Atrous Convolution會在卷積中間插0,使得卷積核“擴大”(或者另一說法是:在對feature map卷積的時候,隔畫素的去卷),c 和 a 具有一樣的感受野。hole size空洞係數的值可變。

再來一張圖:


這樣操作,就在保證感受野的前提下,還不縮小影象大小。

然後,deeplab cv2還連線了一個金字塔型:


hole_size 設定了6 12 18 24.此為金字塔aspp結構,多尺度的卷積map, 然後相加"融合"得到fc8,再使用闊尺寸8倍,的到原圖尺寸一致的影象。(用tensorflow實現的話,直接有resize函式擴大,預設是雙線性插值法,也可選擇別的插值引數方法。)

最後做的crf使邊緣更細節,這裡就一點值得注意,crf的輸入要求,需要把維度轉換好,需要的一個是rgb的原圖,還有一個是以上f8闊尺寸後再softmax(使前向結算結果變為概率分佈形式)的結果。然後,就得到最後的分割影象了。

參考的博文:http://blog.csdn.net/c_row/article/details/52161394

也可以參看我的另一片博文,說得更細些:

http://blog.csdn.net/jiachen0212/article/details/78548667