跳至主要内容

像机器一样“看”:机器学习中图像分析入门指南

了解计算机如何“看见”和解读图像、用于处理图像的技术,以及机器学习如何改变了这一领域。
· 15分钟 阅读

使用 AI 探索

图片和视频无处不在。作为人类,我们在驾车、认出朋友、诊断问题等诸多任务中依赖视觉。随着计算机愈发融入我们的日常工作,它们也需要能够利用图像。图像分析正是计算机“看见”和理解图像的方式。当图像分析由机器学习驱动时,我们称之为计算机视觉。

本教程将带您了解计算机如何“看见”图像,介绍图像处理的基础,最后讨论如何将机器学习和生成式 AI 应用于图像。让我们开始吧!

如果您对图像分类有兴趣,欢迎查看我们的基于 Hugging Face 的图像分类实操教学。

什么是计算机视觉?

计算机视觉是人工智能的一个领域,使计算机和系统能够从数字图像、视频以及其他视觉输入中提取有意义的信息。它是一门让机器能够“看”的科学与技术。作为一门科学学科,计算机视觉致力于将其理论和模型应用于计算机视觉系统的构建。

从本质上说,计算机视觉就是对视觉数据进行解读。它涉及数字图像的获取、处理、分析与理解,从现实世界中提取高维数据,生成可供机器使用的数值或符号信息。它融合了物理学、数学、电气工程和计算机科学等多个学科的方法与技术。

图像分析入门

在最低层面,计算机以 1 和 0 运行。处理图像时也不例外。计算机可以将图像表示为由 1 和 0 组成的矩阵。当计算机显示图像时,它会显示一个像素网格,每个像素填充一种颜色。以一个非常简单的形状为例,比如下面的黑色三角形。

Figure 2: Black triangle with each pixel outlined.

图 1:一个由 28 个像素组成的简单低分辨率三角形。

这个形状由 28 个像素组成:16 个黑色像素和 12 个白色像素。您可以在下图中看到每个像素的轮廓。

图 2:每个像素都勾勒出的黑色三角形。

但这幅图像只是计算机中存储的数字矩阵的一种呈现。

Figure 3: A demonstration of the 1's and 0's in the matrix that makes up the triangle image.

图 3:组成三角形图像的矩阵中 1 与 0 的示意。

对于只有两种颜色(黑与白)的图像,这相当简单。如果图像是灰度的,您就需要更细腻的表示。此时,方格中的数字可能会变成类似 0.015 的数值。这个数字本质上告诉计算机在屏幕上给每个像素怎样的亮度。它定义了黑(1)与白(0)之间的一个取值。

分析彩色图像

但图像很少如此单调。计算机如何处理彩色图像?让我们把这个三角形变成绿色!

Figure 4: The same 28-pixel triangle as before, but with a splash of color!

图 4:同样是先前的 28 像素三角形,但加入了颜色!

在这种情况下,您无法用 0 到 1 之间的一个数字来描述这种颜色。可用的颜色太多,无法实际而直观地为每种颜色分配一个单独的数字。

相反,人们开发了若干体系,将颜色的各个组成部分拆分开来,并为每个分量赋值。

例如,您可能听说过 RGB。这是一种颜色模型,将每种颜色分解为构成目标颜色的红、绿、蓝三部分的量。

RGB 模型源于使用带有红、绿、蓝像素的屏幕(如电视)。该模型支持这些设备中光的加色混合方式。

在这个系统中,红、蓝、绿被称为“通道”。对于 8 位图像,每个通道的取值为 0 到 255(即 8 位二进制数可表示的最大值)。

让我们看看这对我们的绿色三角形意味着什么。

这种绿色的 RGB 值分别为 154、205 和 50。请注意,如果是纯绿,红色和蓝色通道都会是 0。这个 RGB 表示告诉我们:为了得到这种绿色,混入了相当多的红色和少量的蓝色。每个像素都有三个通道的数值来描述它。每个绿色像素表示为 154、205、50,而每个白色像素表示为 0、0、0。

这意味着这个简单的 28 像素绿色三角形由三个 7x4 的矩阵表示。

您可以想象这三个矩阵相互叠加以生成这幅图像。

Figure 5

图 5:对于这个简单的绿色三角形,RGB 颜色系统中的每个颜色通道都包含一个表示图像的像素值矩阵。组合在一起,这三个矩阵叠加形成这一幅图像!

您可以看到,如果每个像素都需要三个数值来定义,图像会很快占据大量的计算机空间。不妨想想一张高分辨率图像(例如 4K 图像,具有 4,000 个像素)由多少个数字构成。

RGB 并不是为图像赋色的唯一体系。您可能听说过 CYMK,它用四个数字来描述每种颜色。该模型使用青、品红、黄和黑四种颜色。这在需要减色模型的场景(例如印刷)中很有用。

每种颜色体系都有各自的优缺点。如果在图像分析时遇到内存问题,值得花些时间研究几种方案。在本教程中,我们将坚持使用 RGB。

那么,这些像素值矩阵可以用来做什么呢?

手动图像分析技术

用阈值法分离对象

计算机如何判断哪些像素代表一张人脸或其他物体?如今,这类识别工作很多是通过机器学习模型完成的。但要理解它们,先了解如何手动在图像中分离出一个目标会很有帮助。

想象您有一段两只蜥蜴在浅色背景上的视频。为简化问题,您将视频转为灰度,这样只需考虑一个通道。您希望在视频中跟踪蜥蜴的运动。

视频就是一系列照片(或帧)的堆叠。因此,第一步需要将这堆帧拆开,一次处理一张照片。现在您有了一张灰度照片,需要告诉计算机照片中哪些部分是蜥蜴,哪些不是。

理论上,您可以用鼠标指向构成蜥蜴的每一个像素,并将其标记为“蜥蜴”。但考虑到大多数照片的分辨率以及视频由许多照片构成,这显然不现实。

相反,您可以制定一条规则,告诉计算机什么是蜥蜴、什么不是。最简单的方法就是阈值法。

Figure 6: To simplify things, we'll work with this photo in grayscale.

图 6:为简化问题,我们将使用这张灰度照片。

什么是阈值法?

阈值法是基于分配给每个像素的数值对图像进行分割的过程。再看这张蜥蜴的灰度图。注意蜥蜴比背景更暗。在许多图像中,我们要分离的对象与其背景在亮度上存在差异。

阈值法利用这种亮度差异来找到目标(本例中为蜥蜴)的边界。该技术旨在定义一个阈值亮度,将亮像素与暗像素分开。

创建二值图像

想象一下定义这张灰度图像的数字矩阵。每个像素由 0 到 255 之间的数字定义。

通过阈值法,您可以定义一条规则:足够暗的就是蜥蜴。例如,您可以规定,任何像素值在 130 或以上的是蜥蜴,低于 130 的不是蜥蜴。

技术上,您会将阈值及以上的像素设为 255,将其他像素设为 0。这会创建一幅只含黑白像素的二值图。如果您选择了合适的阈值,蜥蜴将以黑色呈现在白色背景上。

Figure 7: Binary image generated by setting a threshold of 130.

图 7:将阈值设为 130 生成的二值图像。

在这个例子中,我们只是随意选择了一个数值 130 作为阈值。然而,要准确分离出蜥蜴,您应选择一个能尽可能覆盖大多数蜥蜴像素、同时尽量减少非蜥蜴像素的数值。

为整幅图选择一个阈值的过程称为全局阈值法。这是一种粗略的分离方式,往往并不完美。如果您有一只被完美剪影出的蜥蜴置于纯白背景上,全局阈值会非常有效。但正如本例所示,真实图像很少如此理想。您可能需要更复杂的阈值方法。

其中一种方法称为局部阈值法。在这种技术中,您为图像的不同部分选择不同的阈值。这在背景存在光照梯度时尤其有用。还有许多其他不同复杂度的优化方法,选择何种方法取决于您的具体情况。

对彩色图像也可以进行阈值分割。但要复杂得多,超出了本教程的范围。

形态学分析

虽然阈值法在分离蜥蜴方面能起到很大作用,但并不完美。您可能仍会把部分背景误判为蜥蜴,或丢失蜥蜴的部分像素。您需要另一种工具进一步分离目标。使用阈值法时,您基于颜色或亮度定义规则。现在,您将基于形状,用形态学操作来定义规则。

用结构元素定义形状

形态学操作使用结构元素来确定形状的边界。结构元素是一个具有特定形状的小矩阵,通常是方形、圆形或十字形。您也可以改变结构元素的大小以获得不同效果。

在形态学操作中,每个像素都会与该形状范围内的邻居进行比较。有两种基本的形态学操作可用于定义目标对象的形状:膨胀和腐蚀。

膨胀

在膨胀中,如果结构元素范围内的任一邻域像素是暗的(在此为 1),则目标像素会被置为 1 以匹配。

想象拿着一个方形放大镜在数字网格上移动。将某个数字置于方形中央,然后查看方形范围内的其他数字。如果其中有任何一个是 1,那么无论中心数字起初是什么,都将其标记为 1。

通过这种方式,膨胀可以扩展对象的边界或填补空洞。

腐蚀

腐蚀与膨胀的机制相同,但效果相反。进行腐蚀时,如果某个像素的任一邻居为 0,则该像素会被改为 0。这样可以分离对象、降低噪声并细化边界。

Figure 8

图 8:使用十字形结构元素进行膨胀与腐蚀的可视化示例。在该示例中,我们只对矩阵的第二行执行了形态学操作。在真实图像中,将应用于每个像素。即便如此,您仍可看到腐蚀使线条边缘分离,而膨胀使其变粗。

您可以看到膨胀和腐蚀如何改变二值化后的蜥蜴图像。

图 9:将腐蚀与膨胀应用于蜥蜴照片的示例。此处使用的结构元素为 6x6 的方形。

结合膨胀与腐蚀

膨胀与腐蚀可以迭代或按顺序使用,以调整最终结果。通常会将两者结合使用,以进一步明确分离出的图像。

当先腐蚀后膨胀时,小的凸起和噪声会被去除,剩余的轮廓得到强化。这种技术称为开运算。

当先膨胀后腐蚀时,小孔洞和缝隙被填补,边缘得到整洁化。这种技术称为闭运算。

Figure 10: Demonstration of opening and closing techniques using a 6x6 square structuring element on the lizard photo.

图 10:在蜥蜴照片上用 6x6 方形结构元素演示开/闭运算。

您会发现,这些图像都还未能完全把蜥蜴从背景中分离开来。但通过不断微调与迭代,可以越来越接近目标。

在下一步迭代中,您可以让计算机忽略在某个尺寸范围之外的任何对象。这样可以去除大多数噪点而保留蜥蜴。想自己动手实践,请参阅 DataCamp 上的Python 图像处理课程!

对于每张图像或图像序列,您都可以设置这样一系列规则,告诉计算机目标的样子。然后计算机就能据此作出决策。

这些决策会影响从识别星系到发现病变组织等方方面面。但为每张图片逐一制定规则既耗时又繁琐。这正是机器学习大显身手之处。

用于图像分析的监督式机器学习

训练监督式 ML 模型

如您所见,手动分析图像可能非常费力,因为变量众多。幸运的是,机器学习(ML)可以帮助自动化这一过程。想深入了解机器学习,您可以查看基于 Python 的机器学习科学家学习路径或监督式机器学习。本教程只会简要介绍理解图像处理所需的机器学习要点。

机器学习大致分为两类:监督式 ML 和无监督式 ML。

在监督式 ML 中,您会事先给计算机大量图像并为其贴好标签。这有点像通过指着动物说“这是大象”来教婴儿认识动物。婴儿需要自己总结我们称为“大象”的东西与称为“鱼”的东西的共同模式。

在监督式 ML 中,计算机所做的工作与这个婴儿类似。

Figure 11

图 11:DALL·E 生成的图片:母亲指着玩具动物教婴儿它们的样子。监督学习的方式类似,提供带有正确答案的示例。

标注与特征提取

假设您要训练一个机器学习模型来识别它从未见过的图像中的对象。训练这个监督式模型的第一步是为一组图像(称为训练数据集)进行标注和贴标签。标注涉及在图像中手动识别并标记感兴趣的区域。

例如,如果我们要训练一个模型对不同类型的动物进行分类,我们会通过勾勒图中出现的动物并为其分配相应的类别标签(如“牛”“猫”等)来标注每张图像。这个带标注的数据集将成为训练模型的基础。也有许多已经标注好的公开数据集可供您使用。

拥有带标签的训练数据集后,您需要从图像中提取相关特征。特征提取是指识别并捕捉能区分各类别的重要特征或模式。

在我们的动物例子中,您可能会将“有四条腿且带斑点”定义为奶牛的重要特征。

卷积神经网络

用于图像处理中进行特征提取的技术很多,从简单的方法(如颜色直方图、纹理描述符)到更高级的方法(如卷积神经网络,CNN)。

CNN 是一种流行的监督学习算法,它在训练过程中能够从带标签的图像中自动学习重要特征和模式。它由多层组成,每一层对图像数据执行特定操作。

卷积层通过应用滤波器来捕捉局部模式,池化层用于降低空间维度,全连接层则整合前面各层的信息。通过这些顺序操作,网络提取并组合特征,从而对图像内容做出准确判断。

选择架构

训练监督式 ML 模型(如 CNN)的过程包含多个步骤。首先需要对数据进行预处理,以确保一致性和质量。这可能涉及调整图像尺寸、归一化像素值,以及通过旋转、翻转等变换来扩充数据集以增加多样性。

接下来,您将设计 CNN 模型的架构。本质上,架构就是您使用的各类层的数量与类型,以及它们的配置。架构应在复杂度与简洁性之间取得平衡,使模型既能捕捉到关键特征,又能避免过拟合。以成熟架构为起点,并根据需求微调,通常是有益的。您可以在外部资源中找到一份实用的架构清单。

Figure 12: Simple example CNN architectures.

图 12:简单的 CNN 架构示例。

过拟合

过拟合是指计算机在给训练数据集中的图像贴标签方面表现得非常好,但对训练集之外的图像识别不准。

这通常是因为计算机捕捉到了我们在人为构建训练集时无意引入、但并不代表真实世界的偏差(例如大多数猫的图片背景是蓝色)。有许多技术可以防止模型死记硬背训练数据,转而学习更具泛化性的模式。

训练监督式 ML 模型

一旦模型架构确定,您需要初始化模型参数并开始训练。

在训练过程中,模型通过梯度下降等优化技术迭代调整参数,以最小化其预测与您先前定义的真实标签之间的差异。

这一过程涉及计算损失函数(量化模型预测误差)并据此更新参数。

训练用于图像分析的监督式 ML 模型是一个迭代过程。您使用带标签的数据集训练模型,在验证集上评估其性能,并进行调整以提升准确率。这个迭代循环会持续进行,直到模型达到令人满意的结果。

监督式 ML 模型在图像分析中的应用

一旦监督式 ML 模型在带标签的图像数据上完成训练,就可以应用于多种图像分析任务。以下是一些常见应用,展示了监督式 ML 模型在图像处理任务中的效果。

图像分类

图像分类是一项基础任务,目标是为输入图像分配一个标签或类别。

例如,可以训练一个监督式 ML 模型,将动物图像分类到不同类别,如“鱼”“蜥蜴”或“甲虫”。

Figure 13: An example of image classification. This image has been classified as “Dinner.”

图 13:图像分类示例。此图像被分类为“晚餐”。

通过学习一个包含多样化带标签示例的数据集,模型可以泛化并以较高准确率进行分类。该技术可用于医疗图像中的疾病识别、卫星图像中的目标识别,甚至从面部表情中分类情绪。更多详情可查看这场 DataCamp 网络研讨会。

目标检测

目标检测是监督式 ML 模型在图像分析中的另一重要应用。不同于图像分类,目标检测不仅要识别图像中出现的对象,还要通过绘制边界框来定位它们。

这一过程使模型能够识别图像中多个感兴趣的对象。

Figure 14: An example of object detection. Various objects within this image have been identified.

图 14:目标检测示例。图像中的多个对象已被识别。

目标检测的应用包括自动驾驶(检测并跟踪行人、车辆与交通标志)以及用于识别与跟踪人员或感兴趣对象的安防系统。Facebook 和 Instagram 在识别照片中您的面孔时也会使用这种方法。

监督式 ML 模型的挑战

尽管监督式 ML 模型在图像分析中的能力令人印象深刻,但也存在一些需要注意的限制与挑战。

一大挑战是需要大量带标签的训练数据。为图像进行标注和贴标签既耗时又资源密集。

监督式 ML 模型也对训练数据中的偏差敏感,可能导致有偏预测或不公平的结果。将模型适配到新领域或新的图像类别,可能需要额外训练或微调。

此外,解释像 CNN 这样复杂模型所学习到的表示和决策过程也具有挑战性,这使得理解模型为何做出某个预测变得更困难。

尽管存在这些挑战,监督式 ML 模型仍在不断推动图像分析的边界,促成在医疗、农业与安全等领域的显著进步。

随着该领域研究与开发的推进,解决这些挑战并优化模型将为更准确、可靠的图像处理方案铺平道路。

用于图像分析的无监督式机器学习

使用无监督学习

与监督学习相对的是无监督式机器学习。不同于依赖带标签数据的监督学习,无监督学习旨在从数据本身发掘潜在的模式、结构或关系。

无监督学习在图像分析中的目的,是从未标注的图像数据中发现有意义的结构与洞见。通过使用无监督学习技术,您可以提取有价值的信息,更深入地理解图像的内在特征。

无监督学习可以帮助识别相似图像的聚类、发现某些图像类别所特有的模式或纹理,并检测数据中的异常或离群点。

无监督学习有何不同

如果说监督学习像是告诉婴儿什么是牛、什么是鱼,那么无监督学习就像是给婴儿一堆动物,让 TA 按自己的方式分类。TA 可能会按大小、腿的数量、质地或颜色来分组。

最终结果可能与按物种分组相似,也可能大不相同!但研究所得分组的特征,仍能带来有用的信息。

Figure 15: DALL-E generated image of a baby sorting animal toys in an unsupervised learning environment.

图 15:DALL·E 生成的图片:婴儿在无监督学习情境下分类动物玩具。

使用无监督 ML 模型进行图像分析

无监督式机器学习模型通过在无需标签数据的情况下对图像进行分箱或分组,为图像分析带来了令人兴奋的可能性。

想象您拥有一个庞大的图像集合,希望将其组织成有意义的分组。无监督 ML 模型可以分析图像的视觉特征,并根据共享的特征(如颜色或形状)对其分组。这能提供有价值的洞见,并简化图像分析任务。

聚类算法

聚类算法根据共享特征将相似的图像分到一起。一种广泛使用的聚类算法是k-means 聚类,它通过迭代最小化集合中各图像之间的数学距离,将数据划分为预先确定数量的簇。

层次聚类是另一种方法,它通过基于相似度递归地合并或拆分集合,构建图像集合的层次结构。这些聚类算法能帮助我们在未标注的图像数据集中发现自然分组,从而洞察图像的相似性与多样性。

图像分割

无监督学习在图像分割(将图像划分为有意义的区域或对象)方面尤为有用。

通过应用聚类技术或其他无监督方法,您可以根据颜色、纹理或其他特征将图像分成不同区域。

此技术可用于医学成像中寻找肿瘤、用于卫星图像的地物覆盖分类,或用于计算机图形学中提取前景与背景元素。

模式识别

模式识别是无监督学习擅长的另一个领域。

无监督学习算法可以学习到能够捕捉数据中潜在模式或结构的表示或特征。通过提取这些学习到的特征,可以根据共享的模式或视觉相似性对图像进行分类或分组。这使得图像检索或图像合成等任务成为可能。

异常检测

无监督学习也常用于异常检测。通过学习数据集的正常模式或特征,无监督算法可以识别那些与多数样本不同的图像或区域。这在安防等领域尤为有用,检测异常或可疑活动有助于安全监控。

无监督 ML 模型的挑战

无监督学习也面临自身的一系列挑战。其中一大挑战是理解结果,因为没有可供对照的真实标签或带标签数据。

回到动物分类的例子,您最终可能得到一个类别,其中包含棕色的马、甲虫和章鱼,而另一个类别则包含白马、兔子和花。由于您没有指定分类方式,得到的分组可能并不那么有意义。

评估无监督 ML 模型所发现的聚类或模式的质量与准确性,可能具有挑战性。

无监督 ML 模型的优势

无监督 ML 模型在图像处理中具有多项优势。最重要的是,它们不需要大量的人工标注,从而更轻松、更具成本效益地处理大规模图像数据集。

想象一下要手动筛选并标注 Instagram 上的每一张图片。无监督式机器学习模型免除了如此漫长且劳累的工作。

无监督 ML 模型还可以揭示数据中隐藏的模式与结构,使人们能够挖掘新的洞见,发现不易被立即察觉的视觉关系。

这种探索性的特质为图像分析开辟了新途径,并可能在太空探索、机器人技术与医疗等各个领域带来突破。

 

监督式 ML

无监督式 ML

任务

  • 图像分类
  • 目标检测
  • 模式识别
  • 异常检测

优势

  • 结果更可预期且更有意义
  • 可用于较小数据集
  • 劳动强度更低
  • 可揭示隐藏模式与新的洞见

劣势

  • 劳动强度更高
  • 对训练数据中的偏差敏感
  • 得到的分组可能不够有意义
  • 结果可能出乎意料

图 16:监督式与无监督式机器学习在图像处理中的对比。

用生成式 AI 生成新图像

一旦模型确定了图像中不同对象的特征,就可以利用这些信息来生成新图像。

DALL·E 和 Midjourney 是利用生成式建模来生成新图像的无监督 ML 模型中的代表。通过在海量数据集上训练,这些模型学习了创建具有特定类别特征的图像所需的组成要素。

因此,如果您让 DALL·E 生成一幅机器人熊猫的图像,模型会根据其内部对“机器人”和“熊猫”的定义,将这些要素组合起来,生成您所请求的图像。

例如,它可能判断机器人具有金属与齿轮,而熊猫是黑白相间。它会据此为您生成一只黑白金属、带齿轮的熊猫机器人。

Figure 17: DALL-E generated image using the prompt 'Panda Robot'.

图 17:DALL·E 根据提示“Panda Robot”生成的图像。

结论

本教程从高层次探索了图像分析,旨在帮助您更好地理解其在机器学习中的作用。现在,您应当更直观地理解计算机如何“看见”与处理图像,并对诸如预处理、特征提取与分类算法等关键机器学习概念有基本认识。

图像处理在我们的生活中发挥着巨大作用,从社交媒体到医学成像、从太空探索到安防监控。如果您有兴趣进一步深入这一迷人主题,欢迎在 DataCamp 上查看Python 图像处理、用 Keras 进行 Python 图像处理以及基于 PyTorch 的图像深度学习等内容。

Amberle McKee

作者

Amberle McKee

我拥有博士学位,在生物研究环境中从事数据相关工作已有13年。我使用包括 Python、MATLAB 和 R 在内的多种编程语言开发软件。我热衷于与世界分享我对学习的热爱。

主题