1. 程式人生 > >影象語義分割(1)-FCN:用於語義分割的全卷積神經網路

影象語義分割(1)-FCN:用於語義分割的全卷積神經網路

論文地址:Fully Convolutional Networks for Semantic Segmentation
[Long J , Shelhamer E , Darrell T . Fully Convolutional Networks for Semantic Segmentation[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2014, 39(4):640-651.]
論文實現:github程式碼

1. 創新

  • 接收任意尺寸輸入的全卷積網路
  • 使用反捲積的上取樣
  • 融合深層粗糙特徵和淺層精細特徵的跳躍結構

2.模型提出

  • 為什麼可以將CNN轉化為FCN?
      全連線層可以看作卷積層,其中,feature map 1x1,向量長度為通道數。
  • 為什麼需要上取樣?
      端到端的密集預測需要輸入和輸出的尺寸一致,而提取特徵圖的過程中影象畫素降低,感受野變大,輸出尺寸與輸入不一致。
  • 為什麼需要跳躍結構進行跨層特徵融合?
      深層的特徵對應全域性的語義資訊,淺層的特徵對應著目標的位置資訊,語義分割二者都需要考慮,所以引入了跳躍結構。

3.模型架構

3.1 調整分類網路至全卷積以進行稠密預測

  將全連線層替換為卷積層,如圖:
在這裡插入圖片描述

3.2 使用反捲積的上取樣

  為了還原影象的尺寸,文章中提出了三種方法,即稀疏濾波(Shift-and-stitch)、雙線性插值、和反捲積, 並採用了反捲積的方法。反捲積是與卷積操作相反的計算,比如下圖是普通的卷積,4x4 Input、3x3 KernelSize、0 pad、1 stride:
在這裡插入圖片描述
  反捲積將卷積還原:2x2 Input、3x3 KernelSize、0 pad、1 stride,如圖:
在這裡插入圖片描述
  在TensorFlow框架中,反捲積過程如下:
在這裡插入圖片描述

3.3 跨層結構(skip architecture)

  首先貼上論文中的結構圖:
在這裡插入圖片描述
  首先是基礎的五步操作:

  • Input
    \rightarrow
    n convs + 1 max Pooling \rightarrow poo1:: 1 2 \frac{1}{2} Input
  • pool1 \rightarrow n convs + 1 max Pooling \rightarrow poo2:: 1 4 \frac{1}{4} Input
  • pool2 \rightarrow n convs + 1 max Pooling \rightarrow poo3:: 1 8 \frac{1}{8} Input
  • pool3 \rightarrow n convs + 1 max Pooling \rightarrow poo4:: 1 16 \frac{1}{16} Input
  • pool4 \rightarrow n convs + 1 max Pooling \rightarrow poo5:: 1 32 \frac{1}{32} Input
      應用跳躍結構得到三種不同的模型:
  • 直接對 pool5 進行 32x 上取樣後,將得到的特徵圖扔給Softmax分類器,得到密集預測結果 \rightarrow FCN-32s
  • 對 pool5 進行 2x 上取樣得到與 pool4 尺寸一樣的上取樣特徵,並於 pool4 逐點相加得到特徵圖,對此特徵圖進行 16x 上取樣,將得到的特徵圖扔給Softmax分類器,得到密集預測結果 \rightarrow FCN-16s
  • 對 pool5 進行 2x 上取樣得到與 pool4 尺寸一樣的上取樣特徵,對此特徵進行 2x 上取樣得到與 pool3 尺寸一樣的上取樣特徵,並於 pool3 逐點相加得到特徵圖,對此特徵圖進行 8x 上取樣,將得到的特徵圖扔給Softmax分類器,得到密集預測結果 \rightarrow FCN-8s

4. 訓練

4.1 StageWise Training

  • 將經典分類網路初始化,棄用全連線層為卷積層
  • 從特徵小圖 16x16x4096 預測分割小圖 16x16x21,之後上取樣為大圖。反捲積步長為32
  • 融合pool4,反捲積步長16
  • 融合pool3,反捲積步長8,得到效果最好的FCN-8s

4.2 其他細節

  • 使用資料增強方式對最終結果影響不大(需要思考一波為什麼和這種效果與GAN的聯絡);增加有效標註數量提升了最終的效能
  • 引數:20 mini batch;固定學習率;動量 0.9;weight decay
  • 微調:對整個網路進行微調對效能的提升不大,因為直接微調後幾層就會達到前者70%左右的效能
  • 沒有類別平衡策略