0

我有我正在做的这个项目。该项目的一部分涉及多次测试运行,在此期间会截取应用程序窗口的屏幕截图。现在,我们必须确保在连续运行之间截取的屏幕截图匹配(除非进行一些允许的更改)。这些更改可能是我们正在截屏的应用程序窗口中的文件名、日期、不同的徽标等。

我有一个绝妙的想法来自动化执行此检查的过程。基本上我的想法是这样的。如果我能以某种数学方式量化第 N-1 次运行和第 N 次运行的屏幕截图之间的差异,我可以创建一个二进制标记数据集,将某种特征向量映射到一个标签(0 表示通过,1 表示失败,如果图像没有充分匹配)。所有这一切的原因是,我的标记数据将有助于使模型了解可以接受的更改规模,因为可以接受的类型太多了。

现在假设我可以访问大量我精心标记的数据,数以千计。到目前为止,我已经尝试在 opencv 中使用 SIFT 使用关键点匹配来确定图像之间的相似度得分。但这不是一个智能的学习过程。有什么方法可以从 SIFT 中获取一些信息并将其用作我的数据集中的 x 值?

以下是我的问题:

  1. 我需要什么信息作为我的 x 值?它必须是代表两个图像之间差异的东西。那么也许来自 SIFT 的特征向量之间的区别?当这些向量的尺寸略有不同时,我该怎么办?

  2. 我是否在考虑使用 SIFT 的正确轨道上?我应该去别处看看,如果是的话,去哪里?

谢谢你的时间!

4

1 回答 1

0

问题中建议的方法是这样的 -

  • 查找两个连续图像的 SIFT 特征。
  • 使用它们以某种方式量化两个图像之间的相似性(听起来很合理)
  • 使用此指标首先将图像分类为相似和不相似。
  • 使用这个数据集来训练一个神经网络做同样的工作。

如果这是一个好方法,我并不完全相信。假设您创建了具有 SIFT 特征的初始分类器。然后,您将使用这些数据来训练 NN。但是这个数据肯定会有很多错误的标签。因为如果它没有很多错误的标签,那么是什么阻止您使用原始的基于 SIFT 的分类器作为最终解决方案?

因此,如果您的基于 SIFT 的分类很好,为什么还要训练 NN?另一方面,如果它不好,你会给神经网络提供很多错误的标记数据进行训练。我认为后者可能是一个坏主意。我说可能是因为有可能错误的标签只会鼓励 NN 更好地概括,但我想这需要大量数据。

另一种看待这个问题的方法是,假设您的初始分类器准确率为 90%。这可能是您在谈论使用这些数据进行训练时所看到的 NN 性能的上限。

您说您的第一种方法存在的问题是“它不是一个智能的学习过程”。我认为认为前一种方法总是不如后者是错误的方法。SIFT 是一个强大的工具,可以解决很多问题,而无需 NN 的所有“黑盒”。如果可以使用 SIFT 以足够的准确度解决这个问题,我认为采用基于学习的方法不是要走的路,因为基于学习的方法不一定更好。

但是,如果 SIFT 方法没有给你足够好的结果,那么一定要开始考虑 NN 的东西,但是到那时,使用“坏”方法来标记数据可能是个坏主意。

另外,我认为您可能低估了为此所需的数据量。你提到了成千上万的数据,但老实说,不是很多。我想你需要更多。

我会考虑这样做的一种方法-

  • 对样本参考图像进行 SIFT 关键点检测。
  • 手动过滤掉不属于图像中不变事物的关键点。也就是说,只需在图像中保证(或很可能)始终存在的位置获取关键点。
  • 当您获得新图像时,计算关键点并与参考图像进行匹配。
  • 设置好的匹配与匹配总数的比率的某个阈值。

根据您的应用程序,这可能会给您带来足够好的结果。

如果不是,并且您真的希望您的解决方案基于 NN,我会说您需要手动标记数据集,而不是使用 SIFT。

于 2020-12-15T04:26:31.047 回答