天天看點

HardNet 論文詳解

HardNet

本文提供了相應的代碼,是基于 pytorch。

主要思路

本文主要是提出了新的 loss 用于特征 metric 的學習。提出的 loss 可以最大化一個 training batch 中最近的正負樣本之間的距離,而且對淺層以及深層的 CNN 網絡都有作用。本文基于之前的 L2-Net 工作,把 loss 更換成本文提出的 loss,這裡叫做 HardNet。

基本流程

采樣和 loss

本文的目标函數模仿 SIFT 的比對規則。采樣過程如下圖所示:

HardNet 論文詳解

X = ( A i , P i ) i = 1.. n \mathcal { X } = \left( A _ { i } , P _ { i } \right) _ { i = 1 . . n } X=(Ai​,Pi​)i=1..n​ 表示一個 training batch,其中有 2 n 2n 2n 個batches,有 n n n 個比對 pair, A i A_i Ai​ 和 P i P_i Pi​ 代表比對的 patch pair。

其中 L2 距離矩陣為

D = pdist ⁡ ( a , p ) d ( a i , p j ) = 2 − 2 a i p j , i = 1.. n , j = 1.. n D = \operatorname { pdist } ( a , p ) \\ d \left( a _ { i } , p _ { j } \right) = \sqrt { 2 - 2 a _ { i } p _ { j } } , i = 1 . . n , j = 1 . . n D=pdist(a,p)d(ai​,pj​)=2−2ai​pj​

​,i=1..n,j=1..n

對于比對 patch pair 的描述符 a i a_i ai​ 和 p i p_i pi​,距離它們各自最近的非比對描述符,如上圖所示分别為為 p 4 p_4 p4​ 和 a 2 a_2 a2​,相關定義如下:

a i a_i ai​ 表示 anchor 描述符

p i p_i pi​ 表示 positive 描述符

p j m i n p _ { j _ { m i n } } pjmin​​ 表示距離 a i a_i ai​ 最近的非比對描述符,其中 j min ⁡ = arg ⁡ min ⁡ j = 1.. n , j ≠ i d ( a i , p j ) j _ { \min } = \arg \min _ { j = 1 . . n , j \neq i } d \left( a _ { i } , p _ { j } \right) jmin​=argminj=1..n,j̸​=i​d(ai​,pj​)

a k m i n a _ { k _ { m i n } } akmin​​ 表示距離 p i p_i pi​ 最近的非比對描述符,其中 k min ⁡ = arg ⁡ min ⁡ k = 1.. n , k ≠ i d ( a k , p i ) k _ { \min } = \arg \min _ { k = 1 . . n , k \neq i } d \left( a _ { k } , p _ { i } \right) kmin​=argmink=1..n,k̸​=i​d(ak​,pi​)

這樣對于每個比對的 patch pair 在都可以生成一個四元組 ( a i , p i , p j m i n , a k m i n ) ​ (a_i,p_i,p _ { j _ { m i n } },a _ { k _ { m i n } })​ (ai​,pi​,pjmin​​,akmin​​)​,然後根據情況生成相應三元組如下:

&ThickSpace; β = { ( a i , p i , p j m i n ) d ( a i , p j m i n ) &lt; d ( a k m i n , p i ) ( p i , a i , a k m i n ) otherwise \; \beta = \begin{cases} (a_i,p_i,p _ { j _ { m i n } }) &amp; d \left( a _ { i } , p _ { j _ { m i n } } \right) &lt; d \left( a _ { k _ { m i n } } , p _ { i } \right) \\ \left( p _ { i } , a _ { i } , a _ { k _ { m i n } } \right) &amp; \text{otherwise} \end{cases} β={(ai​,pi​,pjmin​​)(pi​,ai​,akmin​​)​d(ai​,pjmin​​)<d(akmin​​,pi​)otherwise​

是以每個 training batch 都生成了 n n n 個三元組用于計算最後的 loss 函數,具體如下:

L = 1 n ∑ i = 1 , n max ⁡ ( 0 , 1 + d ( a i , p i ) − min ⁡ ( d ( a i , p j m i n ) , d ( a k m i n , p i ) ) ) L = \frac { 1 } { n } \sum _ { i = 1 , n } \max \left( 0,1 + d \left( a _ { i } , p _ { i } \right) - \min \left( d \left( a _ { i } , p _ { j _ { m i n } } \right) , d \left( a _ { k _ { m i n } } , p _ { i } \right) \right) \right) L=n1​i=1,n∑​max(0,1+d(ai​,pi​)−min(d(ai​,pjmin​​),d(akmin​​,pi​)))

其中 min ⁡ ( d ( a i , p j m i n ) , d ( a k m i n , p i ) \min \left( d \left( a _ { i } , p _ { j _ { m i n } } \right) , d \left( a _ { k _ { m i n } } , p _ { i } \right)\right. min(d(ai​,pjmin​​),d(akmin​​,pi​) 在上面三元組建構中已經預先計算。

和 L2-Net 不同,本文沒使用學習過程中間的 feature maps 進行額外的監督也沒現在描述符各個次元直接的關聯性,利用上面的 loss 函數沒有導緻 overfitting 情況。

網絡架構

本文是直接采用的是L2-Net的網絡結構,這裡把它展開了,如下圖所示:

HardNet 論文詳解
其他關于網絡結構更詳細的内容,參考L2-Net

本文中實驗發現使用 pooling 層降維會降低描述符性能。

輸入是 32 × 32 32 \times 32 32×32 灰階圖,利用每個 patch 的 mean 和 标準差去歸一化。

關于其他的訓練超參參考論文。

試驗

Brown

本文使用 Brown 資料集訓練和測試。Brown 資料集包含 Liberty,Notre Dame 和 Yosemite 三個子集,每個子集包含 400 k 400k 400k 個 64 × 64 64 \times 64 64×64 的 patches。每個子集包含 100 k 100k 100k 的比對和非比對 patch pairs 用于測試,然後在該測試集上比較 FPR95(false positive rate at 95% recall),結果如下圖所示:

HardNet 論文詳解

其中也比較了 FDR((false discovery rate),主要是被比較的文中給出該名額,這裡為了公平,在該基礎上計算了 FPR 進行統一比較。

其中都是在一個子集上訓練然後在另外兩個子集上測試,後面試驗比較的話都是在 Liberty 集合上訓練。

HPatches

和其他傳統特征和學習特征在 HPatches 基準測試集上進行了比較,結果如下圖所示:

HardNet 論文詳解

其中上面從左到右三個分别表示 HPatches 提供的三個互補的測試任務,包括 patch verification,patch matching和patch retrieval。

其中 verification 任務分了 SAMESEQ 和 DIFFSEQ 兩個子任務,表示負樣本是不是來自于同一個 seq 圖像序列。

其中 matching 任務分了 VIEW 和 ILLUM 兩個子任務,表示視角和光線的變換因素,同時根據幾何擾動的級别區分了 EASY,HARD 和 TOUGH 三個不同的 patch groups。

如果想深入了解 HPatches 基準測試集或者名額,可以參考 HPatches 工作。

還針對 patch retrieval 中的 distractors 數目(測試集中非比對 patches 的數目)變化性能的變化實驗,結果如下圖所示:

HardNet 論文詳解

上面測試用的訓練集之前說明了都是在 Brown 的 Liberty 進行訓練,下面更換訓練集做了一些對比實驗,結果如下圖所示:

HardNet 論文詳解

Wide baseline stereo

在 wide baseline stereo 資料集 W1BS 上測試,結果如下圖所示:

HardNet 論文詳解

其中 A 表示 appearance 變化,可能由于天氣、季節或者遮擋引起的; G 表示 viewpoint/geometry 變化,可能由于 scale,camera 位置或者物體位置變化引起的; L 表示 illumination 的變話;S 表示 sensor 傳感器的變換;map2photo 表示 satellite 圖像 和 map 圖像。

其中主要比較 HPatches matching 任務的性能。

但是在 patches 級别上驗證并不能代表在實際使用中效果最佳,在不同的 wide baseline stereo 資料集繼續對比,結果如下圖所示:

HardNet 論文詳解

其中對比的是比對上的 image pairs 的資料和比對上的 pairs 上平均 inliers 的數目。

關于這部分試驗細節需要進一步看一下。

Image retrieval

在基于 local features 的 image retrieval 方法中驗證提出的描述符的效果。

基于 Bow 方法 image retrieval 的結果如下圖所示:

HardNet 論文詳解

其中 Oxford5k 和 Paris6k 是标準 image retrieval 資料集,Oxford5k 包含 5062 張圖像,Paris6k 包含 6300 張圖像,兩個資料集總共包含 11 個 landmarks(當然有一些負樣本在),然後這 11 個 landmarks 每個包含 5 個不同的 query regions。

其中用 k-means 方法建構 1 million visual vocabulary,如果在 Oxford5k 資料集上測試,那麼就在 Paris6k 資料集的描述符上學習這個 vocabulary。

其中比較的是 mAP 的精度,每個測試圖像根據上面的 visual vocabulary 轉成 BoW 進行 image retrieval,SV 表示空間驗證,QE 表示 标注查詢擴充,主要用于進一步優化 image retrieval 的查詢結果。

其中 HardNet++ 版本是在所有的 Brown 和 HPatches 的資料集上進行訓練,達到最優的效果。

同時還對比了基于其他方法的 image retrieval 結果如下圖所示:

HardNet 論文詳解
關于這部分試驗細節需要進一步看一下。

實用指南

Batch 大小的影響

這裡探讨一下 batch 大小對最終描述符性能的影響,文中提測更小的 batch 大小會使訓練更好收斂以及使模型泛化性能更高。不同 batch 大小下 FPR 性能對比結果如下圖所示:

HardNet 論文詳解

采樣和 loss 作用

為了進一步驗證本文提出的采樣方法和 loss 函數的作用,進行了一些對比實驗,結果如下圖所示:

HardNet 論文詳解

其中上面的結果是在 HPatches matching 任務上測試的。

其中 Hard negative mining 在一個 epoch 上選擇最近的那個非比對負樣本。

其中 CPR 表示描述符各個次元之間關聯度的懲罰項。

對于 loss,從中可以看出 softmin 對所有的采用政策都能得到穩定的結果,但是在本文提出的采用政策上效果不如後面的兩個 loss。主要是因為 triplet margin loss 和 contrastive loss with a large margin 在正樣本和負樣本上都有非零導數值。從下圖可以看出 contrastive loss with a small margin,很多負樣本對優化并沒有起作用(導數為0,綠色區域塊)。而正樣本的距離小于負樣本距離時,softmin 的導數也會變的很小。具體比較

HardNet 論文詳解

具體的公式也在這裡列一下,就比較好了解了:

這裡給定一個 triplet ( a , p , n ) (a, p ,n ) (a,p,n), a a a 表示 anchor 描述符, p p p 表示 positive 描述符, n n n 表示 negative 描述符。以及它們之間的歐幾裡得距離 d ( a , p ) d(a, p) d(a,p) 和 d(a, n)。這裡的描述符都是歸一化過的,是以距離最小為 0 ,最大為 2.0。

那麼 triplet margin loss 為:

L t r i p l e t _ m a r g i n ( d ( a , p ) , d ( a , n ) ) = m a x ( d ( a , p ) + m a r g i n − d ( a , n ) , 0.0 ) L_{triplet\_margin}(d(a, p), d(a, n)) = max(d(a, p) + margin - d(a, n), 0.0) Ltriplet_margin​(d(a,p),d(a,n))=max(d(a,p)+margin−d(a,n),0.0)

softmin loss 為:

e x p _ a p = e x p ( 2.0 − d ( a , p ) ) e x p _ a n = e x p ( 2.0 − d ( a , n ) ) e x p _ a l l = e x p _ a p + e x p _ a n + e p s L s o f t m i n ( d ( a , p ) , d ( a , n ) ) = − l o g ( e x p _ a p / e x p _ a l l ) \begin{aligned} exp\_ap &amp; = exp(2.0 - d(a, p)) \\ exp\_an &amp; = exp(2.0 - d(a, n)) \\ exp\_all &amp; = exp\_ap + exp\_an + eps \\ L_{softmin}(d(a, p), d(a, n)) &amp; = - log(exp\_ap / exp\_all) \end{aligned} exp_apexp_anexp_allLsoftmin​(d(a,p),d(a,n))​=exp(2.0−d(a,p))=exp(2.0−d(a,n))=exp_ap+exp_an+eps=−log(exp_ap/exp_all)​

contrastive loss 為:

L c o n t r a s t i v e ( d ( a , p ) , d ( a , n ) ) = m a x ( m a r g i n − d ( a , n ) , 0.0 ) + d ( a , p ) L_{contrastive}(d(a, p), d(a, n)) = max(margin - d(a, n), 0.0) + d(a, p) Lcontrastive​(d(a,p),d(a,n))=max(margin−d(a,n),0.0)+d(a,p)

有了上面的公式對于 metric loss 更好了解了。

繼續閱讀