【问题标题】:Building a simple image search using TensorFlow使用 TensorFlow 构建简单的图像搜索
【发布时间】:2016-07-14 16:37:19
【问题描述】:

我需要使用 TensorFlow 在我的应用中实现一个简单的图像搜索。 要求如下:

  1. 数据集包含大约一百万张图片,所有图片大小相同,每张图片都包含一个唯一对象并且仅该对象。
  2. 搜索参数是使用手机摄像头拍摄的可能在数据集中的某个对象的图像。

我已经设法从相机图片中提取图像并将其拉直为矩形,因此,像 TinEye 这样的反向搜索图像索引器能够找到匹配项。

现在我想通过使用 TensorFlow 根据我的数据集创建模型来重现该索引器(使每个图像的文件名成为唯一索引)。

谁能给我指点教程/代码来解释如何在不深入研究计算机视觉术语的情况下实现这样的事情?

非常感谢!

【问题讨论】:

  • 为什么要使用 TensorFlow?虽然深度学习是解决许多计算机视觉问题的好工具,但它可能不是图像搜索的正确解决方案。
  • 我愿意接受建议:)
  • 标准方法是:提取局部特征(SIFT或SIFT之类)->计算视觉词->搜索具有相似视觉词的图像(类似于文档搜索)。可选地使用单应性(或其他几何模型)验证匹配。您可以在线查找词袋图像搜索

标签: computer-vision tensorflow image-recognition


【解决方案1】:

Wikipedia article on TinEye 表示Perceptual Hashing 将产生类似于 TinEye 的结果。他们引用this detailed description of the algorithm。但是TinEye refuses to comment.


Perceptual Hashing 方法的最大问题是,虽然它在识别相同图像时很有效(受歪斜、对比度变化等影响),但在识别同一物体的完全不同图像时却不是很好(例如正面汽车的侧面与汽车的侧面)。

TensorFlow 对深度神经网络有很好的支持,这可能会给您带来更好的结果。以下是关于如何在 TensorFlow 中使用深度神经网络来解决此问题的高级描述:

从预训练的 NN(例如 GoogLeNet)开始,或者在 ImageNet 等数据集上自行训练。现在我们得到了一张我们正在尝试识别的新图片。将其输入NN。看看神经网络中一个相当深的层的激活。这个激活向量就像图像的“指纹”。在您的数据库中找到指纹最接近的图片。如果它足够接近,它可能是同一个对象。

这种方法背后的直觉是,与感知散列不同,NN 正在构建图像的高级表示,包括识别边缘、形状和重要颜色。例如,一个苹果的指纹可能包含关于它的圆形、红色,甚至是它的小茎的信息。


您也可以尝试使用this 2012 paper on image retrieval 之类的方法,它使用一系列精选特征,例如 SIFT、区域色矩和对象轮廓片段。这可能需要更多的工作,而这并不是 TensorFlow 最擅长的。


更新

OP 提供了他的应用程序中的一对示例图像:

这是在这对相似的图像以及一对完全不同的图像上使用the demo on the pHash.org website 的结果。

比较 OP 提供的两张图片:

RADISH(径向散列):pHash determined your images are not similar with PCC = 0.518013

DCT 哈希:pHash determined your images are not similar with hamming distance = 32.000000.

Marr/墨西哥帽子小波:pHash determined your images are not similar with normalized hamming distance = 0.480903.

将他的一张图片与我机器中的一张随机图片进行比较:

RADISH(径向散列):pHash determined your images are not similar with PCC = 0.690619.

DCT 哈希:pHash determined your images are not similar with hamming distance = 27.000000.

Marr/墨西哥帽子小波:pHash determined your images are not similar with normalized hamming distance = 0.519097.

结论

我们必须测试更多图片才能真正了解。但到目前为止,pHash 似乎做得并不好。使用默认阈值,它不会认为相似的图像是相似的。而对于一种算法,它实际上认为完全随机的图像更相似。

【讨论】:

  • 我想知道他们使用的是什么感知哈希,因为我尝试了 pHash 开源项目,结果很糟糕......
  • 您能否分享一个链接、代码或有关您构建的内容和获得的结果的更多详细信息?
  • 这里:imgur.com/a/be89U 第一张图片是数据库中的一张,第二张是我要找的一张
  • 谢谢!在这两个图像上运行 PHash 会得到什么结果?
【解决方案2】:

https://github.com/wuzhenyusjtu/VisualSearchServer 它是使用 TensorFlow 和 InceptionV3 模型进行相似图像搜索的简单实现。该代码实现了两种方法,一个处理图像搜索的服务器,以及一个基于提取的 pool3 特征进行最近邻匹配的简单索引器。

【讨论】:

  • 链接失效
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2013-01-13
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多