Patch2Pix(CVPR 2021)特征点检测与匹配论文精读笔记
前言
論文地址
論文補充材料 / 附錄
代碼地址
??翻譯并記錄閱讀每段的感受和寫作邏輯。大概了解特征點檢測和目標檢測的大致方法的話,不用遞歸式讀論文也能基本理解本文的方法。
參考文獻
檢測:
[5] SuperPoint
[6] D2-Net
[7] Beyond cartesian representations for local descriptors (CVPR 2019)
[16] Contextdesc: Local descriptor augmentation with cross-modality context (CVPR 2019)
[17] Aslfeat
[28] R2D2
[40] Learning feature descriptors using camera pose supervision (ECCV 2020)
匹配:
[3] Neural-guided ransac: Learning where to sample model hypotheses (ICCV 2019)
[10] S2dnet: Learning accurate correspondences for sparse-to-dense feature matching (ECCV 2020)
[22] Learning to find goodcorrespondences (CVPR 2018)
[33] SuperGlue
[38] Acne: Attentive context normalizationfor robust permutation-equivariant learning (CVPR 2020)
[42] Learning two-view correspondences and geometry using order-aware network (ICCV 2019)
檢測 + 匹配:
[13] Dual-resolution correspondence networks (NIPS 2020)
[29] Convolutional neural network architecture for geometric matching (CVPR 2017)
[30] Efficient neighbourhood consensus networks via submanifold sparse convolutions (ECCV 2020)
[31] Neighbourhood consensus networks (NIPS 2018)
1. Introduction
??尋找圖像的對應關系(也就是特征點檢測與匹配)是 SfM、SLAM 等任務的基本步驟,包括3個步驟:(1)檢測特征點并提取描述符;(2)用描述符匹配特征點;(3)排除錯誤匹配。任務的適用領域和流程。
??傳統算法局限性。[5,6,7,16,17,28,40] 用 CNN 學習特征點檢測和描述,效果不錯。[3,22,38,42] 建議學一個過濾函數來做第三步排除錯誤匹配,而不是專注于優化第一步的效果。簡單描述 SuperGlue 的做法。結合特征檢測器和匹配器作為一個完整的 pipeline 是個好方向。傳統算法到深度方法,并引出要把檢測和匹配合并到一個網絡里。
??[13,30,31] 已經做了這個工作,用單個網絡輸入圖像對,直接得到對應關系。難點是達到像素級精度并匹配準確。[29] 在低分辨率上做匹配,精度不夠。[30] 用稀疏卷積在高分辨率上匹配,但還是不能實現像素級匹配。[30,31] 的優點是用弱監督最大化匹配對的得分并最小化非匹配對的得分,但是在像素級匹配上學習效率太低。和需要 ground truth(GT) 的強監督方法 [SuperPoint, D2-Net, S2dnet, Aslfeat, R2D2, SuperGlue] 對比,GT 雖然很準但也可能增加學習的誤差,譬如稀疏的關鍵點作為 GT 可能會簡單的學習這些點而不是更一般的特征(個人理解就是由數據導致的過擬合)。[40] 利用相機姿態做弱監督來解決這種問題,并且和 [30,31] 相比更精確。現有的一些方法和他們的缺點,因為本文用的和 [40] 一樣的弱監督,就說明了一下這種訓練模式的好處。
??本文提出 Patch2Pix,用一個新的角度來設計網絡。受目標檢測的啟發,首先得到 patch-level 的匹配,再細化到 pixel-level 的匹配。網絡用相機姿態計算得到的對極幾何(epipolar geometry)做弱監督,回歸出 patch proposal 中的像素級匹配。和 [40] 相比,本文從匹配位置學匹配,從匹配得分學特征描述符。本文方法 SOTA。本文貢獻:(1)提出了一個新的角度來學對應關系,先得到 patch-level 的匹配,再細化到 pixel-level 的匹配。(2)一種新的匹配細化網絡,可以同時細化匹配并排除錯誤匹配,且訓練不需要像素級的 GT 對應關系。(3)模型在圖像匹配、單應性估計、視覺定位等方面提高了匹配精度。(4)模型可以直接推廣到強監督方法,且取得 SOTA 結果。因為訓練數據是和 [40] 一樣的,而在這個領域感覺做數據的方法是個很重要的部分,這邊就提了一句訓練策略上的不同,其他的就是常規的本文貢獻。從這段來看,本文的核心是一種細化的策略,并且細化策略可以推廣到別的方法上的,通常的方法是在低分辨率特征圖上得到結果再用插值還原到原圖分辨率,而本文用了更好的細化方法。
??Fig. 1:Patch2Pix 的一個樣例。上半張圖由匹配的置信度得分來著色,得分越低越藍,主要在路上和空白的墻上。下半張圖說明了靠里的一些匹配可以在這種大視角變化下成功匹配。論文第一幅圖是一個結果的可視化,直觀地表明論文是干啥的。
2. Related Work
??介紹了一下 [6,17,28,40] 的做法,這些都是學局部特征,需要一個匹配步驟得到對應關系。
??Matching and Outlier Rejection. 有了特征點和描述符,就可以計算描述符的歐氏距離并用最近鄰搜索得到匹配。異常值通常用一致性或匹配得分過濾。 [3,22,38,42] 讓網絡做二分類來排除異常值,或者用 RANSAC 對輸入匹配做加權,這些方法并由讓網絡學習用來匹配的特征或匹配函數,而是改進已有的匹配和對應關系。[10,33] 學了匹配函數。SuperGlue[33] 用帶注意力機制的圖神經網絡優化 SuperPoint[5] 的描述符,并用 Sinkhorn algorithm 計算匹配。S2DNet[10] 提取一幅圖像 SuperPoint[5] 特征點位置的局部特征(稀疏),對另一幅圖像全圖提取特征(密集),利用相似度得分峰值計算匹配。這些方法主要是優化特征點的描述符,但沒有優化特征點檢測方面的問題。列舉了一些單做匹配和排除異常值的方法,他們的問題是不參與特征點的檢測,不過把檢測和匹配一起做,匹配效果應該會更好。
??End-to-End Matching. [13,30,31] 一個正向傳遞完成檢測、匹配、排除異常值。NC-Net[31] 用一個 correlation layer[29] 做匹配操作,用 4D 卷積層算鄰域一致性得分優化匹配得分,但是受內存限制,在下采樣16倍的特征圖上做匹配精度太低。SparseNCNet[30] 用前10的相似度得分作為相關性張量的稀疏表示,并用稀疏卷積代替密集的 4D 卷積,從而可以在下采樣4倍的特征圖上做匹配。和本文同期的 DualRC-Net[13] 結合粗分辨率和細分辨率的特征圖得到匹配得分。本文和 [13,30] 不一樣,是用回歸層將匹配細化到原圖分辨率。一些也把檢測匹配全做了的方法以及和本文的不同。
??Full versus Weak Supervision. (個人翻譯為強監督和弱監督)作者認為需要精確的 GT 來指導損失為強監督,不需要 GT 為弱監督。大多數方法都是用 GT 的,譬如 D2-Net[6]、S2dnet[10]、Aslfeat[17] 利用相機姿態和深度圖,SuperPoint[5]、R2D2[28] 利用合成單應性變換,少數方法如 CAPS[40] 用對極幾何做弱監督。S2DNet[10] 和 SuperGlue[33] 也要 GT。[3,22,38,42] 這些排除異常值的方法由圖像對間的幾何變換做弱監督。DualRC-Net[13] 是強監督,SparseNCNet[30] 和 NC-Net[31] 用弱監督優化圖像對的平均匹配得分,而不是單個匹配。本文用對極幾何做弱監督,匹配坐標直接回歸和優化。相比之下 CAPS[40] 用同樣的監督學特征描述符,用匹配得分優化損失,匹配得分的索引給出匹配位置。基于 SparseNCNet[30] 和 NC-Net[31] 作者提出了 two-stage 匹配網絡,在原圖分辨率上預測匹配。這段像是報菜名,各種方法用的監督策略,不過用弱監督的只有 CAPS[40],并再次強調了一下和 [40] 的區別。
3. Patch2Pix: Match Refinement Network
??匹配網絡(correspondence network)的好處是可以直接優化特征匹配,而不需要明確定義特征點。網絡所發現的匹配關系可以反映出特征點檢測和描述。現有匹配網絡不準確的兩個原因:(1)內存的限制導致要用下采樣的特征圖做匹配。(2)SparseNCNet[30] 和 NC-Net[31] 用弱監督訓練的時候讓不是匹配對的匹配得分變低,是匹配對的得分變高,這樣并不能讓網絡識別出好的匹配或壞的匹配,導致無法得到像素級精確的匹配。分析其他方法精度不夠的原因。
??為了解決這兩個問題,提出了一個兩階段的 detect-to-refine 方法,靈感來自 Faster R-CNN。在第一個檢測階段,用一個匹配網絡,譬如 NC-Net,得到 patch-level 的匹配。第二個階段用兩種方法細化匹配:(1)用分類得到匹配的置信度;(2)用回歸得到以 patch 為中心的像素級分辨率的匹配。作者的直覺是匹配網絡用高級特征得到 patch-level 的語義匹配,而細化網絡可以關注局部結構的細節,得到精確的匹配位置。網絡用弱監督的對極損失訓練,使匹配滿足相機姿態的幾何約束。網絡結構看 Fig. 2。下面以 NC-Net 為基線做匹配,本文的方法可以推廣到其他類型的匹配方法上。解決問題的方法,并且明確了本文主要是以目標檢測為靈感做的一個細化網絡,可以代替通常的插值細化,讓匹配的精度變高。
??Fig. 2
??Top:輸入一對圖像,先用 ResNet34 做 backbone 提取特征,然后送到 correspondence network 網絡,譬如 NC-Net 的匹配層得到 match proposals。Patch2Pix 利用之前提取的特征圖來細化這些 proposals。
??Bottom:設計了兩個不同等級但具有相同架構的回歸器來逐步細化 match proposals 到原圖分辨率。以一個 match proposal mim_imi? 為中心的一對 S×SS\times SS×S local patches,收集 patches 的特征輸入到 mid-level 回歸器并輸出 (1) 置信得分 ci^\widehat{c_i}ci?? 代表 match proposal 的質量 (2) 在 local patches 中找到的像素級局部匹配 δi^\widehat{\delta_i}δi??。更新后的 match proposal mi^\widehat{m_i}mi?? 通過新的 local patches 更新搜索空間。 fine-level 回歸器輸出最終的 ci~\widetilde{c_i}ci?? 和 δi~\widetilde{\delta_i}δi?? 以及像素級匹配 mi~\widetilde{m_i}mi??。整個網絡在弱監督下訓練,不需要明確的 GT 對應關系。
3.1. Refinement: Pixel-level Matching
??Feature Extraction: 輸入圖像對 (IA,IB)(I_A,I_B)(IA?,IB?) 給一個 LLL 層的 CNN 提取特征圖。令 flA,flBf_l^A,f_l^BflA?,flB? 為 (IA,IB)(I_A,I_B)(IA?,IB?) 在 lll 層的特征圖,l=0l=0l=0 時為原圖,即 f0A=IAf_0^A=I_Af0A?=IA?。特征圖只提取一次,用到檢測和細化兩個階段。檢測只用最后一層特征,包含更多高級信息;細化用最后一層之前的特征,包含更多低級細節。
??From match proposals to patches: 給定一個匹配 mi=(piA,piB)=(xiA,yiA,xiB,yiB)m_i=(p_i^A, p_i^B)=(x_i^A,y_i^A,x_i^B,y_i^B)mi?=(piA?,piB?)=(xiA?,yiA?,xiB?,yiB?),細化階段的目標是在 patch-level 匹配的局部區域上找到 pixel-level 的精確匹配。由于在縮小的特征圖上匹配,因此在特征圖上誤差1個像素會導致在原圖上有 2L?12^{L-1}2L?1 的誤差。因此,定義搜索區域為以 piAp_i^ApiA? 和 piBp_i^BpiB? 為中心的 S×SS \times SS×S local patch,讓 S>2L?1S>2^{L-1}S>2L?1 使其比原來 2L?1×2L?12^{L-1}\times2^{L-1}2L?1×2L?1 的 patch 覆蓋更多的區域。從所有的 match proposals 中得到一組 local patch pairs 后,網絡從 local patch pairs 的特征圖中回歸出 pixel-level 的匹配。
??Local Patch Expansion: 提出了一個 patch 擴展機制,如 Fig. 3,用鄰域擴展搜索區域。將 piAp_i^ApiA? 沿 xxx 軸和 yyy 軸4個角各移動 ddd 個像素。這給了我們4個 piAp_i^ApiA? 的 anchor points 來匹配 piBp_i^BpiB? 得到4個新的 match proposals。同樣擴展 piBp_i^BpiB? 并與 piAp_i^ApiA? 匹配也得到4個新的 match proposals。8個 proposals 確定了8對 S×SS \times SS×S 的 local patches。設置 d=S/2d=S/2d=S/2,擴展的搜索區域大小為 2S×2S2S \times 2S2S×2S,并且仍然覆蓋原來的 S×SS \times SS×S 區域。patch 擴展 MpatchM_{patch}Mpatch? 在訓練的時候很有用,因為可以強迫網絡在空間接近且相似的特征中得到正確的匹配。這個擴展機制可以加快學習過程并提高模型性能。雖然在測試的時候也可以用來擴大搜索范圍,但是計算量比較高,所以在測試過程中沒用。初看有點懵,沒明白是干啥的。
??Fig. 3:描述和段落中的基本一樣
??Progressive Match Regression: 細化任務是在一對 local patches 中找到好的匹配。用了兩個相同架構做 mid-level 和 fine-level,逐步得到最終的匹配。給定一對 S×SS \times SS×S 的 patches,先提取特征圖中對應的特征信息 flA,flB{f_l^A},{f_l^B}flA?,flB?。patch 上的每個點 (x,y)(x,y)(x,y),在 lll 層特征圖上對應的位置為 (x/2l,y/2l)(x/2^l,y/2^l)(x/2l,y/2l)。選擇了 {0,…,L?1}\{0, \dots,L-1\}{0,…,L?1} 層中所有的特征連接成一個特征向量。將兩個 feature patches PFiA,PFiBPF_i^A, PF_i^BPFiA?,PFiB? 沿特征維度拼接并輸入到 mid-level 回歸器中。回歸器首先用兩個卷積把輸入特征合成為特征向量,然后用兩個全連接層處理,最后網絡的預測為兩個全連接層的輸出。一個做回歸,輸出一組與 S×SS \times SS×S local patches 中心像素相關的 local matches M^Δ:={δ^i}i=1N?R4\widehat{M}_{\Delta}:=\left\{\widehat{\delta}_{i}\right\}_{i=1}^{N} \subset R^{4}MΔ?:={δi?}i=1N??R4,其中 δi^=(δxiA^,δyiA^,δxiB^,δyiB^)\widehat{\delta_{i}}=\left(\widehat{\delta x_{i}^{A}}, \widehat{\delta y_{i}^{A}}, \widehat{\delta x_{i}^{B}}, \widehat{\delta y_{i}^{B}}\right)δi??=(δxiA??,δyiA??,δxiB??,δyiB??)。另一個做分類,用 sigmoid 得到置信得分 C^pixel=(c1^,…,cN^)∈RN\widehat{\mathcal{C}}_{pixel}=\left(\widehat{c_{1}}, \ldots, \widehat{c_{N}}\right) \in R^{N}Cpixel?=(c1??,…,cN??)∈RN,表示匹配的有效性。把 local matches 和 patch matches 加起來從而得到了 mid-level 匹配 M^pixel:={m^i}i=1N\widehat{M}_{pixel}:=\left\{\widehat{m}_{i}\right\}_{i=1}^{N}Mpixel?:={mi?}i=1N?,m^i=mi+δ^i\widehat{m}_{i}=m_i+\widehat{\delta}_{i}mi?=mi?+δi?。以 mid-level 的匹配為中心得到新的 S×SS \times SS×S patch pairs,把它們的特征輸入到 fine-level 回歸器,按照 mid-level 回歸一樣的流程得到 pixel-level 匹配 M~pixel:={mi~}i=1N\widetilde{M}_{pixel}:=\left\{\widetilde{m_{i}}\right\}_{i=1}^{N}Mpixel?:={mi??}i=1N? 和置信得分 C~pixel=(c1~,…,cN~)∈RN\widetilde{\mathcal{C}}_{pixel}=\left(\widetilde{c_{1}}, \ldots, \widetilde{c_{N}}\right) \in R^{N}Cpixel?=(c1??,…,cN??)∈RN。
??看完這段大致理解了本文的做法,圖像對先經過一個 CNN 提取特征,將最后一層特征按 NC-Net 的匹配方式得到一些匹配結果,原本這些匹配結果也是點對點的,但是因為是在低分辨率特征圖上得到的結果,所以把它當做兩個 S×SS \times SS×S 大小區域的匹配。通過特定方式提取出了這兩個區域的特征,并且拼到一起輸入到細化網絡,經過一些卷積和全連接,得到一個 mid-level 的匹配坐標和匹配置信度;按同樣的方式迭代一次得到 fine-level 也就是 pixel-level 的結果。此時也大致明白了 patch 擴展機制,一對匹配擴展成8對,擴大匹配搜索的范圍。
??此時不太清楚 patch 對應的特征是什么形式的,從 Fig. 2 來看是把原圖像和前三層的特征圖拼起來,但是這些特征圖分辨率都不一樣,應該需要采樣到一個統一的分辨率。而且把兩張圖像的特征圖拼接起來進去卷積加全連接得到結果總感覺怪怪的,似乎與找到精確的匹配和置信度沒有很強的聯系。
3.2. Losses
??pixel-level 匹配損失 Lpixel\mathcal{L}_{pixel}Lpixel? 包含兩項:(1)置信得分的分類損失 Lcls\mathcal{L}_{cls}Lcls?,預測是不是真的匹配;(2)幾何損失 Lgeo\mathcal{L}_{geo}Lgeo? 用了判斷回歸的準確性。最終 Lpixel=αLcls+Lgeo\mathcal{L}_{pixel} = \alpha\mathcal{L}_{cls}+\mathcal{L}_{geo}Lpixel?=αLcls?+Lgeo?,其中 α=10\alpha=10α=10。
??Sampson distance: 為了得到像素級匹配,監督網絡尋找圖像對上對極幾何一致的對應關系。它定義了兩個正確匹配的點應該在使用相對相機姿態變換投影到另一個圖像時位于它們對應的對極線上。可以通過 Sampson distance 精確測量有多少預測的匹配滿足對極幾何。給定一個匹配 mim_imi? 和由圖像對的相對相機姿態計算得到的 fundamental matrix F∈R3×3F\in R^{3\times3}F∈R3×3,Sampson distance ?i\phi_i?i? 計算了匹配的幾何誤差:
?i=((PiB)TFPiA)2(FPiA)12+(FPiA)22+(FTPiB)12+(FTPiB)22\phi_{i}=\frac{\left(\left(P_{i}^{B}\right)^{T} F P_{i}^{A}\right)^{2}}{\left(F P_{i}^{A}\right)_{1}^{2}+\left(F P_{i}^{A}\right)_{2}^{2}+\left(F^{T} P_{i}^{B}\right)_{1}^{2}+\left(F^{T} P_{i}^{B}\right)_{2}^{2}}?i?=(FPiA?)12?+(FPiA?)22?+(FTPiB?)12?+(FTPiB?)22?((PiB?)TFPiA?)2?
??其中,PiA=(xiA,yiA,1)TP_{i}^{A}=\left(x_{i}^{A}, y_{i}^{A}, 1\right)^{T}PiA?=(xiA?,yiA?,1)T,PiB=(xiB,yiB,1)TP_{i}^{B}=\left(x_{i}^{B}, y_{i}^{B}, 1\right)^{T}PiB?=(xiB?,yiB?,1)T,(FPiA)k2\left(F P_{i}^{A}\right)_{k}^{2}(FPiA?)k2? 和 (FPiB)k2\left(F P_{i}^{B}\right)_{k}^{2}(FPiB?)k2? 代表向量第 kkk 項的平方。
??雖然不懂 Sampson distance 的原理,但感覺可以理解為兩個點的間距,完美匹配則間距為0。
??Classification loss: 當一對匹配 mi=(xiA,yiA,xiB,yiB)m_i=(x_i^A,y_i^A,x_i^B,y_i^B)mi?=(xiA?,yiA?,xiB?,yiB?) 的 ?i<θcls\phi_{i}<\theta_{cls}?i?<θcls? 則為正樣本,θcls\theta_{cls}θcls? 為閾值,其他的匹配則為負樣本。給定預測的置信度得分 C\mathcal{C}C 和二分類標簽 C?\mathcal{C}^*C?,用交叉熵做損失:
B(C,C?)=?1N∑i=1Nwci?log?ci+(1?ci?)log?(1?ci)\mathcal{B}\left(\mathcal{C}, \mathcal{C}^{*}\right)=-\frac{1}{N} \sum_{i=1}^{N} w c_{i}^{*} \log c_{i}+\left(1-c_{i}^{*}\right) \log \left(1-c_{i}\right)B(C,C?)=?N1?i=1∑N?wci??logci?+(1?ci??)log(1?ci?)
??其中,權重 w=∣{ci?∣ci?=0}∣/∣{ci?∣ci?=1}∣w=\left|\left\{c_{i}^{*} \mid c_{i}^{*}=0\right\}\right| /\left|\left\{c_{i}^{*} \mid c_{i}^{*}=1\right\}\right|w=∣{ci??∣ci??=0}∣/∣{ci??∣ci??=1}∣ 用來平衡正負樣本數量。mid-level 和 fine-level 有各自的閾值 θ^cls\widehat{\theta}_{cls}θcls? 和 θ~cls\widetilde{\theta}_{cls}θcls?,求和得到最終的分類損失 Lcls\mathcal{L}_{cls}Lcls?。
??Geometric loss: 為了避免訓練回歸器去細化那些不好的匹配,只有當父級匹配的 Sampson distance 小于閾值 θgeo\theta_{geo}θgeo? 才計算損失。Geometric loss 是優化匹配的平均 Sampson distance,同樣mid-level 和 fine-level 有各自的閾值 θ^geo\widehat{\theta}_{geo}θgeo? 和 θ~geo\widetilde{\theta}_{geo}θgeo?,求和得到最終的幾何損失 Lgeo\mathcal{L}_{geo}Lgeo?。
??兩個損失和檢測的也很像,看到這里也能理解 patch 擴展時的 anchor points。分類損失對所有 anchor 計算,檢測里面用 IoU 閾值判定正負樣本,這里用 Sampson distance 的閾值,明確了正負樣本就能正常使用交叉熵了。幾何損失對應檢測里的 box 回歸損失,同樣是只計算正樣本的損失,檢測里通過最小化 IoU,這里最小化 Sampson distance。
4. Implementation Details
??用預訓練的 NC-Net 的匹配層來匹配從 backbone 中提取的特征。細化網絡在 MegaDepth 上訓練,構建了60661個匹配對。 mid-level 的閾值 θ^cls=θ^geo=50\widehat{\theta}_{cls}=\widehat{\theta}_{geo}=50θcls?=θgeo?=50,fine-level 的閾值 θ~cls=θ~geo=5\widetilde{\theta}_{cls}=\widetilde{\theta}_{geo}=5θcls?=θgeo?=5。S=16S=16S=16,即 local patch 的大小在原圖分辨率上為 16 個像素。用 Adam 做優化器,開始的5個 epoch 學習率為 5e?45e^{-4}5e?4,然后用 1e?41e^{-4}1e?4 直到收斂。一個 mini-batch 包含4對 480×320480\times320480×320 的圖像。
5. Evaluation on Geometrical Tasks
5.1. Image Matching
??第一個實驗是在 HPatches 上做圖像匹配,檢測輸入圖像對之間的對應關系。跟 D2Net 一樣算了1到10個像素下的平均匹配精度(mean matching accuracy,MMA),包括匹配和特征的數量。
??Experimental setup: 用 fine-level 回歸得到的置信得分來過濾異常值,用了兩個閾值 c=0.5/0.9c=0.5/0.9c=0.5/0.9。為了體現細化的有效性,與 baseline NCNet[31] 作比較。還和SparseNCNet[30] 作比較,他是和本文工作最像的,也是在 NCNet 的基礎上通過重新定位機制提高匹配準確性。除了與幾種使用 NN 搜索匹配局部特征的方法比較外,還考慮了用 SuperGlue[33] 匹配 SuperPoint[5],并研究了他們在默認閾值 c=0.2c=0.2c=0.2 和更高的閾值 c=0.9c=0.9c=0.9 過濾異常值的性能。
??Results: 如 Fig. 4 所示,NCNet 在光照變化但視角不變的情況下效果很好,因為它用的是固定上采樣,光照變化的性能體現了它在 patch-level 匹配的效率,視角變化的性能體現它在 pixel-level 匹配的不足。本文的細化網絡將 NCNet 預測的 patch-level 匹配細化到 pixel-level 匹配,大大提高視角變化下的精度,并進一步提高光照變換下的精度。和所有弱監督方法相比,兩個閾值在光照變化下的結果都是最好的。對于視角變化,我們的模型在 c=0.9c=0.9c=0.9 時效果最好,SparseNCNet 的效果和 c=0.5c=0.5c=0.5 時的效果差不多。和強監督方法相比,光照變化下 c=0.9c=0.9c=0.9 時的效果優于所有方法。視角變化下,我們的方法不如 SuperPoint + SuperGlue,但優于其他所有的方法。結合圖表可以發現,SuperPoint + SuperGlue 和我們的方法用高閾值過濾低置信度的預測都可以提高性能。
??Fig. 4:Image Matching on HPatches
5.2. Homography Estimation
??精確的匹配不一定能得到準確的幾何關系,因為在估計幾何關系的時候匹配的分布和數量也很重要。因此接下來依然在 HPatches 上做單應性估計來評估網絡。
??Experimental setup: 和 [5,33,40] 一樣用 corner correctness metric,并給出單應性估計正確的百分比(平均角誤差距離小于 1/3/5 個像素)。實驗中,用基于 RANSAC 的求解器來估計幾何關系,取 c=0.25c=0.25c=0.25 作為置信度閾值。設置一個較低的閾值是為了過濾掉非常差的匹配,但盡可能留下更多的信息,然后讓 RANSAC 自己過濾異常值。我們與在匹配任務中更有競爭力的方法進行比較,這些方法按監督類型分類:強監督(full),弱監督(weak),混合監督(兩種都用)。我們在自己的環境下運行了所有的方法,并測量了匹配時間。
??Results: 從 Tab. 1 中可以看出,NCNet 依然是在光照變化下效果很好。這里驗證了在視角變化下,單應性估計的質量也能反應出 Patch2Pix 對匹配的改進。SparseNCNet 和我們的方法一樣,都是通過尋找匹配的 local patches 在更高分辨率的特征圖上逐步定位更精確的匹配,從而提高匹配精度。但是我們的方法在原圖分辨率上預測匹配并且是完全可學習的(fully learnable),而他們不可學習的(non-learning)方法是在下采樣4倍的分辨率上得到的匹配(這里也不知道該咋翻譯這個可不可學習)。我們的方法比他們好了很多,1個像素內的整體精度高了 15%。光照變化下,我們是僅次于 NCNet 的第二優方法,但比所有強監督的方法都好。在視角變化下,我們是弱監督方法中1個像素內精度最高的,并得到了非常接近最優的 SuperPoint + SuperGlue 的精度。
??Tab. 1:Homography Estimation on Hpatches
??看到這里發現,雖然 Patch2Pix 并不是在所有的方法里面都達到了最優,但是作者按照監督策略分了下類,在同類里面達到效果最好;文字敘述里面主要針對 baseline NCNet 和與自己方法比較相似的 SparseNCNet 做比較;像第一個實驗整體沒到最優就避開不談,聊單類的精度,第二個實驗整體有一項最優了就點一下。主要還是超不過 SuperPoint + SuperGlue,這個個人感覺是自監督,整體的思路方法都很牛。
??Oracle Investigation: 由于我們的方法可以過濾掉錯誤的匹配,但不能產生新的匹配,如果 NCNet 不能產生足夠的有效匹配,我們的性能也會受影響,這可能是在視角變化中性能較低的原因。為了驗證這個假設,我們用 Oracle matcher 替換 NCNet。給定一對圖像,Oracle 從 GT 中隨機選擇2.5K個匹配,然后在以 GT 為中心的 12×1212\times1212×12 范圍中隨機移動匹配點。通過這種方式得到了合成的 match proposals,并且在以他們為中心的 16×1616\times1616×16 local patches 中至少存在一個 GT 匹配,這樣可以測試我們的細化網絡的性能。如 Tab. 1 中所示,Oracle 的匹配精度是很低的,說明這個任務還是有一定的挑戰性。而我們的結果很好,說明細化網絡的性能受到了 NCNet 的限制。因此在接下來的實驗中,為了看到我們網絡的潛力,也會把 SuperPoint + SuperGlue 作為 baseline 來生成 match proposals。
??這個實驗有點巧妙,把效果不好的原因歸到了 NCNet 上,并且給了打不過就加入一個正當的理由,用 SuperPoint + SuperGlue 做 baseline,可以預想效果是會超過 baseline 的。這也體現了本文方法的優點,在這個領域的各種方法上運用都能有性能提升,用最好的做 baseline 依然提升了,自然也就 SOTA 了。但是此文的創新也就不太算是流程上的創新了,只是提出了一種較好的優化方法,可以提升精度,提升別的網絡的上限;而自身的上限依然受到他人的流程所限制。
5.3. Outdoor Localization on Aachen Day-Night
??在 Aachen Day-Night benchmark (v1.0) 上測試晝夜光照變化的室外定位的性能。
??Experimental setup: 為了 localize Aachen night-time queries,我們參照了 https://github.com/tsattler/visuallocalizationbenchmark 的評估設置。為了同時評估白天和夜晚的圖像,我們采用了 https://github.com/cvg/Hierarchical-Localization 中提出的 hierarchical localization pipeline (HLOC)。然后將匹配方法插入到 pipeline 中來估計 2D 對應關系。我們給出了特定閾值下 correctly localized queries 的百分比。用 NCNet 和 SuperPoint + SuperGlue 做 baseline 測試了我們的模型,但是訓練只在 NCNet 上。由于 localization pipeline 中的三角測量階段 (triangulation stage),我們用平均位置間距小于4個像素的特征點來量化匹配。
??Results: 在 night-time queries 上測試,由于其他兩個弱監督算法。雖然比 SuperPoint + CAPS 差一些,但它同時涉及強監督和弱監督,而我們比其他強監督方法要好點或差不多。對于 full localization on all queries using HLOC,我們證明了比 SuperPoint + NN 要好。通過進一步用 SuperGlue 取代 NCNet ,在日間圖像上和 SuperGlue 差不多,并在夜間略超過他。我們的直覺是這是受益于對極幾何監督,可以學習更一般的特征,而不會從訓練數據中產生偏差,下一個實驗進一步證明這個觀點。
??Tab. 2:Evaluation on Aachen Day-Night Benchmark (v1.0)
??不太懂這個實驗的評估。
5.4. Indoor Localization on InLoc
??在 InLoc benchmark 上測試室內定位的性能,數據場景中有大量無紋理和重復結構的區域。
??Experimental setup: 和 SuperGlue 一樣,用在 HLOC 中預測的對應關系來評估匹配算法。我們給出了特定閾值下 correctly localized queries 的百分比。與在 Aachen Day-Night 上的評估相比,我們的方法由于量化損失了高達4個像素的精度,我們采用了更公平的比較在 InLoc 上(不用 triangulation)。這些結果直接反應我們與其他方法結合時的細化效果。除了 SuperPoint + SuperGlue 以外,我們還評估了其他方法的一些組合,并與他們的最佳結果對比。
??Results: Patch2Pix 是弱監督中效果最好的,并優于除 SuperPoint + SuperGlue 以外的所有方法。注意,在 DUC2 上比 SparseNCNet 好了 14.5%,進一步證明了我們的細化網絡比他們的手工重新定位方法更有效。表格最后一行,當用 SuperPoint + SuperGlue 取代 NCNet 時取得了最好的整體性能。我們的網絡可以找到更準確和魯棒的匹配,從而優于 SuperPoint + SuperGlue。這說明對極幾何監督在匹配任務中很有效。雖然 CAPS 也用這個對極損失訓練,但它的性能主要依賴特征點檢測階段。相反,我們是直接處理潛在的匹配繞過了特征點檢測的錯誤。
??Tab. 3:InLoc Benchmark Results
??Generalization: 通過在圖像匹配和單應性估計上評估 Patch2Pix,與 NCNet 匹配相比有顯著改進,證明了我們的細化策略。雖然我們只在 NCNet 上訓練,但是從 NCNet 切換到 SuperPoint + SuperGlue 上不需要再訓練。這突出了我們的細化網絡所學習的是從一對 local patches 中預測匹配的這種更通用的任務,在不同的場景中都有效,并且與 local patches 的獲取方式無關。這種通用的匹配能力可以進一步改進現有方法。如實驗中 SuperPoint + SuperGlue 和 SuperPoint + CAPS 都可以用我們的細化網絡來改進。
個人總結&想法
??選擇這篇文章全文翻譯精度是因為很多想法不謀而合,在看了一些特征點檢測和像素級對齊的論文以后,就產生了兩個想法:
(1)用不同分辨率的特征圖細化像素級對齊的精度
??像素級對齊的精度不夠主要也是因為在低分辨率上就得到了結果,再用線性插值回到原圖分辨率。這主要也是受到內存限制,因為看過的所有相關方法都離不開計算特征相似度,一些方法在全圖計算相似度,那自然特征圖的分辨率會比較低;有些方法通過一些方式可以縮小搜索范圍,這樣就能讓特征圖分辨率稍微高點。其實這樣自然就能有一個思路,先在低分辨率上大致對齊(patch-level),然后利用層級特征逐步細化,細化的時候搜索范圍也比較小。不過事實上這樣搞計算量也是很大的,做了些簡單的實驗效果也不太理想。印象中 Dual-resolution[13] 大概就是這樣的做法。
(2)利用目標檢測網絡來檢測特征點
??起初的想法是把特征點當做目標,譬如設定是個全是 11×1111\times1111×11 大小的單類目標檢測任務,直接套用現成的網絡就能訓練。但是這樣的問題在于 GT 怎么來,看過 SuperPoint 就覺得特征點檢測的自學習似乎只能這樣做。自學習流程大致是先人工生成數據來訓練網絡,然后在真實數據上跑出一些結果,對這些結果進行篩選優化當做 GT 繼續訓練網絡,不斷迭代來優化網絡。這里的難點有兩個:(1)第一個人工生成的種子數據,這個數據一般不太自然但是絕對準確,除了 SuperPoint 的方法想不到什么更好的做法;(2)如何過濾網絡的結果作為新的 GT,從人工數據轉到自然數據以后會有很多的噪聲,噪聲不能很好的過濾會導致網絡越來越差。
??另外,用這種強監督的模式訓練有個問題,那就是目標檢測網絡的目標損失,對于一個 anchor 是否存在目標是根據 GT 做的一個交叉熵損失,這樣會導致網絡是在學 GT 標定的點,而不會去發現潛在的點。
??另一種數據類型是只知道兩幅圖像的像素級對應關系,譬如利用一些深度信息或者是人工做單應性變換等,這種數據可以訓練網絡提取特征描述符,但是比較難提取特征點,很多都是和 D2-Net 一樣人工設計一種規則,特征向量滿足一定要求則認為是特征點。通常創新點會在優化網絡提取特征的過程和這個規則的設計。
1. Patch2Pix 方法總結
??捋一下 Patch2Pix 的方法。輸入一對圖像,用個 ResNet-34 提取特征,得到4個層級輸出的特征圖 f1,f2,f3,f4f_1,f_2,f_3,f_4f1?,f2?,f3?,f4?,f0f_0f0? 代表原圖像。把 f4f_4f4? 輸入到 NCNet 的匹配層中,得到了一些匹配。先跳過擴展機制,以一對匹配點為例,把以這一對點為中心的 S×SS\times SS×S 局部區域拿出來作為一對 local patches,并取出 patch 對應的特征圖,即把 f0,f1,f2,f3f_0,f_1,f_2,f_3f0?,f1?,f2?,f3? 連在一起,得到 PFiA,PFiBPF_i^A,PF_i^BPFiA?,PFiB?。再把兩個特征圖連在一起送到細化網絡中,細化網絡就是做了些卷積和全連接的操作,輸出兩個坐標的偏移量和匹配的置信度(這些操作看第3章的圖2會比較清楚)。可以感受到上一輪的匹配結果就是下一輪的 anchor。
??擴展機制就是原本得到一對點的匹配 (p1,p2)(p_1,p_2)(p1?,p2?),把它轉化成 p1p_1p1? 和 p2p_2p2? 周圍4個點匹配, p2p_2p2? 和 p1p_1p1? 周圍4個點匹配,這樣一來一對匹配轉為8對匹配。這樣就擴大了搜索匹配的范圍,并且因為擴展的范圍比較小,(p1,p2)(p_1,p_2)(p1?,p2?) 的匹配結果也在搜索范圍內。其實也就是增加了 anchor 的數量。
??定義好了輸入輸出就看怎么設計損失來訓練了,而損失是依賴數據集的形式的。這里用的對極幾何不是很了解,但總之可以衡量兩個點的匹配度。這樣就能衡量 anchor 本身的匹配度,用閾值決定這個 anchor 是不是正樣本(對應 IoU 判斷 anchor 中有沒有目標),正樣本的話計算輸出坐標偏移的損失(對應檢測中有目標的 anchor 才算 xywh 的損失)。
2. 疑問&想法
??和實驗部分說的一樣,最終的效果很大程度受了 NCNet 的影響,也就是根本的匹配機制沒有變,而是在這基礎之上提高匹配的精度,不能挖掘出別的潛在的匹配。當然,要從根本上有創新是很難的。
??細化網絡按照論文中說的就是卷積+全連接,而輸入的是拼接的兩個區域特征,通常來說是用兩個區域的特征相似度、特征距離來映射出匹配關系,這邊直接用兩個區域的特征感覺可解釋性不強。后面有空看代碼的話再補充一些實施細節。
總結
以上是生活随笔為你收集整理的Patch2Pix(CVPR 2021)特征点检测与匹配论文精读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络CNN常用的几个模型
- 下一篇: 若依短信验证码登录