論文:Working hard to know your neighbor’s margins: Local descriptor learning loss
為什么介紹此文:這篇2018cvpr文章主要是從困難樣本入手,提出的一個loss,簡單卻很有效,在圖像匹配、檢索、Wide baseline stereo等都做了大量詳細實驗,在真實任務中真正取得了state-of-the-art的結果。代碼:https://github.com/DagnyT/hardnet 。上一篇博客中的論文可以和這個相結合,一起閱讀更佳。此外這些通過learn得到的descriptor雖然在某些數據集結果好,但在實際中並不popular,甚至不如傳統SIFT及其變體!有結論認為是數據集不夠大、不夠有區分度!
摘要:
受到到Lowe的SIFT的匹配標准啟發,引入一種度量學習所用的loss。最大化一個batch中的最近正樣本與最近負樣本的距離。這種方法比復雜的優化方法更有效,它對於淺層或深層網絡都很work。將這個loss結合與L2Net的結構可以達到一個更加全面的描述子,稱之為HardNet。它有着和SIFT一樣的特征維度128,並且state-of-art performance in wide baseline stereo, patch verification and instance retrieval benchmarks.
1. 介紹
許多計算機視覺任務依賴尋找local correspondences,例如image retrieval、panorama stitching、wide baseline stereo、3D-reconstruction。盡管越來越多端到端的方法試圖取代復雜的經典方法,但是對於local patches的經典的檢測子和描述子仍然被用,主要就是魯棒性和高效性以及緊密的集成。
LIFT、MatchNet和DeepCompare是最先嘗試的端到端學習,然而這些方法在實際應用中並不受歡迎,盡管它們在patch verification任務中有好的表現。近來的研究證實SIFT以及其變體(RootSIFT-PCA [16], DSP-SIFT [17)遠超於learned descriptors在匹配、檢索以及SD重建等領域。【19】給出結論是local patches datasets不夠大和有區分度來學習這么一種高質量、可以廣泛應用的descriptor。
本文關注於descriptor的學習,並提出一個新奇的網絡HardNet。並通過大量實驗展示了該方法學習到的descriptor同時在真實世界的任務中遠超於hand-crafted和learned descriptors。達到了真正的state-of-the-art。
2. 相關工作
經典的SIFT local feature matching包括兩部分:尋找最近鄰和比較第一、第二近鄰的距離比值來過濾假陽性matches。據作者所知還沒人這么做。
【20】提出一個簡單的filter plus pooling策略和convex optimization 來取代 hand-crafted filters and poolings in SIFT。MatchNet采用Siamese網絡結構,首先是feature net,然后是metric net,后者提高了匹配表現,但是卻無法使用快速最近鄰算法例如kd-tree。【15】同樣方法探索了不同結構,【22】利用hard negative mining和相對較淺的結構來探索pair-basesd similarity。
下面的幾篇論文中與經典的SIFT匹配策略結合緊密。【23】利用triplet margin loss和triplet distance loss,隨機采樣patch。它顯示了triplet-based結構比pair based的優越性。它們隨機采用負樣本。【7】計算挖掘的正負類樣本的距離矩陣,然后是pairwise contrastive loss。
L2-Net利用一個batch中的n個匹配對來生成n方-n個負樣本對並且要求每行每列中到真實匹配的距離最小。沒有其他距離或者距離比值的限制。相反,它們提出一個對描述子維數的相關性的懲罰,並且通過intermediate 特征圖采取deep supervision。本文采用L2-Net的結構作為base結構,我們展現了利用更簡單的目標函數不需要兩個輔助損失項,學習更有力描述子的可能性。
圖1 ,根據圖示可以看到這種采樣策略比較簡單,但是卻很有效!
下面分析這個采樣過程。
3. The proposed descriptor
3.1 Sampling and loss
學習目標模仿SIFT的匹配標准,過程如圖1.首先一個batch中的匹配塊生成,A代表anchor,P代表positive。那么每一對就是源於相同的一個SD point。
第二,這2n個patch進入圖2中的網絡。 計算L2 pairwise距離矩陣n*n:
那么
然后要分別尋找和該匹配對最相近的不匹配patch以及次相近的不匹配patch的特征向量。(這體現了sift的操作)
那目標就是最小化匹配描述子和與之最相近的非匹配描述子。這n個triplet 距離然后被送到triplet margin loss:
距離在triplet重組的過程中已經預計算好了,和隨機triplet采樣相比開銷是距離矩陣的計算、計算行列的最值。此外,相比usual的triplets學習,我們的方案只需兩路two-stream CNN,並不是三路。減少了30%的計算和存儲。和L2-net不同的是neither deep supervision for intermediate layers is used, nor a constraint on the correlation of descriptor dimensions.並沒有產生過擬合。
3.2 Model architecture
結構來源於L2Net,具體參數及設置見論文。
有趣的一點是Pytorch更新后,作者無法復現,通過超參數搜索后,設置lr=10,dropout rate=0.3得到了更好的結果。
3.3 Model training
在UBC數據集上,除了給出fpr95:false positive rate (FPR) at point of 0.95 true positive recall.,還給出了MatchNet和Tfeat中的FDR:(false discovery rate) 指標。另外作者沒有做CS(center-surrounding)結構的實驗,因為許多論文都證明了這個結構可以提升結果,所以這里不比再做,其實我認為可以看看還能提升多少。。
可以看到hardnet不論有無數據增強,都更強於L2Net!
作者又探索了batchsize的影響:發現128比較合適,256之提升了一點點。
后面的工作還有很多,關於real-world實際應用的實驗,有空再補充。