图像分割中的语义分割算法
字数 1832 2025-10-27 00:33:54
图像分割中的语义分割算法
题目描述:
语义分割是计算机视觉中的核心任务,旨在为图像中的每个像素分配一个类别标签(如“人”、“车”、“树”、“天空”等),从而实现像素级别的图像理解。与仅对整张图像分类的图像分类不同,语义分割要求对图像进行稠密预测。本题将重点讲解实现语义分割的一种经典基础算法——全卷积网络(Fully Convolutional Network, FCN)。
解题过程:
-
问题定义与核心挑战
- 目标:输入一张任意尺寸的彩色图像(例如 H x W x 3),输出一个相同尺寸(H x W)的矩阵。这个输出矩阵的每个位置的值,代表输入图像对应像素点的预测类别。
- 核心挑战:传统的分类卷积神经网络(CNN),如VGG、ResNet,在网络的末端通常包含全连接层。全连接层要求固定的输入尺寸,并且其输出是一个固定长度的类别概率向量,丢失了空间位置信息。这无法直接用于需要保留空间维度的分割任务。
-
关键思路:全卷积化
- 全卷积网络(FCN)的核心思想是将传统CNN中的全连接层替换为卷积层。
- 具体操作:假设一个全连接层的输入是4096维的特征向量,输出是1000维。我们可以将其视为一个卷积核(滤波器)大小为上一层特征图尺寸的卷积层。例如,如果上一层的特征图尺寸是 7x7x512,那么一个拥有4096个 7x7 卷积核的卷积层,其输出就是 1x1x4096 的特征图,这与全连接层的效果等价。通过这种方式,整个网络都由卷积层和池化层构成,因此可以接受任意尺寸的输入。
- 优势:网络不再受固定输入尺寸的限制,并且所有中间层特征图都保留了空间信息。
-
引入编码器-解码器结构
- 虽然全卷积化解决了输入尺寸问题,但直接使用传统CNN(现称为编码器)的输出进行预测会遇到另一个问题:特征图尺寸太小,空间细节丢失严重。
- 编码器(下采样): backbone网络(如VGG16)通过交替的卷积和池化层,逐步提取高级的、具有强语义信息的特征。但每次池化操作都会使特征图尺寸减半,空间分辨率降低。
- 解码器(上采样):为了将小尺寸的低分辨率特征图恢复到原始输入图像的大小,需要引入上采样操作。FCN使用转置卷积(也称为反卷积)来实现上采样。转置卷积可以学习一种反向的卷积操作,将小特征图“放大”成大特征图。
-
融合多尺度特征(跳跃连接)
- 直接对编码器最后输出的、分辨率最低的特征图进行上采样,得到的结果通常非常粗糙,物体边界模糊。这是因为深层特征虽然语义信息丰富,但缺乏细节。
- 解决方案:FCN引入了跳跃连接,将编码器中不同层(不同尺度)的特征图与解码器的特征图进行融合。
- 具体过程:
- 将编码器末端(经过多次下采样后)的特征图记作
pool5(尺寸最小,语义信息最强)。 - 首先对
pool5进行2倍上采样,得到特征图F1。 - 然后,从编码器中找到一个尺寸是
F1两倍的特征图(例如pool4层)。将pool4的特征图通过一个1x1卷积来调整通道数,使其与F1的通道数匹配。 - 最后,将调整后的
pool4特征图与F1进行对应元素相加。这个融合操作将深层的强语义信息(来自pool5/F1)和浅层的精细位置信息(来自pool4)结合在了一起。 - 可以对融合后的特征图继续上采样,并再次融合更浅层(如
pool3)的特征,以此类推。FCN-8s就是融合了pool3,pool4和pool5三个层次的特征。
- 将编码器末端(经过多次下采样后)的特征图记作
-
输出与损失计算
- 经过解码器的上采样和特征融合后,最终输出的特征图尺寸与输入图像相同(H x W),通道数等于类别数(C)。
- 这个输出可以看作是一个
H x W x C的张量,对于每个像素位置,其在C个通道上的值代表了属于各个类别的分数(logits)。 - 然后,对每个像素位置上的C维向量应用Softmax函数,将其转换为概率分布,表示该像素属于每个类别的概率。
- 损失函数:通常使用逐像素的交叉熵损失。将每个像素的预测概率分布与真实标签(一个H x W的矩阵,每个元素是类别索引)进行比较,计算所有像素的损失平均值。通过最小化这个损失,来训练整个网络。
总结:FCN算法通过全卷积化支持任意尺寸输入,采用编码器-解码器结构恢复空间分辨率,并利用跳跃连接融合不同层级的特征,成功地将CNN拓展到了语义分割任务,为后续更复杂的分割模型(如U-Net, DeepLab等)奠定了坚实的基础。