1. 引言

在计算机视觉领域,我们希望从图像中提取有价值的信息。这通常通过识别图像中的对象来实现,而图像分割(image segmentation)是实现这一目标的重要手段之一。

本文将解释图像分割的原理,并重点介绍两种主要的分割方法:实例分割(Instance Segmentation)语义分割(Semantic Segmentation)

2. 图像分割概述

在图像分割任务中,我们的目标是对图像中的每个像素进行分类。

属于同一类别的像素集合构成一个图像片段(segment)。通常,我们希望通过分割来识别图像中的对象,从而将图像的表示形式从像素值转换为类别标签。

图像分割的方法有很多,最简单的是阈值法(thresholding)。例如,在灰度图像中,我们可以通过设定一个阈值(如149),将像素值低于该值的归为前景,高于该值的归为背景:

Segmentation Threshold

图像分割在生物学中也有广泛应用。例如,在医学图像分析中,我们需要从组织样本中区分癌细胞和正常细胞。由于癌细胞的结构通常与正常细胞不同,图像中也会体现这种差异。通过分割技术识别出细胞后,可以进一步进行形态学分析。

图像分割主要分为两种类型:语义分割实例分割

3. 语义分割

在语义分割中,属于同一类别的所有对象共享同一个标签

以自动驾驶场景为例,所有行人将被标记为“行人”,所有车辆将被标记为“车辆”,无论它们的数量和位置:

semantic scene

3.1. SegNet 简介

在语义分割中,深度学习方法表现最佳。SegNet 是其中一种经典方法,它是一种编码器-解码器结构的网络:

Segnet

在编码阶段,SegNet 使用 13 层卷积网络对输入图像进行下采样,每层后接最大池化(max-pooling)。在池化过程中,它会记录每个池化窗口中最大值的位置(索引)。

在解码阶段,SegNet 使用这些保存的索引对特征图进行上采样。它将最大值放回原来的位置,其余位置填充为 0,从而重建稀疏特征图:

segnet pooling

最后,通过卷积操作将稀疏图转换为密集的特征图输出。

4. 实例分割

在实例分割中,每个检测到的对象都会被赋予唯一的标签

当我们需要区分对象的个体数量或独立性时,通常使用实例分割。例如,在演唱会现场统计人数,就需要对每个观众进行独立识别。

同样以自动驾驶为例,语义分割中所有车辆共享一个标签,而在实例分割中,每个行人和每辆车都会被赋予不同的标签(通常用不同颜色表示):

instance segmentation

4.1. Mask R-CNN 简介

Mask R-CNN 是当前最流行的实例分割方法之一,其工作流程分为多个阶段:

第一阶段是区域建议网络(Region Proposal Network, RPN),用于生成候选区域。

第二阶段对每个候选区域进行分类、边界框回归,并生成对应的二值掩码(mask):

mask rcnn

Mask R-CNN 的创新点在于,它在预测边界框的同时生成对象掩码,实现了对对象的精确分割。

5. 总结

图像分割是计算机视觉中的重要任务,广泛应用于医学图像分析、自动驾驶、智能机器人等多个领域。

在选择分割方法时,关键在于明确应用场景:

✅ 如果你需要统计图像中对象的数量,或者区分同一类别中的不同个体,应选择实例分割
✅ 如果你只需要对图像中的对象进行类别划分,而不需要区分个体,应选择语义分割

选择合适的分割方法,不仅能提升模型的精度,也能更高效地满足实际业务需求。


原始标题:Instance Segmentation vs. Semantic Segmentation