Semantic Segmentation with FCN裡的32x, 16x和8x
阿新 • • 發佈:2019-02-05
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_pool3
crop到與upscore_pool4
score_pool3c
fuse_pool3 = score_pool3c + upscore_pool4
- 將
fuse_pool3
放大8倍, 然後crop到原圖大小.
xx: 一般化的trick
假設每次pool的stride 都為2. 從最高層的pool開始, 將在它的基礎上計算出來的score 放大兩倍, 然後與低層得到的score相加. 然後放大兩倍, 與再低一層的pool score相加, 直至想要結合的最後一層.