一兵怯、概述
??本文是一篇非常經(jīng)典的基于深度學(xué)習(xí)的局部特征提取的論文肩杈,也是最早將特征檢測和描述放在一起優(yōu)化(即joint learning)的論文之一。此前對于局部特征描述的各個模塊堪伍,包括興趣點檢測锚烦、方向估計和特征描述,均已有相應(yīng)的基于CNN的方法提出杠娱,其中深度特征描述這一方向吸引了大部分關(guān)注挽牢,而興趣點檢測上的成果相對少一些。本文則認為之前對于單獨模塊的研究報道的高性能摊求,在實際任務(wù)pipeline中可能并不能達到最佳。
??局部特征描述任務(wù)(以SIFT和Harris等為代表)通常以完整圖像為輸入刘离,首先提取出其中潛在的興趣點室叉,然后對興趣點周圍的鄰域patch提取固定長度的特征作為其描述。要使用單個神經(jīng)網(wǎng)絡(luò)完成該流程硫惕,主要難點在于保持梯度流茧痕。比如要從檢測模塊輸出的特征圖提取出K個興趣點,這一步通常需要NMS來輔助恼除,而傳統(tǒng)的NMS算法并不可微踪旷。本文為了完成該流程使用了一系列trick,其中很多trick在后續(xù)的patch-based文章中(如LF-Net等)均有沿用豁辉。從理解論文的角度來說令野,搞懂本文對于閱讀后續(xù)一些流程更復(fù)雜的文章比較有幫助。
??以下為原文摘要:
??我們提出了一種新的深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)徽级,該結(jié)構(gòu)實現(xiàn)了完整的特征點處理管道气破,即興趣點檢測,方向估計和特征描述餐抢。 盡管先前的工作已成功地單獨解決了每個問題现使,但我們展示了如何在保持端到端的可區(qū)分性的同時以整體的方式完成各個模塊的學(xué)習(xí)低匙。 然后,我們證明了該深度學(xué)習(xí)的管線在許多基準數(shù)據(jù)集上無需重新訓(xùn)練碳锈,性能即可超過此前的SOTA方法顽冶。
二、方法
??由于本文插圖繪制地比較詳細售碳,這一部分就直接結(jié)合插圖强重,以算法流程的形式記錄LIFT中的主要內(nèi)容。
??首先团滥,本文的CNN以patch為輸入竿屹,而非全圖。作者的解釋是這樣可以在不損失信息的情況下以更輕量級的方式解決該任務(wù)灸姊,因為全圖中包含關(guān)鍵點的patch數(shù)量并不多拱燃。因此為了得到patch,作者首先需要對整個訓(xùn)練集通過某種方式提取出興趣點位置力惯。作者構(gòu)建數(shù)據(jù)集的步驟大致如下:
選擇multi-view的圖像來構(gòu)建訓(xùn)練數(shù)據(jù)
利用SIFT檢測每張圖像的興趣點
-
將multi-view圖像利用VisualSFM算法進行3D重建碗誉,剩下的興趣點將作為本文算法的GT
以下為LIFT的完整預(yù)測流程「妇В可見該流程基本是按照傳統(tǒng)的局部特征提取算法設(shè)計的哮缺。
以下為LIFT的訓(xùn)練過程:
2.1 訓(xùn)練過程
LIFT網(wǎng)絡(luò)在訓(xùn)練時需要輸入一個四元對,即P1-4甲喝,其中P1和P2代表同一個3D點經(jīng)不同視角投影得到的2D點對應(yīng)patch尝苇;P3和P1為不同3D點投影的2D點對應(yīng)patch;P4則為不包含興趣點的patch埠胖。
對每個patch先使用檢測模塊進行預(yù)測糠溜。該模塊較簡單,直接用單層卷積+分段線性激活(來自TILDE論文)對原圖提取特征并返回一個score map直撤,記為非竿,其中\(zhòng)mu代表了檢測模型的權(quán)重。
-
在對進行訓(xùn)練時谋竖,不同于TILDE論文中使用sfm得到的關(guān)鍵點位置作為S的GT红柱,本文認為S在除了sfm產(chǎn)生的興趣點之外的位置也可以有maxima,這體現(xiàn)在檢測模塊的損失設(shè)計上蓖乘。
- 本文早期實驗發(fā)現(xiàn)锤悄,強行讓檢測模塊將興趣點預(yù)測為sfm模型得到的位置是有害的。(我的理解應(yīng)該說的是直接用sfm模型得到的興趣點生成GT score map驱敲,然后做強監(jiān)督的方式)
-
對DET預(yù)測的score map提取關(guān)鍵點铁蹈。本文提出可以使用softargmax代替nms,在保持可微的同時實現(xiàn)相似的功能。然后根據(jù)提取到的特征點x和原patch握牧,送入STL(spatial transformer layer)進行crop容诬,得到refine之后的小p(大寫P代表原Patch),該過程記為
-
softargmax是一個用于計算物體質(zhì)心的函數(shù)沿腰,其公式如下览徒。softargmax在LF-Net中也有用到。
STN在這類任務(wù)中扮演著的角色颂龙,簡單來說就是可微版本的OpenCV warpPerspective函數(shù)习蓬,通常都不是訓(xùn)練模塊。
-
-
將p送入方向估計模塊措嵌,預(yù)測出當(dāng)前patch的方向θ躲叼。然后同4中的做法,利用spatial transformer crop將P進行crop企巢,不同的是這次需要考慮在轉(zhuǎn)換中加入方向信息枫慷。記為pθ=Rot(P,x,θ)
注意,送入第二個STL的patch是原始輸入Patch浪规,而非第一個STL crop的patch或听。說明第一個STL的patch唯一作用在于預(yù)測方向。
問題:對p估計出的方向θ笋婿,是p->pθ的方向還是pθ->p的方向誉裆?這里涉及對STN細節(jié)的理解。
將旋轉(zhuǎn)之后的patch pθ送入特征描述網(wǎng)絡(luò)缸濒,提取出固定維度的embedding d
-
根據(jù)輸入四元組構(gòu)建的patch之間的關(guān)系足丢,計算檢測、方向估計庇配、特征描述三個部分的損失:
-
a. 檢測模塊:
- 第3步提到霎桅,檢測模塊如果使用sfm得到的GT score map做強監(jiān)督可能是有害的。故作者利用P1和P2的關(guān)系讨永,利用相同興趣點的可靠性reliability,即最小化d1和d2之間的距離來訓(xùn)練檢測模塊遇革。即下式:
- 此外卿闹,作者認為還需要對某個原本包含興趣點的patch在預(yù)測中漏檢的情況進行懲罰,體現(xiàn)在損失函數(shù)上為:
- 這里的softmax應(yīng)該是對四個Patch中的每一個萝快,即Pi锻霎,輸出其包含興趣點的概率,所以求softmax的維度應(yīng)該是在揪漩?旋恼?
-
b. 方向估計模塊:
-
該模塊的優(yōu)化目標比較隱式,需要反映到下游的特征提取模塊奄容。因為方向估計的目的就是為了使同一個3D點在不同視角下的投影點的描述盡可能接近(描述子的可靠性冰更,或者可重復(fù)性)
- 注意這個式子其實和檢測模塊的基本一樣,唯一的不同在于輸入中的x是已經(jīng)提取出來的興趣點位置蜀细,因此這部分梯度不需要再從x傳遞到輸入P舟铜,作者還是很嚴謹?shù)?/li>
-
-
c.特征描述模塊:
-
本文的特征描述部分損失相對來說是很簡單的了,因為patch之間的關(guān)系不需要在線構(gòu)造奠衔,而是直接通過輸入構(gòu)造好的谆刨。直接給出損失函數(shù)的計算:
-
-
2.2 預(yù)測過程
LIFT的預(yù)測過程和訓(xùn)練稍有差異。由于方向估計和特征描述模塊只需要在局部最大值處運行归斤,作者認為可以在預(yù)測時將檢測網(wǎng)絡(luò)和后續(xù)兩模塊解耦:
- 構(gòu)建原始大圖輸入的圖像金字塔痊夭,利用DET預(yù)測出score map金字塔(scale space score map,這一概念在LFNet中進一步延伸)脏里,然后利用NMS直接估計出所有興趣點坐標
- 再對各個興趣點位置提取patch她我,分別進行方向估計和特征描述。
三膝宁、實驗
-
結(jié)果示例(和SIFT對比鸦难,每行代表一個測試集)
-
另外,作者做了一個比較有意思的實驗:將LIFT的各個模塊分別替換成SIFT的組件员淫,并比較在Strecha數(shù)據(jù)集上的評估指標:
這個實驗說明合蔽,LIFT和SIFT的模塊設(shè)計高度一致;將LIFT的任意一個模塊替換為SIFT都會導(dǎo)致結(jié)果下降介返。