Re-ranking Person Re-identification with k-reciprocal Encoding
Re-ranking Person Re-identification with k-reciprocal Encoding
Abstract
In this paper, we propose a k-reciprocal encoding method to re-rank the re-ID results. Our hypothesis is that if a gallery image is similar to the probe in the k-reciprocal nearest neighbors, it is more likely to be a true match.Specifically, given an image, a k-reciprocal feature is calculated by encoding its k-reciprocal nearest neighbors into a single vector, which is used for re-ranking under the Jaccard distance. The final distance is computed as the combination of the original distance and the Jaccard distance.
这篇论文提出了k-reciprocal 编码方法去重排re-ID结果。论文假定底库图片和查询图片在 k-reciprocal近邻是相似的,则它们最有可能是匹配的。论文主要利用原始距离和杰卡德距离完成re-ranking。
Introduction

上图是使用KNN(k=10)聚类的结果,其中Probe为查询图片,P1~P4为正样本,N1~N6为负样本。P1~P4在相似排名上并不靠前,而N1~N6却比较靠前,这说明使用KNN算法得到初始排序结果具有很大噪声。

上图是使用KRNN(k-reciprocal nearest neighbor)算法的重排结果。首先我们需要求出一张图片的表征特征(appearance feature)和k-r特征(k-reciprocal feature)然后分别计算原始距离和杰卡德距离,最后计算最终距离,得出re-ranking列表。
这篇文章的主要工作:
- 提出了单一的k-r特征,有利于re-ranking
- 不需要人工操作和数据标注,采用的是一种自动的和非监督的方法。
- 在多个数据集上,rank-1和mAP性能指标提升。
Proposed Approach
1. Problem Definition
Mahalanobis distance:

M为半正定矩阵 ,\(d(p,{g_i})\) 为文中提到的原始距离。
2. K-reciprocal Nearest Neighbors
KNN:

KNN算法简介:给定测试实例,基于某种距离度量找出训练集中与其最靠近的k个实例点,然后基于这k个最近邻的信息来进行预测。
- 时间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)
- 空间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)
KRNN:

∧为合取联结词,叫做合取,比如r=q∧p,那么当且仅当p与q同时为真(或者说同时为1)时r为真(或1),也就是说\({g_i}\)是p的近邻,p也是\({g_i}\)的近邻。

有时候正样本不在K近邻中,也不在k-r近邻中。为了解决这个问题,本文增加了\(\frac{1}{2}\)k-r近邻,来获得更为鲁棒性的\({R^*}(p,k)\)。

3. Jaccard Distance

\(\left| \right|\)代表这个数据集的数量。如果\({g_i}\)和p是相似的,则\({R^*}(p,k)\)和\({R^*}(g_i,k)\)重合部分较多,则杰卡德距离\({d_J}(p,{g_i})\)就越小。
这步操作有3个缺点:
- 获得\({R^*}(g_i,k)\)和\({R^*}(p,k)\)数据非常费时。
- 计算所有近邻的权重都是相等的。
- 没有考虑到原始距离和杰卡德距离的联系。



4. Local Query Expansion
因为同一类别的图片具有相似的特征,我们使用KNN方法完成本地查询操作。

5. Final Distance

6. Complexity Analysis
假设底库图片集大小为N,一般情况下距离测量和重新排序的时间复杂度分别为\(O({N^2})\),\(O({N^2}\log N)\)。但是,我们提前在本地上计算距离和进行排序,故时间复杂度分别为\(O({N})\),\(O({N}\log N)\)。
Re-ranking Person Re-identification with k-reciprocal Encoding的更多相关文章
- 使用C#通过Thrift访问HBase
前言 因为项目需要要为客户程序提供C#.Net的HBase访问接口,而HBase并没有提供原生的.Net客户端接口,可以通过启动HBase的Thrift服务来提供多语言支持. Thrift介绍 环境 ...
- 支付宝app支付服务器签名代码(C#)
1,引入支付宝的sdk(AopSdk) 支付宝接口文档网站可下载,注意下载C#版本: 2,代码写的比较简单 public static string RSASign(string OrderNo,de ...
- 自定义Base16加密
自定义Base16加 ...
- 爬虫、请求库requests
阅读目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,req ...
- request模块
一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 # 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模 ...
- 爬虫 requests 模块
requests 模块 介绍 使用requests可以模拟浏览器的请求, 比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) ps: requests库发 ...
- 请求库之requests模块
本片导航: 介绍 基于GET请求 基于POST请求 响应Response 高级用法 一.介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的a ...
- 爬虫 之Requests库的详细使用
1.什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约我 ...
- 爬虫之requests请求库
介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
随机推荐
- Leet爬楼梯问题
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...
- 从客户端中检测到有潜在危险的 request.form值
这里只说ASP.NET MVC的解决方法,ASP.NET已经不碰了. 给控制器加上[ValidateInput(false)]特性即可忽略含有HTML标记的内容. [HttpPost] [Valida ...
- Activiti--Activity数据库
23张表 ACT_RE_资源库流程规划表 act_re_deployment 部署信息表 act_re_model 流程设计模型部署表 act_re_procdef 流程定义数据表 ACT_RU_运行 ...
- ora-28002
1.查看指定概要文件(如default)的密码有效期设置: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_na ...
- Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed
系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 A ...
- win下安装jupyter遇到的问题
一:安装jupyter 1.首先要用管理员方式打开cmd,没用管理员打开后面安装不上. 2.安装jupyter.我用的是python3,所以用pip3 install jupyter进行安装. 3.安 ...
- 解决MySQL5.7在MAC下登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)问题
问题描述 今天在MAC上安装完MYSQL后,MYSQL默认给分配了一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误:ERROR 1045 (28000): Access ...
- 7.26T3小游戏
小游戏 题目描述 有一个简单的小游戏.游戏的主人公是一个勇士,他要穿过一片黑森林,去 解救公主.黑森林的地图可以用一张 V 个点.E 条边的无向图来描述,起点是 1 号点,终点是 V 号点.勇士从起点 ...
- 二十九、SELinux简介
一.基础 1)访问模型 Linux原有访问模型:自主访问控制 DAC 安全隐患: 进程所能访问资源的范围 为用户所能访问的资源范围 后门: rootkit程序 进程被胁持: 基于进程作为跳板,就有了进 ...
- Sign APK without putting keystore info in build.gradle
http://stackoverflow.com/questions/20562189/sign-apk-without-putting-keystore-info-in-build-gradle/2 ...