全卷积网络FCN是深度学习运用于图像语义分割的代表作,是一种端到端的图像分割方法,可以做到像素级别的预测,直接得出label map,输出分割结果。
FCN可以接受任意尺寸的输入图像,利用卷积层生成feature map提取特征,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
一般的CNN在卷积层后面一般会连接几个全连接层,将卷积层得到的feature map映射到固定长度的特征向量。像AlexNet这样的经典CNN一般用于图像的分类与回归问题,它们最后得到的是整个图像类别的概率向量。以AlexNet的ImageNet模型为例,其输出一个1000维的向量表示输入图像属于哪一类别的概率。(用softmax进行归一化)
而全卷积网络就是将后面的全连接层转化为全卷积层。
卷积层与全连接层之间的不同点在于,卷积层中的神经元只与输入数据的局部区域进行连接,并利用卷积核共享参数。它们的相同点在于神经元之间都是计算点集,运算方式相同。
全卷积网络中将后三层全连接层转化为卷积层的方法如下:
1、第一个全连接层的输入是7*7*256的feature map,如果采用全连接,需要先将其变为7*7*256维的向量。而采用卷积网络只需要用核为7*7,深度为4096的卷积核对其进行卷积运算,进而得到深度为4096的1*1的feature map。
2、第二个全连接层则用核为1*1,深度为4096的卷积核代替。输出深度为4096的1*1的feature map。
3、第三个全连接层用核为1*1,深度为1000的卷积核代替。输出深度为1000的1*1的feature map。
采用全卷积层因为没有了全连接层对输入输出维度的要求,可以接受任意图片的输入。而将全连接层的参数重塑为卷积层的卷积核,使得卷积层可在更大的图片上滑动得到不同区域乃至像素点的分类情况。
为了输出与原图片一样大小的图像语义分割图,我们需要对全卷积网络网络最后一个深度为1000的feature map进行上采用,我们上采用使用的是反卷积网络。
反卷积层上采样的结构与全卷积网络是对称的。
其中反卷积的运算如下图所示:
图中为kernelsize=3,stride=1,padding=2的反卷积,input是2×2, output是4×4。
从实验结果看,得到的分割结果比较粗糙,作者考虑加入前层的细节,即把后面几个feature map与后面觉得结果进行fusion(即加和)。
实验发现这样的结果更加细致准确。在往下做到第三层时得到最佳效果。
FCN例子: 输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21,模型基于AlexNet