FCN网络:深入理解全卷积网络的原理与应用
在图像处理和计算机视觉领域,尤其是涉及像素级别的理解任务时,传统用于图像分类的卷积神经网络(CNN)需要进行一些重要的改造。FCN,即全卷积网络(Fully Convolutional Network),正是为了解决这类问题而提出的一种基础且重要的网络架构。它彻底改变了网络处理图像的方式,使得网络能够输出与输入图像尺寸相关的、具有空间信息的预测结果。
FCN网络:它“是”什么?
从根本上说,一个FCN网络是一个完全由卷积层、池化层和激活函数组成的网络,它剥离了传统CNN网络末端的全连接层(Fully Connected layers)。
在传统的用于分类的CNN中,卷积层和池化层负责提取图像特征并逐步减小特征图的空间尺寸,最终输出一个低维的特征向量。这个特征向量随后被送入一个或多个全连接层,全连接层将特征映射到类别的概率分数上,输出的是一个固定大小的向量,失去了原始图像的空间信息。
然而,对于图像语义分割(Semantic Segmentation)这类任务,我们的目标是为图像中的每一个像素点分配一个类别标签(例如,这个像素属于“人”、“车”、“背景”等)。这意味着网络的输出需要保留原始图像的空间结构,并且输出的尺寸应该与输入图像相关,最好是相同或可转换为相同尺寸的像素级预测图。
FCN正是针对此需求而生。它将传统CNN中的全连接层替换为1×1的卷积层。这是一个关键的改变,因为1×1卷积层本质上也是一种卷积运算,它可以在保留输入特征图空间维度的同时,将通道数进行线性组合或降维/升维,实现与全连接层类似的功能(将特征映射到类别分数),但保留了空间对应性。
因此,一个FCN网络能够接收任意尺寸的输入图像,经过一系列卷积和池化操作后,输出一个与输入图像具有空间对应关系的、降低了分辨率的特征图或得分图(Score Map)。这个得分图的每个位置代表了原始图像中对应区域的特征,而其通道数则对应于需要预测的类别数量。
为何FCN要采用“全卷积”结构?
采用全卷积结构的主要“原因”在于解决两个核心问题:
- 适应任意尺寸输入: 卷积层和池化层(在合理设置填充和步长的情况下)本身就能够处理任意空间尺寸的输入图像。它们的输出尺寸是输入尺寸根据核大小、步长、填充和池化窗口计算得出的,但这种关系是线性的,不强制要求输入是固定尺寸。相反,全连接层需要一个固定长度的输入向量,这要求之前的层必须将特征“展平”(flatten)为一个固定尺寸的向量,从而强制要求网络接收固定尺寸的输入图像。移除全连接层,代之以卷积层,使得FCN可以处理不同尺寸的输入图像,而无需缩放或裁剪。
- 输出具有空间结构的信息: 语义分割需要像素级的预测,即网络需要输出一个与输入图像空间对应的结果。全连接层将空间信息“压扁”为一个向量,无法满足这一要求。全卷积结构保留了空间信息,网络输出的得分图的每个位置直接对应着输入图像的某个区域(尽管可能由于池化而分辨率降低),其通道信息则代表了该区域属于各个类别的可能性。这种空间对应性是实现像素级预测的基础。
简而言之,全卷积结构是实现输入尺寸灵活性和输出空间预测图的关键设计。
FCN如何实现像素级预测?(详细过程)
FCN实现像素级预测主要依赖于以下几个步骤和技术:
1. 构建基础卷积网络并去除全连接层
FCN通常基于现有的、在大型图像分类任务上预训练过的经典CNN架构,如VGG、GoogLeNet或ResNet等。这样做的好处是利用了预训练模型已经学到的丰富图像特征表示能力。关键的改造在于:移除这些预训练网络原有的最后用于分类的全连接层。
例如,对于VGG16,原网络在最后几个卷积层后接着是全连接层(FC6, FC7, FC8)。FCN保留了所有的卷积和池化层,然后将FC6和FC7替换为卷积核大小等于输入特征图大小的卷积层(可以看作是全连接层的一种特殊形式),FC8则被替换为一个1×1的卷积层。这个1×1卷积层的输出通道数等于需要分割的类别数 C。
2. 生成低分辨率得分图
经过基础网络的卷积和池化层后,输入的图像尺寸会大幅缩小(例如,经典的FCN模型通常会将输入图像下采样32倍,即步长为32)。最后那个1×1的卷积层在处理这个低分辨率的特征图时,为每个位置(对应于原始图像中的一个较大的区域)输出一个长度为C的向量,代表该区域属于每个类别的得分。这形成了一个低分辨率的、通道数为C的“得分图”。
例如,如果输入图像是 512×512,经过一个步长为32的网络,最终的特征图可能是 16×16。经过1×1卷积(假设有21个类别),输出的得分图就是 16x16x21。虽然这是空间对应的,但分辨率太低,不能直接作为最终的像素级分割结果。
3. 上采样(Upsampling)
为了获得与原始输入图像分辨率相匹配的像素级预测结果,FCN引入了上采样(Upsampling)操作。上采样的目的是增大得分图的空间尺寸。常用的上采样方法包括:
- 转置卷积(Transposed Convolution / Deconvolution): 这是一种特殊的卷积操作,可以用来增加特征图的空间分辨率。它并不是卷积的逆过程,但通过学习合适的卷积核参数,可以在增大尺寸的同时保留特征信息。FCN论文中主要采用这种方法。
- 双线性插值(Bilinear Interpolation)或最近邻插值(Nearest-neighbor Interpolation): 这些是传统的图像缩放方法,可以快速将得分图插值到目标尺寸。然而,它们不涉及学习过程,可能丢失一些细节。
通过上采样,那个16x16x21的得分图会被放大回接近或等于原始输入图像的尺寸(例如,放大到 512x512x21)。放大后的得分图的每个像素位置就对应于原始图像的相应像素,其21个通道的值代表该像素属于每个类别的得分。
4. 像素级分类
经过上采样得到的与输入图像尺寸相同的得分图后,对于图中的每一个像素点 (i, j),我们得到一个长度为 C 的得分向量。通过在这个向量上执行argmax操作(即找到得分最高的那个类别的索引),我们就得到了像素点 (i, j) 的预测类别标签。将所有像素点的预测标签组合起来,就形成了最终的像素级语义分割结果图。
FCN在“哪里”得到了应用?
作为语义分割领域的开创性工作,FCN的核心思想和结构被广泛应用于各种需要像素级理解的场景:
- 自动驾驶: 分割道路、车辆、行人、交通标志等,是环境感知的关键组成部分。
- 医学影像分析: 分割肿瘤、器官、病灶区域,辅助医生诊断和治疗。
- 卫星遥感图像分析: 分割不同类型的地物,如建筑物、水体、森林、农田等。
- 机器人感知: 分割环境中的物体和可通行区域,帮助机器人导航和交互。
- 图像编辑与处理: 实现背景擦除、图像抠图、智能涂鸦等功能。
- 工业质检: 分割产品表面的缺陷区域。
基本上,任何需要识别图像中“哪些像素属于哪一类”的任务,都可以考虑使用FCN或其改进的网络结构。
关于“多少”的讨论:FCN的不同变体 (FCN-32s, FCN-16s, FCN-8s)
前面提到,简单的从网络的最后一层进行大步长(如32倍)的上采样会得到一个分辨率很低、边界比较粗糙的得分图。虽然上采样能够恢复尺寸,但丢失的空间细节是无法完全补偿的,导致分割结果不够精细。为了改善这一点,FCN提出了利用跳跃连接(Skip Connections)来融合来自网络不同层的特征图,从而引入更精细的空间信息。这产生了FCN的不同变体,它们在“多少”不同层进行融合以及融合方式上有所区别:
- FCN-32s: 这是最基础的版本,直接将最后一层(相对输入下采样了32倍)的输出通过一个32倍的上采样恢复到原始图像尺寸。它的边界预测通常比较粗糙。
- FCN-16s: 为了引入更精细的信息,FCN-16s不仅仅依赖最后一层。它将最后一层的输出先进行2倍的上采样,然后将其与网络中一个更靠前的、下采样了16倍的层的特征图进行融合(通常是按像素相加)。融合后的结果再进行16倍的上采样,得到最终的预测。通过融合16倍下采样层的特征,引入了更丰富的空间细节。
- FCN-8s: FCN-8s更进一步,在FCN-16s的基础上进行融合。它将FCN-16s得到的融合结果(已经上采样了2倍)再次进行2倍上采样,然后与网络中一个更靠前的、下采样了8倍的层的特征图进行融合。融合后的结果再进行8倍的上采样,得到最终的预测。通过融合8倍下采样层的特征,获得了更精细的边界信息。
“多少s”表示的是最终的上采样倍数,但更重要的是它隐含了“多少”层信息被融合,以及融合了“多深”层次的信息。通常,FCN-8s由于融合了更浅层(空间分辨率更高)的特征,能够产生比FCN-16s和FCN-32s更精细、边界更准确的分割结果。
FCN通常是“怎么”进行训练的?
FCN的训练过程与传统的深度学习模型训练类似,但目标函数和数据形式有所不同:
- 训练数据: 需要成对的(输入图像, 对应的像素级类别标签图)。像素级标签图(也称为Ground Truth Mask)是一个与输入图像尺寸相同(或按比例对应)的图像,其中每个像素的值代表该像素的真实类别标签。
- 损失函数: FCN最常用的损失函数是像素级交叉熵损失(Pixel-wise Cross-Entropy Loss)。网络输出的是一个得分图(尺寸与输入图像相同,通道数为类别数C),对于输出图的每一个像素点,计算其预测的类别得分与对应的Ground Truth标签之间的交叉熵损失。最终的总损失是所有像素点损失的平均值或总和。这促使网络学习为每个像素预测正确的类别。
- 优化器: 使用标准的梯度下降优化器,如随机梯度下降(SGD)及其变种(带有动量、Nesterov动量等),或Adam、RMSprop等自适应学习率优化器。
- 权重初始化: 通常利用在大型图像分类数据集(如ImageNet)上预训练好的CNN模型作为FCN卷积部分的初始化权重。这称为迁移学习(Transfer Learning),能够显著加速训练过程并提高性能,因为网络已经学习到了通用的图像特征。只有新添加的层(如1×1卷积层和上采样层)需要随机初始化或进行特定的初始化。
- 训练过程: 在带有像素标签的训练数据集上,通过反向传播计算损失函数对网络权重的梯度,并使用优化器更新权重,直至网络收敛。
整个训练过程的目标是让网络学习到一个映射,能够将输入的图像转换为精细的像素级类别预测图。
总而言之,FCN通过巧妙地将传统CNN的全连接层替换为卷积层并结合上采样技术,特别是引入跳跃连接,成功地将网络应用于需要像素级理解的任务,为后续更先进的语义分割网络(如U-Net、DeepLab系列等)奠定了坚实的基础。它不仅仅是一个特定的网络模型,更是一种重要的网络设计理念——利用全卷积结构保留和恢复空间信息,实现端到端的像素级预测。