DeepLab v2及調試過程
New Rules
Dua Lipa (Deluxe)
Dua Lipa
00:00/03:32
今天我們開始說說語義分割第二個系列,DeepLab V2。說這個之前,我們先說說FCN的一些簡單知識。
圖像語義分割,簡單而言就是給定一張圖片,對圖片上的每一個像素點分類。
圖像語義分割,從FCN把深度學習引入這個任務到現在,一個通用的框架已經大概確定了。即前端使用FCN全卷積網路輸出粗糙的label map,後端使用CRF條件隨機場/MRF馬爾科夫隨機場等優化前端的輸出,最後得到一個精細的分割圖。
上圖示基於區域的全卷積框架圖,而且這也是第一次用於目標檢測的全卷積網路,最後的效果得到了很好的效果
圖像語義分割,從FCN把深度學習引入這個任務到現在,一個通用的框架已經大概確定了。即前端使用FCN全卷積網路輸出粗糙的label map,後端使用CRF條件隨機場或者MRF馬爾科夫隨機場等優化前端的輸出,最後得到一個精細的分割圖。
我們為什麼需要FCN?
分類網路通常會在最後連接幾層全連接層,它會將原來二維的矩陣(圖片)壓扁成一維的,從而丟失了空間信息,最後訓練輸出一個標量,這就是我們的分類標籤。
而圖像語義分割的輸出需要是個分割圖,且不論尺寸大小,但是至少是二維的。所以,流行的做法是丟棄全連接層,全部換上全卷積層,而這就是全卷積網路了。
具體定義請參看論文:《Fully Convolutional Networks for Semantic Segmentation》
FCN結構
在FCN論文中,作者的FCN主要使用了三種技術:
卷積化(Convolutional)
上採樣(Upsample)
跳層連接(Skip Layer)
卷積化即是將普通的分類網路,比如VGG16,ResNet50/101等網路丟棄全連接層,換上對應的卷積層即可。
上採樣即是反卷積(Deconvolution)。當然關於這個名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose,在信號與系統這門課上,我們學過反卷積有定義,不是這裡的上採樣。
所以叫conv_transpose更為合適。
眾所諸知,池化會縮小圖片的尺寸,比如VGG16 五次池化後圖片被縮小了32倍。為了得到和原圖等大的分割圖,我們需要上採樣/反卷積。反卷積和卷積類似,都是相乘相加的運算。只不過後者是多對一,前者是一對多。而反卷積的前向和後向傳播,只用顛倒卷積的前後向傳播即可。所以無論優化還是後向傳播演算法都是沒有問題。上池化的實現主要在於池化時記住輸出值的位置,在上池化時再將這個值填回原來的位置,其他位置填0。圖解如下:
但是,雖然文中說是可學習的反卷積,但是作者實際代碼並沒有讓它學習,可能正是因為這個一對多的邏輯關係。代碼如下:
layer{name:"upscore"type:"Deconvolution"bottom:"score_fr"top:"upscore"param { lr_mult:}convolution_param{num_output:21bias_term: false kernel_size:64stride:32}}
可以看到lr_mult被設置為了0.
跳層連接的作用就在於優化結果,因為如果將全卷積之後的結果直接上採樣得到的結果是很粗糙的,所以作者將不同池化層的結果進行上採樣之後來優化輸出。具體結構如下:
不同上採樣得到的結果對比如下:
當然,你也可以將pool1, pool2的輸出再加上採樣作為輸出。不過,作者說了這樣得到的結果提升並不大。FCN是深度學習應用於圖像語義分割的開山之作,所以得了CVPR2015的最佳論文。但是,還是有一些處理比較粗糙的地方,具體和後面對比就知道了。
DeepLab V2
DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
深度卷積網路用於語義分割的三個挑戰:
特徵解析度下降。主要由於重複池化和下採樣造成,作者移除了最後幾個最大池化層下採樣操作,並對濾波器進行上採樣,在非零的濾波器值之間加入空洞,稱為atrous卷積。 atrous卷積示意圖為:
多尺度目標。一般將不同尺度的圖像輸入DCNN,但計算量增加。作者根據SPP的思想,在給定特徵層使用不同的採樣率進行重採樣,使用具有不同採樣率的平行atrous卷積層實現,稱為atrous SPP(ASPP)。atrous SPP方法示意圖如下圖所示:
DCNN的不變性,導致定位準確率下降。基於對象的分類器要求對形變不變,影響了分割準確性,hpyer-column有被用來消除這個問題。作者使用全連接的條件隨機場(CRF)獲取細節信息。CRF被廣泛用於語義分割,通過組合多路低層次分類器的信息,如邊緣,superpixels等。CRF用於增強邊緣信息示意圖:
DeepLab模型的結構如下圖所示:
對VGG-16,ResNet-101進行一些改動用於語義分割:
所有的全連接層變為卷積層
使用atrous卷積層提高特徵解析度,這樣可以每8個像素計算一個特徵響應,之後雙向性插值上採樣8倍到原始圖像解析度,輸入到CRF精修分割結果。
實驗結果
使用不同的技巧對結果的增強
與其他方法在VOC2012上的比較
PASCAL-Context的結果:
城市景觀結果
PASCAL-Person-Part
人體六個部位Head, Torso,Upper/Lower Arms and Upper/Lower Legs分割
但是本方法也有產生錯誤的情況,如下:
提出的模型無法捕捉物體的精細邊界,例如自行車和椅子。我們假設有些文獻的編解碼結構可以通過利用解碼器路徑中的高解析度特徵映射來緩解這一問題。
TAG:計算機視覺戰隊 |