拓展查询(QE, Query Expansion): 指对返回的前top@K个结果,包括查询样本本身,对它们的特征求和取平均,再做一次查询,此过程称为拓展查询。

从上面的定义可以看出,拓展查询属于重排的一种方式。通过Query Expansion,以达到提高检索召回率的目的。前面的博文RANSAC算法做直线拟合曾介绍过RANSAC的基本思想,放在词袋模型里(相应博文见图像检索:BoW图像检索原理与实战),我们可以使用RANSAC方法或Weak Geometry Consistency方法做几何校正,进行重排以提高检索的精度。在这篇博文中,小白菜暂时抛开其他的重排方法,重点分析Query Expansion对图像检索精度的提升。

根据小白菜读图像检索论文获得的对Query Expansion的感知,做完Query Expansion能够获得百分之几的精度提升。为了证实Query Expansion对检索精度的改善,在过去一段时间里,小白菜在Oxford Building数据库上对其做了验证。下面是小白菜对Query Expansion的实验整理和总结。

特征表达

Oxford Building图像数据库,每一幅图像提取的是一个512维的CNN特征,即对于Oxford Building图像数据库,我们得到5064个512维的特征。

特征索引

直接采用brute线性扫描,因为图库才5064张图像,所以没必要建索引。在实际应用中,我们可以采用哈希、倒排PQ等方式,这一部分可以细讲很多,有机会的话,小白菜单独拿一个篇幅整理实用的索引方法。

评价指标

实验评价指标采用平均检索精度(mAP, mean average precision), mAP如何计算可以阅读信息检索评价指标,里面有对mAP如何计算的详细介绍。

对于Oxford Building图像数据库,mAP的计算过程有必要详细介绍一下。Oxford Building的groundtruth有三类:good, ok和junk。对于某个检索结果,如果它在good和ok中,则被判为是与查询图像相关的;如果在junk中,则被判为是不相关的。我们可以细致的阅读一下Oxford Building的mAP计算代码:

float compute_ap(const set<string>& pos, const set<string>& amb, const vector<string>& ranked_list){float old_recall = 0.0;float old_precision = 1.0;float ap = 0.0;size_t intersect_size = 0;size_t i = 0;size_t j = 0;for ( ; i<ranked_list.size(); ++i) {if (amb.count(ranked_list[i])) continue;if (pos.count(ranked_list[i])) intersect_size++;float recall = intersect_size / (float)pos.size();float precision = intersect_size / (j + 1.0);ap += (recall - old_recall)*((old_precision + precision)/2.0);old_recall = recall;old_precision = precision;j++;}return ap;
}

其中,pos即是由good和ok构成的set,amb是junk构成的set,ranked_list即查询得到的结果。可以看到Oxford Building上计算的AP是检索准确率(precision)和检索召回率(recall)曲线围成的面积(梯形面积,积分思想),mAP即是对AP的平均。

理解完了Oxford Building的mAP计算过程,还有一个需要考虑的问题是:对于查询图像特征的提取,我们要不要把Oxford Building提供的区域框用上,即在提取特征的时候,我们是在整个图像提取特征,还是在区域框内提取特征?在图像检索的论文中,在计算Oxford Building的mAP时,都是在区域框内提取特征。但是放在实际中,我们肯定是希望我们的图像检索方法能够尽可能的减少交互,即在不框选区域的时候,也能够取得很好的检索精度。所以,基于这样的意图,在实际中测评检索算法的mAP时,小白菜更喜欢采用在整个图像上提取特征的方式。当然,如果不嫌麻烦的话,可以两种方式都测评一下。

查询拓展对mAP的提升

库内查询,所以返回的top@1为查询图像自身,并且采用的是全图查询(即上面提到的对于查询图像是在整个图像上提取特征,而不是在区域框内提取特征),表中top@K表示取前K个样本求和取平均。

top@K 0 1 2 3 4 5 6 7 8 9 10
MAP 61.91% 61.91% 65.42% 66.52% 66.07% 66.38% 66.51% 65.65% 65.16% 63.46% 62.41%

上面表格中mAP随top@K用曲线表示如下:

在不做Query Expansion的时候,即top@K=0时,mAP为61.91%。因为查询属于库内查询,所以top@K=1时,仍然是查询向量本身,故结果与top@K=0是一样的。从实验的结果可以看出,Query Expansion确实能够提升检索的精度,在top@K=3的时候,取得了最高的检索精度。相比于不做Query Expansion,Query Expansion可以提高4%-5%的检索精度。

所以,在实际中,做Query Expansion完全是有必要的,一则是它实现简单,二则是它提升的效果还是比较明显的

from: http://yongyuan.name/blog/cbir-query-expansion.html

图像检索:拓展查询(Query Expansion)相关推荐

  1. hibernate 高级查询 query 或查询 or ,Restrictions

    hibernate 高级查询 query 或查询 or ,Restrictions 今天用了写hibernate高级查询时用了Restrictions(当然Expression也是可以以的)这个类.感 ...

  2. SQVI和SAP查询QUERY的区别和使用注意事项

    SQVI.SAP查询QUERY都适用于简单的表连接数据查询,但都不能打包传输到PRD,不同环境需要重复创建.可以生成报表程序供T-CODE调用,用se93指定事务码和程序名称.区别1-权限:SQVI每 ...

  3. 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用

    原链接:https://www.xttblog.com/?p=3532 所有的搜索基本上都存在精确匹配,包含等操作.Lucene 中同样存在这样的操作,今天我们以 IntPoint 为例,来说说 Lu ...

  4. Hibernate查询Query By Criterial

    提供的检索方式: (1)导航对象图检索方式  (2)OID检索方式 (3)HQL检索方式 (4)QBC检索方式[query by Criteria(标准)] (5)本地SQL检索方式 1.简介 1.1 ...

  5. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...

  6. Elasticsearch高级查询Query DSL

    一.高级查询Query DSL简介 1.Query DSL(简介 Elasticsearch中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified La ...

  7. 基本查询(Query查询中文)

    查询语句: GET /lib4/user/_search {"query": {"term": {"interests":"唱歌& ...

  8. MySQL查询多表定义实体类_SpringBoot中JPA多表联合自定义查询@Query

    版权声明:本文为博主原创文章,转载请注明出处,谢谢. 其他相关文章见:个人博客站点:www.val1ant.xin 1. 实体类 本篇示例中,大致关系是一张博客文章表,一张标签表,一张博客与标签相关联 ...

  9. Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)

    Sharepoint Foundation中的首要数据结构就是列表(List), 每个List属于某种List Type,与此类似,每个列表中的列(Column)属于某种FieldType,而每一条列 ...

最新文章

  1. dirty_background_ration 与 /proc/sys/vm/dirty_ratio
  2. Vue.js 表单输入绑定
  3. ajax 成功回调函数,jQuery的阿贾克斯成功回调函数定义jQuery的阿贾克斯成功回调函数定义(jQuery ajax...
  4. JSP的getRequestDispatcher()与sendRedirect()的区别
  5. vue-resource ajax跨域,基于Vue-resource jsonp跨域问题的解决方法_婳祎_前端开发者
  6. 在 Windows 上安装Rabbit MQ 指南
  7. mybatis基础_动态代理开发
  8. Qt 应用程序图标设置
  9. 朴素贝叶斯—豆瓣Top250影评的情感分析与预测
  10. 文字输入效率神器:输入法辅助工具 KeyboardHolder
  11. STM32F103如何使用串口下载程序
  12. WIN7显示桌面图标设置到左下角
  13. 《2019测试面试题-上海悠悠.pdf》
  14. windows server 2008R2下安装nginx
  15. iPhone、iPad屏幕分辨率尺寸对比
  16. 呕心沥血互联网产品经理巨作
  17. 知识管理选石墨、语雀 or Baklib
  18. 智能厨房监控系统设计
  19. String Shifting(今日头条2017秋招真题)
  20. 频谱、能谱、功率谱、倍频程谱、1/3 倍频程谱

热门文章

  1. 机器学习实战读书笔记(1)
  2. Java多线程编程那些事:volatile解惑--转
  3. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载...
  4. MySql中把一个表的数据插入到另一个表中的实现代码--转
  5. 相比 App,Web 开发竟更适合初创公司?
  6. 马云:我看到很多人去学MBA 但回来时都变蠢了
  7. php接收流文件,PHP传输文件流及文件流的保存
  8. jvm性能调优实战 -52修复堆内存区域内存溢出问题OutOfMemoryError: Java heap space
  9. MyBatis-08MyBatis注解方式之@Insert
  10. Oracle-USERS表空间解读