在计算机视觉领域,嵌入技术的应用日益广泛。本文将通过分析图像聚类、评估数据集质量和识别图像重复来探讨嵌入技术在计算机视觉中的应用。创建了一个可以在Google Colab中运行的笔记本,可以在阅读本文的同时在新标签页中运行它,以便实时实验和探索所讨论的概念。让开始吧!
基于像素亮度的MNIST图像聚类
在深入涉及OpenAI CLIP嵌入的例子之前,让先从一个较简单的数据集开始——基于像素亮度的MNIST图像聚类。MNIST数据集包含60,000张28x28像素的灰度手写数字图像。由于灰度图像中的每个像素可以用单一值描述,因此有784个值(或特征)来描述每张图像。目标是使用t-SNE和UMAP将维度数量减少到三个,以便在3D空间中显示图像聚类。
为了实现这一点,首先需要加载每个类别的图像,并将数据重塑为t-SNE可以处理的格式(一个具有784个特征的2D NumPy数组)。在处理高维数据时,可视化和理解数据的底层结构和关系变得越来越困难。降维技术,如t-SNE和UMAP,是简化这些复杂数据集的重要工具,使它们更易于管理和解释。
t-SNE与UMAP的比较
t-SNE和UMAP都是用于高维数据降维和可视化的流行技术。然而,它们之间存在一些关键差异。UMAP以其计算效率和可扩展性而闻名,这使得它能够比t-SNE更快地处理更大的数据集。在简单测试中,使用5,000张图像,UMAP的速度几乎是t-SNE的3倍。此外,UMAP旨在更好地保留全局结构,而t-SNE主要关注维护数据点之间的局部关系。在实践中,选择t-SNE和UMAP之间可能取决于任务的具体需求和约束,例如数据集大小、计算资源以及局部和全局结构保留之间的期望平衡。
使用OpenAI CLIP分析数据集类别分布
像素亮度对于MNIST数据集是一个合适的特征,因为它包含简单的灰度手写数字图像,其中数字与背景之间的对比度是最重要的方面。然而,对于常规图像,仅依赖像素亮度是不够的。这些图像有数百万像素,具有不同的颜色通道,并包含更复杂和多样化的视觉信息。在这种情况下,使用像素亮度作为主要特征将无法捕捉图像中对象的复杂细节、纹理和关系。
CLIP嵌入通过提供更抽象和紧凑的图像表示来解决这个问题,有效地编码了高级视觉和语义信息。这些嵌入是由一个强大的神经网络生成的,该网络在多样化的图像上进行训练,使其能够从复杂的现实世界照片中学习有意义的特征。通过使用CLIP嵌入,可以高效地处理高分辨率图像,同时保留其基本的视觉和语义特征,以用于各种计算机视觉任务。可以使用CLIP Python包或直接从Roboflow搜索获取CLIP嵌入。
使用嵌入识别相似图像
嵌入还可以用来识别相似或接近相似的图像。通过比较嵌入向量,可以使用余弦值来衡量两幅图像之间的相似性。这个值的范围从-1到1,为图像相似性提供了定量表示。在计算机视觉向量分析的背景下,余弦值为1表示高度相似,值为-1表示不相似,值为0则表示正交性,意味着图像没有共同特征。通过利用这一见解,可以有效地根据它们的余弦值识别和分组相似图像,同时区分那些不相关或正交的图像。
在搜索相似图像的过程中,首先将图像嵌入结构化为一个2D NumPy数组,其维度为N x M,其中N代表分析的图像数量,M表示个别嵌入向量的大小——在例子中是768。在计算余弦相似性之前,对这些向量进行归一化至关重要。向量归一化是将向量缩放到单位长度的过程,这确保了余弦相似性仅测量向量之间的角距离,而不是它们的大小。有了归一化的向量,可以使用向量化有效地计算所有图像对的余弦相似性,使能够有效地识别和分组相似图像。
OpenAI CLIP嵌入是计算机视觉工具箱中的一个非常强大的工具。随着向前发展,计划探索更多的用例,测试新模型(除了CLIP之外),并深入研究嵌入的世界,以帮助在快速发展的计算机视觉领域解锁更多可能性。请继续关注未来的帖子,将继续推动界限并揭示利用嵌入力量的新方法。