1. 程式人生 > >[深度學習] FCN 全卷積網路 語義分割

[深度學習] FCN 全卷積網路 語義分割

FCN 全卷積網路

Fully Convolutional Networks for Semantic Segmentation
今天實驗室停電,無聊把原來的一個分享PPT發上來

語義分割

語義分割是計算機視覺中的基本任務,也是計算機視覺的熱點,在語義分割中我們需要將視覺輸入分為不同的語義可解釋類別,「語義Semantic Segmentation的可解釋性」即分類類別在真實世界中是有意義的。

例如,我們可能需要區分影象中屬於汽車的所有畫素,並把這些畫素塗成藍色。與影象分類,語義分割使我們對影象有更加細緻的瞭解。說白了,就是將圖片上所有的畫素點進行分類。

image

image

CNN與FCN

CNN這幾年一直在驅動著影象識別領域的進步。無論是整張圖片的分類,還是物體檢測,關鍵點檢測等都在CNN的幫助下得到了非常大的發展。

cnn

但是影象語義分割不同於以上任務,前面說了,需要預測一幅影象中所有畫素點的類別,這是個空間密集型的預測任務。

傳統用CNN進行語義分割的方法是“將畫素周圍一個小區域作為CNN輸入,做訓練和預測。這樣做

  • 儲存開銷大
  • 計算效率低下,過多的重複計算
  • 如何來確定區域大小,這也限制了感知區域的大小

而FCN能夠對影象進行畫素級的分類,與經典的CNN在卷積層之後使用全連線層得到固定長度的特徵向量進行分類不同,FCN可以接受任意尺寸的輸入影象,採用反捲積層對最後一個卷積層的feature map進行上取樣,使它恢復到輸入影象相同的尺寸,從而可以對每個畫素都產生了一個預測, 同時保留了原始輸入影象中的空間資訊, 最後在上取樣的特徵圖上進行逐畫素分類,從而解決語義分割問題。

FCN

FCN的幾大關鍵技術

卷積化

經典的CNN分類所使用的網路通常會在最後連線全連線層,它會將原來二維的矩陣壓縮成一維的,從而丟失了空間資訊,最後訓練輸出一個向量,這就是我們的分類標籤。

而影象語義分割的輸出則需要是個分割圖,且不論尺寸大小,但是至少是二維的。所以,我們丟棄全連線層,換上卷積層,而這就是所謂的卷積化了。

convolutionalization

上取樣 Upsampling

上取樣也就是對應於上圖中最後生成heatmap的過程。
上面採用的網路經過5次卷積+池化後,影象尺寸依次縮小了 2、4、8、16、32倍,對最後一層做32倍上取樣,就可以得到與原圖一樣的大小,現在我們需要將卷積層輸出的圖片大小還原成原始圖片大小,在FCN中就設計了一種方式,叫做上取樣,具體實現就是反捲積。

upsampling

上取樣圖示

  • 卷積
    在這裡插入圖片描述
  • 反捲積
    在這裡插入圖片描述

在文章中,作者發現直接做32倍反捲積,結果不精確,所以設計了一種方式來解決這個問題。

FCN結構設計

在這裡插入圖片描述

現在文章有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap進行upsampling操作之後,因為這樣的操作還原的圖片僅僅是conv5中的卷積核中的特徵,限於精度問題不能夠很好地還原影象當中的特徵,因此在這裡向前迭代。把conv4中的卷積核對上一次upsampling之後的圖進行反捲積補充細節(相當於一個差值過程),最後把conv3中的卷積核對剛才upsampling之後的影象進行再次反捲積補充細節,最後就完成了整個影象的還原。

效果

幾個指標

  • pixel accuracy
  • mean accuracy
  • mean IU: IU(region intersection over union)
  • frequency weighted IU

在這裡插入圖片描述

在這裡插入圖片描述