拓展查询(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. canvas 嵌套_canvas初探
  2. Prism框架研究(一)
  3. 深度学习核心技术精讲100篇(四十九)-深度学习之关联规则
  4. boost::range_reference相关的测试程序
  5. QToolButton设置图标位置
  6. 8位可控加减法器_行测高分技巧-资料分析之有效数字加减法取舍
  7. 关于js中正则表达式链接
  8. android怎么引用ttf字体,android 自定义字体ttf使用的几种方法
  9. 小程序监听点击右上角按钮_朋友圈支持应用直达、公众号小程序支持行动按钮文案、原生页拉取...
  10. struts2.2 json配置
  11. 本来连学计算机的都不是,怎么却读了计算机研究生
  12. 驱动开发专家解读《寒江独钓——Windows内核安全编程》
  13. 清华数据结构c语言版严蔚敏pdf,清华数据结构习题集答案(C语言版严蔚敏).pdf
  14. VS编程之查看数组信息
  15. 亚马逊AWSome DAY
  16. 微信活码系统/微信群二维码/活码生成系统/生成微信活码
  17. 机器人电焊电流电压怎么调_焊接机器人焊机电流电压匹配及行走速度调节(一)...
  18. 备份oracle数据库
  19. linux中的几种文件类型
  20. 19 kafka消息队列

热门文章

  1. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
  2. Graylog2+mongdb+rsyslog中央日志服务器对syslog的web管理--转载
  3. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
  4. Java 编程的动态性,第3部分: 应用反射--转载
  5. 金融风控实战——特征工程上
  6. Sklearn(v3)——SVM理论(4)
  7. 数据挖掘十大经典算法之——PageRank 算法
  8. 信用经济中的经济因素
  9. 共识算法(POW、POS、PBFT、DPOS)介绍-
  10. Java8 - 使用CompletableFuture 构建异步应用