1. 程式人生 > >Semantic Segmentation with FCN裡的32x, 16x和8x

Semantic Segmentation with FCN裡的32x, 16x和8x

Semantic Segmentation with FCN裡使用了一種結合粗略feature與粗細feature的方案, 用於提高分割的準確度.

32x

  • 從conv1_1到pool5照搬了vgg net的網路結構
  • fc6與fc7將vgg的全連線層改成了1×1的卷積層. (各自還加了一個Dropout層). fc7的輸出score_fr作為分類score.
  • 32倍的FCN直接將score_fr通過 Convolution Transpose, 或人們習慣的Deconvolution將其放大32倍, 然後crop到原圖大小.
    這裡寫圖片描述

16x

  • score_fr放大兩倍得到upscore2
  • pool4上加一個1×1的conv層, 得到score_pool4
  • score_pool4 crop到與upscore2一樣的形狀, 得到score_pool4c. crop的物件是score_pool4, 因為它可能比upscore2要大.
  • fuse_pool4 = score_pool4c + upscore2
  • fuse_pool4放大16倍,然後crop, 得到與原圖大小相同的score.

這裡寫圖片描述

8x

  • pool3上面也加一個1×1的conv層, 得到score_pool3
  • fuse_pool4放大兩倍得到upscore_pool4
  • score_pool3crop到與upscore_pool4
    相同的size, 得到score_pool3c
  • fuse_pool3 = score_pool3c + upscore_pool4
  • fuse_pool3放大8倍, 然後crop到原圖大小.

xx: 一般化的trick

假設每次pool的stride 都為2. 從最高層的pool開始, 將在它的基礎上計算出來的score 放大兩倍, 然後與低層得到的score相加. 然後放大兩倍, 與再低一層的pool score相加, 直至想要結合的最後一層.