1. 程式人生 > >23歲中單想學python

23歲中單想學python

在深度學習應用到計算機視覺領域之前,研究人員一般使用紋理基元森林(TextonForest)或是隨機森林(Random Forest)方法來構建用於語義分割的分類器。

卷積神經網路(CNN)不僅能很好地實現影象分類,而且在分割問題中也取得了很大的進展。

最初,影象塊分類是常用的深度學習方法,即利用每個畫素周圍的影象塊分別將各畫素分成對應的類別。其中,使用影象塊的主要原因是分類網路通常具有全連線層,其輸入需為固定大小的影象塊。

2014年,加州大學伯克利分校的Long等人提出的完全卷積網路(Fully Convolutional Networks),推廣了原有的CNN結構,在不帶有全連線層的情況下能進行密集預測。
後面對FCN主要做了 上取樣(Upsample)(如SegNet/DeconvNet) 跳躍結構(Skip Layer)(如DeepLab)的改進
此處的上取樣即是反捲積(Deconvolution)。當然關於這個名字不同框架不同,Caffe和Kera裡叫Deconvolution,而tensorflow裡叫conv_transpose。
跳躍結構(Skip Layer)這個結構的作用就在於優化結果,因為如果將全卷積之後的結果直接上取樣得到的結果是很粗糙的,所以作者將不同池化層的結果進行上取樣之後來優化輸出。

這種結構的提出使得分割圖譜可以生成任意大小的影象,且與影象塊分類方法相比,也提高了處理速度。在後來,幾乎所有關於語義分割的最新研究都採用了這種結構。

除了全連線層結構,在分割問題中很難使用CNN網路的另一個問題是存在池化層。池化層不僅能增大上層卷積核的感受野,而且能聚合背景同時丟棄部分位置資訊。然而,語義分割方法需對類別圖譜進行精確調整,因此需保留池化層中所捨棄的位置資訊。

研究者提出了兩個不同形式的結構來解決這個問題。

第一種方法是編碼器-解碼器(encoder-decoder)結構。其中,編碼器使用池化層逐漸縮減輸入資料的空間維度,而解碼器通過反捲積層等網路層逐步恢復目標的細節和相應的空間維度。從編碼器到解碼器之間,通常存在直接的資訊連線,來幫助解碼器更好地恢復目標細節。在這種方法中,一種典型結構為U-Net網路。
第二種方法使用了稱作空洞卷積的結構,且去除了池化層結構。

條件隨機場(Conditional Random Field,CRF)方法通常在後期處理中用於改進分割效果。CRF方法是一種基於底層影象畫素強度進行“平滑”分割的圖模型,在執行時會將畫素強度相似的點標記為同一類別。加入條件隨機場方法可以提高1~2%的最終評分值。
一個通用的框架已經大概確定了。即:
這裡寫圖片描述
前端使用FCN進行特徵粗提取,後端使用CRF/MRF優化前端的輸出,最後得到分割圖。
最開始使用DenseCRF(全連線條件隨機場)是直接加在FCN的輸出後面,可想這樣是比較粗糙的。而且在深度學習中,我們都追求end-to-end的系統,所以CRFasRNN這篇文章將DenseCRF真正結合進了FCN中。