Fully Convolutional Networks

全卷积网络,深度学习方法用于图片语义分割的开山之作。将传统分类网络中的全连接层改为卷积层,用解卷积得到像素精度的 label。

从分类网络到分割网络

  • 传统卷积网络需要固定输入图片的大小。这个限制条件不是卷积层带来的,是全连接层带来的;如果输入图片大小不固定,全连接层的参数也就不固定,网络无法训练。
  • 传统卷积网络中为了提取图片的全局特征进行分类,通常输出特征图的尺寸会远小于图片的原始尺寸,这也为传统卷积网络直接应用在图片分割方法上带来了更大的困难。
  • 全连接层和卷积层的本质相同,都是矩阵相乘,只不过全连接相当于一个单通道,卷积核大小为整个特征图大小的卷积层。由此可以想到,如果把传统网络中的全连接层都变成卷积层,那网络的图片输入大小就不一定是固定的。经过修改之后,网络接受任意大小的图片输入,输出的是某一类物体的热点图。既然可以输出热点图,就很自然可以想到用全卷积网络进行像素精度的预测。而且,在替换掉全连接层之后,原图片中物体的位置信息得到保留,而不是像全连接网络一样完全丢失了空间位置信息。
  • 但是,对于传统分类网络,结构中含有很多降采样的操作(max-pooling, stride > 1 的卷积层),这会使得输出特征图的尺寸远小于图片尺寸;而且,经过卷积网络的特征提取之后,特征图的每个像素在原图中对应了非常大的感受野,这导致输出的特征图非常粗糙,无法直接用于预测 mask。

解卷积

  • 为了解决输出特征图过于粗糙,尺寸与图片不匹配的问题,需要有一种插值方法把小尺寸的热点图转化为和图片尺寸相同的热点图。作者提出的插值方法为分数步长卷积(又称解卷积)。使用解卷积的原因是解卷积易于实现,因为实质上解卷积的前向/后向计算通路就是把标准卷积的前向/后向通路颠倒过来即可。通过解卷积层,可以对卷积网络最后一层输出的特征图插值得到整幅图片的像素精度的热点图。

网络结构

  • 论文中采用的卷积网络为 VGG。把 VGG 最后三个全连接层改成卷积层,通道数不变,就变成了一个全卷积网络。
  • VGG 中有跨距大于 1 的层,所以中间层的特征图相对原图有一定的跨距:pool3 相对跨距为 8,pool4 相对跨距为 16;conv7 相对跨距为 32。
  • 如果单纯采用 conv7 的输出特征图,需要在后面加上跨距为 32 的解卷积,让特征图尺寸和原图相同。这种网络结构称为 FCN-32。但是这种情况下得到的预测输出非常粗糙,丢失很多细节信息。
  • 为了还原细节信息,需要融合之前的跨距更小的特征图。
    • conv7 输出经过 2 倍解卷积与 pool4 的输出相加,之后经过 16 倍解卷积得到预测输出(FCN-16)
    • conv7 输出经过 2 倍解卷积与 pool4 的输出相加;得到的特征图再经过 2 倍解卷积与 pool3 的输出相加,之后经过 8 倍解卷积得到预测输出(FCN-8)。

实验结果

  • PASCAL VOC 测试结果
  mIoU on VOC2012 mIoU on VOC2011 time
R-CNN - 47.9 -
SDS 51.6 52.6 50s
FCN-8 62.2 62.7 175ms