神经网络可以判断它以前是否看过图像吗?

机器算法验证 神经网络 卷积神经网络 图像处理
2022-04-08 10:28:57

我不是想对图像进行分类,我只是想知道(以给定的信心)网络是否以前看过该图像。

我正在使用神经网络而不是仅仅线性搜索数据库,不仅因为我希望神经网络更快,而且它对图像更改(如果有的话)更加稳健。

如何训练这样的网络?通常,我们提供训练图像和类,但在这种情况下,类是可见的和不可见的,这是自相矛盾的。


编辑:Facebook 研究做了类似的事情。签出纸张

4个回答

我想你对只识别完全相同的图像不感兴趣 [1]。相反,您想知道一张图像是否与您已经看到的图像极为相似,如果是,则检索该图像。

为什么具有挑战性?

让我们首先退后一步,假设我们只关注欧几里得空间中的点。这很容易,因为我们可以检查欧几里得距离d(x,y)=i(xiyi)2超过阈值τ,您将对其进行调整以匹配所需的必要相似度。

然而,欧几里得距离对图像没有意义:在高维空间中,几乎所有点之间的距离都相等——这通常被称为维度灾难

这就是为什么您需要将图像投影到某个空间的原因,它实际上在哪里。最简单的方法(从实用的角度来看)是掌握最先进的图像网络分类器并将其用作特征提取器。分类完成前最后一层的激活将用作特征提取器。IEdf(x,y)=i(f(x)if(y)i)2f将图像映射到最后一层激活,将为您提供“有意义的”距离。这里的“有意义”是指大多数人都会同意的事实。

有一些方法可以从头开始训练这些特征提取器。我想到了卷积生成对抗网络或卷积变分自动编码器。如果您想了解更多,请告诉我。

[1] 如果是这样,请使用哈希表进行快速查找,然后进行比较。

您可以使用训练图像过拟合神经网络。如果您通过网络传播训练图像(已知图像),您应该得到非常接近预期的预测值。对于主要的训练任务,您可以使用卷积自动编码器。卷积自动编码器假设学习特定于训练样本的特征。

我的猜测是它应该是可能的,但它需要两个不同的子结构 - 一个响应图像,一个分类为旧/新。我会阅读一些内存模型,例如您在此页面上找到的那些。

另外,我不确定这样的模型会有多强大。

我不知道有一篇论文,但我建议采用以下方案 -

1)输入图像并扭曲直到你可以接受噪音

2) 将图像及其失真输入到连体网络并返回 True

3) 输入图像和所有其他图像并返回 False

4) 重复

这将为您提供有关图像何时相同的预测。您可以调整训练数据中的失真,以调整到您实际上可以接受的噪声水平。

坏消息是你必须维护一个地面实况图像字典。

假设您不想这样做。所以另一种方法是压缩图像。我认为你甚至不需要神经网络,像 SVD/PCA 这样的东西都可以。压缩后,对其进行散列并将该散列保存在某处。大多数相似的图像应该“散列”到相同的东西。新图像应该散列到其他东西。

您可以结合其他分类器来计算图片中的对象数量等,以创建更好的哈希值。但想法是一样的。

让我知道这些想法中的任何一个是否成立。