谷歌的“按图片搜索”网站使用什么算法?

信息处理 图像处理 计算机视觉
2021-12-27 21:20:28

您对 Google 图片搜索的工作原理的最佳猜测是什么?我可以上传照片并可以搜索类似的图像。它使用什么算法来识别相似的图像?

3个回答

我不知道谷歌使用哪种算法。但是,既然你想要一个最好的猜测,让我给出一些关于如何构建类似系统的想法。

处理按图像搜索图像的整个领域称为基于内容的图像检索 (CBIR)这个想法是,以某种方式构建包含有关图像内容的信息的图像表示(人类不一定可以理解)

存在两种基本方法:

  • 使用低级(局部)特征进行检索:图像特定部分的颜色、纹理、形状(图像是局部特征描述符的集合)
  • 语义方法,其中图像以某种方式表示为对象及其关系的集合

低级本地方法得到了很好的研究。当前最好的方法提取局部特征(这里涉及到特征提取算法的选择)并使用它们的局部描述符(再次,描述符的选择)来比较图像。

在较新的作品中,首先对局部描述符进行聚类,然后将聚类视为视觉词——该技术与谷歌文档搜索非常相似,但使用视觉词而不是字母词。

您可以将视觉词视为语言中词根的等价物:例如,单词:work、working、work都属于同一个词根。

这些方法的缺点之一是它们通常在低纹理图像上表现不佳。

我已经给出并看到了很多详细说明这些方法的答案,所以我只提供这些答案的链接:


语义方法通常基于整个图像的层次表示。这些方法尚未完善,尤其是对于一般图像类型。将这类技术应用于特定图像领域取得了一些成功。

由于我目前正在研究这些方法,因此无法得出任何结论。现在,也就是说,我在这个答案中解释了这些技术背后的一般概念。

再一次,很快:一般的想法是用树形结构表示图像,其中叶子包含图像细节,并且可以在更靠近此类树根的节点中找到对象。然后,不知何故,您比较子树以识别不同图像中包含的对象。

以下是不同树表示的一些参考。我没有阅读所有这些,其中一些使用这种表示来进行分割而不是 CBIR,但是,它们仍然是:

除了佩内洛普的答案之外,还有两种方法,感知散列和词袋模型,它们的基本功能很容易实现,因此在进入更高级的领域之前很容易玩或学习。

感知散列

感知散列算法旨在构造一个散列,与加密散列不同,它将为相同图像提供相似或接近相似的散列值,这些图像已被轻微扭曲,例如通过缩放或 JPEG 压缩。它们在检测图像集合中的重复附近时很有用。

以最基本的形式,您可以按如下方式实现:

  1. 将图像转换为灰度

  2. 使您的图像零均值

  3. 将您的图像压缩到缩略图大小,例如 [32x32]
  4. 运行二维离散余弦变换
  5. 保留左上角 [8 x 8],最重要的低频分量
  6. 根据组件的符号对块进行二值化

结果是有弹性的 64 位散列,因为它基于图像的低频分量。这个主题的一个变体是将每个图像分成 64 个子块,并将全局图像均值与局部子块均值进行比较,并相应地写出 1 或 0。

感知散列例如通过phash实现

词袋模型

词袋模型旨在从语义上识别图像,例如所有带有狗的图像。它通过使用某些图像补丁来做到这一点,就像人们根据某些单词的出现对文本文档进行分类一样。可以对单词进行分类,例如“dog”和“dogs”,并将它们作为标识符存储在倒排文件中,其中“dog”类别现在指向包含“dog”或“dogs”的所有文档。

在其最简单的形式中,可以对图像执行以下操作:

  1. 部署所谓的 SIFT 特征,例如使用优秀的vlfeat库,它将检测 SIFT 特征点和每个点的 SIFT 描述符。该描述符基本上是围绕该特征点的图像块的智能构造模板。这些描述符是您的原始单词。
  2. 收集所有相关图像的 SIFT 描述符

您现在拥有大量 SIFT 描述符。问题是,即使来自几乎相同的图像,描述符之间也会存在一些不匹配。您希望将相同的词组合在一起或多或少就像对待某些词一样,将“狗”和“狗”视为相同,并且您需要补偿错误。这就是集群发挥作用的地方。

  1. 获取所有 SIFT 描述符并对它们进行聚类,例如使用 k-means 等算法。这将在描述符数据中找到预定数量的具有质心的集群。这些质心是您的新视觉词汇。
  2. 现在,对于每个图像及其原始找到的描述符,您可以查看这些描述符被分配到的集群。由此,您知道哪些质心或视觉词“属于”您的图像。这些质心或视觉词成为图像的新语义描述符,可以存储在反转文件中。

图像查询,例如找到与查询图像相似的图像,然后解析如下:

  1. 在查询图像中查找 SIFT 点及其描述符
  2. 将查询描述符分配给您之前在注册阶段找到的质心。您现在有一组与查询图像相关的质心或视觉词
  3. 将查询视觉词与倒排文件中的视觉词匹配并返回匹配的图像

在上述答案中似乎被忽略的另一种有趣的方法是深度卷积神经网络。谷歌现在似乎正在将它用于其图像搜索引擎翻译服务CNN 在相似性发现等认知任务中非常强大。看起来,CNN 执行了类似的 Bag-of-worlds 程序,该程序通过其网络层嵌入。这种技术的缺点是无法学习和训练需要大量数据集,当然训练阶段的计算成本也很高。

关于这方面的建议论文:

以及开源深度学习图像检索实现(后面的论文): https ://github.com/paucarre/tiefvision