语义分割是什么?
语义分割是将标签或类别与图片的每个像素关联的一种深度学习算法。它用来识别构成可区分类别的像素集合。例如,自动驾驶汽车需要识别车辆、行人、交通信号、人行道和其他道路特征。
语义分割可用于多种应用场合,比如自动驾驶、医学成像和工业检测。
image
语义分割的一个简单例子是将图像划分成两类。例如,在图 1 中,一幅图像显示一个人在海边,与之相配的版本显示分割为两个不同类别的图像像素:人和背景。
语义分割 -- 图像和有标签的像素
图 1:图像和有标签的像素。
语义分割并不局限于两个类别。您可以更改对图像内容进行分类的类别数。例如,这幅图像也可能分割为四个类别:人、天空、水和背景。
语义分割与对象检测有什么区别?
语义分割可以作为对象检测的一种有用替代方法,因为它允许感兴趣对象在像素级别上跨越图像中的多个区域。这种技术可以清楚地检测到形态不规则的对象,相比之下,对象检测要求对象必须位于有边界的方框内(图 2)。
图 2:对象检测,显示用来识别对象的边框。
如何使用语义分割?
因为语义分割会给图像中的像素加上标签,所以精确性高于其他形式的对象检测。这使得语义分割适用于各种需要准确图像映射的行业应用,比如:
- 自动驾驶 — 通过区分道路与障碍物,比如行人、人行道、电线杆和其他汽车,让汽车识别可行驶的路径
- 工业检测 — 用于检测材料中的缺陷,如晶圆检验
- 卫星影像 — 用于识别高山、河流、沙漠和其他地形
- 医学成像 — 用于分析和检测细胞中的癌变
- 机器人视觉 — 用于识别物体和地形并进行导航
语义分割 -- 多谱段卫星图像
图 3:多谱段卫星图像的语义分割。
语义分割的工作原理
训练语义分割网络进行图像分类的过程遵循以下步骤:
分析一组带像素标签的图像。
创建一个语义分割网络。
训练该网络将图像划分为不同像素类别。
评估网络的准确性
示例:自动驾驶应用
图 4 中的序列显示了用于自动驾驶的语义分割的真实示例。道路的图像自动从其他车辆中分割出来。下一段显示如何创建这些网络。
自动驾驶应用的语义分割
图 4:自动驾驶应用的语义分割。
了解架构
语义分割的一个常用方法是创建 SegNet,该网络基于卷积神经网络 (CNN) 架构。典型的 CNN 架构图 5 所示。
此 CNN 将整个图像划分为许多预定义类别中的一个。
语义分割 -- CNN 的典型结构
图 5:CNN 的典型结构。
要在像素级别上分类,而不是对整个图像分类,您可以追加一个 CNN 的逆向实现。上采样过程的执行次数与下采样过程相同,以确保最终图像的大小与输入图像相同。最后使用一个像素分类输出层,将每个像素映射到一个特定类。这就形成了一个编码器-解码器架构,从而实现语义分割。
语义分割 -- CNN 执行图像相关的功能
图 6:CNN 在每一层执行图像相关的功能,然后使用池化层(绿色)对图像进行下采样。对于网络的前半部分,此过程会重复多次。此图形前半部分的输出后面紧接着同等数量的反池化层(橙色)。