RefineNet是发表在2017CVPR上的一篇文章,旨在实现高分辨的语义分割任务。
网络结构:RefineNet block的作业是把不同resolution level的feature map进行融合。网络结构如下:
最左边一列就是FCN的encoder部分(用VGG作为主干特征提取网络),先把pretrained ResNet按feature map的分辨率分成四个ResNet blocks,然后向右把4个blocks分别作为4个path通过RefineNet block(下面会讲到)进行融合,最后得到一个refined feature map (接softmax再双线性插值输出)。注意除了RefineNet4之外,所有的RefineNet block都有两个输入,用于融合不同尺寸的特征层做refine。
RefineNet Block
Refine Block如下图,可以看到主要组成部分是Residual convolution unit,Multi-resolution Fusion,chained Residual Pooling,output convolutions。切记这个block作用是融合多个level的feature map输出单个level的feature map。
1.RCU就是去除了BN的恒等残差块(identity residual unit)
2.Multi-resolution fusion是先对多输入的feature map都用一个卷积层进行adaptation(都化到最小的feature map的shape),再上采样后做element-wise的相加。(Refine4这样的单输入 这个部分直接pass)
3.chained residual pooling中的Relu对接下来的池化的有效性很重要,还可以使模型对学习率的变化没这么的敏感,这个链式结构能从很大范围区域上获取背景,此外,这个结构中大量使用了identity mapping这样的连接,无论长距离或者短距离,这样的结构允许梯度从一个block直接向其他任一block传播。
4.Output convolutions就是输出前再加一个RCU。