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到原图大小.
    Semantic Segmentation with FCN里的32x, 16x和8x_第1张图片

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.

Semantic Segmentation with FCN里的32x, 16x和8x_第2张图片

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相加, 直至想要结合的最后一层.

你可能感兴趣的:(FCN)