如何学习图像表示的阈值?

时间:2017-04-05 09:08:39

标签: machine-learning computer-vision classification information-retrieval

我实现了基于内容的图像检索系统,该系统将图像编码为VLAD codes。简言之,图像是数千维的矢量,并且两个图像之间的相似性被测量为两个相应的VLAD矢量之间的L2距离。实际上,我们返回查询代码和所有数据集代码之间的前k个最小距离。

现在,我正在Oxford Building Dataset上测试这个系统,这是一个用于测试你的CBIR系统的流行数据集:有55个查询图像,我们计算平均平均精度来评估你的方法。

给定查询图像,该组真阳性被定义为“好”和“好”图像之间的联合。这些集由数据集作者手动创建,有关更多信息,请阅读原始论文(参见上面的链接)。

因此,假设完美的VLAD代码,topk[0]是数据集图像之间最相似的图像,并且它具有最小的L2距离w.r.t.查询代码。 请注意,这将用于对象识别应用程序,因此在给定查询图像的情况下,我们要返回最相似的图像(而不是前k值),因此应该考虑此阈值只有前1个距离。

我想做的事情是学习treshold值s.t.如果topk[0]<treshold我们可以安全地假设这是一张相关图片。

机器学习并不是我的领域,但是我想到了这个值:我们计算topk[0]图像是真阳性的所有图像的topk[0]的平均值,而我们不考虑误报(他们会污染这个阈值vaue)。我意识到这是一个非常天真的解决方案,但没有更好的事情出现在我的脑海里。

对于我的实施,我注意到top[0]通常介于1.0*1.3*之间以获得良好匹配,而通常非常“遥远”的图片有>1.5*

1 个答案:

答案 0 :(得分:0)

一般情况下,我建议您研究一些其他方法来量化具有重要属性的图像的相似性,例如尺度不变检测,对光照变化的稳健性等。如果你只想要一个L2范数的阈值,有几种方法可以解决它。什么价值“最好”很大程度上取决于你想要什么。如果你重视最小化假阳性,那应该是你的成本函数,如果你重视避免假阴性而不是你应该优化它...你也可以尝试优化两者同时你给它们两个热量成本函数。我能想到的一种方法是:

  1. 只占数据集的一半
  2. 选择一个阈值(在您期望合理范围的中间)
  3. 使用此阈值对您的数据进行分类,并计算误报,漏报,真阳性和真阴性并评估您的质量
  4. 考虑以下情况:
    • 如果结果令人满意,暂时坚持下去
    • 如果你有太多的误报使你的门槛更严格(将更严格的一半的未探索间隔减少一半)
    • 如果你有太多的假阴性使你的门槛不那么严格(将不太严格的一半的未探索间隔减少一半)
  5. 重复,直到您满意/达到最佳平衡。
  6. 预测您没有采取的一半来找到您的阈值并验证您的结果。
  7. 只需考虑一个选项,但也许你觉得它有用。