論文筆記之: Deep Metric Learning via Lifted Structured Feature Embedding


 

Deep Metric Learning via Lifted Structured Feature Embedding

CVPR 2016 

 

  摘要:本文提出一種距離度量的方法,充分的發揮 training batches 的優勢,by lifting the vector of pairwise distances within the batch to the matrix of pairwise distances. 剛開始看這個摘要,有點懵逼,不怕,后面會知道這段英文是啥意思的。

  

  引言部分開頭講了距離相似性度量的重要性,並且應用廣泛。這里提到了三元組損失函數 (triplet loss),就是講在訓練的過程當中,盡可能的拉近兩個相同物體之間的距離,而拉遠不同物體之間的距離;這種做法會比普通的訓練方法得到更好的效果。但是,文章中提到,現有的三元組方法卻無法充分利用 minibatch SGD training 的 training batches 的優勢。現有的方法首先隨機的采樣圖像對或者三元組,構建訓練 batches, 計算每一個 pairs or triplets 的損失。本文提出一種方法,稱為:lifts,將 the vector of pairwise distances 轉換成 the matrix of pairwise distance. 然后在 lifts problem 上設計了一個新的結構損失目標。結果表明,在 GoogleLeNet network 上取得了比其他方法都要好的結果。 

 

  然后作者簡單的回顧了一下關於判別性訓練網絡(discriminatively training networks)來學習 semantic embedding。大致結構預覽圖如下所示:

  首先是: Contrastive embedding. 

  這種方法在 paired data ${(x_i, x_j, y_{ij})}$上進行訓練。這種 contrastive training 最小化具有相同 label 類別的樣本之間的距離,然后對不同label的樣本,但是其距離小於 $\alpha$ 的 negative pair 給予懲罰。代價函數的定義為:

 

  其中,m 代表batch中圖像的個數,f(*)是網路輸出的特征,即原文中表達的:the feature embedding output from the network. $D_{i, j}$ 是兩個樣本特征之間歐式距離的度量。標簽 $y_{i, j} \in {0, 1}$表明是否樣本對來自同一個類別。$[*]_+$ 操作是 the hinge function max(0, *)。

 

  第二個是:Triplet embedding

  這個就是著名的三元組損失函數了,即:找一個 anchor,然后找一個正樣本,一個負樣本。訓練的目的就是:鼓勵網絡找到一個 embedding 使得 xa and xn 之間的距離大於 xa and xp 加上一個 margin $\alpha$ 的和。損失函數定義為:

  其中,D仍然表示樣本之間特征的距離。

 

  然后就是本文提出的一種度量方法了:

  Deep metric learning via lifted structured feature embedding. 

   我們基於訓練集合的正負樣本,定義了一個結構化的損失函數:  

  其中,P 是正樣本的集合,N 是負樣本的集合。這個函數提出了兩個計算上的挑戰:

  1. 非平滑(non-smooth)

  2. 評價和計算其子梯度需要最小化所有樣本對若干次。

 

  我們以兩種方式解決了上述挑戰:

  首先,我們優化上述函數的一個平滑上界;

  第二,對於大數據常用的方法類似,我們采用隨機的方法。

  然而,前人的工作都是用SGD的方法,隨機的均勻的選擇 pairs or triplets。我們的方法從這之中得到了借鑒:

    (1). it biases the sample towards including "difficult" pairs, just like a subgradient of $J_{i,j}$ would use the close negative pairs; 

  (2). 一次采樣就充分的利用了一個 mini-batch的全部信息,而不僅僅是兩個pair之間的信息。 

 

  為了充分的利用這個 batch,一個關鍵的 idea 是增強 mini-batch 的優化以利用所有的pairs。

  需要注意的是:隨機采樣的樣本對之間的 negative edges 攜帶了非常有限的信息。

  

  所以,我們的方法改為並非完全隨機,而是引入了重要性采樣的元素。我們隨機的采樣了一些 positive pairs,然后添加了一些他們的 difficult neighbors 來訓練 mini-batch. 這個增強增加了子梯度會用到的相關信息。下圖展示了一個 positive pair 在一個 batch 中的搜索過程,即:在一個 positive pair 的圖像中,我們找到其 close(hard)negative images。  

  注意到我們的方法可以從兩端開始搜索,而三元組則僅僅只能和定義好的結構上的元素進行搜索。

 

 

  

 

 

 

   此外,搜索 single hardest negative with nested max function 實際上會導致網絡收斂到一個 bad local optimum. 所以我們采用了如下的 smooth upper bound,所以 我們的損失函數定義為:  

 

  其中,P是batch中 positive pairs 集合,N 是negative pairs 的集合。后向傳播梯度可以如算法1所示的那樣,對應距離的梯度為:

  

    其中的 1[*] 是指示函數,如果括號內的判斷為真,那么輸出為1,否則就是0. 

  本文的算法流程圖,如下所示:

 

 

  


  結果展示:

 

 

 

  

 

 

 

 

 


 

    文章總結

  可以看出,本文是在三元組損失函數基礎上的一個改進。並非僅僅考慮預先定義好的樣本之間的差異性,而是考慮到一個 batches 內部 所有的樣本之間的差異。在這個過程中,文章中引入了類似 hard negative mining 的思想,考慮到正負樣本之間的難易程度。並且為了避免網絡的訓練陷入到 局部最優的bug中去,引入了損失函數的上界來緩解這個問題。

  一個看似不大的改動,卻可以發到CVPR,也從某個角度說明了這個方法的價值。

 

  難道,三元組損失函數就這樣被這個算法擊敗了? 自己當初看到三元組損失函數的時候,為什么就沒有忘這個方向去思考呢???

  還有一個疑問是:為什么這種方法的操作,稱為:lifted structured feature embedding ? 

  難道說,是因為這個左右移動的搜索 hard negative samples 的過程類似於電梯(lift)?那 feature embedding 怎么理解呢? embedding 是映射,難道是:特征映射么??

 

  

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM