语义分割是什么?

语义分割是将标签或类别与图片的每个像素关联的一种深度学习算法。它被用来识别像素集合,而正是这些像素集合构成了不同类别。例如,自动驾驶汽车需要识别出车辆、行人、交通信号、人行道和其他道路特征。

语义分割可应用于多种场合,比如自动驾驶、医学成像和工业检测。

一个关于语义分割的简单例子是将图像划分成两类。例如,在图 1这幅人在海边的图像中,与之相对应的版本为分割成两个不同类别的图像像素集:人和背景。

图 1:图像与标记像素

语义分割并不局限于两个类别。您可以根据图像内容分类来更改类别数目。比如,这幅同样的图像也可能被分割为四个类别:人、天空、水和背景。

语义分割与对象检测有什么区别?

语义分割可以作为对象检测的一种有效替代方法,因为它允许目标对象在像素层上跨越图像中的多个区域。这种技术可以清楚地检测到形态不规则的对象,相比之下,对象检测则要求对象必须位于边界框内(图 2)。

图 2:对象检测,其识别对象的边界框

语义分割的应用?

语义分割是为图像中的像素打标签,所以它的精确性高于其他形式的对象检测。这使得语义分割适用于各种对精确图像映射有要求的行业,比如:

  • 自动驾驶 — 通过区分道路与障碍物,如行人、人行道、电线杆和其他汽车,让汽车识别可行驶的路径
  • 工业检测 — 用于检测材料中的缺陷,如晶圆检验
  • 卫星影像 — 用于识别高山、河流、沙漠和其他地形
  • 医学成像 — 用于分析和检测细胞中的癌变
  • 机器人视觉 — 用于识别物体和地形并导航

图 3:多光谱卫星图像的语义分割

语义分割的工作原理

用以图像分类的语义分割网络训练过程遵循以下步骤:

  1. 分析一组带像素标签的图像。
  2. 创建一个语义分割网络。
  3. 训练该网络将图像划分为不同像素类别。
  4. 评估该网络的准确度。

示例:自动驾驶应用

图 4 中的序列展示了语义分割应用于自动驾驶的真实案例。道路图像自动从其他车辆中分割出来。下面将说明如何创建这些网络。

图 4:语义分割应用于自动驾驶

了解架构

语义分割的一个常用方法是创建 SegNet,该网络基于卷积神经网络 (CNN) 架构。典型的 CNN 架构如图 5 所示。

该 CNN 将整个图片划分为对应的多个预定义类别。

图 5:CNN 典型架构

要在像素层而非整个图像上进行分类,您可以附加一个 CNN 的逆向实现。上采样过程的执行次数与下采样过程相同,以确保最终图像的大小与输入图像相同。最后使用一个像素分类输出层,将每个像素映射到一个特定类别。这就形成了一个编码器-解码器架构,从而实现语义分割。

图 6:CNN 在每一层执行图像相关的功能,然后使用池化层(图中绿色部分)对图像进行下采样。对于该网络的前半部分,此过程会重复多次。在该图形的前半部分输出之后,继续使用同等数量的反池化层(图中橙色部分)。

使用 MATLAB 实现语义分割

 

在 MATLAB 中,执行语义分割的工作流程遵循以下五个步骤:

  1. 为数据打标签或获取带标签数据。
  2. 为原始图像和带标签图像创建数据存储。
  3. 分割数据存储。
  4. 导入一个 CNN 并将其修改为 SegNet。
  5. 训练并评估网络。

步骤 1:为数据打标签或获取带标签数据

深度学习模型建立于大量数据之上,语义分割也不例外。其中一个选择是在互联网上找到带标签数据。如果您有自己的数据集,则可以使用 MATLAB 中的 Image Labeler 应用程序。您可以使用此数据集来训练 SegNet。

图 7:用来标记图像实现语义分割的 MATLAB Image Labeler 应用。 

了解更多

步骤 2:为原始图像和带标签图像创建数据存储

在处理大量数据时,通常不可能将所有信息加载到内存中。要管理大型数据集,您可以使用数据存储。数据存储包含您想要访问的文件的位置,只有在您需要操作这些文件时,才将它们读入内存。

要创建 SegNet,您需要两个数据存储:

  1. ImageDatastore,存储原始图像
  2. PixelLabelDatastore,存储带标签图像

步骤 3:分割数据存储

在创建 SegNet 时,您须要将数据存储分割为两部分:

  1. 训练集,用来训练 SegNet
  2. 测试集,用来评估网络的准确度

图 8:高速公路景象的彩色图片(左)及其对应的带标签像素集(右)

步骤 4:导入一个 CNN 并将其修改为 SegNet

在创建 SegNet 时,您须要将数据存储分割为两部分:

  1. 训练集,用来训练 SegNet
  2. 测试集,用来评估网络的准确度

图 9:仅需 MATLAB 的一行代码即可创建 SegNet 架构

步骤 5:训练并评估网络

在最后一步中,设置网络的超参数并训练网络。

了解有关语义分割的
更多信息

支持使用语义分割进行图像分析的产品包括 MATLAB®、标记像素的 Computer Vision System Toolbox™ 以及创建并训练网络的 Deep Learning Toolbox™

支持 CUDA® 且具有3.0 或更高计算能力的 GPU才能支持训练和预测。建议使用 GPU,并需有 Parallel Computing Toolbox™

软件参考

获取免费试用版

30 天探索触手可及。

有疑问吗?

与深度学习专家探讨。