度量学习方法 - KISSME

        KISSME(keep it simple and straightforward metric), 属于有监督的线性度量学习方法,本质上还是学习马氏距离中的矩阵M.


推导

        首先,认为对于样本对,它们之间的差异程度(dissimilar)可以通过似然比检验(likelihood ratio test)来观测,如下式所示:

        其中,H0假设该样本对为负样本对(不相似),H1假设该样本对为正样本对(相似)。值越大,H0假设越可能符合,样本差异程度大; 反之,越小,则样本更相似。为了使样本在特征空间中的实际位置不影响结果,我们用样本对的差分来代替,从而得到零均值的分布。公式重写如下:

        假设上式中概率密度分布函数为高斯分布(均值为0),则有:

        其中,为样本对标签,若样本对相似,则=1, 否则为0.  式中的协方差矩阵计算如下:


        这里原文中有一段话不太理解:The maximum likelihood estimate of the Gaussian is equivalent to minimizing the Mahalanobis distances from the mean in a least squares manner. This allows us to find respective relevant directions for the two independent sets.

         接下来,对上面高斯分布的似然比公式取对数,得到:

         去掉只提供偏置的常数项,化简得到:


        最终得到反映了对数似然比检验的属性的马氏距离(Mahalanobis distance)度量:

 

算法

       其中矩阵M的计算方法如下,首先,计算

        接着我们需要强制为半正定矩阵(为了满足度量可逆的特性),具体做法则是进行特征值分解,将小于等于0的特征值强行设置为很小的正数,再重构矩阵,即为马氏距离度量中的矩阵M.

相关matlab代码可参考 https://github.com/NEU-Gou/kernel-metric-learning-reid 中的KISSME部分。


参考文献

[1] Hirzer M. Large scale metric learning from equivalence constraints[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2012:2288-2295.

[2] Xiong F, Gou M, Camps O, et al. Person Re-Identification Using Kernel-Based Metric Learning Methods[C]// European Conference on Computer Vision. Springer, Cham, 2014:1-16.


  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KISSME算法是一种基于成对差异比较的度量学习方法,用于计算两个图像之间的相似度。在Matlab中,可以使用VLFeat工具箱实现KISSME算法。以下是一个简单的示例代码: 首先,安装VLFeat工具箱并添加到Matlab路径中: ```matlab % 下载VLFeat工具箱并解压 % https://www.vlfeat.org/download/vlfeat-0.9.21-bin.tar.gz % 将解压后的文件夹添加到Matlab路径中 addpath('/path/to/vlfeat'); vl_setup; ``` 然后,加载图像和标签数据。假设我们有两个数据集:gallery和probe,每个数据集包含图像和对应的标签。 ```matlab % 加载图像和标签数据 gallery_images = ...; % 一个 MxNxC 的三维矩阵,表示M个图像,每个图像大小为N x N,C为通道数 gallery_labels = ...; % 一个Mx1的向量,表示每个图像的标签 probe_images = ...; % 一个 PxNxC 的三维矩阵,表示P个图像,每个图像大小为N x N,C为通道数 probe_labels = ...; % 一个Px1的向量,表示每个图像的标签 ``` 接下来,使用VLFeat工具箱中的`kissme_train`函数训练KISSME模型。 ```matlab % 训练KISSME模型 x1 = gallery_images; x2 = probe_images; labels1 = gallery_labels; labels2 = probe_labels; [~, model] = kissme_train(x1, labels1, x2, labels2); ``` 最后,使用VLFeat工具箱中的`kissme_predict`函数计算两个图像之间的相似度。 ```matlab % 计算相似度 im1 = ...; % 第一个图像 im2 = ...; % 第二个图像 score = kissme_predict(im1, im2, model); ``` 注意,KISSME算法的计算复杂度较高,特别是在处理大规模数据集时。因此,建议使用GPU加速。可以在VLFeat工具箱中设置GPU模式: ```matlab % 启用GPU加速 vl_setup('gpu'); vl_set_cuda_device(device_id); % 设置使用的GPU设备ID ``` 其中,`device_id`为GPU设备的ID号,从1开始编号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值