CVPR 2020丨碼隆科技提出跨越時空的樣本配對,解決深度度量學習痛點
論文地址: 開源地址: 本篇論文提出了 XBM 方法,能夠用極小的代價,提供巨量的樣本對,為 pair-based 的深度度量學習方法取得巨大的效果提升。這種提升難例挖掘效果的方式突破了過去兩個傳統思路:加權和聚類,並且效果也更加簡單、直接,很好地解決了深度度量學習的痛點。XBM 在多個國際通用的圖像搜索標準數據庫上(比如 SOP、In-Shop 和 VehicleID 等),取得了目前最好的結果。 1 背景和動機 難例挖掘是深度度量學習領域中的核心問題,最近有頗多研究都通過改進採樣或者加權方案來解決這一難題,目前主要兩種思路: 第一種思路是在 mini-batch 內下功夫,對於 mini-batch 內的樣本對,從各種角度去衡量其難度,然後給予難樣本對更高權重,比如 N-pairs、Lifted Struture Loss、MS Loss 使用的就是此種方案。 第二種思路是在 mini-batch 的生成做文章,比如 HTL、Divide and Conquer,他們的做法雖然看上去各有不同,但是整體思路有異曲同工之處。大致思路都是對整個數據集進行聚類,每次生成 mini-batch 不是從整個數據集去採樣,而是從一個子集,或者説一個聚類小簇中去採樣。這樣一來,由於採樣範圍本身更加集中,生成的 mini-batch 中難例的比例自然也會更大,某種程度上也能解決問題。 然而,無論是第一種方法的額外注重難樣本,還是第二種方法的小範圍採樣,他們的難例的挖掘能力其實依然有一個天花板——那就是 mini-batch 的大小。這個 mini-batch 的大小決定了在模型中單次迭代更新中,可以利用的樣本對的總量。因此,即使是很精細的採樣加權方法,在 mini-batch 大小有限的情況下,也很難有頂級的表現。我們在三個標準圖像檢索數據庫上進行了實驗,基於三種標準的 pair-based 方法,我們發現隨着 mini-batch 變大,效果(Recall@1)大幅提升。實驗結果如下圖: 可以看出,隨着 mini-batch 的增大,效果有顯著提升。但是,在實際工業應用中 mini-batch 越大,訓練所需要的 GPU 或 TPU 就越多,即使計算資源有充分保證,在多機多卡的訓練過程中,如何在工程上保證通信的效率也是一個有挑戰的問題。 2 特徵偏移 由此,我們希望另闢蹊徑,得以在 mini-batch 有限的情況下,也能獲得充足的難例樣本對。首先,必須突破深度度量學習一直以來的一個思維侷限——僅在對當前 mini-batch 裏的樣本對兩兩比較,形成樣本對。以此我們引入了 XBM(Cross-batch Memory)這一方法來突破侷限,跨越時空進行難例挖掘,把過去的 mini-batch 的樣本提取的特徵也拿過來與當前 mini-batch 作比較,構建樣本對。 我們將樣本特徵隨着模型訓練的偏移量,稱之為特徵偏移(Feature Drift)。從上圖我們發現,在訓練的一開始,模型還沒有穩定,特徵劇烈變化,每過 100 次迭代,特徵偏移大約 0.7 以上。但是,隨着訓練的進行,模型逐步穩定,特徵的偏移也變小。我們稱這個現象為慢偏移(Slow Drift),這是我們可以利用的一點。 3 方法梗概 我們發現,雖然在訓練的前 3K iterations,mini-batch 過去的提取特徵與當前模型偏差很大,但是,隨着訓練時間的延長,過去的迭代裏所提取過的特徵,逐漸展示為當前模型的一個有效近似。我們要做的不過是把這些特徵給存下來,每個特徵不過是 128 個 float 的數組,即便我們存下了過去 100 個 mini-batch 的特徵,不過是6400個(假設 batch size = 64)float 數組,所需要不過是幾十 MB 的顯存。而它帶來的好處是顯而易見的,我們能夠組成的樣本對的個數是僅僅利用當前 mini-batch 的一百倍。即便這些特徵不能高精準地反映當前模型的信息,但是隻要特徵偏移在合理的範圍內,這種數量上帶來的好處,可以完全補足這種誤差帶來的副作用。 具體來看,我們的 XBM 的方法架構大致如下: 偽代碼如下: 我們的 XBM 從結構上非常簡單清晰。我們先訓練一個 epoch 左右,等待特徵偏移變小。然後,我們使用 XBM:一個特徵隊列去記憶過去 mini-batch 的特徵,每次迭代都會把當前 mini-batch 提取出來的新鮮特徵加入隊列,並把最舊的特徵踢出隊列,從而保證 XBM 裏的特徵儘量是最新的。每次去構建樣本隊列的時候,我們將當前 mini-batch 和 XBM 裏的所有特徵都進行配對比較,從而形成了巨量的樣本對。如果説 XBM 存儲了過去 100 個 mini-batch,那麼其所產生的樣本對就是基於 mini-batch 方法的 100 倍。 不難發現,XBM 其實直接和過去基於樣本對的方法結合,只需要把原來的 mini-batch 內的樣本對換成當前 mini-batch 和 XBM 的特徵構成的樣本對就可以了。所以,我們通過 XBM 這種存儲特徵的機制,能夠讓不同時序的 mini-batch 的特徵成功配對。 4 消融實驗一 首先,我們在三個常用的檢索數據集,和三個基於樣本對的深度學習的方法上,使用 XBM 進行測試,同時控制其他的設置全部不變。我們發現,XBM 帶來的效果很明顯。尤其是在最基本的對比損失(Contrastive Loss)上,可以看到,本來這個方法只利用 mini-batch 內的樣本時,其效果並不顯著,但是 XBM 帶來了顯著的效果提升。在三個數據集, Recall@1 都至少提升 10 個點,尤其是 VehicleID 數據集的最大(Large)測試集,效果提升了 22 個點,從 70.0 到 92.5。 5 消融實驗二 關於 mini-batch 的大小對結果的影響, 從上圖可發現三點: 1、無論是否使用 XBM,mini-batch 越大,效果越好; 2、XBM 方法即便是使用很小的 batch (16), 也比沒有 XBM 使用大的 batch (256) 效果好; 3、 由於 XBM 本身可以提供正樣本對,所以可以不一定要用 PK sampler 來生成 mini-batch,而是可以直接使用原始的 shuffle sampler,效果相似。 6 計算資源消耗 下圖我們展示了在 SOP 上訓練 XBM 時的計算資源消耗,即便把整個訓練集(50K )的特徵都加載到 XBM,不過需要 0.2GB 的顯存;而如果是使用增大 batch 的方法,會額外需要 15GB 顯存,是 XBM 的 80 倍,但是效果的提升比 XBM 差很多。畢竟 XBM 僅僅需要存特徵,特徵也是直過去的 mini-batch 的前向計算的結果,計算資源的需求很小。 7 對比 SOTA 與最近的深度度量學習方法對比,我們在四個檢索數據庫上效果均大幅提升,這裏僅列出 VehicleID 的效果,其他數據集的效果見原論文。 簡單來説,不同於部分文章中使用更好的網絡結構,更大的輸出維度,或者更大的 mini-batch 來提升效果,強行 SOTA。我們列出 XBM 在 64 的 mini-batch 在不同的主幹網絡下及各種維度下的效果,其效果一直是最好的。 8 可視化 更多可視化見論文補充材料,有更多實例説明效果。 9 總結與展望 第一,本文提出的 XBM 方法能夠記住過去的特徵,使得模型的訓練不再僅僅依靠當前 mini-batch 的樣本,而是可以跨越時空進行樣本配對。從而用極小的代價,提供了巨量的樣本對,為 pair-based 的深度度量學習方法取得了巨大的效果提升。這種提升難例挖掘效果的方式,也是突破了過去兩個傳統思路:加權和聚類,並且效果也更加簡單、直接,很好地解決了深度度量學習的痛點。 第二,其實 Memory 機制並不是本文原創,但是用 Memory 來做難例挖掘是一個全新的嘗試。同樣在 CVPR 2020 獲得 Oral,也是由 Kaiming He 作為一作的 MoCo 也是這種思路。本文的方法其實可以認為是 MoCo 在 m=0 的特例,Kaiming 通過動量更新 key encoder,可以直接控制住特徵偏移。作者認為,這種方法還會在很多任務帶來提升,不侷限於 Kaiming 的自監督表示學習,以及此前我們一直關注研究的度量學習(或者説監督表示學習)。 第三,在本文中,雖然 XBM 在所有的 pair-based 的方法都有提升,但是明顯在對比損失(Contrastive Loss)上提升最大,具體原因待考。另外,我們也把在無監督表示上表現很好的 infoNCE 方法用到了深度度量學習,但效果並不顯著。作者認為這兩個問題的答案是同一個,且有值得深究的價值,希望在後續研究中進行進一步跟進探索。