對圖像而言,常見的任務是:後端
咱們知道,在作圖像分類的時候,通常會在模型的最後添加全鏈接層+softmax用於預測。可是,全鏈接層會把卷積學習到的類別,位置特徵抽象成一維的機率信息,能夠識別整個圖片的類別,不能標識每一個像素的類別。所以,爲了保留圖像特徵咱們將全鏈接層替換爲卷積層。網絡
這樣,模型的輸出再也不是一維,而是二維的圖。框架
因爲特徵圖通過一系列的卷積和池化後(保持特徵不變性,增大感覺野,節省計算資源等)形成分辨率下降,丟失大量細節和邊緣信息,所以咱們須要經過必定的手段還原原圖分辨率。ide
不一樣的模型會採起不一樣的還原方式,圖上以FCN爲例,採用反捲積還原分辨率並使用加和的方式找回下采樣階段丟失的信息,直接把編碼階段的特徵圖加到解碼階段中來。函數
FCN闡釋瞭如何將CNN應用到語義分割問題上,是深度學習應用此問題的基石。工具
文章開始,咱們談到模型最後的全鏈接層不適用與分割任務,須要替換成卷積層,以此獲取二維的特徵圖而後接softmax,對每一個像素點進行分類。學習
先經過卷積,池化下采樣,而後上採樣還原分辨率。上採樣通常有兩種方式:雙線性插值(Deeplab),反捲積(FCN)。測試
DeepLab是針對語義分割任務提出的模型,主要使用DCNN(深度卷積網絡),CRF(條件隨機場),空洞卷積作像素級預測。DCNN在語義分割中存在兩個主要問題:優化
針對以上問題,Deeplab採用空洞卷積擴大感覺野,獲取更多的上下文信息。使用全鏈接條件隨機場(DenseCRF)提升模型捕獲細節的能力。
DCNN以VGG16模型爲後端網絡,將FC層所有轉爲卷積層,改爲全卷積網絡形式。最後的兩個池化層不下采樣,經過2或4的採樣率空洞卷積對特徵圖擴大感覺野,縮小步幅。
模型訓練的時候講VGG16的權重作微調,損失函數取輸出特徵圖ground truth下采樣8倍作交叉熵和;測試時取輸出圖雙線性上採樣獲得的結果(DCNN預測物體的位置是粗略的,沒有確切的輪廓,針對此問題採用全鏈接的CRF提高分割精度)。編碼
DeepLab v2相比DeepLab v1基礎層由VGG16改成ResNet,添加多尺度和ASPP模塊獲得更好的分割結果。
模型運行步驟:
DeepLab v3相比DeepLab v2:
DeepLab v3+採用編碼器,解碼器結構,經過使用解碼器模塊改善物體邊緣的分割結果,還嘗試使用Xception做爲編碼器。
如圖所示,空間金字塔池化能夠池化不一樣分辨率的特徵圖來捕獲上下文信息。編碼器解碼器結構能夠捕獲鋒利的邊界。先4倍上採樣,而後與編碼器中的特徵圖合併,最後4倍上採樣恢復到原始圖像大小。
encoder就是DeepLab V3,經過修改ResNet101最後兩(一)個block的stride,使得output stride爲8(16)。以後在block4後應用改進後的Atrous Spatial Pyramid Pooling,將所得的特徵圖concatenate用1×1的卷積獲得256個通道的特徵圖。
在decoder中,特徵圖首先上採樣4倍,而後與encoder中對應分辨率低級特徵concatenate。在concatenate以前,因爲低級特徵圖的通道數一般太多(256或512),而從encoder中獲得的富含語義信息的特徵圖通道數只有256,這樣會淡化語義信息,所以在concatenate以前,須要將低級特徵圖經過1×1的卷積減小通道數。在concatenate以後用3×3的卷積改善特徵,最後上採樣4倍恢復到原始圖像大小。
U-Net網絡能夠利用較少的數據集進行端到端訓練,醫學領域應用較多(醫學領域的標註數據獲取成本很高)。
如圖所示,網絡結構由contracting path和expansive path組成。
contracting:
expansive path: