FCN论文学习

前言

FCN论文全名为《Fully Convolutional Networks for Semantic Segmentation 》,是图像分割相关的论文。因为Mask R-CNN中的Msak分支采用了该结构,故选读此文章。

研究内容

通常的CNN网络是在卷积层后连接若干给全连接层,将卷积层得到的特征图映射为特征向量,一般适用于图像级别的分类和回归任务。
而FCN使用卷积层替代了全连接层,完成了对图像进行像素级的分类,从而解决了语义级别的图像分割问题。该结构建立了不含全连接层的全卷积网络,可以接受任意大小的输入。同时增加了能增大数据尺寸的反卷积层,对最后一个卷积层的特征图进行上采样,得到和输入图像相同尺寸的特征图,因此可以对每一个像素进行预测。FCN的结果如图1所示。
FCN论文学习
图1

如图2所示,FCN将传统CNN中的全连接层转化成卷积层,对应CNN网络FCN把最后三层全连接层转换成为三层卷积层。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个不同类别的概率。FCN将这3层表示为卷积层,卷积核的大小 (通道数,宽,高) 分别为 (4096,1,1)、(4096,1,1)、(1000,1,1)。
FCN论文学习
图2

总的来说,FCN是一个端到端,像素对像素的全卷积网络,用于语义分割任务。

模型结构与方法

1. 网络结构

网络结构如图3所示。输入的图像输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,由于是在PASCAL数据集上进行的(PSDCSL VOC 2011和2012),PASCAL一共20类,所以深度为:20类目标+背景=21。
FCN论文学习
图3

2. 方法

(1)全卷积提取特征 :如图3上部分所示,为全卷积网络,通过把AlexNet的最后两个全连接层改为卷积层得来。论文中的精度最好的分类网络为VGG18,但提供的模型是基于AlexNet的,故图3的是AlexNet的结构。
(2)逐像素预测:如图3 下部分所示,分别从卷积层(三个蓝色的层)的不同阶段,用卷积层预测深度为21的分类结果。例如第一个模块,输入输入16x16x4096,卷积模板尺寸1x1,输出16x16x21。相当于对每个像素施加一个全连接层,从4096维特征,预测21类结果。
具体实现是:采用反卷积层对最后一个卷积层(图3上部分)的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
经过多次卷积和pooling以后,得到的图像越来越小。其中图像到 H/32∗W/32 的时候图片是最小的一层时,如图4,所产生图叫做heatmap热图,也就是最重要的高维特征图。
得到高维特征的heatmap之后对原图像进行upsampling,把图像进行放大到原图像的大小,即将高纬度热度转换成原图对应的分割图像。最后输出21张经过上采样变为原图大小的热图,通过逐个像素地求其在21张图像该像素位置的最大数值描述(概率)作为该像素的分类。
FCN论文学习
图4

(3)反卷积上采样:先进行上采样扩大像素,再进行卷积,通过学习获得权值,如图3下半部分的三个橙色层。上采用的具体参数通过训练确定。FCN的反卷积运算是:首先对特征图各神经元之间进行0填充,即上池化;然后再进行卷积运算。计算公式为:(W1​−1)×S-2×P+F=W2。如图5。 如,令W1=3,S=2,P=1,F=3,则W2=5。
FCN论文学习
图5
(4)跳级(skip)结构:如图3下部分三个黄色层,把三个不同深度的预测结果进行融合:较浅的结果更为精细,较深的结果更为鲁棒(健壮和强壮)。
在融合之前,使用两个灰色的裁剪层统一两者大小。最后裁剪成和输入相同尺寸输出。

3. 损失函数

FCN网络每次输入一张图像,每一个像素点都有一个真值(标签),相当于每个像素点都是分类任务,一个图像有n个像素点,对应n个样本。因此FCN网络的训练损失为最后一层中每个像素的softmax损失之和。

优点与不足

优点:

  1. 可以接受任意大小的输入图像(没有全连接层)
  2. 更加高效,避免了使用邻域带来的重复计算和空间浪费的问题

不足:

  1. 得到的结果还不够精细
  2. 没有充分考虑像素之间的关系,缺乏空间一致性

对项目的启发

  1. 因为Mask R-CNN增加了mask分支,使用FCN结构,因此每个ROI的Loss函数如下所示:
    L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls​+Lbox​+Lmask​
    而对于每个ROI,有K种分类,每一个掩膜大小为 m ∗ m m*m m∗m,因此mask分支有维度为 K ∗ m ∗ m K*m*m K∗m∗m的输出。根据分支种类预测分支(Faster R-CNN部分)预测结果为i,K个中的第i个二值掩膜输出的损失就是该RoI的损失 L m a s k L_{mask} Lmask​。
    对于这个二值掩膜的输出,将每个像素点应用sigmoid函数,整体损失定义为平均二值交叉损失熵,即可得到这个二值掩膜输出的损失。
上一篇:全卷积神经网络( FCN ):语义分割深度模型先驱


下一篇:Attention, Suggestion and Annotation: A Deep Active Learning Framework for Biomedical Image Segmenta