我想使用Google的Tensorflow将类似图像返回到输入图像。
我在虚拟机CPU上的Ubuntu14.04上安装了来自http://www.tensorflow.org的Tensorflow(使用PIP安装--pip和python 2.7)。
我已经使用2012年的数据从http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz下载了训练有素的模型Inception-V3(inception-2015-12-05.tgz),该模型使用了ImageNet大型视觉识别挑战赛,但我认为它们都有神经网络和其中的分类器(作为预测类别的任务)。我还下载了classify_image.py文件,该文件在模型的1000个类中的1个中对图像进行分类。
所以我有一个随机图像image.jpg我跑来测试模型。当我运行命令时:
python /home/amit/classify_image.py --image_file=/home/amit/image.jpg
我得到以下输出:(使用softmax完成分类)
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 3
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 3
trench coat (score = 0.62218)
overskirt (score = 0.18911)
cloak (score = 0.07508)
velvet (score = 0.02383)
hoopskirt, crinoline (score = 0.01286)
现在,手头的任务是从60,000张图像的数据库中找到与输入图像(image.jpg)类似的图像(jpg格式,并保存在/ home / amit / images的文件夹中)。我相信这可以通过从初始-v3模型中删除最终分类层,并使用输入图像的特征集来查找所有60,000个图像的特征集的余弦距离来完成,并且我们可以返回距离较小的图像(cos 0 = 1)
请建议我解决此问题的方法,以及如何使用Python API执行此操作。
答案 0 :(得分:7)
我想我找到了一个问题的答案:
在使用预先训练的模型(NN +分类器)对图像进行分类的文件classify_image.py中,我做了下面提到的更改(在它们旁边写着#ADDED的语句):
string_replace
我通过将image_data输入到它来运行pool_3:0张量。如果我犯了错误,请告诉我。如果这是正确的,我相信我们可以使用这个张量进行进一步的计算。
答案 1 :(得分:3)
Tensorflow现在有一个很好的教程,介绍如何在最后一层之前获得激活,并重新训练具有不同类别的新分类层: https://www.tensorflow.org/versions/master/how_tos/image_retraining/
示例代码: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
在您的情况下,是的,您可以从pool_3获取softmax层下面的层(或所谓的瓶颈)的激活,并将它们作为输入发送到其他操作:
最后,关于寻找类似的图像,我不认为imagenet的瓶颈激活是图像搜索的非常相关的表示。您可以考虑使用具有直接图像输入的自动编码器网络。
答案 2 :(得分:1)
您的问题与此visual search project
类似