文章來源: https://blog.csdn.net/fate_fjh/article/details/53467948
Introduction
自己制作國內高速公路label,使用SegNet訓練高速公路模型,測試效果
參考:http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html
SegNet是Cambridge提出旨在解決自動駕駛或者智能機器人的圖像語義分割深度網絡,開放源碼,基於caffe框架。SegNet基於FCN,修改VGG-16網絡得到的語義分割網絡,有兩種SegNet,分別為正常版與貝葉斯版,同時SegNet作者根據網絡的深度提供了一個basic版(淺網絡)。
Outline
圖1
- 1
SegNet網絡結構如圖1所示,Input為輸入圖片,Output為輸出分割的圖像,不同顏色代表不同的分類。語義分割的重要性就在於不僅告訴你圖片中某個東西是什么,而且告知你他在圖片的位置。我們可以看到是一個對稱網絡,由中間綠色pooling層與紅色upsampling層作為分割,左邊是卷積提取高維特征,並通過pooling使圖片變小,SegNet作者稱為Encoder,右邊是反卷積(在這里反卷積與卷積沒有區別)與upsampling,通過反卷積使得圖像分類后特征得以重現,upsampling使圖像變大,SegNet作者稱為Decoder,最后通過Softmax,輸出不同分類的最大值。這就是大致的SegNet過程,下面對這個過程里面使用到的方法進行介紹。
Convolution
SegNet的Encoder過程中,卷積的作用是提取特征,SegNet使用的卷積為same卷積(詳見卷積神經網絡CNN(1)),即卷積后不改變圖片大小;在Decoder過程中,同樣使用same卷積,不過卷積的作用是為upsampling變大的圖像豐富信息,使得在Pooling過程丟失的信息可以通過學習在Decoder得到。SegNet中的卷積與傳統CNN的卷積並沒有區別。
Batch Normalisation
批標准化(詳見卷積神經網絡CNN(2))的主要作用在於加快學習速度,用於激活函數前,在SegNet中每個卷積層都會加上一個bn層,bn層后面為ReLU激活層,bn層的作用過程可以歸納為:
(1)訓練時:
1.向前傳播,bn層對卷積后的特征值(權值)進行標准化,但是輸出不變,即bn層只保存輸入權值的均值與方差,權值輸出回到卷積層時仍然是當初卷積后的權值。
2.向后傳播,根據bn層中的均值與方差,結合每個卷積層與ReLU層進行鏈式求導,求得梯度從而計算出當前的學習速率。
(2)測試時:每個bn層對訓練集中的所有數據,求取總體的均值與方差,假設有一測試圖像進入bn層,需要統計輸入權值的均值與方差,然后根據訓練集中整體的無偏估計計算bn層的輸出。注意,測試時,bn層已經改變卷積的權值,所以激活層ReLU的輸入也被改變。
ReLU
ReLU是對於傳統激活函數sigmoid的改進,主要在梯度消失的問題上得到很好的解決。ReLU函數如下圖所示,ReLU的輸出為a=max(0,z)。
圖2
- 1
在傳統的CNN網絡中,ReLU通常在全連接之后,結合偏置bias用於計算權值的輸出,但是,在Seg
Net作者的研究中發現,激活層越多越有利於圖像語義分割。圖3為論文中,不同深度的卷積層增加與不增加激活函數的對比圖。
圖3
- 1
Pooling&Upsampling
Pooling在CNN中是使得圖片縮小一半的手段,通常有max與mean兩種Pooling方式,圖4所示的是max Pooling。max Pooling是使用一個2x2的filter,取出這4個權重最大的一個,原圖大小為4x4,Pooling之后大小為2x2,留意原圖左上角粉色的四個數,最后只剩最大的6,這就是max的意思。
圖4
- 1
在SegNet中的Pooling與其他Pooling多了一個index的功能,也就是每次Pooling,都會保存通過max選出的權值在2x2 filter中的相對位置,對於圖4的6來說,6在粉色2x2 filter中的位置為(1,1)(假設index從0開始),黃色的3的index為(0,0)。同時,從圖1可以看到綠色的pooling與紅色的upsampling通過pool indices相連,實際上是pooling后的indices輸出到對應的upsampling(因為網絡是對稱的,所以第1此的pooling對應最后1次的upsamping,如此類推)。
Upsamping就是Pooling的逆過程,Upsamping使得圖片變大2倍。我們清楚的知道Pooling之后,每個filter會丟失了3個權重,這些權重是無法復原的,但是在Upsamping層中可以得到在Pooling中相對Pooling filter的位置。所以Upsampling中先對輸入的特征圖放大兩倍,然后把輸入特征圖的數據根據Pooling indices放入,如圖5所示,Unpooling對應上述的Upsampling,switch variables對應Pooling indices。
圖5
- 1
Deconvolution
從圖5中右邊的Upsampling可以知道,2x2的輸入,變成4x4的圖,但是除了被記住位置的Pooling indices,其他位置的權值為0,因為數據已經被pooling走了。因此,SegNet使用的反卷積在這里用於填充缺失的內容,因此這里的反卷積與卷積是一模一樣的(反卷積詳見卷積神經網絡CNN(1)),在圖1中跟隨Upsampling層后面的是也是卷積層。
Output
在圖1中,SegNet,最后一個卷積層會輸出所有的類別(包括other類),網絡最后加上一個softmax層,由於是end to end, 所以softmax需要求出所有每一個像素在所有類別最大的概率,最為該像素的label,最終完成圖像像素級別的分類。
Bayesian SegNet
可以知道,在SeNet中最后每個像素都會對每一類的概率進行計算,再通過Softmat輸出概率最大的一個,然后這個像素點就認為是這一類別,對應的概率就是這一像素屬於該類的概率。這種由原因到結果的推導,可以稱為先驗概率,任何先驗概率使用都會出現一個問題,不能知道這一結果的可靠性,即便先驗概率非常大,但是對於不同的樣本,先驗概率無法保證一定正確。正是如此,才需要有從結果尋找原因的貝葉斯概率,即后驗概率,它能給出結果的可信程度,即置信度。Bayesian SegNet正是通過后驗概率,告訴我們圖像語義分割結果的置信度是多少。Bayesian SegNet如圖6所示。
圖6
- 1
對比圖1與圖6,並沒有發現Bayesian SegNet與SegNet的差別,事實上,從網絡變化的角度看,Bayesian SegNet只是在卷積層中多加了一個DropOut層,其作用后面解釋。最右邊的兩個圖Segmentation與Model Uncertainty,就是像素點語義分割輸出與其不確定度(顏色越深代表不確定性越大,即置信度越低)。
DropOut
在傳統神經網絡中DropOut層的主要作用是防止權值過度擬合,增強學習能力。DropOut層的原理是,輸入經過DropOut層之后,隨機使部分神經元不工作(權值為0),即只激活部分神經元,結果是這次迭代的向前和向后傳播只有部分權值得到學習,即改變權值。
因此,DropOut層服從二項分布,結果不是0,就是1,在CNN中可以設定其為0或1的概率來到達每次只讓百分之幾的神經元參與訓練或者測試。在Bayesian SegNet中,SegNet作者把概率設置為0.5,即每次只有一半的神經元在工作。因為每次只訓練部分權值,可以很清楚地知道,DropOut層會導致學習速度減慢。
Gaussian process & Monte Carlo Dropout Sampling
參考論文:Dropout as a Bayesian approximation: Representing model uncertainty in deep learning
這里只說明高斯過程與蒙特卡羅抽樣的作用,不詳細解釋原理。
高斯過程是指任意有限個隨機變量都服從聯合高斯分布,同時只需要知道均值與協防差就能夠確定一個高斯過程,所以高斯過程可以用於從有限維到無限維的回歸問題,從已知高斯分布,增加新的隨機變量分布可以求出新的高斯分布,根據新的分布可以求出其均值與方差。
如何確定一個高斯分布?需要多次采樣才能確定一個分布。蒙特卡羅抽樣告訴我們可以通過設計一個試驗方法將一個事件的頻率轉化為概率,因為在足夠大的樣本中,事件發生的頻率會趨向事件發生的概率,因此可以很方便地求出一個未知分布。通過蒙特卡羅抽樣,就可以求出一個新分布的均值與方差,這樣使用方差大小就可以知道一個分布對於樣本的差異性,我們知道方差越大差異越大。
Use Bayesian SegNet
在Bayesian SegNet中通過DropOut層實現多次采樣,多次采樣的樣本值為最后輸出,方差最為其不確定度,方差越大不確定度越大,如圖6所示,mean為圖像語義分割結果,var為不確定大小。所以在使用Bayesian SegNet預測時,需要多次向前傳播采樣才能夠得到關於分類不確定度的灰度圖,Bayesian SegNet預測如圖7所示。
圖7
- 1
第一行為輸入圖像,第二行為ground truth,第三行為Bayesian SegNet語義分割輸出,第四行為不確定灰度圖。可以看到,
1.對於分類的邊界位置,不確定性較大,即其置信度較低。
2.對於圖像語義分割錯誤的地方,置信度也較低。
3.對於難以區分的類別,例如人與自行車,road與pavement,兩者如果有相互重疊,不確定度會增加。