返回

图像向量相似检索服务(一)——从向量相似度到图片相似度谈起

人工智能

当您听到“以图搜图”时,是否首先想到了百度、Google 、阿里等搜索引擎的以图搜图功能呢?事实上,完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到库中进行搜索,并得到与其相似的若干图片。

搭建自己的以图搜图系统并非难事,可以遵循如下四步来实现:

  1. 构建图片向量库: 将所有的图片特征按照一定的组织方式存储,这种特征就是指图片的向量形式。

  2. 选择一张图片进行搜索: 使用和图片库中图片相同的方式,提取查询图片的特征向量。

  3. 对查询图片向量和图片库向量集合进行比对: 计算查询图片向量与每个库中图片向量之间的相似度。

  4. 输出相似图片: 根据相似度由大到小输出最相似的图片。

在上述四步中,计算图片相似度 是整个系统中的关键。从数学的角度来说,计算图像相似度就是比较两个图像向量之间的相似性,直观来看就是判断这两个向量的“夹角”。如果夹角越小,两个向量越相似。反之,如果夹角越大,两个向量越不相似。

衡量夹角大小的函数有很多,比如:点积、内积距离和余弦相似度等。在以图搜图系统中,通常使用余弦相似度和内积距离来衡量图像相似度。

余弦相似度 的计算公式如下:

sim(x,y) = \frac{x \cdot y}{||x|| \cdot ||y||}

其中,xy分别是两个向量,||x||||y||分别是这两个向量的模,x \cdot y是这两个向量的点积。

内积距离 的计算公式如下:

d(x,y) = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + \cdots + (x_n - y_n)^2}

其中,xy分别是两个向量,x_iy_i分别是两个向量在第i个分量的值,n是向量的维度。

余弦相似度和内积距离的关系如下:

d(x,y) = \sqrt{2 - 2sim(x,y)}

由公式可以看出,余弦相似度和内积距离是互补的。余弦相似度越大,内积距离就越小,反之亦然。

在实际应用中,通常使用余弦相似度来衡量图像相似度。这是因为余弦相似度是一个归一化后的值,它不受图像大小和维度的影响。

使用视觉特征向量进行图像相似度检索的基本流程如下:

  1. 提取图像特征: 将图像转换为向量形式,通常采用CNN等深度学习模型提取图像特征。

  2. 构建图像向量库: 将所有图像的特征向量存储起来,形成图像向量库。

  3. 计算查询图片与库中图片的相似度: 使用余弦相似度或内积距离计算查询图片向量与每个库中图片向量之间的相似度。

  4. 输出相似图片: 根据相似度由大到小输出最相似的图片。

通过以上四步,就可以搭建一个属于自己的以图搜图系统了。