唐燦 唐亮貴 劉波
1重慶工商大學計算機科學與信息工程學院,重慶,400067
自20世紀70年代以來,圖像特征檢測與匹配一直是圖像處理最核心領域之一,是計算機視覺的基石.人眼或相機接收到的是平面的二維圖像,重建三維、理解世界、掌握世界一直是這個領域不懈的追求.從20世紀對紋理、顏色的理解到21世紀對線、點、面的特征提取,研究者們使用數(shù)學工具對這一過程進行了長達幾十年的研究,取得長足的進展.最近10年,由于計算機算力、海量數(shù)據(jù)的快速增長,以深度學習為首的人工智能算法在計算機圖像領域取得了豐碩成果,對圖像特征檢測與匹配領域產(chǎn)生了深刻的影響.新的研究表明:圖像特征檢測與匹配正在全面轉(zhuǎn)向深度學習,從手工選擇特征子轉(zhuǎn)變?yōu)閺臄?shù)據(jù)中學習特征.但研究也同樣表明:同時利用傳統(tǒng)、可解釋的檢測匹配算法理論有助于更好地解決特征檢測與匹配問題,有助于領域的進步和革新.
一般而言,圖像特征檢測與匹配的核心流程如圖1所示.
1)圖像預處理:在進行特征檢測之前,通常需要對圖像進行預先的處理.包括灰度化、去噪聲、生成圖像金字塔等過程.不同的算法要求的預處理過程不一致.
2)特征點檢測:提取圖像中感興趣的點,這些點被稱為特征點,這是圖像稀疏化的一個典型過程.我們需要選擇一些具有代表性的點來代理圖像,檢測出這些代表性的過程被稱為特征點檢測.三維重建依賴于這些點,所以特征點檢測必不可少.
3)局部描述子(local descriptor)提取:通常,我們可以從特征點周圍提取出一個小的幾何區(qū)域(patch),并生成一個標識性的向量來代表這個區(qū)域的特征,這個特征向量被稱為局部描述子或局部描述符.它將自己與其他區(qū)域區(qū)分開來,因而通常作為后續(xù)匹配過程的基礎.
4)全局描述子(global descriptor)提取:用于描述整幅圖像的全局特征向量.它代表著圖像中的高層特征或語意,通常用于圖像檢索領域.全局描述子可以抽象自局部描述子,也可能是直接從圖像中生成特征.
5)特征匹配:一旦有了局部描述子或全局描述子,就可以進行兩個圖像之間的匹配.找出圖像間的匹配點,然后就可能利用PnP(Perspective-n-Point)[1]、光束平差法(bundle adjustment)[2]進行三維重建等后續(xù)工作.
大多數(shù)算法可能只依賴于局部描述子或全局描述子的其中之一,因而無須同時生成兩者.近來年,有少量算法同時生成兩個描述子,并彼此依賴.
傳統(tǒng)的圖像特征檢測與匹配依賴精心挑選的手工檢測算法,有著較為扎實的數(shù)學理論基礎.
2.1.1 角點檢測
角點檢測是最早提出的特征點檢測之一.角點沒有嚴格的定義,但通常被視為兩條邊的交點,更狹義上講,角點的局部鄰域應該具有兩個不同區(qū)域的不同方向的邊界.在現(xiàn)實世界中,角點對應于物體的拐角,道路的十字路口、丁字路口等.從幾何的角度上講,角點通常表現(xiàn)為兩個邊緣的角上的點或鄰域內(nèi)具有兩個主方向的特征點.角點是優(yōu)秀的特征點,無論視角如何變換,這些點依然存在且穩(wěn)定,并與鄰域的點差別較大.但在實際應用中,大多數(shù)所謂的角點檢測方法檢測的是擁有特定特征的圖像點,而不僅僅是“角點”.這些特征點在圖像中有具體的坐標,并具有某些數(shù)學特征,如局部最大或最小灰度、某些梯度特征等.
1)Moravec角點檢測算法[3]
Moravec將“角”定義為自我相似程度低的點.因而,算法考慮以像素為中心點的一片范圍,查看該范圍與周圍的相似度,如果相似度高,則不會被認為是“角”,而在那些與附近像素的周圍圖像都很不相似的像素,才會被認為是“角”.相似度通常是將兩個范圍的對應點計算誤差的平方和,其值越小代表相似度越高.
假設現(xiàn)在是對一個二維灰階圖像I來做檢測.考慮選取一個固定像素點(x,y)為中心點,其周圍像素為區(qū)塊(patch),其中某點的位移為(u,v),因此中心點向量(x,y)與patch所有點的差的平方和記為(u,v),而對于每個(u,v)做不同加權,就可以得到:
(1)
其中w(x,y)為權值,在標準的Moravec算法中為常數(shù)1.
Moravec角點檢測算法可以找出整個圖像的局部最大值(局部最不相似的點),這些局部最大值就很有可能是我們想要檢測到的“角”.從這個意義上講,Moravec算法不算是嚴格意義上的角點算法.
2)Harris算法[4]
Harris算法建立在Moravec算子的基礎之上,它對Moravec進行了嚴格的數(shù)學建模和改進.主要體現(xiàn)為:克服Moravec只檢測45°倍角的缺點,使用泰勒展開,覆蓋所有方向的檢測.
對于式(1)中的平方項進行泰勒展開式,假設Ix和Iy是I的偏微分,可以得到:
(2)
E值容易受到噪聲的干擾,因為窗口是二值方形窗口.Harris改用具有平滑效果的高斯圓形窗口進行處理,減少了噪聲的影響.
對泰勒展開后的結果矩陣進一步優(yōu)化,無需進行矩陣的特征分解,只需估計矩陣的行列式和跡,即可以判斷角點.
Shi和Tomasi進一步優(yōu)化了此算法,提出了Shi-Tomasi 角點檢測算法[5],Harris 角點檢測算法的穩(wěn)定性和域值中的k值有關,而k是個經(jīng)驗值,不好設定最佳值.Shi-Tomasi角點檢測假設一般圖像每個像素所給出的函數(shù)值通常是光滑且穩(wěn)定的,角點的穩(wěn)定性其實和矩陣M的較小特征值有關,于是直接用較小的那個特征值作為分數(shù),這樣就不需要調(diào)整k值了.
從本質(zhì)上講,Harris算法、Shi-Tomasi算法都是基于梯度的檢測算法,基于梯度的檢測方法計算復雜度高,其圖像中的噪聲可以阻礙梯度計算.
3) FAST算法[6]
事實上,上述的角點檢測算法都顯得太過學術,在工程化過程中面臨著計算量較大、速度較慢的嚴重問題.對此,Rosten等[6]以更加簡單的方式來定義角點,并提出了一個快速而簡潔的檢測算法(FAST).
FAST角點定義為:若某像素點與其周圍領域內(nèi)足夠多的像素點處于不同的區(qū)域,則該像素點可能為角點.具體算法步驟如下:
①在圖片中選擇一個像素點P,并把它的亮度值設為Ip;
②以該像素點為中心作一個半徑等于3像素的離散化的Bresenham圓,這個圓的邊界上有16個像素,如圖2所示;
③設定一個合適的閾值t,如果在這個大小為16個像素的圓上有n個連續(xù)的像素點,它們的像素值要么都比Ip+t大,要么都比Ip-t小,那么它就是一個角點.
事實上,FAST算法中的N值很難直接給出,所以文獻[6]從ID3算法中學習了合適的N值,并采用非極大值抑制的方法解決從鄰近的位置選取了多個特征點的問題.從這個意義上講,FAST算法已非嚴格意義上的數(shù)學算法,而是現(xiàn)代意義上的數(shù)據(jù)算法.
FAST檢測算法計算速度快,可以應用于實時場景中.在FAST特征提出之后,實時計算機視覺應用中特征提取性能才有顯著改善.目前,F(xiàn)AST算法以其高計算效率、高可重復性成為計算機視覺領域最流行的角點檢測方法.
2.1.2 斑點檢測
區(qū)別于角點和邊緣,斑點(blob)是更具普通意義的特征點.斑點主要描述的是一個區(qū)域.該區(qū)域相對其周圍的像素在顏色或者灰度上有明顯區(qū)別.例如:從遠處看,一顆樹是一個斑點,一塊草地是一個斑點,一個人也可以是一個斑點.由于斑點代表的是一個區(qū)域,相比單純的角點,它的穩(wěn)定性要好,抗噪聲能力要強[7].
要檢測出這樣的“點”的思路也很簡單,最直接的就是基于求導的微分方法.我們可以使用一階微分算子或二階微分算子求出這樣的“點”,一個常用的考慮是使用拉普拉斯算子.拉普拉斯算子是簡單的各向同性微分算子,它具有旋轉(zhuǎn)不變性,所以可以方便的用于變化檢測.但拉普拉斯算子對噪聲比較敏感.1980年,Marr和Hildreth提出將拉普拉斯算子與高斯低通濾波相結合,提出了LoG(Laplace and Guassian,高斯拉普拉斯算子)算子,從而大大降低了對噪聲的敏感度[8].LoG算子的缺點在于計算量大、處理速度慢.
1)DoG(Difference of Gaussian,高斯差分算子) 與SIFT算法[9]
Lowe于1999年提出了SIFT算法,并于2004年整理發(fā)表[9].SIFT算法的全稱為:尺度不變特征變換(Scale-Invariant Feature Transform,SIFT),它是一個完整意義上的解決方案,很大程度上解決了目標的旋轉(zhuǎn)、縮放、平移、圖像仿射/投影變換、光照影響、雜亂場景、噪聲等重大難題.
由于計算機無法預知圖像中物體的尺度,因而需要同時考慮圖像在多個尺度下的描述,從而獲知感興趣物體的最佳尺度.如果某些關鍵點在不同的尺度下都相同,那么在不同尺度的輸入圖像下就都可以檢測這些關鍵點匹配,也就是尺度不變性[10].SIFT算法引入尺度空間理論,同時建議:在某一尺度上的特征檢測可以通過對兩個相鄰高斯尺度空間的圖像相減,得到DoG的響應值圖像D(x,y,σ).然后仿照LoG方法,通過對響應值圖像D(x,y,σ)進行局部最大值搜索,在空間位置和尺度空間定位局部特征點將LoG算子簡化為DoG算子.這樣不僅可以得到更好的關鍵點,而且可以減少計算量.
SIFT算法是近20年來傳統(tǒng)圖像特征檢測算法中的標桿算法,具有里程碑意義,其谷歌學術的引用數(shù)高達55 000多次,通常用作特征檢測算法的Baseline使用.與SIFT算法相比較事實上成為衡量一個算法優(yōu)良程度的基準.由于其專利問題,所以在開源算法中使用不多.
2) SURF算法[11]
SIFT算法由于計算量巨大,不能用于實時系統(tǒng)中.2006年,Bay等改進了SIFT算法,提出了SURF(Speeded-Up Robust Features,加速穩(wěn)健特征)快速算法[11],在保持 SIFT 算法優(yōu)良性能特點的基礎上,解決了 SIFT 計算復雜度高、耗時長的缺點,提升了算法的執(zhí)行效率.為了實現(xiàn)尺度不變性的特征點檢測與匹配,SURF算法先利用Hessian矩陣確定候選點,然后再進行非極大抑制.同時,為提高算法運行速度,在精度影響很小的情況下,用近似的盒狀濾波器代替高斯核,并引用查表積分圖,從而實現(xiàn)比標準SIFT算法快3倍的運行速度.
3) KAZE(風)算法[12]
傳統(tǒng)的SIFT、SURF等特征檢測算法都是基于線性的高斯金字塔進行多尺度分解來消除噪聲和提取顯著特征點的.但高斯分解是犧牲了局部精度為代價的,容易造成邊界模糊和細節(jié)丟失.非線性的尺度分解希望解決這種問題,由此,KAZE算法的作者Alcantarilla等[12]提出使用非線性擴散濾波法,將圖像亮度(L)在不同尺度上的變化視為某種形式的流函數(shù)(flow function)的散度(divergence).由于非線性微分方程沒有解析解,一般通過數(shù)值分析的方法進行迭代求解.傳統(tǒng)上采用顯式差分格式的求解方法只能采用小步長,收斂緩慢.KAZE中采用AOS(Additive Operator Splitting)算法對結果進行收斂.
在KAZE算法的基礎上,Alcantarilla等在2013年進行改進,提出了AKAZE算法[13].AKAZE 是加速版KAZE特征,即Accelerated KAZE Features.作者引入快速顯示擴散數(shù)學框架FED來快速求解偏微分方程,FED的引入讓它比之前的AOS更快更準確.
正如人眼做圖像匹配一樣,事實上,我們不能將圖像的點與點匹配起來,只能將圖像中的一塊與另外圖像中的一塊匹配起來.換言之,我們匹配的其實是圖像的局部特征,因而,在特征點周圍選擇一塊區(qū)域,用一些特征向量對其進行描述就變得理所當然,這就是局部描述子.
局部描述子的核心問題是不變性(魯棒性)和可區(qū)分性.由于使用局部圖像特征描述子的時候,通常是為了魯棒地處理各種圖像變換的情況.因此,在構建/設計特征描述子的時候,不變性問題就是首先需要考慮的問題.在寬基線匹配中,需要考慮特征描述子針對視角變化的不變性、對尺度變化的不變性、對旋轉(zhuǎn)變化的不變性等特性;在形狀識別和物體檢索中,需要考慮特征描述子對形狀的不變性.
傳統(tǒng)的描述子都是基于數(shù)學的方法精心挑選得出.SIFT描述子是其中的佼佼者.首先它利用關鍵點鄰域像素的梯度方向的分布特性,為每個關鍵點指定方向參數(shù),從而保證了特征點的旋轉(zhuǎn)不變性以及尺度不變性.然后再統(tǒng)計以特征點為中心的局部區(qū)域梯度,生成 128 維梯度特征向量,再歸一化特征向量,去除其光照的影響.通過以上步驟產(chǎn)生的特征點具有旋轉(zhuǎn)不變、尺度不變以及光照不變等性能,如圖3所示.
SIFT描述子最大的問題在于計算量大、效率不高,不利于后面的特征點匹配.事實上,并不是所有維都在匹配中有著實質(zhì)性的作用.因而可以用PCA、LDA等特征降維的方法來壓縮特征描述子的維度.在此基礎上,發(fā)展出一大批的改進算法,例如SURF算法[11]、PCA-SIFT算法[14]、SSIFT算法[15]等.
BRIEF(Binary Robust Independent Elementary Features,獨立、可靠的二進制基礎特征)算法把局部描述子的簡化做到了極致[16].它無需計算類似于SIFT的復雜特征描述子,只生成一個二值串即可.首先,在特征點周圍選擇一個塊,在塊內(nèi)通過一種特定的方法來采樣,挑選出n個點對.然后對于每一個點對(p,q),比較這兩個點的亮度值,如果I(p)>I(q)則這個點對生成了二值串中一個的值為1,否則為0.所有n個點對,都進行比較之后,就得到了一個n位長的二進制串,通常n可以設置為128、256或512.對于一個S×S的塊,標準BRIEF算法的(p,q)采樣方式為:p和q都符合(0,S2/25)的高斯分布.BRIEF算法簡單、實時性較好,但無法支持大角度的旋轉(zhuǎn),因而需要增加其描述子的旋轉(zhuǎn)不變性.
ORB(Oriented FAST and Rotated BRIEF,支持FAST方向和BRIEF旋轉(zhuǎn)不變性)算法[17]來自于Rublee等的論文ORB:anefficientalternativetoSIFTorSURF,它是現(xiàn)今實時SLAM系統(tǒng)中應用最廣泛的算法之一.其特征提取由FAST算法改進,利用圖像金字塔為其增加了尺度不變性;特征點描述是根據(jù)BRIEF特征描述算法改進的,它利用灰度質(zhì)心法計算方法來解決以及旋轉(zhuǎn)不變性,并放棄手工選擇的n對點,使用數(shù)據(jù)學習的方法來學習到如何選擇256對點.事實上,傳統(tǒng)手工算法從2010年后與學術算法之間的界限變得模糊,混合使用機器學習和手工特征子成為趨勢.
一旦有了特征描述子,我們就可以將圖像的特征點兩兩對應起來,這個過程稱為特征點匹配.特征點匹配最基本的方法是使用暴力匹配(Brute-force matcher),它將待匹配圖片的特征描述子中每一行都與待匹配圖片的描述子中每一行進行距離計算,從而得到最佳匹配.這個距離根據(jù)不同的描述子可能有不同的選擇,比如ORB算法中使用漢明距離.暴力匹配最大的問題在于計算的時間復雜度和空間復雜度都比較高,因而引入FLANN匹配(Flann-based matcher),它使用快速近似最近鄰搜索算法尋找,這是一種近似匹配,不一定能找到最佳匹配,但速度得到大大加快.優(yōu)化的方法通常是使用索引,一般有線性索引、kd樹索引、k均值索引、組合索引等.
事實上,直接使用描述子匹配總會遇到錯誤的匹配,這其中又通常分為兩種:
1)假陽性匹配(False-positive matches):將非對應的特征點檢測為匹配
2)假陰性匹配(False-negative matches):未將匹配的特征點檢測出來
其中,假陽性匹配可以通用優(yōu)化算法將其剔出.RANSAC(RANdom SAmple Consensus,隨機抽樣一致)算法[14]是使用最廣泛的一致性優(yōu)化算法.其核心思想就是隨機性和假設性,它可以從一組包含“局外點”的觀測數(shù)據(jù)集中,通過迭代方式估計數(shù)學模型的參數(shù).它是一種不確定的算法,有一定的概率得出一個合理的結果,而為了提高概率必須提高迭代次數(shù).隨機性用于減少計算,循環(huán)次數(shù)是利用正確數(shù)據(jù)出現(xiàn)的概率.事實上,RANSAC算法廣泛用于各種一致性優(yōu)化問題,未能考慮到圖像優(yōu)化匹配自身特點,如仿射變換、透視變換等.為此,相當多的算法對此進行了改進,引入仿射不變性的ASIFT (Affine Scale Invariant Feature Transform) 算法[18]、引入透視不變性的PSIFT[19](Perspective Scale Invariant Feature Transform) 算法、變換一致性的CODE[20](Coherence Based Decision Boundaries for Feature Correspondence)算法,這些算法都對匹配問題進行了各個方向的優(yōu)化.
2017年,Bian等在CODE算法的基礎上提出了一種簡單快速的GMS(Grid-based Motion Statistics,基于網(wǎng)格的運動統(tǒng)計)優(yōu)化算法[21],它是一種基于網(wǎng)格的運動統(tǒng)計特性的方法,將運動平滑限制轉(zhuǎn)成去除錯誤匹配的數(shù)據(jù)測量,使用一種有效的基于網(wǎng)格的分數(shù)估計方法,使得特征匹配算法能達到實時性.該方法可以迅速剔除錯誤的匹配,從而提高匹配的穩(wěn)定性.圖4展示了SIFT算法與GMS算法的對比效果.
手工算子總是基于這樣或那樣的前提假設,是對現(xiàn)實世界的簡化和抽象.因而,在魯棒性上和泛化能力方面有著天然的不足.近10年來,隨著計算性能的不斷攀升和大規(guī)模數(shù)據(jù)標注數(shù)據(jù)集的普及,以深度學習為首的機器學習算法成為研究和應用的基礎,傳統(tǒng)的手工標注的描述子逐漸向以數(shù)據(jù)驅(qū)動的學習算法轉(zhuǎn)變.
單獨研究關鍵點檢測算法并不多見,其原因在于:我們嘗試對一張圖像生成稀疏的興趣點,但我們很難說明哪些是興趣點,RGB的興趣點與深度圖像的興趣點是否一致.因而,一段時間以來,研究者很難提出取代傳統(tǒng)算法的關鍵點檢測算法.
Verdie等提出了一個時間不變的學習探測器[22](Temporally Invariant Learned Detector,TILDE),用于解決在天氣和光照條件急劇變化的情況下,檢測可重復的關鍵點.它使用一組不同的季節(jié)、不同的時間,從相同的角度捕捉的相同場景下的訓練圖像,通過DoG來生成訓練數(shù)據(jù)集,使用自定義的分段線性回歸函數(shù)進行訓練,并使用PCA(Principal Component Analysis,主成分分析)進行優(yōu)化,從而實現(xiàn)了在光照變化情況下,比SIFT更好的可重復特征點檢測的性能.
學習算法依賴數(shù)據(jù).如果使用關鍵點檢測的學習,面臨的另一個大的問題是:如何標注數(shù)據(jù)集?如前所述,我們很難說明哪些點才是關鍵點,因而似乎無法進行人工標注,生成訓練集.Quad-Networks算法[23]使用無監(jiān)督數(shù)據(jù)表達方式,訓練神經(jīng)網(wǎng)絡以不變變換的方式對點進行排名,將學習興趣點檢測器的問題轉(zhuǎn)化為學習排名點的問題.該算法認為興趣點來自某些響應函數(shù)的頂部/底部分位數(shù),因而從該排名的頂部/底部中提取興趣點.
也有研究從已生成的眾多手工特征點中進一步學習,提取出更加穩(wěn)定的特征點.Key.Net[24]就是采用的這種方式,它從多個尺度上采用手工特征點,通過CNN(Convolutional Neural Network,卷積神經(jīng)網(wǎng)絡)網(wǎng)絡進行進一步的過濾,再復合到原尺寸的圖像上,其網(wǎng)絡結構如圖5所示.
局部描述子的作用在于提取局部圖像的特征,通常我們可以把一整幅圖像分成均等的塊,每個小塊被稱為一個patch.對于深度學習的研究者而言,所有的手工特征選擇算子都遠遜于類如CNN這樣的特征提取網(wǎng)絡,因而,使用CNN來取代傳統(tǒng)的手工特征描述子成了自然而然的事.
文獻[25]在這個方面進行了嘗試.它把圖像的patch成對地輸入到CNN網(wǎng)絡中,再加入決策網(wǎng)絡用于判斷其相似性.論文對網(wǎng)絡結構進行了基本的嘗試,從中選擇孿生網(wǎng)絡,實現(xiàn)了區(qū)分相似度的目的.文獻[26]的思路與之類似,通過孿生CNN網(wǎng)絡學習patch表示,在訓練和測試期間,它使用L2距離,提出了一種128-D描述子,其歐幾里德距離反映了patch相似性,用以替代SIFT的局部描述子.文獻[27]則更進一步,但將網(wǎng)絡分為特征提取網(wǎng)絡、度量網(wǎng)絡和度量訓練網(wǎng)絡三個部分,分別采用類AlexNet網(wǎng)絡取特征、度量網(wǎng)絡進行距離度量和孿生網(wǎng)絡進行相似度判斷.它沒有采用傳統(tǒng)的歐式距離,而是學習了一個三層全連接的度量網(wǎng)絡.
如果說2015年時的深度網(wǎng)絡還停留在相似匹配,2016年后的網(wǎng)絡則明顯更進一步,學習到的特征使得讓相同的更靠近,不同的更分離.文獻[28]與文獻[29]都不約而同地使用三元組損失函數(shù)進行訓練,并且開始考慮算法的實用性,使用淺層神經(jīng)網(wǎng)絡進行特征提?。?/p>
L2-NET[30]提出了一個結構簡單、特征提取效果較好的CNN網(wǎng)絡,它提出遞進的采樣策略,可以保證網(wǎng)絡在很少的 epochs 就可以訪問到數(shù)十億的訓練樣本,同時,重點關注 patch 特征之間的相對距離,也就是匹配上的 patch 對距離比未匹配上的 patch 對距離更近,從而取消了距離閾值的設置.此外,L2-NET網(wǎng)絡也包含了相對復雜的一個級聯(lián)網(wǎng)絡來處理中心塊的信息,并在多個點設定了網(wǎng)絡的多個損失函數(shù),這也使得訓練、收斂都相對困難.L2-NET的網(wǎng)絡結構如圖6所示.
HardNet[31]在L2-NET的基礎上進行了進一步的改進,它受到Lowe的SIFT的匹配標準啟發(fā),從困難樣本入手,無需使用兩個輔助損失項,只需要使用一個損失函數(shù),簡單卻有效,學習到了更有力描述子,在圖像匹配、檢索、寬基線等方面都做了大量詳細實驗,在真實任務中取得了最先進的結果.作者在Github上提供了完整的代碼,并使用多個數(shù)據(jù)集,不斷提高其泛化能力.至此,圖像特征提取有了一個可以真正進入實用階段的算法.
基于CNN的局部描述子學習,盡管在基于像素塊的數(shù)據(jù)集上獲得了很好的效果,卻在SFM數(shù)據(jù)集上未能表現(xiàn)出良好的泛化性能.GeoDesc算法[32]采用和L2-Net相似的網(wǎng)絡結構,提出了一種融合了幾何約束的局部描述子學習方法,采用傳統(tǒng)SFM方法,得到三維點及其對應的一系列像素塊的對應關系.選用的像素塊為SFM中使用的特征點,這樣能夠提高樣本的準確性.算法整合了多視圖重構中的幾何約束關系,因而在數(shù)據(jù)生成、數(shù)據(jù)采樣和損失函數(shù)的計算等方面促進了局部描述子的學習過程,生成的描述子被稱為GeoDesc描述子.SOSNet[33]將二階相似性(SOS)用于學習局部描述子,并提出了一個新的正則化項,稱為二階相似正則化(SOSR),通過將SOSR結合到訓練中,在多個數(shù)據(jù)集上表現(xiàn)優(yōu)秀.
事實上,無論是使用哪個數(shù)據(jù)集來訓練網(wǎng)絡,patch塊的選擇都存在較大的問題,不同的描述子選擇各不相同,通常必須由關鍵點檢測器事先適當?shù)毓烙嬈浯笮?、形狀、方向.如果兩個補丁不對應,則它們的描述子將不匹配.為此,AffNet[34]探索影響學習和配準的因素:損失函數(shù)、描述子類型、幾何參數(shù)化以及可匹配性和幾何精度之間的權衡,并提出了一種新的硬負常數(shù)損失函數(shù)(Hard Negative-Constant Loss Function)用于仿射區(qū)域的學習.文獻[35]則建議使用對數(shù)極坐標(log-polar)采樣方案直接提取“支持區(qū)域”.通過同時對點的近鄰進行過采樣和對遠離點的區(qū)域進行欠采樣,可以提供更好的表示.它也證明了這種表示特別適合于使用深度網(wǎng)絡學習描述子.此模型可以在比以前更大的比例尺范圍內(nèi)匹配描述子,還可以利用更大的支持區(qū)域而不會遭受遮擋.
由于局部描述子專注細節(jié)、偏重紋理,因而,對于通用圖像檢索這類更加抽象的任務而言,使用局部描述子很難得到正確的檢索結果,所以,需要一個更加高層次抽象的特征檢測,即全局描述子檢測.
從某種意義上講,圖像分類與目標檢測也算是全局意義上的描述子,但它們受限于類別標簽,無法提供通用檢索.因而,對于通用圖像檢索,尤其是大規(guī)模圖像檢索而言,提取基于圖像的全局描述子成為一個非常重要的選擇.
BoW(Bag-of-Words)算法是簡單直觀的全局描述算法.BoW算法源自文本分類領域的詞袋模型.假定對于一個文檔,忽略它的單詞順序和語法、句法等要素,將其僅僅看作是若干個詞匯的集合,引入到圖像領域后成為BoVW(Bag of Visual Words)算法[36].它利用SIFT、SURF算法生成的局部描述子進行聚類,把最具代表的“單詞”選擇出來,構造成一個字典(codebook),用它來代表圖像本身.聚類算法同樣可以采用K-means聚類,或者隨機森林(Random Forest)[37].FV(Fisher Vectors)編碼算法[38]也被經(jīng)常使用,它采用混合高斯模型(GMM)構建字典.不過,FV不只是存儲視覺詞典在一幅圖像中出現(xiàn)的頻率,還統(tǒng)計了視覺詞典與局部特征(如SIFT)的差異.
VLAD(Vector of Local Aggregated Descriptors)系列算法是頗受關注的全局描述子算法.VLAD算法[39]首先針對一張圖像,提取了N個D維特征,再對全部的N×D特征圖進行K-means聚類,獲得K個聚類中心,接著獲取并累加了每個聚類的所有特征殘差,最終得到了K個全局特征.這K個全局特征表達了聚類范圍內(nèi)局部特征的某種分布,抹去了圖像本身的特征分布差異,只保留了局部特征與聚類中心的分布差異,從而生成了特定大小的全局描述子,這樣生成的編碼也被稱為VLAD編碼.NetVLAD[40]在VLAD的基礎上,使用CNN來進行全局描述子提?。畬LAD公式中的二值函數(shù)平滑化,轉(zhuǎn)化為可微的函數(shù)算法.除此之外,它使用監(jiān)督學習獲得聚類中心,從而向真正把同一物體的類別聚在一起的目標跨進了一步.NetVLAD最大的問題在于:輸出特征的維度太大,使得無論是處理還是擬合都變得困難.NeXtVLAD[41]則在NetVLAD的基礎上更進一步,它吸收了ResNeXt對ResNet網(wǎng)絡進行改造的思想,在應用NetVLAD聚合之前,將其中的FC網(wǎng)絡一分為三,將高維特征分解為一組相對低維的向量,從而達到了更強擬合并降維的目標.
除此之外,直接利用CNN從圖像提取全局特征子的想法則更加普遍.Neural Code描述子[42]首開先河,提出在大型分類數(shù)據(jù)集(如 Image-Net)上進行訓練的分類卷積神經(jīng)網(wǎng)絡,靠近頂端的全連接層輸出值可以直接用作圖像視覺內(nèi)容、語義級別的高層次描述子(descriptor).文獻[43]引入Sum-Pooled Convolutional features(SPoC)取代 Max-Pooled Conv-features 作為圖像全局描述子.文獻[44]通過使用孿生網(wǎng)絡和排序損失函數(shù),改進RMAC描述子,將其投射為完全可區(qū)分的網(wǎng)絡,從而產(chǎn)生了一個較好的圖像描述子.文獻[45]提出了一種REMAP(Multi-Layer Entropy-Guided Pooling,多層熵引導池化)全局描述子.該描述子從多個CNN層中學習并聚集了深層特征的層次結構,并以三重態(tài)損失端對端地進行了訓練.REMAP明確學習了在視覺抽象的各種語義級別上相互支持和互補的判別特征,從而具有更好的代表性.
RANSAC算法通常用于匹配后的優(yōu)化算法,但只有一致性是遠遠不夠,包括GMS算法在內(nèi)的匹配算法總是提出類如分塊平滑這樣的簡化假設,這些假設并不總是成立.使用學習算法引入真實數(shù)據(jù),進行更加真實的匹配成為自然的選擇.
文獻[46]認為,通常的立體匹配圖像之間存在類如本質(zhì)矩陣(essential matrix)的約束,它是遠比RANSAC算法更強的約束,因而應當利用這樣的約束.文獻[46]將生成的特征點視為點云,受PointNET的啟發(fā),通過深度網(wǎng)絡來學習這種映射方式,擬合出點集的坐標對應關系到點的對應正確性的映射關系,從而實現(xiàn)更好的匹配.SuperGlue[47]是Magic Leap公司于2019年的最新成果,它使用圖神經(jīng)網(wǎng)絡來匹配網(wǎng)絡,通過共同查找對應關系并拒絕不可匹配的點來匹配兩組局部特征.通過解決可微分的最優(yōu)變換問題來估算分配,引入圖神經(jīng)網(wǎng)絡預測其代價.SuperGlue在上下文聚合機制加入注意力,使其能夠?qū)W習3D世界的幾何變換和規(guī)律性的先驗知識,共同推理基本的3D場景和要素分配.其代碼可以在現(xiàn)代GPU上實時執(zhí)行匹配,并且很容易集成到現(xiàn)代SFM或SLAM系統(tǒng)中.
深度學習優(yōu)于傳統(tǒng)算法的一個重要特點在于:可以設計一個網(wǎng)絡,使得輸入圖像直接輸出特征點、局部描述子.即:一個端到端的檢測網(wǎng)絡.
LIFT算法[48]成為一個成功的起點.它設計了一個完整的深度網(wǎng)絡體系結構,該體系結構實現(xiàn)了完整的特征點處理管道,即檢測、方向估計和特征描述.在保持端到端的差異性的同時學習如何以統(tǒng)一的方式完成特征點檢測、方向判斷和局部描述子生成這三個問題,并證明:對這些單獨的步驟進行優(yōu)化并相互配合良好地運行有助于提升整體的檢測性能.圖7展示了LIFT圖像的檢測管道.
LF-Net[49]的思路與文獻[48]類似,它使用一個檢測網(wǎng)絡生成一個尺度空間分數(shù)圖和密集的方向估計,用于選擇關鍵點位置、尺度和方向.用可微采樣器(STN)對所選關鍵點周圍的圖像塊進行裁剪,并將其反饋給描述子網(wǎng)絡,每一個patch產(chǎn)生一個描述子.為訓練網(wǎng)絡,它設計了一個左右兩分支的孿生結構,該結構以同一場景的兩幅圖像為輸入.其深度圖和攝像機的內(nèi)、外特性都可以通過傳統(tǒng)的SFM方法得到.再對右邊的圖像進行變形,以確定圖像之間的ground-truth對應關系.最新的RF-NET[50]是在LF-NET基礎上改進的,它構造了更大的感受野特征圖,從而導致更有效的關鍵點檢測,同時引入一個廣義的損失函數(shù)項——鄰居掩碼,以便于訓練樣本的選擇,改進了穩(wěn)定性.
SuperPoint[51]是Magic Leap公司于2018年發(fā)表的一篇文章,它基于自監(jiān)督訓練的特征點檢測和描述子提取方法,是一個深度學習用于特征點提取和匹配的方法.它提出了一種可以自我學習的方法,通過構建pseudo-ground truth的特征點位置,并通過這些點本身來訓練特征點檢測器,從而避免了大量人力的手工標注.它首先手工生成一個具有簡單幾何形狀特征的合成數(shù)據(jù)集,它們有著明確的特征點,再使用這些點來訓練一個名為MagicPoint的檢測網(wǎng)絡,接著,引入MS-COCO數(shù)據(jù)集里未標注的圖像,使用MagicPoint檢測器來進行特征點檢測并混合多個對應變換后的的圖像特征點,這個過程相當于對圖像進行標注.最后,結合特征點和描述子來訓練基于MagicPoint網(wǎng)絡的全卷積神經(jīng)網(wǎng)絡,于是就得到最終的檢測器——SuperPoint.與2016年的LIFT相比,SuperPoint優(yōu)勢明顯,可用于SLAM中,對季節(jié)和環(huán)境光照具有更強的魯棒性.
為了學到更加重復、穩(wěn)定、可靠的特征,R2D2算法[52]主張僅在可以高置信度執(zhí)行匹配的區(qū)域中學習描述子.它同時學習關鍵點檢測和描述子以及判斷局部描述子的預測因子,從而避免出現(xiàn)歧義區(qū)域,生成可靠的關鍵點檢測和描述子.
與傳統(tǒng)的先生成特征點,再提取描述子不同,D2-Net[53]使用一個CNN網(wǎng)絡,輸入h×w的原始圖片I,輸出f(I)為一個h×w×c的3D張量的特征圖(Feature Map),可以將該特征圖看作類似于SIFT等傳統(tǒng)檢測器中的DoG和特征子的混合,再從特征圖里同時提取關鍵點和特征描述子(detect-and-describe).從某種意義上講,特征描述子也就是關鍵點,關鍵點和描述子之間變成特征圖的一體兩面,思路頗有特色.
事實上,現(xiàn)實中的任何一個圖像匹配都不能僅僅使用局部描述子,而應當在更高的上下文和全局描述子的基礎上進行匹配.如果再進一步,我們可以把圖像特征點、局部描述子、全局描述子、匹配及優(yōu)化多種任務合為一體,以框架的形式完整實現(xiàn),才能真實地完成現(xiàn)實中的匹配.近年來的研究正在呈現(xiàn)這樣的特點.
DELF(DEep Local Feature)[54]的架構是Google提出的一個以圖搜圖模式的圖像檢索架構.嚴格意義上講它更加專注于生成全局描述子,然后進行高層匹配.它放棄了傳統(tǒng)從局部描述子生成全局描述子的過程,而是直接使用圖像級的類別進行弱監(jiān)督學習得到的.為了識別圖像檢索中具有語義信息的局部特征,它還提出了一個關鍵點選擇的機制,這個機理會共享更多網(wǎng)絡層的描述子信息,對語義特征引入了注意力機制,因而表現(xiàn)力較強.生成描述子后,再使用KD-tree和PQ進行最近鄰搜索,從而實現(xiàn)了快速查找的目標.2019年,DELF得以升級,使用R-ASMK算法[55]和最新的加入框的數(shù)據(jù)集,大大提高在地標方面進行數(shù)據(jù)檢索的精度.但作為專一的架構,它只關心了圖像檢索任務,在SFM和SLAM上不具有通用性.
ContextDesc[56]通過引入上下文感知來擴展現(xiàn)有的局部特征描述子,從而超越了局部細節(jié)表示.它提出了一個統(tǒng)一的學習框架,該框架利用和聚合了跨模態(tài)上下文信息,包括來自高層圖像表示的視覺上下文,和來自二維關鍵點分布的幾何上下文,它融合所有的特征信息,加入一種預測“匹配能力”的度量,通過學習框架,實現(xiàn)更好的匹配的目標.
HF-Net[57]能夠使用一個網(wǎng)絡完成三項任務:生成全局圖像描述子、檢測特征點、局部特征點描述子.首先通過圖像檢索的方式(圖像級的描述子檢索)獲取候選匹配“地點”,而后通過局部特征匹配實現(xiàn)精確的六自由度(6-DoF)位姿估計.由于圖像全局描述子估計和局部特征的檢測是兩個分開的任務,如果采用兩個網(wǎng)絡,將會需要大量的計算量.為此,HF-Net采用多任務學習的方法,通過兩個任務共用部分網(wǎng)絡,達到了通過一個網(wǎng)絡同時估計全局描述子和提取局部特征的目的.該網(wǎng)絡由一個共同的編碼網(wǎng)絡和三個“頭部網(wǎng)絡”組成.三個“頭部網(wǎng)絡”分別能輸出全局的圖像描述子、特征點檢測響應圖和特征點描述子.其中編碼網(wǎng)絡由一個MobileNet搭建而成,全局圖像描述子由NetVLAD層輸出,采用SuperPoint解碼器實現(xiàn)特征點的提取和描述子的計算.為解決數(shù)據(jù)集難以滿足的困難,網(wǎng)絡還采用知識蒸餾的方法進行網(wǎng)絡的訓練,通過利用“教師網(wǎng)絡”,減小了對數(shù)據(jù)集的要求.HF-Net在網(wǎng)絡效果上和實時性上都表現(xiàn)得較為突出.
現(xiàn)實世界是豐富、復雜而多樣化的,手工設計算法只是對現(xiàn)實世界的簡化和抽象,因而很難適應寬基線下圖像的可重復性、可區(qū)分性、準確性和高效性的要求,傳統(tǒng)的手工設計的圖像檢測與匹配算法已近瓶頸.近十年來,以深度學習為首的圖像檢測與匹配正逐步走向主流.它們在所有的技術指標上都取得了或多或少的進步,更加難能可貴的在于:這一切都可能通過一個完整的end-to-end(端到端)網(wǎng)絡來加以實現(xiàn).
但是,我們也要看到,這些算法仍然存在一些明顯的缺陷.深度學習算法的問題之一在于數(shù)據(jù)集泛化問題,我們無法取得面對現(xiàn)有世界都具有普適性的數(shù)據(jù)集.因而,權重數(shù)據(jù)總會在這樣或那樣的場景下變得不那么可靠,這也是寬基線圖像處理的最大問題之一.同時,深度學習的加入加重了計算的要求,一些算法需要大量的CPU甚至GPU的加入,在低功耗、實時要求較為苛刻的領域表現(xiàn)明顯.
另一方面,隨著計算能力的不斷增強,嵌入式的前端變得越來越智能化.一些不具備簡單視覺識別能力的設備將會更多地使用到傳統(tǒng)的基于數(shù)學建模的檢測算法,而一些有條件提供較強算力的設備則會充分使用深度學習算法和機器學習算法.我們正處在一個由表形到表意變革的初始階段,圖像特征檢測與匹配將在這里發(fā)揮出基礎而關鍵的作用.
近年來,隨著深度學習、圖神經(jīng)網(wǎng)絡、多任務學習的不斷深化,我們看到了使用一個框架來代替所有任務的曙光,它能將傳統(tǒng)算法和現(xiàn)代學習融為一體,同時具有實時、泛化、寬基線以及一定的數(shù)學支持的特征,為真正的工業(yè)圖像處理革命打下堅實的基礎.