使用TensorFlow构建简单的图像搜索

ref*_*log 7 image-recognition computer-vision tensorflow

我需要使用TensorFlow在我的应用程序中实现简单的图像搜索.要求如下:

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

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

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

任何人都可以向我指出教程/代码,这些教程/代码可以解释如何实现这样的事情而不会过多地涉及计算机视觉术语吗?

非常感激!

raf*_*man 9

关于TinEye维基百科文章称,Perceptual Hashing将产生类似于TinEye的结果.他们参考了该算法的详细描述.但TinEye拒绝发表评论.


Perceptual Hashing方法的最大问题是虽然它可以有效地识别相同的图像(受到歪斜,对比度变化等),但它并不能很好地识别同一物体的完全不同的图像(例如汽车的前部)与汽车的一侧).

TensorFlow对深层神经网络有很大的支持,可以为您提供更好的结果.以下是如何在TensorFlow中使用深层神经网络来解决此问题的高级描述:

从预先训练的NN(例如GoogLeNet)开始,或者在ImageNet等数据集上自行训练.现在,我们正在尝试识别新的图片.将其输入NN.看一下NN中相当深层的激活.这种激活矢量就像是图像的"指纹".使用最近的指纹在数据库中查找图片.如果它足够接近,它可能是同一个对象.

这种方法背后的直觉是,与Perceptual Hashing不同,NN正在构建图像的高级表示,包括识别边缘,形状和重要颜色.例如,苹果的指纹可能包括有关其圆形,红色甚至小茎的信息.


您还可以尝试使用2012年的图像检索论文,它使用一系列精心挑选的功能,如SIFT,区域色彩矩和物体轮廓碎片.这可能是更多的工作,而不是TensorFlow最擅长的.


UPDATE

OP提供了一个来自他的应用程序的示例图像:

数据库中的图像 来自用户的图像. 应匹配数据库中的内容.

以下是在pHash.org网站上使用该对相似图像以及一对完全不同的图像的结果.

比较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似乎并没有做得很好.使用默认阈值时,它不会将类似图像视为相似.对于一种算法,它实际上认为完全随机的图像更相似.