学习笔记: Top-push Video-based Person Re-identification

简介

Top-push Video-based Person Re-identification[1]这篇论文是 CVPR 2016 上关于行人再识别(Person Re-identification)的一篇论文,文中针对图片序列(视频)提取 HOG3D 等特征,并提出 TDL(Top-push Distance Learning) 的距离度量学习方法。
TDL 跟近年来的不少方法(如 KISSME[2] )同样,也是基于马氏距离(Mahalanobis distance)进行学习。
马氏距离是这样的:
git

\[ D(\vec{x}_i, \vec{x}_j) = (\vec{x}_i- \vec{x}_j)^\mathrm{T} \mathbf{M} (\vec{x}_i- \vec{x}_j) \tag{1} \] github


上式中 \(\vec{x}_i\)\(\vec{x}_j\) 表明两个特征向量。当 \(\mathbf{M}\) 为单位矩阵时,上式计算的就是欧式距离。
文中对该式作了一些简化/优化,使用 \(\mathbf{X}_{i,j}\) 来表示两个向量的外积:

\[ \mathbf{X}_{i,j} = (\vec{x}_i- \vec{x}_j) (\vec{x}_i- \vec{x}_j)^\mathrm{T} \tag{2} \] 算法


这样距离就能表示成:

\[ D(\vec{x}_i, \vec{x}_j) = tr(\mathbf{M} \mathbf{X}_{i,j}) \tag{3} \] 数据库


TDL 目标

一是最小化类内距离:
框架

\[ min \sum_{\vec{x}_i,\vec{x}_i,y_i=y_j} D(\vec{x}_i, \vec{x}_j) \tag{4} \] ide


二是使最小类间距离小于类内距离

\[ D(\vec{x}_i, \vec{x}_j) + \rho < \min\limits_{y_k \ne y_i}D(\vec{x}_i, \vec{x}_j),y_i = y_j \tag{5} \] 函数


将上式写成式(5)的形式:

\[ min \sum_{\vec{x}_i,\vec{x}_i,y_i=y_j} \max\{ D(\vec{x}_i, \vec{x}_j) - \min\limits_{y_k \ne y_i}D(\vec{x}_i, \vec{x}_k) + \rho, 0 \} \tag{6} \] 学习

目标二在具体操做时,是去寻找与\(\vec{x}_i\)距离最小的类间特征向量,这样作能减小一些计算量,但效果会不会受到影响就不得而知了。测试


TDL 损失函数

根据式(4)和式(6),构建 TDL 的损失函数:
优化

\[ f(\mathbf{M}) = (1-\alpha)\sum_{\vec{x}_i,\vec{x}_i,y_i=y_j}tr(\mathbf{M} \mathbf{X}_{i,j}) + \alpha\sum_{\vec{x}_i,\vec{x}_i,y_i=y_j}\max\{ D(\vec{x}_i, \vec{x}_j) - \min\limits_{y_k \ne y_i}D(\vec{x}_i, \vec{x}_k) + \rho, 0 \} \tag{7} \]


\(\mathbf{M}\) 求偏导,获得梯度函数:

\[ \mathbf{G}_t = \frac{\partial f}{\mathbf{M}}|_{\mathbf{M}=\mathbf{M}_t} = (1-\alpha)\sum_{i,j} \mathbf{X}_{i,j} + \alpha\sum_{(i,j,k) \in \mathcal{N}(\mathbf{M}_t)}(\mathbf{X}_{i,j}-\mathbf{X}_{i,k}) \tag{8} \]


算法流程

TDL 也使用梯度降低法,经过不断的迭代更新来优化 \(\mathbf{M}\)。这是我本身总结的 TDL 算法流程:

  • 初始化:令 \(\mathbf{M}\) 为单位矩阵;
  • 迭代:直至收敛或达到最大迭代次数:
    1. 寻找最小类内距离 \(D(\vec{x}_i, \vec{x}_j)\)
    2. 寻找与 xi 对应的最小类间距离 \(D(\vec{x}_k, \vec{x}_i)\) ,构建 triggered set \(\{i,j,k\}\)
    3. 计算梯度 \(\mathbf{G}\)
    4. 更新 \(\mathbf{M}_{t+1} = \mathbf{M}_{t} - \lambda \mathbf{G}_{t}\)
    5. \(\mathbf{M}\) 保持正半定

算法实现

原做者的主页给出了 Demo,可是关键部分是加密的。不过算法不算复杂,本身实现起来也很方便。
迭代中的第5步,我在实现的时候直接用了网上找的一个叫作 nearestPSD 的函数。
原做者为了方便起见,实现的是 single-shot 版本的 TDL,我实现的是 multi-shot,不过速度上不及原版。
(这里更正一下,原做者给的 Demo 应该是 multi-shot 的,只是在这篇文章中,使用了 single-shot 的实验配置。这一点原文中有说明。2017-07-17)
我用本身实现的 TDL 替换掉了 Demo 中的加密部分,实验结果和原结果相差不大。

以后我将本身写的 TDL 放入了 KISSME 做者提供的测试框架里,使用 LFW 数据库来测试,结果很尴尬……还不如欧式距离。
我又把原版 TDL 放入 KISSME 的 learnPairwise 方法里面,一样使用 LFW 测试,结果内存开销巨大(几十G),跑了一天没结果,遂放弃。
猜想可能要搭配 TDL 原文中的特征一块儿使用才能发挥做用。

个人实现的 TDL:
https://github.com/tyusr/CodeImplement/tree/master/TDL


参考文献

[1] You J, Wu A, Li X, et al. Top-push video-based person re-identification[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 1345-1353.
[2] Koestinger M, Hirzer M, Wohlhart P, et al. Large scale metric learning from equivalence constraints[C]//Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012: 2288-2295.


知识共享许可协议
本做品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

相关文章
相关标签/搜索