文章目录

  • 前言
  • 一、Fully Convolutional Network
  • 二、Convolutionalization
  • 三、Convolutionalization过程原理
  • 四、FCN模型详细介绍
  • 1. FCN-32s
  • 2. FCN-16s
  • 3. FCN-8s
  • 总结
  • 参考资料



前言

Fully Convolutional Networks for Semantic Segmentation(FNC)网络是发表在2015CVPR上的一篇文章.有兴趣的读者可以点击链接自行下载。

一、Fully Convolutional Network

FCN(Fully Convolutional Network)是首个端对端的针对像素级预测全卷积网络。这篇文章中的全卷积的意思是将整个网络中的分类网络中的全连接层替换成了卷积层。在语义分割领域这是一篇很有引领方向作用的文章。

基于ViT的语义分割方法 语义分割 fcn_神经网络


接下来我们看一下FCN网络进行语义分割的效果:

基于ViT的语义分割方法 语义分割 fcn_深度学习_02


我们可以看到FCN-8s的语义分割效果已经和Ground truth非常接近了,这里可以说明FCN网络的效果还是很不错的(至少是在当年效果还是不错的)。

作者在文中也将FCN与当年的主流算法进行了对比,在mean IoU和推理时间方面的效果都能吊打对手。

基于ViT的语义分割方法 语义分割 fcn_神经网络_03


我们在来看一下文章中给出的FCN-32s的网络结构,也可以发现它的网络结构非常的简单,但事实做出来的语义分割结构却非常的好,这也是FCN的优秀之所在。

这里先顺便提一嘴,我们可以观察到通过一系列的卷积、下采样,观察到最后一个特征层的channel=21,这是因为使用的数据集是PASCAL VOC(20类别+背景),再进行上采样就得到了和原图同样大小的特征图(channel=21),对每一个像素的21个值进行softmax处理,就得到了该像素针对每一个类别的预测概率,取概率最大的作为预测类别。

基于ViT的语义分割方法 语义分割 fcn_卷积_04

二、Convolutionalization

我们知道全连接层要求我们输入图片的像素是固定的。我们在训练分类网络时要固定图像输入。

那么如果将全连接层改为卷积层,那么对于输入图片的大小就没有限制了。

这里我们将全连接层进行Convolutionalization处理,如下图所示,这是可以输入任意大小的图片了。但是如果输入的图像是大于224*224的话,那么最后一个特征层对应的高和宽就大于1了,这时对应每一个channel的数据就是一个2维数据。那么我们就可以将它展成平面可视化。

基于ViT的语义分割方法 语义分割 fcn_卷积_05

三、Convolutionalization过程原理

我们以VGG16网络为例:

基于ViT的语义分割方法 语义分割 fcn_神经网络_06

  • 将7 * 7 * 512的特征层flatten和全连接操作后得到一组长度4096的层,FC1参数量为102760448
  • 将7 * 7 * 512的特征层通过conv(7*7,s1,4096)操作后,conv参数量也为102760448
    通过上面的说明我们可以知道两个过程时完全等效的,这也就是Convolutionalization的过程。

四、FCN模型详细介绍

原论文给出的FCN-32s-fixed,FCN-32s,FCN-16s,FCN-8s各个性能指标的比较列表,我们也可以发现效果时越来越好的。

基于ViT的语义分割方法 语义分割 fcn_神经网络_07


那具体这些模型都是什么样的呢?

  • FCN-32s:是将预测结果上采样了32倍,还原回原图大小。
  • FCN-16s:是将预测结果上采样了16倍,还原回原图大小。
  • FCN-8s:是将预测结果上采样了8倍,还原回原图大小。

基于ViT的语义分割方法 语义分割 fcn_基于ViT的语义分割方法_08

1. FCN-32s

基于ViT的语义分割方法 语义分割 fcn_深度学习_09


网络结构如上图所示,这里提几个要点:

原论文中作者在backbone的第一个卷积层处padding=100,为什么呢?

为了让FCN网络可以适应不同大小的网络

如果不进行padding=100处理会怎样呢?

如果图片的大小小于192 * 192,到最后一个特征层的大小就小于7*7了,如果padding=0的话,那么到后面就无法对小于7 * 7的层进行等效于正常全连接的卷积操作了。
另外如果我们输入的图片大小小于32 * 32,backbone没等走完就已经报错了。

但是站在现在的角度来思考这个问题,作者是没必要padding=100的

首先,一般情况下没有人会对小于32 * 32的图片进行语义分割,另外,在图片大于32 * 32时,我们是可以通过让FC6中7*7的卷积层的padding=3,我们就可以训练任意高宽大小大于32 * 32的图片。

在原论文中作者使用双线性差值的方法来初始化转置卷积的参数的

双线性差值

2. FCN-16s

基于ViT的语义分割方法 语义分割 fcn_基于ViT的语义分割方法_10


和上面FCN-32s区别在于:

  • 这里面的转置卷积上采样了2倍
  • 额外使用到了来自maxpooling4的输入特征图(下采样16倍)

3. FCN-8s

基于ViT的语义分割方法 语义分割 fcn_神经网络_11


FCN-8s除了上述的融合操作外,还利用了来自maxpooling3的一个输出

总结

FCN网络最大的特点就是将普通的全连接层转换为了卷积层,不但实现了输入图片的自由度,而且分割效果非常理想。
常见的FCN网络有三种:,FCN-32s,FCN-16s,FCN-8s。它们的效果依次越来越理想。实际上就是通过融合maxpoling层信息的操作,来实现更好的效果。