學習筆記: 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 國際許可協議進行許可。

相關文章
相關標籤/搜索