2015 CVPR
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling
SegNet 官方網站
Introduce
SegNet 是一個encoder-decoder結構的卷積神經網絡.
- Cambridge提出
- 解決自動駕駛或者智能機器人的圖像語義分割深度網絡
- 基于FCN,修改VGG-16網絡
- 有兩種,分别為SegNet與Bayesian SegNet
- end to end
SegNet和FCN思路十分相似:
- 隻是Encoder,Decoder(Upsampling)使用的技術不一緻。
- SegNet的編碼器部分使用的是VGG16的前13層卷積網絡,每個編碼器層都對應一個解碼器層,最終解碼器的輸出被送入soft-max分類器以獨立的為每個像素産生類機率。
Network
- 左邊是卷積提取特征,通過pooling增大感受野,同時圖檔變小,該過程稱為Encoder
- 右邊是反卷積(在這裡反卷積與卷積沒有差別)與upsampling,通過反卷積使得圖像分類後特征得以重制,upsampling還原到圖像原始尺寸,該過程稱為Decoder
- 綠色的pooling與紅色的upsampling通過pool indices 相連,實際上是pooling後的indices輸出到對應的upsampling
- 最後通過Softmax,輸出不同分類的最大值,得到最終分割圖。
- 最後一個卷積層會輸出所有的類别(包括other類),網絡最後加上一個softmax層,由于是end to end, 是以softmax需要求出所有每一個像素在所有類别最大的機率,做為該像素的label,最終完成圖像像素級别的分類。
Architectural
Encoder
- Convolution
- 通過卷積提取特征,SegNet使用的卷積為same卷積,即卷積後保持圖像原始尺寸
- 在Decoder過程中,同樣使用same卷積,不過卷積的作用是為upsampling變大的圖像豐富資訊,使得在Pooling過程丢失的資訊可以通過學習在Decoder得到。
- Batch Normalisation
- RELU
SegNet作者的研究中發現,激活層越多越有利于圖像語義分割。
Decoder(Pooling&Upsampling)
- 在SegNet中的Pooling比其他Pooling多了一個indice 功能(亮點)
- 每次Pooling,都會儲存通過max選出的權值在2x2 filter中的相對位置
- net中綠色的pooling與紅色的upsampling通過pool indices相連,實際上是pooling後的indices輸出到對應的upsampling
- Upsamping就是Pooling的逆過程(index在Upsampling過程中發揮作用)
- max-pooling indics advantage
- 改進了邊界劃分
- 減少了實作端到端訓練的參數數量
- 這種upsampling模式可以包含到任何編碼-解碼網絡中(FCN、crfasrnn)
- Upsampling中先對輸入的特征圖放大兩倍,然後把輸入特征圖的資料根據Pooling indices放入
- SegNet上采樣不需要訓練學習(隻是占用了一些存儲空間)
- FCN則是用transposed convolution政策,即将feature 反卷積後得到upsampling,這一過程需要學習
SegNet
- uses the max pooling indices to upsample (without learning) the feature map(s)
- convolves with a trainable decoder filter bank.
FCN
- upsamples by learning to deconvolve the input feature map
- adds the corresponding encoder feature map to produce the decoder output.( feature map is the output of the max-pooling layer in the corresponding encoder. )
- no trainable decoder filters in FCN.
Deconvolution
- 除了被記住位置的Pooling indices,其他位置的權值為0。
- 是以使用反卷積在這裡用于填充缺失的内容,這裡的反卷積與卷積是一樣的。
output
- 最後一個卷積層會輸出所有的類别(包括other類)
- 最後加上一個softmax層
- 求出所有每一個像素在所有類别最大的機率,最為該像素的label
Bayesian SegNet
先驗機率
在SeNet中最後每個像素都會對每一類的機率進行計算,再通過 softmax 輸出機率最大的一個,然後這個像素點就認為是這一類别,對應的機率就是這一像素屬于該類的機率。(由原因到結果的推導)
problem
- 對于不同的樣本,先驗機率無法保證一定正确。
- 需要有從結果尋找原因的貝葉斯機率,即後驗機率,它能給出結果的可信程度,即置信度。
different
- 網絡:與普通比,Bayesian SegNet隻是在卷積層中多加了一層DropOut
DropOut
在傳統神經網絡中DropOut層的主要作用是防止權值過度拟合,增強學習能力。
- 輸入經過DropOut層之後,随機使部分神經元不工作(權值為0),即隻激活部分神經元,結果是這次疊代的向前和向後傳播隻有部分權值得到學習
- DropOut層服從二項分布,結果不是0,就是1
- Bayesian SegNet中,SegNet作者把機率設定為0.5,即每次隻有一半的神經元在工作。
- Bayesian SegNet中通過DropOut層實作多次采樣,多次采樣的樣本值為最後輸出,方差為其不确定度,方差越大不确定度越大
Gaussian process & Monte Carlo Dropout Sampling
Dropout as a Bayesian approximation: Representing model uncertainty in deep learning
高斯分布
高斯過程是指任意有限個随機變量都服從聯合高斯分布,同時隻需要知道均值與協防差就能夠确定一個高斯過程,是以高斯過程可以用于從有限維到無限維的回歸問題,從已知高斯分布,增加新的随機變量分布可以求出新的高斯分布,根據新的分布可以求出其均值與方差。
如何确定一個高斯分布?
- 需要多次采樣才能确定一個分布。
- 蒙特卡羅抽樣告訴我們可以通過設計一個試驗方法将一個事件的頻率轉化為機率,因為在足夠大的樣本中,事件發生的頻率會趨向事件發生的機率,是以可以很友善地求出一個未知分布。
- 通過蒙特卡羅抽樣,就可以求出一個新分布的均值與方差,這樣使用方差大小就可以知道一個分布對于樣本的差異性,我們知道方差越大差異越大。
Use
1.對于分類的邊界位置,不确定性較大,即其置信度較低。
2.對于圖像語義分割錯誤的地方,置信度也較低。
3.對于難以區分的類别,例如人與自行車,road與pavement,兩者如果有互相重疊,不确定度會增加。
References
卷積神經網絡CNN(4)—— SegNet
論文翻譯