FCN(Fully Convolutional Networks)是深度学习应用在图像分割的代表作,是一种端到端(end to end)的图像分割方法,让网络做像素级别的预测直接得出label map。
图像分割的分类:
- semantic segmentation:只标记语义,只要分割出某一类即可。
- instance segmentation:标记实例和语义,不仅分割出某一类,还要分割出是该类中的哪一个,也就是具体实例。
CNN与FCN
通常CNN网络在卷积层之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都得到整个输入图像的一个概率向量,比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全连接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图上进行像素分类。最后逐个像素计算softmax分类的损失,相当于每一个像素对应一个训练样本。

简单来说,FCN与CNN的区别在于把CNN最后的全连接层换成卷积层,输出的是一张已经label好的图片。

- 在CNN中,猫的图片输入到AlexNet,得到一个长为1000的输出向量,表示输入图像属于每一类的概率,其中在“tabby cat”这一类统计概率最高,用来做分类任务。
- FCN与CNN的区别在于把于CNN最后的全连接层转换成卷积层,输出的是一张已经label好的图片,而这张图片可以做语义分割。
卷积层
CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:
- 较浅的卷积层感知域较小,学习到一些局部区域的特征。
- 较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高,所以我们可以将
卷积层看作是特征提取器。

这些抽象的特征对分类很有帮助,可以很好的判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好的给出物体的具体轮廓、指出每个像素具体属于哪个物体,因此做到精确的分割就很有难度。
传统的基于CNN的分割方法
为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。这种方法有几个缺点:
- 存储开销很大。例如对每个像素使用的图像块的大小为15x15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类,因此所需的存储空间根据滑动窗口的次数和大小急剧上升。
- 计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。
- 像素块大小的限制了感知区域的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部特征,从而导致分类的性能受到限制。

FCN是深度学习在图像分割领域的里程碑,它摒弃了CNN中的全连接层,转而使用卷积层进行像素级别的分类。FCN通过反卷积层恢复空间信息,实现任意尺寸输入的图像分割。相比于传统CNN,FCN解决了存储和计算效率问题,同时也引入了跳跃连接结构以提高分割精度。然而,FCN的输出仍可能存在模糊,对细节的捕捉不足。全卷积网络在图像分割任务中展现出了高效和灵活性,但也需要进一步优化以提高分割质量。
最低0.47元/天 解锁文章
1万+





