FCN (FullyConvolutional Networks for Semantic Segmentation )
基于深度学习主要的做法有两种:
· 基于图像分块:利用像素、超像素块周围小邻域进行独立的分类。(在分类网络中使用全连接层,固定图像块尺寸)
· 基于全卷积网络:对图像进行pixel-to-pixel的预测,可以得到任意大小的图像分割结果,而且不需要对每个图像块进行分类,速度快。重要的两点:卷积层上采样、skipconnection结构
FCN的主要思路:
把CNN改为FCN,输入一幅图像后直接在输出端得到dense prediction,也就是每个像素所属的class,从而得到一个end-to-end的方法来实现image semantic segmentation。
传统的基于CNN的分割方法;
为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:一是存储开销很大。例如对每个像素使用的图像块的大小为15x15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类,因此则所需的存储空间根据滑动窗口的次数和大小急剧上升。二是计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。三是像素块大小的限制了感知区域的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部的特征,从而导致分类的性能受到限制。
FCN对CNN的改进:
通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率),比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。
FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。FCN把cnn全连接层换成了卷积层,可以接受任意尺寸的输入图像,采用反卷积对卷积层的特征图进行采样,使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像的空间信息,然后在上采样上的特征图进行逐像素分类,最后逐个像素计算softmax