三元組損失“Deep Metric Learning via Lifted Structured Feature Embedding”

http://www.cnblogs.com/wangxiaocvpr/p/5921074.html

caffe實現解釋:https://blog.csdn.net/zziahgf/article/details/78568696

tensorflow實現:http://10.1.2.209/lianjie/install-packages/blob/master/metric_loss_ops.py#L410

caffe實現:https://github.com/rksltnl/Deep-Metric-Learning-CVPR16/

將mini-batch中樣本對距離向量(O(m) )提升到距離矩陣(O(m2) ),並基於此定義了一個新的結構化損失函數。

對比損失及triplet loss迴歸

略。

方法描述

使用訓練集中的所有正樣本對及負樣本對定義結構化損失函數:

J=12Pi,jPmax0,Ji,j2

Ji,j=maxmaxi,kNα-Di,k,maxj,lNα-Dj,l+Di,j

其中P 是所有的正樣本對,N 是所有的負樣本對,這個函數有兩個計算難點:(1)它是非平滑的,(2)計算梯度需要挖掘所有的樣本對好幾次。

 

使用兩種方式解決上述問題:首先在函數上優化一個平滑的上邊界,其次,對於大數據常用的方法類似,我們採用隨機的方法(隨機採樣一部分正樣本對),在選擇困難樣本對,使用mini-batch中所有樣本的信息。

圖2a,2b顯示了batch_size = 6的對比和三元損失嵌入空間,增加額外的頂點比增加額外的邊計算量大的多,增加頂點帶來了額外的I/O、存儲。

 

爲使用batch的全部信息,使用batch中所有的樣本對,即從O(m) 到Om2 ,圖2c展示了將樣本對轉化成全連接的緻密的矩陣距離。加入某batch具有c維特徵X∈Rm×c ,batch所有特徵平方範數組成的列向量爲x=f(x1)22,…,f(xm)22T ,平方距離矩陣可以使用下式計算:

D2=x1T+1xT-2XXT

其中

Dij2=fxi-f(xj)22

 

隨機樣本對產生的負邊含有的信息非常少,它們基本是easy樣本,加入了採樣策略,隨機採樣一小部分正樣本對,然後增加困難的負樣本。圖3顯示了一個正樣本對困難負樣本的挖掘過程,對於正樣本對的每個樣本,尋找困難負樣本,這與triplet損失中只對anchor找負樣本不同。這個過程可以使用平方距離矩陣D2 快速實現。

 

由於採用嵌套的max 函數來尋找單個 hardest negative 往往導致網絡收斂到一個 bad 局部最優解,使用平滑上邊界優化,每個batch的損失函數定義爲:

Ji,j=logi,kNexp⁡{α-Di,k}+j,lNexp⁡{α-Dj,l}+Di,j

J=12Pi,jPmax0,Ji,j2

梯度後向傳播的算法爲:

損失函數對於距離的梯度爲:

JDi,j=1PJi,j1Ji,j>0

JDi,k=1PJi,j1Ji,j>0-exp⁡{α-Di,k}exp⁡{Ji,j-Di,j}

JDj,l=1PJi,j1Ji,j>0-exp⁡{α-Dj,l}exp⁡{Ji,j-Di,j}

 

圖4介紹了對比損失和triplet損失可能失敗的幾種情況,對於對比嵌入(圖4a),當隨機挑選的負樣本與另外一類的某樣本共線時,失敗;對於triplet嵌入(圖4b),當採樣的負樣本在採樣的正樣本和anchor的margin邊界內時失敗;這是對比損失和三元損失均將正樣本xi推向了第三類。在提出的嵌入空間中(4c),給出了足夠多的隨機樣本,在margin邊界內的困難負樣本xk將正樣本xi推向了正確的方向。

 

實驗結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章