我想找到与其他图像相似的图像。因此,在研究之后,我发现两种方法首先是两种方法,通过其属性来表示图像,如
length = full
pattern = check
color = blue
但是这种方法的局限性在于我无法获得包含所有标记功能的详尽数据集。
我发现的第二种方法是提取特征并进行特征映射。 所以我决定使用具有caffe的深度卷积神经网络,这样通过使用任何现有模型,我可以学习这些特征,然后执行特征匹配或其他操作。我只想采取一般性的建议,其他方法哪些是好的,值得一试。因为我刚刚开始使用caffe所以任何人都可以给出一般指导如何用caffe解决问题? 提前致谢
我看着phash只是很好奇,它会发现相同的图像,如有轻微的强度变化和一些其他的变化,它也可以提供相同的类型(语义)像蓝色和红色条纹的T恤它会给出类似的黑白条纹吗?它会考虑衬衫的长度,衣领样式等等。
答案 0 :(得分:4)
确实如此,经验证明,使用ConvNets提取的特征之间的欧氏距离对于同一类的图像更接近,而对于不同类别的图像则更远 - 但是它&# 39;了解你正在寻找什么样的相似性很重要。
可以定义多种类型的相似性度量,并且您使用的特征类型(在ConvNets的情况下,它所训练的数据类型)会影响您将获得的类似图像的类型。例如,也许给出一只狗的图像,你想要找到其他狗的照片,但不是特别是那只精确的狗,或者,也许你有一张教堂的照片,你想要找到同一教堂的另一张图片,但是不同的角度 - 这是两个非常不同的问题,您可以使用不同的方法来解决它们。
您可以看到的一种特殊类型的卷积神经网络是Siamese Network,它是为了学习两个图像之间的相似性而构建的,给出了具有标签相同/ not_same的图像对的数据集。您可以在Caffe中查找此方法的实现here。
另一种方法是采用经过ImageNet数据训练的ConvNet(see here for options),并使用python / matlab接口对图像进行分类,然后提取倒数第二层,并将其用作表示对于那个图像。现在你可以只取这些表示的欧几里德距离,这将是你的相似度量。
与Caffe无关,你也可以使用"旧学校"功能匹配的方法,包括在像OpenCV(an example tutorial of such method)这样的开源库中。