willard-yuan / hashing-baseline-for-image-retrieval

:octocat:Various hashing methods for image retrieval and serves as the baselines
http://yongyuan.name/habir/
615 stars 255 forks source link

CCA-ITQ实现 #2

Closed chenfsjz closed 8 years ago

chenfsjz commented 8 years ago

yuanyong 你好,我在您的另一篇博客中看到了关于原文CCA-ITQ的实现,它的主要思想是先要对图像的Gist特征进行CCA来Embedding,我用的是CIAFAR10的数据,在用CCA进行处理的时候结果出现了复数值,一直找不到原因,不知道您是怎样实现的?

willard-yuan commented 8 years ago

@chenfsjz , 我没用那个CCA做有监督的ITQ,作者公布里的源码我记得是有CCA的代码,你用作者的代码试试。

chenfsjz commented 8 years ago

是的,我就是用的作者的那个CCA,之前我是自己提取了GIST;我又用了你这个project里的cifar10-yunchao-gist,那个CCA里有几行code是这样的:

 % bit = 32, 64, 128 ...
 % [eigenvector,r] = cca(X, Y, 0.0001); % this computes CCA projections
 % eigenvector = eigenvector(:,1:bit)*diag(r(1:bit)); % this performs a scaling using eigenvalues
 % E = X*eigenvector; % final projection to obtain embedding E

调用完CCA后要根据特征向量和原始的特征来计算最后的embedding,但是它这里在计算特征值得时候是出现了复数值的,导致后面不能直接计算

willard-yuan commented 8 years ago

XY 对应得没问题?0.0001这个参数有做过调整?你自己再检查检查,我没用过这部分,这部分你应该比我更清楚。

kevinlin311tw commented 8 years ago

@chenfsjz I found you XD 我們實驗的時候也遇到這個問題,雖然特徵值是複數值,但虛部的值都非常非常小。有些文獻指出可以把它直接當real value繼續做ITQ。實際測試發現用這樣的方式做,CCAITQ效果依然非常好

之所以會出現複數,是因為cca.m的第39行 r = sqrt(real(r)); r可能會包含負數,開根號後就變複數!

willard-yuan commented 8 years ago

@kevinlin311tw 我也跟着长知识了, Thanks.

chenfsjz commented 8 years ago

@kevinlin311tw Thank you very much! 这个问题由于联系不到原作者,困扰了好长时间 :)