订阅 IBM 时事通讯
图像分割是图像分类和对象检测的高级演进,也是一套独特的计算机视觉功能。
图像分类将类标签应用于整个图像。例如,可以训练一个简单的图像分类模型,将车辆图像分为“汽车”或“卡车”。传统的图像分类系统并不单独处理单个图像特征,因此复杂程度有限。
对象检测将图像分类与对象定位相结合,生成对象所在的矩形区域(称为“边界框”):对象检测模型可以指出图像中可以找到汽车或卡车的位置,而不是仅仅将车辆图像标记为“汽车”或“卡车”。虽然对象检测可以对图像中的多个元素进行分类,并估算出每个元素的宽度和高度,但它无法识别精确的边界或形状。这就限制了传统对象检测模型对边界框重叠的紧密对象进行划分的能力。
图像分割在像素级别处理视觉数据,使用各种技术将单个像素标注为属于特定类别或实例。“经典”图像分割技术通过分析每个像素的固有特性(称为“启发式”)(如颜色和强度)来确定标注内容,而深度学习模型则采用复杂的神经网络来进行复杂的模式识别。这种标注的输出是分割掩码,代表图像中每个类别(通常对应于不同对象、特征或区域)的具体像素边界和形状。
从广义上讲,图像分割用于三种类型的任务:语义分割、实例分割和全景分割。
每种类型的图像分割任务之间的区别在于它们如何处理语义类别:指定像素可能被确定属于的具体类别。
用计算机视觉的术语来说,有两种类型的语义类别。每种方法都适合使用不同的技术进行准确、有效的分割。
Things 是具有特征形状的对象类别,如“汽车”、“树”"或“人”。一般来说,things 都有定义明确的实例,可以计数。它们在大小上的差异相对较小,并且有不同于 thing 本身的构成部分:例如,所有汽车都有轮子,但轮子不是汽车。
Stuff 是指形状无定形且大小变化很大的语义类别,例如“天空”、“水”或“草”。通常,Stuff 是没有明确定义的、可计数的单个实例。与 Things 不同,Stuff 没有不同的部分:一片草叶和一片草地都是“草”。
在某些图像条件下,某些类别既可以是 things,也可以是 stuff。例如,一大群人可以被解释为多个“人”,每个人都是形状独特、可数的 things,或者是单个、形状不定的“人群”。
虽然大多数对象检测工作主要集中在 thing 类上,但重要的是要考虑到 stuff(天空、墙壁、地板、地面)构成了我们大部分的视觉环境。Stuff 是识别 things 的基本数据点,反之亦然:道路上的金属物通常是汽车;船后面的蓝色背景可能是水,而飞机后面的蓝色背景可能是天空。这对于深度学习模型尤其重要。
语义分割是最简单的图像分割类型。语义分割模型为每个像素分配一个语义类别,但不输出任何其他上下文或信息(如对象)。
语义分割将所有像素视为 stuff;它不区分stuff 和 things。
例如,为识别城市街道上的某些类别而训练的语义分割模型会生成分割掩码,显示每个相关类的 thing(如车辆或灯杆)和 stuff(如道路和人行道)的边界和轮廓,但不会区分(或计算)同一类的多个实例。例如,一辆停在另一辆前面的汽车可能会被简单地视为一个长“汽车”段。
实例分割颠倒了语义分割的优先顺序:语义分割算法只预测每个像素的语义分类(不考虑单个实例),而实例分割则精确划分每个独立对象实例的形状。
实例分割将 things 与它忽略的 stuff 隔离开来,因此可以理解为对象检测的一种进化形式,它输出精确的分割掩码而不是近似的边界框。
这是一项比语义分割更困难的任务:即使同一类 things 相互接触甚至重叠,实例分割模型也必须能够分离并确定每个 things 的形状,而语义分割模型则可以简单地将它们混在一起处理。例如,考虑一下这两种不同的模型如何处理这张城市街道图像中停放的汽车。
实例分割算法通常采用两阶段或单次方法来解决问题。两阶段模型,例如基于区域的卷积神经网络 (R-CNN),会执行传统的对象检测,为每个提议的实例生成边界框,然后在每个边界框内执行更精细的分割和分类。单次模型,如 YOLO(You Only Look Once),通过同时执行对象检测、分类和分割来实现实时实例分割。
单次法速度更快(在精度上有所牺牲),而两阶段成像法精确度更高(在速度上有所牺牲)。
全景分割模型既能确定所有像素的语义分类,又能区分图像中的每个对象实例,将语义分割和实例分割的优势结合在一起。
在全景分割任务中,每个像素都必须使用语义标签和“实例 ID”进行标注。共享相同标签和 ID 的像素属于同一个对象;对于确定为 stuff 的像素,实例 ID 将被忽略。
因此,全景分割能让计算机视觉系统全面、整体地了解给定图像。虽然全景分割的优势显而易见,但如何以一致且计算效率高的方式实现全景分割却是一项艰巨的挑战。
难点在于将两种相互矛盾的方法统一起来:语义分割模型将所有像素都视为 stuff,而忽略了 things 的单个实例;实例分割模型将单个 things 隔离开来,而忽略了 stuff。这两种模型都无法充分承担对方的责任。
最初尝试的全景分割模型只是将两种模型结合起来,分别执行每项任务,然后在后处理阶段将其输出结果合并。这种方法有两个主要缺点:需要大量的计算开销,并且难以处理语义分割网络输出的数据点与实例分割网络输出的数据点之间的差异。
较新的全景分割架构旨在通过更统一的深度学习方法来避免这些缺点。大多数网络都建立在“骨干”网络的基础上,如特征金字塔网络 (FPN),该网络从输入图像中提取特征,将提取的数据输入并行分支,如“前景分支”和“背景分支”,或“语义头”和“实例头”,然后使用加权系统合并每个分支的输出。提出的全景架构包括 EfficientPS、OANet、PanopticFPN、UPSNet、SOGNet、BGRNet、AUNet、FPSNet 和 SpatialFlow。
传统的图像分割技术使用像素颜色值(以及亮度、对比度或强度等相关特征)信息进行特征提取,并可通过简单的机器学习算法进行快速训练,以完成语义分类等任务。
虽然基于深度学习的分割方法能够实现更高的精度和更复杂的图像分析,特别是像全景分割这样需要大量上下文信息的任务,但传统方法的成本和计算要求要低得多,而且能更高效地解决某些问题。
常见的传统(或“经典”)图像分割技术包括:
深度学习图像分割模型的神经网络在有标注的图像数据集上进行训练,发现视觉数据中的潜在模式,并找出与分类、检测和分割最相关的突出特征。
尽管在计算要求和训练时间方面存在一定的牺牲,但深度学习模型的性能始终优于传统模型,并成为计算机视觉领域大多数持续进步的基础。
用于图像分割的主要深度学习模型包括:
为了不仅能映射图像片段的边界,还能预测每个片段所代表的 stuff 或 thing,深度学习模型需要在有标注的大型数据集上进行训练,以识别特定的语义类别。根据这些预先标记的图像,深度学习模型推断出每个标签的典型模式和像素值。
不同的任务需要不同的训练数据:自动驾驶汽车的计算机视觉系统根据标记有“人”、“汽车”、“车道”和“停车标志”等语义类别的图像进行训练,而医学成像模型则需要进行优化,以识别特定类别的物理组织或肿瘤和其他病变。
训练数据集必须由人类专家精心预标注,这可能非常费力。大多数图像分割模型都使用大型开源数据集。在评估训练过的模型是否成功时,这些公共数据集也用作“基本事实”:性能指标通常用与训练数据集中的标注准确匹配的结果百分比来表示。
深度学习图像分割模型的常用训练数据集包括:
图像分割已成为各个领域的重要工具。
现代计算机视觉系统在图像识别和分析方面拥有超人的准确性,但它们并不能真正理解所看到的东西。在 IBM Research,我们正在设计能够像我们一样看待世界的 AI 系统。
这门适合初学者的课程可帮助您了解计算机视觉及其在众多行业中的各种应用。作为课程的一部分,您将使用 Python、Pillow 和 OpenCV 进行基本图像处理并执行图像分类和对象检测。
开始使用 IBM Maximo Visual Inspection 创建和训练基于 AI 的模型,以检查您的资产和产品,并识别可能导致生产和质量问题的缺陷。