python - 使用人工输入增强预学习模型以更好地使用 python 确定图像相似度
问题描述
假设我想构建一个工具,以从 0 到 1 的比例告诉我图像之间的相似性。
我可以继续下载预训练的 mage 模型,例如 vgg16,删除其最后一层(分类器),使用预训练模型将图像转换为特征向量,最后使用余弦相似度等计算向量之间的相似度.
该方法在这里更好地解释:https ://mc.ai/find-more-like-this-product-using-transfer-learning/
...但是如果我想使用自己的数据集来增强该工具怎么办? 更具体地说,我有一个数据集,其中人类要么说两张图片相似(1)或不相似(0):
我想知道,如果您看到一种方法,我可以如何与之合作以增强相似性评分工具? 非常感谢。:)
解决方案
您可以使用带有 VGG-16 基础的连体网络。该模型将使用您标记的图像进行训练,相似图像将使用相似度 1 进行训练,不同图像将使用相似度 0 进行训练。
Triplet loss 可用于最小化相同对象之间的差异。
这是 keras 中的一个实现:https ://medium.com/@prabhnoor0212/siamese-network-keras-31a3a8f37d04
使用您的数据集进行训练的过程:
假设您有一个简单的分类数据集。所以,你有一个苹果类,一个猫类,等等。
- 首先,您需要确保单个类中的图像非常相似。
(如果你把一辆汽车和一辆卡车放在同一个类别中,并期望它们的相似度得分为 1,这会使你的网络表现不佳)
拥有数据集后,您只需要生成对,如果两个图像来自同一类,则标签将为 1。如果不是,则标签将为 0。
现在,只需使用三元组损失和 VGG siamese 训练模型。
您可以修改代码示例,甚至可以找到许多共享代码的资源。
推荐阅读
- nginx - 在 ModSecurity 规则中添加例外 (SecRuleUpdateTargetById) 不起作用?
- python - 在python中插值时如何保持图像的大小?
- javascript - 如果数组中有相同的值,如何删除它?
- email - Outlook Mailcow 错误的 ssl 证书
- python-3.x - Python 的 lambda 函数中的无效闭包
- hostname - URL中的主机名“ww8”代表什么
- swift - 编辑-我怎样才能让 UIlabel 进入容器的中间?
- sql - 如何使用Join连接三个Sql表的列数据
- javascript - 如何使用 javascript 或 typescript 删除 event.js 和 bootstrap.min.js 的事件监听器?
- sql-server - 如何在 SQL 中及时转换 int 列“HH:MM”?