使用 TensorFlow 进行图像相似度检测
Posted
技术标签:
【中文标题】使用 TensorFlow 进行图像相似度检测【英文标题】:Image similarity detection with TensorFlow 【发布时间】:2017-04-01 11:02:30 【问题描述】:最近我开始玩 tensorflow,同时尝试学习流行的算法,我需要找到图像之间的相似性。
图像 A 由我提供给系统,用户 x 提供图像 B,如果图像 B 相似(颜色和类别),系统应将图像 A 检索给用户 x。
现在我有几个问题:
-
我们认为这种情况是监督学习吗?我在问
因为我不认为这是一个分类问题(困惑!!)
我应该使用什么算法来训练等等。
应该经常进行重新训练,我应该如何解决这个问题
问题所以我不会每次都从头开始训练(微调??)
【问题讨论】:
图片A看不懂,图片A的作用是什么? 图像 A 由我提供给系统,用户 x 提供图像 B,如果图像 B 与 A 相似(颜色和类别),系统应将图像 A 检索给用户 x。 对于其他最终来到这里的人,我写了一篇关于使用 TensorFlow 测量图像相似度的用户友好型博文:douglasduhaime.com/posts/… 【参考方案1】:我们认为这种情况是监督学习吗?
当你有标签来优化你的模型时,它就是监督学习。所以对于大多数神经网络来说,它是有监督的。
不过,您也可以查看完整的任务。我猜你没有图像对的任何基本事实以及你的模型应该输出的“期望”相似度值?
解决这个听起来本质上是无监督的问题的一种方法是采用在 1000 类图像网络上训练(以有监督的方式)训练的 CNN(卷积神经网络)。要获得两个图像的相似性,您可以简单地获取输出概率分布的欧几里德距离。这不会导致出色的结果,但可能是一个很好的开始。
我应该使用什么算法来训练等等。
首先,您应该定义“相似”对您意味着什么。当它们包含相同的对象(类)时,两个图像是否相似?如果图像的总体颜色相同,它们是否相似?
例如,以下 3 对图像的相似度如何?
查看FaceNet 并搜索“基于内容的图像检索”(CBIR):
Wikipedia Google Scholar【讨论】:
感谢您的回答。基本上,当我说“相似”时,我指的是图像的类别和颜色。例如,在您的示例中,最后一个球应该与我的第二个图像“相似”! @iNDicator 在这种情况下,分类方法(在 ImageNet 上进行预训练并比较概率分布)应该会给出可接受的结果。 如上所述,inception v3 似乎是一个好的开始。我还注意到很少有人应用最近邻搜索,但我担心它的性能/速度慢。 由于curse of dimensionality,直接应用于图像的最近邻不起作用(查看表格并记住这是在 R^(150x150) 或类似的东西中)跨度> 如果我没记错的话,有人从初始模型(pool3)中提取了他的图像特征,然后他正在应用最近邻暴力破解。基本上我必须尝试不同的方法来找到最优解。【参考方案2】:这可以是监督学习。您可以将图像分类,如果两个图像属于同一类别(或接近一个类别),您可以认为它们是相似的。
您可以将深度常规神经网络用于 imagenet,例如 inception model。初始模型输出 1000 个类别的概率图(这是一个值总和为 1 的向量)。可以通过计算两张图片的向量距离来得到它们的相似度。
在初始模型的同一页面上,您还将找到重新训练模型的说明:https://github.com/tensorflow/models/tree/master/inception#how-to-fine-tune-a-pre-trained-model-on-a-new-task
【讨论】:
谢谢,我会看看 inception 模型,看看我如何将它用于我的目的以上是关于使用 TensorFlow 进行图像相似度检测的主要内容,如果未能解决你的问题,请参考以下文章