我实现了基于内容的图像检索系统,该系统将图像编码为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*
答案 0 :(得分:0)
一般情况下,我建议您研究一些其他方法来量化具有重要属性的图像的相似性,例如尺度不变检测,对光照变化的稳健性等。如果你只想要一个L2范数的阈值,有几种方法可以解决它。什么价值“最好”很大程度上取决于你想要什么。如果你重视最小化假阳性,那应该是你的成本函数,如果你重视避免假阴性而不是你应该优化它...你也可以尝试优化两者同时你给它们两个热量成本函数。我能想到的一种方法是:
只需考虑一个选项,但也许你觉得它有用。