基于深度学习的图像语义分割算法:FCN(全卷积网络)
字数 2439 2025-11-27 13:17:50
基于深度学习的图像语义分割算法:FCN(全卷积网络)
题目描述
图像语义分割是计算机视觉中的核心任务,旨在为图像中的每个像素分配一个语义类别标签(如“人”、“车”、“树”等),从而实现对图像的像素级理解。在FCN出现之前,主流方法通常依赖于手工设计的特征或基于块分类的算法,这些方法效率低下且精度有限。FCN是深度学习时代第一个端到端的、能够接受任意尺寸输入并输出相应尺寸分割图的语义分割算法,它开创性地将分类网络(如AlexNet、VGG、GoogLeNet)全面卷积化,为后续的语义分割研究奠定了基础。
解题过程
-
问题分析与传统方法的局限
- 核心挑战:语义分割是一个密集预测任务,即输入是H x W x 3的图像,输出应该是H x W x C的分割图,其中C是类别数量(包括背景类)。这要求模型在像素级别上进行精确的分类。
- 传统CNN的局限:当时取得巨大成功的图像分类CNN(如VGG16),其网络末端通常包含全连接层。全连接层需要固定尺寸的输入,并将其转换成一个固定长度的特征向量。这个向量丢失了空间信息,只适合于图像级别的分类,无法输出一个具有空间维度的分割图。
-
FCN的核心思想:将全连接层“卷积化”
- 关键洞察:FCN的作者发现,全连接层可以被视为一种特殊的卷积层。例如,一个含有4096个神经元的全连接层,如果其输入是7x7x512的特征图,那么它可以被等价地看作是一个卷积核大小为7x7、卷积核数量为4096的卷积层。这个卷积层的作用域是整个7x7的输入区域,因此其输出是一个1x1x4096的特征图。
- 具体操作:将预训练好的分类网络(如VGG16)最后的全连接层(fc6, fc7)和最后的分类层(fc8)都替换成对应的卷积层。
fc6(输入7x7x512,输出1x1x4096) -> 替换为:卷积核7x7,数量4096,输出为1x1x4096。fc7(输入1x1x4096,输出1x1x4096) -> 替换为:卷积核1x1,数量4096,输出为1x1x4096。fc8(输入1x1x4096,输出1x1x1000) -> 替换为:卷积核1x1,数量C(分割类别数),输出为1x1xC。
- 效果:经过这样的改造后,整个网络变成了一个“全卷积”网络。它可以接受任意尺寸的输入图像(例如224x224,320x320等)。前向传播到最后,网络会输出一个低分辨率的特征图(例如,对于VGG16,输入224x224,输出是7x7xC),这个特征图被称为“热图”或“粗糙分割图”,其中的每个“像素”对应着原始输入图像中一个较大区域(感受野)的类别预测。
-
引入上采样:从粗糙热图到密集预测
- 问题:经过卷积化和下采样(池化)后,输出的热图尺寸远小于输入图像(例如7x7 vs 224x224)。我们需要将其上采样回原始图像的尺寸,才能得到像素级的预测。
- 解决方案:转置卷积:FCN使用转置卷积(也称为反卷积或分数步长卷积)来进行上采样。转置卷积可以理解为卷积的“逆过程”,它通过在输入特征图的像素之间插入零点并进行标准卷积操作,从而扩大特征图的尺寸。
- 最简单版本(FCN-32s):直接将最后输出的1x1xC(或7x7xC)热图,通过一个步长为32的转置卷积上采样32倍,恢复到原图大小。这种方法最简单,但由于上采样倍数过大,丢失了大量细节,导致分割边界非常模糊。
-
跳跃连接结构:融合多层特征以优化细节
- 洞察:CNN的不同层捕获不同层次的特征。浅层网络(如pool1, pool2)特征图分辨率高,包含丰富的边缘、纹理等细节信息,但语义性弱。深层网络(如pool5, fc7)特征图分辨率低,语义性强,能判断“是什么”,但位置信息粗糙。
- 架构设计:为了同时利用深层特征的强语义信息和浅层特征的精细位置信息,FCN引入了跳跃连接结构,创造了FCN-16s和FCN-8s。
- FCN-16s:
- 将
pool4后的特征图(尺寸为pool5的2倍)通过一个1x1卷积降维,使其通道数与pool5输出的预测结果通道数相同(均为C)。 - 将
pool5的输出预测上采样2倍(使用转置卷积)。 - 将上采样后的特征图与来自
pool4的特征图进行逐元素相加。 - 最后,将融合后的特征图上采样16倍,得到最终的分割结果。这样,结果融合了
pool4和pool5的信息。
- 将
- FCN-8s:
- 在FCN-16s的基础上,再融合
pool3的特征。 - 先将融合了
pool4和pool5的特征图上采样2倍。 - 将其与来自
pool3(经过1x1卷积调整通道数)的特征图相加。 - 最后,将再次融合后的特征图上采样8倍,得到最终结果。
- 在FCN-16s的基础上,再融合
- FCN-16s:
- 效果:通过这种逐级融合和上采样的方式,FCN-8s能够利用更浅层、更高分辨率的特征,从而生成边界更清晰、细节更丰富的分割图,其性能明显优于FCN-32s。
-
损失函数与训练
- 损失函数:FCN使用逐像素的交叉熵损失作为损失函数。它将最终上采样得到的分割图(H x W x C)与真实的分割标签图(Ground Truth,H x W,每个像素值是类别索引)进行比较,计算所有像素的损失平均值。
- 训练技巧:采用迁移学习。首先使用在大型数据集(如ImageNet)上预训练好的分类网络(VGG16)权重来初始化FCN的主干特征提取部分,然后使用分割数据集(如PASCAL VOC)对整个网络进行端到端的微调。这大大加速了收敛并提升了模型性能。
总结
FCN的革命性贡献在于它证明了:
- 通过将全连接层卷积化,成熟的分类网络可以被直接迁移到密集预测任务中。
- 通过转置卷积可以实现端到端的学习,直接输出分割图。
- 通过跳跃连接结构融合深浅层特征,可以有效提升分割边界的精度。
FCN奠定了现代语义分割算法的基础,后续的U-Net、SegNet、DeepLab等众多优秀模型都是在FCN的核心思想上进行改进和发展的。