Paper link:https://arxiv.org/pdf/1511.00561.pdf
Motivation:為了實際應用,主要是在時間效率和存儲空間上做了改進;
Introduction:
(1)Pipeline:
(2)Light
1、帶index的pooling:
在SegNet中的Pooling與其他Pooling多了一個index功能(該文章亮點之一),也就是每次Pooling,都會保存通過max選出的權值在2x2 filter中的相對位置,對於上圖的6來說,6在粉色2x2 filter中的位置為(1,1)(index從0開始),黃色的3的index為(0,0)。同時,從網絡框架圖可以看到綠色的pooling與紅色的upsampling通過pool indices相連,實際上是pooling后的indices輸出到對應的upsampling(因為網絡是對稱的,所以第1次的pooling對應最后1次的upsamping,如此類推)。
Upsamping就是Pooling的逆過程(index在Upsampling過程中發揮作用),Upsamping使得圖片變大2倍。我們清楚的知道Pooling之后,每個filter會丟失了3個權重,這些權重是無法復原的,但是在Upsamping層中可以得到在Pooling中相對Pooling filter的位置。所以Upsampling中先對輸入的特征圖放大兩倍,然后把輸入特征圖的數據根據Pooling indices放入,下圖所示,Unpooling對應上述的Upsampling,switch variables對應Pooling indices。
如下圖:
pooling&Upsampling示意圖中右邊的Upsampling可以知道,2x2的輸入,變成4x4的圖,但是除了被記住位置的Pooling indices,其他位置的權值為0,因為數據已經被pooling走了。因此,SegNet使用的反卷積在這里用於填充缺失的內容,因此這里的反卷積與卷積是一模一樣,在網絡框架圖中跟隨Upsampling層后面的是也是卷積層。
2、為結果加入置信度(Bayesian SegNet):
需要多次采樣才能確定一個分布。蒙特卡羅抽樣告訴我們可以通過設計一個試驗方法將一個事件的頻率轉化為概率,因為在足夠大的樣本中,事件發生的頻率會趨向事件發生的概率,因此可以很方便地求出一個未知分布。通過蒙特卡羅抽樣,就可以求出一個新分布的均值與方差,這樣使用方差大小就可以知道一個分布對於樣本的差異性,我們知道方差越大差異越大。
在Bayesian SegNet中通過DropOut層實現多次采樣(),多次采樣的樣本值為最后輸出,方差最為其不確定度,方差越大不確定度越大,如圖6所示,mean為圖像語義分割結果,var為不確定大小。所以在使用Bayesian SegNet預測時,需要多次向前傳播采樣才能夠得到關於分類不確定度的灰度圖,Bayesian SegNet預測如下圖所示。
第一行為輸入圖像,第二行為ground truth,第三行為Bayesian SegNet語義分割輸出,第四行為不確定灰度圖。可以看到,
1.對於分類的邊界位置,不確定性較大,即其置信度較低。
2.對於圖像語義分割錯誤的地方,置信度也較低。
3.對於難以區分的類別,例如人與自行車,road與pavement,兩者如果有相互重疊,不確定度會增加。
(3)Result:
可以達到和FCN相似的效果,但是存儲利用率更高;