Iterative Quantization,ITQ

article/2025/6/8 4:23:10

Abstract

针对大规模的图像检索问题,论文提出了一个高效的ITQ算法。该算法先将中心化后的数据映射到超立方体的顶点上,再通过优化过程寻找一个旋转矩阵,使得数据点经过旋转后,与超立方体的顶点数据具有最小的量化误差。ITQ算法涉及到了multi-class spectral clustering(不懂)以及Orthogonal Procrustes problem,且可以通过PCA(无监督)或CCA(监督)的方法事先对数据进行降维。该方法的实验结果优于大部分start-of-the-art方法。

1. Introduction

一个高效的二值编码学习方法应具有以下特点:(1)码长足够短,内存才不会占用过大;(2)应该具有局部敏感性,即原始空间相似的两个数据点在二值空间也应具有较近的汉明距离;(3)学习和查询过程效率也足够高。

在很多哈希方法中,初始的操作都是对数据进行PCA降维。但是每个特征维度所具备的方差是不同的,高方差的特征方向往往具有更多的信息,如果对所有方向都进行相同的编码(亦或要求向量间正交),那么算法有时会具有更差的表现。SSH算法通过放松对hash函数的正交限制得到了不错的表现,而在ITQ算法中并没有显式得对hash函数添加正交限制。算法初始也是进行PCA降维,然后随机初始化一个旋转矩阵,通过最小化量化误差的过程寻找到矩阵矩阵\(R^*\),从而得到最终的映射函数。

2. Unsupervised Code Learning

接下来对文章用到的符号表示进行声明:

\(X∈R^{n*d}\),为数据矩阵,并且对其进行中心化预处理0

\(B = sgn(XW)\),W为映射函数,sgn为符号函数,B表示X经过映射后的数据,在二值超立方体上的映射的数据。

\(V = XW\),算法的目标是最小化量化误差\(||sgn(V) - V||\),并令\(W^*\)表示最优解。假设R为旋转矩阵,因为旋转矩阵只改变方向不改变映射关系,因此\(W = W^* R\)依然为算法的最优解。据此可得到量化损失函数为:
\[ Q(B,R) = |B - VR|_F^{2}-------(1) \]
在实验中,发现对旋转矩阵R进行随机初始化,可以得到不错的效果。接下来,我们利用ITQ算法进行k(通常为50)次迭代,迭代过程分为两个步骤:

固定R,对B进行更新

通过对\(Q(B,R)\)公式的推导,我们得到最小化\(Q(B,R)\)的过程等同于最大化\(tr(BR^TV^T) = \sum_{i=1}^n \sum_{j=1}^cB_{ij}V^*_{ij}\),其中\(V^* = VR\)。显然,因为B的取值只有-1和1,为使得该式最大,应使得V为正值时对应的B为1,V为负值时对应的B为-1。此外,对原始数据\(X\)的尺度进行改变不会影响到B或R的最优值,因此我们实现对数据进行中心化处理对实验结果没有影响。

固定B,对R进行更新

在此情况下,目标公式(1)就变成了典型的Orthogonal Procrustes problem,该问题的求解过程可以参考wiki百科。在本文中,利用SVD分解,使得\(B^TV = S\Omega S^T\),再令\(R = SS^T\),便可求解。

3. Evaluation of Unsupervised Code Learning

数据集

  • CIFAR:包括64800个数据,11类。

  • Tiny image dataset:包括580000个数据,分别对应388个Internet search key words。是以二进制文件形式存储的,每个数据文件包括图片本身、与图片相关的元数据(文件名,使用的搜索引擎,排名等)、每个图片的Gist描述符。

评估方案

  • 第一个评估方法使用欧几里得近邻。在该方法中没有用到类标签的信息。对于每一个查询点,将其与其他数据点的距离进行升序排序,对于距离最近的前50个数据点,只要距离小于一个事先设定的阙值,便认为查询的结果是正确的,否则即为错误的查询结果。然后通过计算错误和正确的比例来得到精度和召回率。
  • 第二个评估方法使用类标签。对每个查询点,得到对应top500的图像数据,然后通过计算top500中类标签和查询点相同所占的比例得到精度,再结合数据集中和查询点标签相同的所有数据点的数量得到召回率。

论文比较了PCA-RR、PCA-ITQ等与其他baseline方法在两种评估尺度下的表现:

屏幕快照 2018-10-06 下午10.43.41

在CIFAR下的实验结果表明,在两种评估方案下,PCA-ITQ算法的表现基本都优于其他baseline。除了在256-bits时,SKLSH在第一种量度下的表现最好,但是SKLSH在第二种量度下的表现却很差。由此可以看出基于PCA的方法可以很好得保留原始数据的语义一致性。

显然,无监督学习的方法(目标函数直接对距离进行优化)在第一种评估尺度下表现优于监督学习的方法,而在第二种评估尺度下,监督学习有效得利用了类标签的信息,因此表现普遍优于无监督学习方法。因此实验结果表明,欧式距离更近并不等同于更一致的语义信息。

4. Leveraging Label Information

RR和ITQ可以利用任何基于正交的投影方法。PCA利用一种无监督的方法进行降维,而CCA结合了数据中的标签进行,进行有监督得降维,从而得到了更好的实验结果。

因为CIFAR的类标签时人为标注的,较为“clean”,而Tiny image dataset的数据是互联网自动产生的,较为“noisy”。从实验结果可以看出,利用clean数据训练的CCA-ITQ具有最优的表现,而利用noisy数据训练的CCA-ITQ同样也比PCA-ITQ得到了很大的提升。

转载于:https://www.cnblogs.com/CSLaker/p/9723119.html


http://chatgpt.dhexx.cn/article/iuBLxAT7.shtml

相关文章

ITQ算法理解

开发十年,就只剩下这套Java开发体系了 >>> IterativeQuantization: A Procrustean Approach to Learning Binary Codes 论文理解及代码讲解 这篇文章发表在2011年CVRP上,一作是Yunchao Gong,师从Sanjiv Kumar,关于San…

ITQ(Iterative Quantization)图像检索算法

开发十年,就只剩下这套Java开发体系了 >>> 1、文章简介 名称:Iterative Quantization:A Procrustean Approach to Learning Binary Codes 这篇文章发表与2011年CVRP(Computer Vision & Pattern Recognition),作者:Yunchao Go…

ITQ(Iterative Quantization)迭代量化方法详解

转载:http://www.yuanyong.org/cv/itq-hashing.html CVPR 2011《Iterative Quantization: A Procrustean Approach to Learning Binary Codes》论文阅读笔记。 看过的文章,不做记录,即便当时理解透了,过一段时间后,知识…

怎么查看mysql是否锁表_MySQL查看是否锁表

MySQL查看是否锁表的方法:首先进入命令窗口;然后通过执行命令“show engine innodb status\G;”查看造成死锁的sql语句,并分析索引情况即可。 可直接在mysql命令行执行:show engine innodb status\G; 查看造成死锁的sql语句,分析索引情况,然后优化sql然后show processlis…

mysql 查询 锁表_怎么查找mysql中的锁表语句?

查看sql server数据库被锁表可以用用如下语句: 也可以用如下语句: 拓展资料: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SEL…

mysql中如何查看表是否被锁

https://blog.csdn.net/love666666shen/article/details/122419330 如何查看是否发生死锁 在使用mysql的时候,如何查看表是否被锁呢? 查看表被锁状态和结束死锁步骤: 1.在mysql命令行执行sql语句 use dbName; // 切换到具体数据库 show …

matlab画六面体,MATLAB绘制平行六面体

如果给出一个平行六面体(甚至其他多面体)的各个顶点坐标,如何画出这个平行六面体。 在网上找了找方法,可以参考这篇博客 matlab中patch函数详解。然后我具体查看了 Multifaceted Patches 帮助,记录下来以备后查。 绘制主要就是利用 patch 函数,patch 的一般调用格式为patch…

MATLAB离散点边界曲线的绘制

一大堆离散点有时候需要绘制边缘点,这时候可以用到boundary函数,这是MATLAB的自带函数,用机械臂的工作空间为例绘制边界曲线图: %建立机器人模型 % theta d a alpha offset L1Link([0 0 …

利用Matlab绘制两个点电荷电场线【物理软件课程设计】

物理软件课程设计 2021年6月的课程设计题目之一:设计程序,画出两个点电荷之间电场线分布图 入门级别,代码思想可能有点像C语言,本人应用物理学专业。 资源链接:(4条消息) 利用MATLAB绘制点两个电荷电场线-C文档类资…

matlab描点写函数,matlab描点并标上点的序号

使用Kinect一帧可以获取构成人脸的121个点,每个点对应一个序号,其中121个点中有20个点描绘的唇部的点,但我们只能看出有20个点对应嘴唇,并不知道这20个点的序号,所以需要使用matlab建模并找出这20点对应的序号。 程序如…

matlab画三维散点图,调节点大小和图案

找了老半天的三维散点图,都没有。后来给我摸清楚了。 你随便画个三维散点,用scatter3 这个函数画。注意,plot是二维的 plot调节大小是 markersize 这个参数,但是三维没有。 可以画出图形后,用matlab自带的图形编辑器&…

Matlab画图和点标记

从csv中导出数据,然后需要在MATLAB图中进行标记个别点,但是利用MTALB自身标记的比较丑,因此搜了一下别的方法,具体效果如下,其中的*可以改成O或者其他的自定义的符号: 具体的主要代码如下: fi…

matlab绘制三维点云和点云凸包

matlab绘制三维点云和点云凸包 效果展示 1.在matlab命令窗口输入guide打开matlab的ui开发界面,按照下图的样式绘制界面。 2. 在GUIDE中鼠标右键点击选择素材文件夹按键,选择查看回调=>callback编辑回调函数。 function pushbutto…

matlab 绘制孤立点

绘制孤立点 clc,clear; X[1,3,5,6]; Y[3,4,1,5]; nlength(X); hold on for i1:nplot(X(i),Y(i),c*); endresult

Matlab制作高分辨率点线图

相较于其他软件,MATLAB在图片制作上上手难度较高,但其强大的代码功能使得处理出来的图片更加漂亮。直接附代码和效果图! x[100 125 150 175 200]; %定义x轴的坐标 sign["1#",2#,3#,4#,5#,Ave];[num,txt,raw]xlsread(D:\wudi\postg…

MATLAB 绘制点的地理空间分布,并用点的颜色或大小代表数值

%% 修改日期 2021/12/8clc clear close all%% 测试数据,第一列代表纬度,第二列经度,第三列则是点的值 txt [46.75296619 -69.1022775 0.31290975246.80735808 -69.06131914 0.39115348546.68438136 -68.40644856 -0.52491718547.68233472 -6…

Matlab 绘制 - 点和向量:向量加减的方法和源码

前言: 一些博客就是转了Matlab 的中文说明,可是他那个说明,他自己都说了不是很对。 本文从实践出发,详细介绍Matlab对 坐标空间的点和向量的绘制方法。 1 点的概念和画法: 1.1 一个平面上的点 plot(2, 3, ., MarkerS…

oracle一基础查询:单表,多表查询(交叉,内联,外联),分组聚合,子查询语法。

摘要&#xff1a;条件查询&#xff0c;别名&#xff0c;排序&#xff0c;聚合函数&#xff0c;where&#xff0c;having&#xff0c;联接查询&#xff0c;where in/exists/><子查询&#xff0c;&#xff0c;rownum伪列&#xff0c;模糊查询。 查询所有信息 select *from…

wps交叉表_使用WPS图表功能中的堆叠条形图制作日程交叉图

微软的项目&#xff0c;作为一个老式的项目管理软件&#xff0c;被许多朋友在工作中使用。它的功能相对完善&#xff0c;与微软的sharepoint服务器相结合&#xff0c;功能非常强大。一般来说&#xff0c;我们很少使用微软项目的所有功能。毕竟&#xff0c;与中国人的使用习惯还…

sql 交叉查询

日常开发中遇到多表查询时&#xff0c;首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等&#xff0c;但是这两种查询有时候不能满足需求。比如&#xff0c;左表一条关联右表多条记录时&#xff0c;我需要控制右表的某一条或多条记录跟左表匹配。貌似&#xff0c;INNER JOIN 或 L…