使用TensorFlow进行图像相似性检测

时间:2016-11-17 18:49:19

标签: machine-learning scikit-learn computer-vision tensorflow deep-learning

最近我开始玩tensorflow,同时尝试学习流行的算法,我需要找到图像之间的相似性。

图像A由我提供给系统,userx提供图像B,如果图像B相似(颜色和类别),系统应该将图像A检索到用户x。

现在我有几个问题:

  1. 我们是否认为这种情况是有监督的学习?我问 因为我不认为这是一个分类问题(困惑!!)
  2. 我应该用什么算法训练等..
  3. 应该经常重新训练,我应该如何解决这个问题 问题所以我不是每次都从头开始训练(微调?)

2 个答案:

答案 0 :(得分:7)

  

我们是否认为这种情况是有监督的学习?

当您拥有优化模型的标签时,它会受到监督学习。所以对于大多数神经网络来说,它是受监督的。

但是,您也可以查看完整的任务。我想你对图像对没有任何基本的事实,并且"期望"您的模型应输出的相似度值?

解决这个听起来无人监督的问题的一种方法是在1000类图像网上训练(以有监督的方式)CNN(卷积神经网络)。为了获得两个图像的相似性,您可以简单地获取输出概率分布的欧氏距离。这不会产生出色的结果,但可能是一个很好的起点。

  
      
  1. 我应该用什么算法训练等..
  2.   

首先,你应该定义什么"类似"意味着你。当两个图像包含相同的对象(类)时,它们是否相似?如果图像的一般颜色相同,它们是否相似?

例如,以下3对图像有多相似?

enter image description here

enter image description here

enter image description here

查看FaceNet并搜索"基于内容的图像检索" (CBIR):

答案 1 :(得分:2)

  1. 这可以是有监督的学习。您可以将图像分类为类别,如果两个图像属于同一类别(或在一个类别中关闭),您可以将它们视为相似。

  2. 您可以将深层传统神经网络用于imagenet,例如inception model。初始模型输出1000个类的概率图(其值为1的向量)。您可以计算两个图像的矢量距离,以获得它们的相似性。

  3. 在初始模型的同一页面上,您还会找到重新训练模型的说明:https://github.com/tensorflow/models/tree/master/inception#how-to-fine-tune-a-pre-trained-model-on-a-new-task