SegNet 语义分割网络以及其变体 基于贝叶斯后验推断的 SegNet
HomePage:?http://mi.eng.cam.ac.uk/projects/segnet/
SegNet Paper:?https://www.computer.org/csdl/trans/tp/2017/12/07803544.html
Dropout as ?Bayesian Paper:?http://mlg.eng.cam.ac.uk/yarin/PDFs/NIPS_2015_deep_learning_uncertainty.pdf
首先看一下Fate_fjh博主親自測試的實驗結果:
(Fate_fjh測試結果)
SegNet基于FCN,修改VGG-16網絡得到的語義分割網絡,有兩種SegNet,分別為正常版與貝葉斯版,同時SegNet作者根據網絡的深度提供了一個basic版(淺網絡)。
1. SegNet原始網絡模型
圖一:SegNet網絡模型
SegNet網絡結構如上所示,Input為輸入圖片,Output為輸出分割的語義圖像,不同顏色代表不同的分類。語義分割的重要性就在于不僅告訴你圖片中某個東西是什么,而且告知它在圖片的位置。SegNet是一個對稱網絡,由中間綠色pooling層與紅色upsampling層作為分割,左邊是卷積提取高維特征,并通過pooling使圖片變小,SegNet作者稱為Encoder,右邊是反卷積(在這里反卷積與卷積沒有區別)與upsampling,通過反卷積使得圖像分類后特征得以重現,upsampling使圖像變大,SegNet作者稱為Decoder,最后通過Softmax,輸出不同分類的最大值,這就是大致的SegNet過程。
1.1 關于卷積
SegNet的Encoder過程中,卷積的作用是提取特征,SegNet使用的卷積為same卷積,即卷積后不改變圖片大小;在Decoder過程中,同樣使用same卷積,不過卷積的作用是為upsampling變大的圖像豐富信息,使得在Pooling過程丟失的信息可以通過學習在Decoder得到。SegNet中的卷積與傳統CNN的卷積并沒有區別。
1.2 關于批量歸一化
批標準化的主要作用在于加快學習速度,用于激活函數前,在SegNet中每個卷積層都會加上一個bn層,bn層后面為ReLU激活層,bn層的作用過程可以歸納為:?
(1)訓練時:?
? ? 1.向前傳播,bn層對卷積后的特征值(權值)進行標準化,但是輸出不變,即bn層只保存輸入權值的均值與方差,權值輸出回到卷積層時仍然是當初卷積后的權值。?
? ? 2.向后傳播,根據bn層中的均值與方差,結合每個卷積層與ReLU層進行鏈式求導,求得梯度從而計算出當前的學習速率。?
(2)測試時:每個bn層對訓練集中的所有數據,求取總體的均值與方差,假設有一測試圖像進入bn層,需要統計輸入權值的均值與方差,然后根據訓練集中整體的無偏估計計算bn層的輸出。注意,測試時,bn層已經改變卷積的權值,所以激活層ReLU的輸入也被改變。
1.3 關于下采樣與上采樣的巧妙設計
圖二: 2x2-最大池化原理
圖三: SegNet中基于索引的下采樣與上采樣的實現
在SegNet中的Pooling與其他Pooling多了一個index功能,也就是每次Pooling,都會保存通過max選出的權值在2x2 filter中的相對位置,對于圖二的6來說,6在粉色2x2 filter中的位置為(1,1),黃色的3的index為(0,0)。同時,從圖一可以看到綠色的pooling與紅色的upsampling通過pool indices相連,實際上是pooling后的indices輸出到對應的upsampling。?
Upsamping就是Pooling的逆過程,Upsamping使得圖片變大2倍。我們清楚的知道Pooling之后,每個filter會丟失了3個權重,這些權重是無法復原的,但是在Upsamping層中可以得到在Pooling中相對Pooling filter的位置。所以Upsampling中先對輸入的特征圖放大兩倍,然后把輸入特征圖的數據根據Pooling indices放入,如圖三所示,Unpooling對應上述的Upsampling,switch variables對應Pooling indices。
從圖三中右邊的Upsampling可以知道,2x2的輸入,變成4x4的圖,但是除了被記住位置的Pooling indices,其他位置的權值為0,因為數據已經被pooling掉了。因此,SegNet使用的反卷積在這里用于填充缺失的內容(可以理解為解碼過程學習金標準信息),所以在圖一中跟隨Upsampling層后面的是也是卷積層。
1.4 關于Softmax分類
SegNet最后一個卷積層會輸出所有的類別。網絡最后連接一個softmax層,由于是end to end, 所以softmax需要求出所有每一個像素在所有類別最大的概率,最為該像素的label,最終完成圖像像素級別的分類。
可以看一下作者得到的實驗結果:
1.5 討論Relu的應用效益
在傳統的CNN網絡中,ReLU通常在全連接之后,結合偏置bias用于計算權值的輸出,但是在Seg?Net作者的研究中發現,激活層越多越有利于圖像語義分割。上圖為論文中,不同深度的卷積層增加與不增加激活函數的對比圖。?
2.?Bayesian SegNet
2.1 SegNet存在的一個問題
圖四 Bayesian SegNet 網絡模型
對比圖一與圖四,并沒有發現Bayesian SegNet與SegNet的差別,事實上,從網絡變化的角度看,Bayesian SegNet只是在卷積層中多加了一個DropOut層。最右邊的兩個圖Segmentation與Model Uncertainty,就是像素點語義分割輸出與其不確定度(顏色越深代表不確定性越大,即置信度越低)。
2.1 關于DropOut as Bayesian approximation
在傳統神經網絡中DropOut層的主要作用是防止權值過度擬合,增強學習能力。DropOut層的原理是,輸入經過DropOut層之后,隨機使部分神經元不工作(權值為0),即只激活部分神經元,結果是這次迭代的向前和向后傳播只有部分權值得到學習,即改變權值。?
因此,DropOut層服從二項分布,結果不是0,就是1,在CNN中可以設定其為0或1的概率來到達每次只讓百分之幾的神經元參與訓練或者測試。在Bayesian SegNet中,SegNet作者把概率設置為0.5,即每次只有一半的神經元在工作。因為每次只訓練部分權值,可以很清楚地知道,DropOut層會導致學習速度減慢。
在Bayesian SegNet中通過DropOut層實現多次采樣,多次采樣的樣本值為最后輸出,方差為其不確定度,方差越大不確定度越大,如圖四所示,mean為圖像語義分割結果,var為不確定大小。所以在使用Bayesian SegNet預測時,需要多次向前傳播采樣才能夠得到關于分類不確定度的灰度圖,Bayesian SegNet預測如圖六所示。?
圖六 Bayesian SegNet 測試結果
總結
以上是生活随笔為你收集整理的SegNet 语义分割网络以及其变体 基于贝叶斯后验推断的 SegNet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FreeBSD的功能特点
- 下一篇: 水滴石穿C语言之正确使用const