自動駕駛入門日記-6-視頻語義分割
來自專欄小白自動駕駛之路4 人贊了文章
在自動駕駛任務中,實時性一直是急需解決的一個問題,也是極其具有挑戰性的一個問題。一方面,現階段一輛裝滿所有感測器的自動駕駛汽車每秒收集的數據量高達1-4GB(數據來自網路,不一定準確),另一方面,為保證汽車長時間的續航能力,自動駕駛汽車應儘可能的保證節省電力,同時大功率的計算部件其散熱也是一個必須解決的問題。
因此,如何在減少計算量的同時保證得到的結果準確魯棒就是計算機視覺科學家應該審慎思考的一個問題了,目前針對降低自動駕駛視頻語義分割延遲的相關工作已經發表了很多,我選取其中的幾篇進行簡答介紹。
1.SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling
參考資料:卷積神經網路CNN(4)—— SegNet
SegNet使劍橋大學機器智能實驗室提出的在FCN的基礎上修改的一種比較優美的網路結構,由於其官網上提供了很詳盡的學習資料,因此在其基礎上也衍生出了很多優秀工作。
網路結構
網路結構的細節感興趣的可以看論文,由於篇幅問題這裡比詳細闡述了。SegNet的架構可以看作一個Encoder-Decoder模型,前一半可以看作一個使用CNN和polling的編碼器,後一部分使用upsampling與deconvolution組成對應的解碼器。
值得注意的是,相比於其他網路結構的pooling層,SegNet中的pooling層多了一個index的功能,即記錄最大池化時所選取的數值的位置信息,以便在上採樣過程中進行恢復。、
unpooling
Bayesian SegNet
在SeNet中最後每個像素都會對每一類的概率進行計算,再通過Softmax輸出概率最大的一個,然後這個像素點就認為是這一類別,對應的概率就是這一像素屬於該類的概率。這種由原因到結果的推導,可以稱為先驗概率,任何先驗概率使用都會出現一個問題,不能知道這一結果的可靠性,即便先驗概率非常大,但是對於不同的樣本,先驗概率無法保證一定正確。正是如此,才需要有從結果尋找原因的貝葉斯概率,即後驗概率,它能給出結果的可信程度,即置信度。Bayesian SegNet正是通過後驗概率,告訴我們圖像語義分割結果的置信度是多少。
Bayesian SegNet
可見,在網路中加入一層Dropout即可得到語義分割圖像的不確定性灰度圖,具體的原理參考Dropout as a Bayesian approximation: Representing model uncertainty in deep learning。
高斯過程是指任意有限個隨機變數都服從聯合高斯分布,同時只需要知道均值與協防差就能夠確定一個高斯過程,所以高斯過程可以用於從有限維到無限維的回歸問題,從已知高斯分布,增加新的隨機變數分布可以求出新的高斯分布,根據新的分布可以求出其均值與方差。
如何確定一個高斯分布?需要多次採樣才能確定一個分布。蒙特卡羅抽樣告訴我們可以通過設計一個試驗方法將一個事件的頻率轉化為概率,因為在足夠大的樣本中,事件發生的頻率會趨向事件發生的概率,因此可以很方便地求出一個未知分布。通過蒙特卡羅抽樣,就可以求出一個新分布的均值與方差,這樣使用方差大小就可以知道一個分布對於樣本的差異性,方差越大差異越大。
在Bayesian SegNet中通過DropOut層實現多次採樣,多次採樣的樣本值為最後輸出,方差最為其不確定度,方差越大不確定度越大,多次採樣後就可以得到不確定性的灰度圖。
可以看到,不確定性灰度圖很像圖像的邊界提取,這也直觀的表明了在語義分割問題中邊界的不確定性較大的問題。
2.Low-Latency Video Semantic Segmentation
參考資料:CVPR 2018 | 商湯科技Spotlight論文詳解:極低延遲性的視頻語義分割
演算法核心思想
本文演算法使用視頻分割中經典的基於關鍵幀調度的模式來有效平衡計算量和精度。具體來說,如果當前處理幀為關鍵幀,則使用整個分割網路來獲得語義分割的標籤,如圖2左部分所示;如果當前幀不為關鍵幀,則變換分割網路高層歷史幀特徵為當前幀高層特徵,再使用分割網路的語義分類操作獲得當前幀的語義標籤,如圖2右部分所示。關鍵幀的選擇和特徵跨幀傳播兩個操作均基於同樣的網路低層特徵,具體操作在之後章節詳述。在劃分分割網路結構時,演算法盡量保證低層網路的運行時間遠小於高層網路,(如圖2所示)低層網路耗時61ms,而高層網路耗時300ms。這樣考慮的出發點在於:因低層網路的計算代價很小,演算法可以基於低層網路提取的特徵,增加少部分額外的計算來完成關鍵幀選擇和特徵跨幀傳播;當前幀的低層特徵同樣包含當前幀的信息,可以互補來自不同時間的傳播特徵;所有的操作均復用了逐幀模型的結構,演算法整體模型更加簡潔。
由於實現過程中涉及到一種關鍵幀調度的問題,而以往的關鍵幀選取方法要麼簡化為固定時間間隔選取,要麼計算高層特徵差異,根據設定閾值選取。前者無法適應視頻幀內容變化,容易錯過關鍵幀或者浪費計算資源,後者由於特徵變化較大,閾值難以確定。因此作者使用當前幀語義標籤和前一個關鍵幀語義標籤的差異值來作為視頻內容變化程度的判斷依據,當差值超過某個閾值的時候,則選擇該幀作為關鍵幀。但是直接計算這樣一個差異值較為困難,作者在Cityscapes和Camvid兩個數據集上發現低層特徵和語義標籤的變化值有很大的關聯,因而利用低層特徵來預測這樣該差值,即輸入歷史幀低層特徵和當前幀低層特徵到一個回歸器來回歸該差異值。
自適應關鍵幀選擇整體框架當視頻的序列幀不斷輸入時,在第一幀時刻,進行初始化操作,即輸入圖片幀給整個網路,獲得低層特徵和高層特徵。在接下來的時刻t進行自適應的計算,首先計算低層特徵:輸入和上一個關鍵幀低層特徵至自適應關鍵幀選擇模塊,判斷當前幀是否為關鍵幀。若為關鍵幀,則輸入底層特徵至高層網路獲得高層特徵;否則輸入底層特徵至自適應特徵傳播模塊獲得當前幀高層特徵,進而通過語義分類獲得當前幀語義標籤。
本文在犧牲較小精度的條件下極大的降低了系統延遲,這種低延遲調度策略可將延遲由360ms降低到119ms。但是本文方法在場景變化劇烈的條件下(即關鍵幀採樣比較密集)仍然無法有效降低延遲,因此論文作者希望在未來工作中在模型壓縮和模型設計方面進一步降低演算法的總體延遲和計算量。
祝好!願與諸君一起進步。
推薦閱讀: