首页 > 解决方案 > 使用人工输入增强预学习模型以更好地使用 python 确定图像相似度

问题描述

假设我想构建一个工具,以从 0 到 1 的比例告诉我图像之间的相似性。

在此处输入图像描述

我可以继续下载预训练的 mage 模型,例如 vgg16,删除其最后一层(分类器),使用预训练模型将图像转换为特征向量,最后使用余弦相似度等计算向量之间的相似度.

在此处输入图像描述

该方法在这里更好地解释:https ://mc.ai/find-more-like-this-product-using-transfer-learning/

...但是如果我想使用自己的数据集来增强该工具怎么办? 更具体地说,我有一个数据集,其中人类要么说两张图片相似(1)或不相似(0):

在此处输入图像描述

我想知道,如果您看到一种方法,我可以如何与之合作以增强相似性评分工具? 非常感谢。:)

标签: pythonmachine-learningcomputer-vision

解决方案


您可以使用带有 VGG-16 基础的连体网络。该模型将使用您标记的图像进行训练,相似图像将使用相似度 1 进行训练,不同图像将使用相似度 0 进行训练。

Triplet loss 可用于最小化相同对象之间的差异。

这是 keras 中的一个实现:https ://medium.com/@prabhnoor0212/siamese-network-keras-31a3a8f37d04

使用您的数据集进行训练的过程:

假设您有一个简单的分类数据集。所以,你有一个苹果类,一个猫类,等等。

  1. 首先,您需要确保单个类中的图像非常相似。

(如果你把一辆汽车和一辆卡车放在同一个类别中,并期望它们的相似度得分为 1,这会使你的网络表现不佳)

  1. 拥有数据集后,您只需要生成对,如果两个图像来自同一类,则标签将为 1。如果不是,则标签将为 0。

  2. 现在,只需使用三元组损失和 VGG siamese 训练模型。

您可以修改代码示例,甚至可以找到许多共享代码的资源。

在此处输入图像描述


推荐阅读