在前面實現的檢索中,根據圖像編碼后向量(VLAD)的相似性,從圖像庫中檢索出,與查詢圖像VLAD向量最相似的圖像。由於實際場景圖像的復雜性,僅僅利用VLAD向量的相似並不能取得很好的精度,通常先利用VLAD向量從圖像庫中快速的檢索出最相似的\(K\)幅圖像,然后再進一步篩選。
在實際場景中進行圖像檢索,通常會遇到以下問題:
尺度,視角,光照以及部分遮擋,本文將介紹幾種常見的優化方法,盡可能在這些復雜條件的影響下,檢索出最相似的圖像。
- 空間重排
- 幾何驗證
- 擴展查詢
空間重排
主要是為了排除查詢圖像中背景部分的干擾,找到包含查詢目標的區域。這里使用的方法通常可以使用目標檢測方法中的第一步:區域建議方法(Proposal Region),盡可能的將圖像中的不同區域分割出來。
-
滑動窗口法,窮舉法。簡單的使用使用不同尺寸和不同長寬比的窗口滑過窗口,每個窗口區域作為一個單獨的查詢。窗口的比例和尺寸比較難以確定,如果產生的窗口過多,會影響查詢的速度。這也是最初目標檢測中使用的方法,不推薦使用。
-
Selective Search 選擇性搜索,將區域的顏色,紋理,尺寸以及交疊相似度組合到一起,以此為標准將圖像划分為多個子區域。OpenCV中有該方法的實現,但是比較耗時。
-
EdgeBoxes 也是一種區域建議方法,首先利用結構化的方法檢測出邊緣,並利用非極大值抑制對邊緣進行篩選;然后基於某種策略將似乎在一條直線上的邊緣點集合成若干個edge group,並計算edge group之間的相似度,越是在同一直線上的edge group,其相似度越高。再通過edge group來確定輪廓數,實現策略為給每個edge group計算一個權值,將權值為1的edge group歸為proposal內輪廓上的一部分,將權值為 0 的edge group歸為proposal外或proposal框重疊的一部分,由此便提取得到proposal,並對proposal進行評分,選取得分最高的proposal作為最后的檢測輸出。 該方法效果上比Selective Search差點,但是速度上比較快。
-
可以使用目標檢測中的Regional Proposal Net網絡提取圖像的各個區域。
使用上述的方法,將查詢圖像分成不同的子區域,將每個子區域作為一個查詢,進行檢索。這種方法雖然能在很大的程度上提高檢索的精度,但是最好的方法還是能夠確定檢索的區域。 例如:假如是手機拍攝的查詢,可以和掃描二維類似,將查詢的目標放在固定的窗口中,這樣可以大大的提高檢索的精度。
空間驗證 Spatial Verification
基於詞袋模型(BoW)的圖像檢索,是將圖像表示為視覺詞匯的向量(視覺詞匯,visual word通過圖像的局部特征聚類得到)。在進行圖像相似檢索時,實際是檢索具有相同視覺詞匯的圖像,由於視覺詞匯是通過局部特征聚類得到的,丟失了圖像的空間特征,僅僅使用視覺詞匯來判斷圖像的相似性,會產生下面的問題:
有可能兩圖像中提取到的visual word比較相似,而兩圖像空間信息卻不相同,如下圖:
左邊的是兩幅圖像下的正確匹配,右邊的則是提取到的Visual World比較相似,卻不是相似的圖像。
空間驗證 Spatial Verification就用來過濾掉上面的,僅僅是視覺詞匯比較相似,但是空間信息卻不具備相似性的檢索結果。上面檢索,過濾掉錯誤的匹配后結果:
空間驗證的方法
使用BoW,兩幅圖像的匹配,通常是Visual Word的匹配,相匹配的特征點是通過視覺詞匯取得的,例如:查詢圖像\(q\)的某個特征\(q_1\)映射到視覺詞匯\(vw_1\)上,而檢索出來的圖像\(p\)的某個特征\(p_1\)也映射到\(vw_1\)上,這樣就認為特征點\(p_1\)和\(q_1\)是匹配的。顯然,這樣的匹配方法會有很多的錯誤的匹配,空間驗證就是為了過濾掉這種錯誤的匹配。
空間驗證,簡單來說就是對兩幅圖像的特征點進行匹配,並且過濾掉錯誤的匹配點。 就到了圖像的經典問題了,圖像特征的匹配及優化。
圖像特征點的匹配和優化,常用的有以下方法:
- 交叉過濾,如果第一幅圖像的一個特征點和第二幅圖像的一個特征點相匹配,則進行一個相反的檢查,即將第二幅圖像上的特征點與第一幅圖像上相應特征點進行匹配,如果匹配成功,則認為這對匹配是正確的。
- 比率測試,對每個匹配返回兩個最近鄰描述符,僅當第一個匹配與第二個匹配之間的距離足夠小時,才認為這是一個匹配
- 基於對極約束的RANSAC方法,通過求兩圖像的基礎矩陣或者單應矩陣,來剔除錯誤的匹配。
上述的幾種特征匹配優化方法,可以參看之前的文章 OpenCV2:特征匹配及其優化
上述的幾種方法中,基於RANSAC的方法做匹配優化的效果應該是最好的,但是RANSAC是一種迭代算法在性能上不占優勢的。畢竟做圖像檢索的並發量是很高的。假如每次對\(K = 20,50,100\)甚至更多張圖像進行空間驗證的話,對特征點的匹配和剔除就提出了很高的性能要求。
Chum在論文Total Recall: Automatic Query Expansion with a Generative Feature Model for Object Retrieval
提出使用Locally Optimized RANSAC(LO-RANSAC)的方法,其原理也比較簡單。
- 從數據集中隨機的選擇能夠估計出模型參數的最小個數的數據集\(S_m\)
- 估計模型參數(匹配,兩圖像的單應矩陣)
- 計算符合估計模型的內點個數\(I_k\)。設置一個閾值\(\theta\),小於\(\theta\)均認為是符合模型的內點。
- 在迭代中,如果有\(I_k > I_j,k > j\),則進行Local Optimization的操作。
- Local Optimization 有多種方法,常用的是 Inner RANSAC,也就是只從選擇符合當前最好模型的內點進行下一次迭代的,並且設置的閾值為\(K\cdot \theta\),在每次的迭代的時候減小閾值,直到閾值減小為\(\theta\)。
更多關於LO-RANSAC的內容,可以參考論文
可以在 LO-RANSAC codes 找到其實現。
進行空間驗證,基本能解決圖像因為Sacle,Viewpoint或者Oculusion引起的目標的變化。 但是對於一些弱光照引起的變化,空間驗證則無能為力了。這就要應用到擴展查詢。
擴展查詢 Query Expansion
對於弱光照引起的變化,如
最右邊的圖,由於光照比較弱,即使利用了空間驗證,仍然難以檢索出來,可以使用擴展查詢。
擴展查詢的方法有很多,簡單有效的就是均值擴展查詢(Average Query Expansion,AQE)
- 初始檢索,選擇Top N。 距離為准
- 空間驗證,選擇Top K。匹配點的個數為准
- 將空間驗證后的Top K個的圖像編碼的做均值,作為新的查詢。
總結
BoW的圖像檢索基本完成了,做個總結。
基於局部特征的圖像檢索,分為兩個部分: 訓練和檢索
-
訓練
- 提取圖像庫中所有圖像的局部特征(SIFT)
- 對提取圖像的所有特征進行聚類,得到\(K\)個聚類中心,也就是視覺詞匯表Vocabulary,每個聚類中心是一個Visual word.
- 將每個圖像表示為VLAD向量,所有圖像的VLAD向量的集合,就是用於檢索的特征庫。
-
檢索
- 區域建議 Proposal region,從檢索圖像中分割中檢索目標坐在的區域\(R\)。
- 從檢索的特征庫中,找出和\(R\)最相似的Top\(K\)個圖像
- 進行空間驗證,選擇和\(R\)匹配最好的Top \(N\)個圖像
- 擴展查詢
- 最終的返回結果