1. 程式人生 > >基於深度學習的Person Re-ID(特徵提取)

基於深度學習的Person Re-ID(特徵提取)

一. CNN特徵提取

       通過上一篇文章的學習,我們已經知道,我們訓練的目的在於尋找一種特徵對映方法,使得對映後的特徵 “類內距離最小,類間距離最大”,這種特徵對映 可以看作是 空間投影,選擇一組基,得到基於這組基的特徵變換,與 PCA 有點像。

       這一篇我們講的就是基於 CNN的特徵提取,特徵提取過程也就是訓練過程,訓練結果就是 CNN 的引數。

       以 Triplet Function 為例,對於 一個輸入影象三元組 Trip<I, +,I->,通過一個共享引數的網路進行訓練,通過下圖可以看到,三個影象 <I, +,I-> 分別得到了一個特徵空間,這個特徵空間只要滿足 前面提到的距離度量函式(後面的Distance Cost),那麼訓練就算完成了。

       這裡面有幾個關鍵點:

  • 提取全域性特徵與區域性特徵結合,可以學到更能描述行人的特徵;
  • CNN採用共享權值方式進行特徵提取;
  • Distance Cost 作為Loss函式驅動 CNN特徵引數調整;

        

二. 訓練過程

       還是通過 Loss 函式來看訓練過程(每N個Trip樣本訓練一次):

       

       前面已經講過,Loss函式表示兩部分的誤差和,即:

       1) t1表示 I與正樣本的距離 與 I到負樣本的距離的Margin;

       2) t2表示 I與正樣本的距離 小於一個常數;

       下面步入正題,這兩個引數 是否有必要?ok,我們第一步就是去除拍腦袋引數,重新設計 Loss函式為:

       

        目標是求Loss函式儘可能的小,當然我們知道這個公式的問題在於 Loss 只會儘可能的小,不可能為0,同時含有除法,可能按照我們的理解,這並不是一個好的Loss函式,之前我們做 CNN Loss函式的時候都是與 Ground Truth 進行對比,與 Ground Truth 一致的時候,Loss應該為0。

       那麼這個函式如何改進呢? (想幾個idea,哈哈)

三. New Idea

       提出新的思路,如何通過訓練的方法更進一步 對 Loss Func 進行加工,比如:

1)借鑑 Pair-wise 的方法,得到的結果為 負樣本-正樣本的差;

2)或者通過某種換算,將正樣本距離對映為0,這樣就只需要考慮一種距離的Loss;

3)將兩種距離的比值近似為線性函式展開;

       另外,針對卷積部分,有兩個思路可以參考:

1)可以基於上面 Part-Model 進行分塊,分塊的 卷積結果 通過加權來設計,從而提高其中一部分的影響力;

2)通過馬氏距離替換原來的歐式距離,馬氏距離反應了方差,對類比型的距離度量更合適;

       先 Mark 這幾種思路,有想改進演算法的朋友可以多交流!