FNC理论解读
FCN的前身
见下图,可看出下图由convolution 和fully connected构成,其中convolution的部分由卷积(获取高维特征)和pool(使图片缩小一半),而fully connected 主要传统神经网络相似作为权值训练,最后通过softmax输出概率最高的类别。
将全连接层转换为卷积层,这也是fully Convolutional Networks的由来。
参照论文:Transforming fully connected layers into convolution layers enables a classification net to output a heatmap.可见下图的heatmap ,这个时候已经将原来只是识别图片类别,逐渐凸显图片里物体的轮廓,接下来要做的只是如何将该轮廓更加清晰一些。
双线性差值
双线性差值的前置知识比较多,从数学角度比较难以理解,但是仅看代码,还是比较容易。
双线性差值主要应用于建立转置卷积的kernel。
转置卷积
如下图所示蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。需要特别注意的是stride在这里不是kernel划动的长度,而是input image的间隔。
FCN-32s,FCN-16s,FCN-8s
卷积是不会改变图像大小,pool就是使得图片变为原图的1/2,所以在pool5之后,图像变为原来的1/32(假如输入图像为32x32,那么pool1:16x16;pool2:8x8;pool3:4x4;pool4:2x2;pool5:1x1)。
FCN-32s:
FCN-32s这是在pool5之后增加一个卷积层,然后经过转置卷积之后扩大32倍,变成与输入图像等大。
FCN-16s:
FCN-16s这是在pool5之后增加一个卷积层pool5_ conv,然后再经过转置卷积之后扩大2倍(称作2x pool5_ conv),变成与pool4卷积之后(称作 pool4_ conv)同等大小,然后将2x pool5_ conv和pool4_ conv进行fuse操作(事实上就是2x pool5_ conv和pool4_ conv相加),之后fuse结果进行16x upsampled prediction,至此完成了一个16s的upsample。
FCN-8s:
FCN-8s需要将pool5卷积生成pool5_ conv进行经过一次4x upsample(将结果称作4x pool5_ conv),变成了4x4。然后将pool4卷积生成pool4_ conv进行2x upsample(将结果称作2x pool4_ conv),变成了4x4,最后将4x pool5_ conv和2x pool4_ conv和pool_ conv进行fuse得到求和后的特征图,最后增加一个卷积层,使得输出图片大小为pool3的8倍,也就是8x upsampled prediction的过程。