最近我开始玩tensorflow,同时尝试学习流行的算法,我需要找到图像之间的相似性。
图像A由我提供给系统,userx提供图像B,如果图像B相似(颜色和类别),系统应该将图像A检索到用户x。
现在我有几个问题:
答案 0 :(得分:7)
我们是否认为这种情况是有监督的学习?
当您拥有优化模型的标签时,它会受到监督学习。所以对于大多数神经网络来说,它是受监督的。
但是,您也可以查看完整的任务。我想你对图像对没有任何基本的事实,并且"期望"您的模型应输出的相似度值?
解决这个听起来无人监督的问题的一种方法是在1000类图像网上训练(以有监督的方式)CNN(卷积神经网络)。为了获得两个图像的相似性,您可以简单地获取输出概率分布的欧氏距离。这不会产生出色的结果,但可能是一个很好的起点。
- 我应该用什么算法训练等..
醇>
首先,你应该定义什么"类似"意味着你。当两个图像包含相同的对象(类)时,它们是否相似?如果图像的一般颜色相同,它们是否相似?
例如,以下3对图像有多相似?
查看FaceNet并搜索"基于内容的图像检索" (CBIR):
答案 1 :(得分: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