转载请注明出处
作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,图像分割已经在近些年里有了长足的发展。这项技术也被广泛地应用于无人驾驶领域中,比如用来识别可通行区域、车道线等。
全卷积网络(Fully Convolutional Networks,FCN)是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架。虽然已经有很多文章介绍这个框架,我还是希望在此整理一下自己的理解。
网络结构
整体的网络结构分为两个部分:全卷积部分和反卷积部分。其中全卷积部分借用了一些经典的CNN网络(如AlexNet,VGG,GoogLeNet等),并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
输入和输出
网络的输入可以为任意尺寸的彩色图像;输出与输入尺寸相同,通道数为:n(目标类别数)+1(背景)。
全卷积
网络在CNN卷积部分不用全连接而是替换成卷积的目的是允许输入的图片为超过某一尺寸的任意大小。
上采样 Upsampling
由于在卷积过程中,我们的heat map变得很小(比如长宽变为原图像的),为了得到原图像大小的稠密像素预测,我们需要进行上采样。
一个直观的想法是进行双线性插值,而双线性插值很容易用反向卷积(backwards convolution)通过固定的卷积核来实现。反向卷积又可以被称为反卷积(deconvolution),在近期的文章中通常被称为转置卷积(transposed convolution)。
在实际应用中,作者并没有固定卷积核,而是让卷积核变成可学习的参数。
跳级结构 Skips
如果利用之前提到的上采样技巧对最后一层的特征图进行上采样的到原图大小的分割,由于最后一层的特征图太小,我们会损失很多细节。因而作者提出增加Skips结构将最后一层的预测(有更富的全局信息)和更浅层(有更多的局部细节)的预测结合起来,这样可以在遵守全局预测的同时进行局部预测。
我们将底层(stride 32)的预测(FCN-32s)进行2倍的上采样得到原尺寸的图像,并与从pool4层(stride 16)进行的预测融合起来(相加),这一部分的网络被称为FCN-16s。随后将这一部分的预测再进行一次2倍的上采样并与从pool3层得到的预测融合起来,这一部分的网络被称为FCN-8s。
结论
FCN仍有一些缺点,比如:
得到的结果还不够精细,对细节不够敏感;
没有考虑像素与像素之间的关系,缺乏空间一致性等。
作者的其他相关文章:
PointNet:基于深度学习的3D点云分类和分割模型 详解
基于视觉的机器人室内定位