本發(fā)明涉及圖片搜索技術(shù)領(lǐng)域,具體涉及一種圖像特征點匹配方法。
背景技術(shù):
在圖像搜索領(lǐng)域,特征匹配是非常重要的一個環(huán)節(jié),特點的匹配效率和精度決定著最終搜索速度和精度。現(xiàn)有圖片搜索時,其采用以下步驟:第一步通過大量樣本數(shù)據(jù)訓(xùn)練一個轉(zhuǎn)換矩陣,通過哈希函數(shù)轉(zhuǎn)二進制碼,二進制碼分段,生成多個哈希表,得到的分段二進制碼直接作為哈希表的入口。第二步,當待查詢向量達到時,通過同樣的方式轉(zhuǎn)為二進制碼,映射到對應(yīng)的哈希表入口及其距離為r的其他入口中,入口中的所有圖片作為候選集。第三步,將候選集中所有的圖片特征向量與待查詢向量做完整的海明距離計算,重排距離即可。在浮點特征向量轉(zhuǎn)二進制碼時,由于哈希函數(shù)的存在,導(dǎo)致向量的精度丟失,并且在最后的重新排序過程當中,依然使用基于二進制碼的海明距離計算,雖然速度很快,但是由于二進制碼的表示精度不如浮點向量,因此召喚率會有一定程度降低。
隨著互聯(lián)網(wǎng)的飛速發(fā)展,目前互聯(lián)網(wǎng)上的圖片已經(jīng)達到了百億級別甚至更高。采用現(xiàn)有的特征點匹配方法,其已經(jīng)不能適應(yīng)現(xiàn)有快速增長的圖片庫模式。在海量圖片檢索樹中怎樣進行高效、高精度的搜索成為了熱點。
技術(shù)實現(xiàn)要素:
本發(fā)明為了解決上述技術(shù)問題提供一種圖像特征點匹配方法,其匹配精度高且速度快。
本發(fā)明通過下述技術(shù)方案實現(xiàn):
一種圖像特征點匹配方法,包括以下步驟,
入庫圖片特征點提?。禾崛∪霂靾D像的特征并構(gòu)成入庫特征向量,對其維度進行降維;
向量入庫:分割降維后的入庫特征向量,并對分割后的每部分先做乘積量化再做向量量化,構(gòu)成乘積量化器、向量量化器,并建立檢索樹和哈希表;
待匹配圖片特征點提?。禾崛〈ヅ鋱D像的特征并構(gòu)成待匹配特征向量,對其維度進行降維;
向量匹配:分割降維后的待匹配特征向量,找出待匹配特征向量與乘積量化器、向量量化器的聚類中心距離靠前的多個聚類中心,根據(jù)檢索樹和哈希表找到多個聚類中心所對應(yīng)的圖片并構(gòu)成候選集,采用浮點向量計算候選集中與待匹配特征向量的距離最近的圖片。
本方案的方法不使用類似迭代量化的算法計算二進制碼,采用降維聚類構(gòu)建檢索樹和哈希表,在第一層次的聚類時,不對其完全相關(guān)的數(shù)據(jù)進行聚類,而是對其進行分割,各部分數(shù)據(jù)完全獨立,可采用多線程并行處理方式進行加速,將量化器的訓(xùn)練時間大大減少。匹配檢索的整個過程分兩段進行,第一段為選取候選集,第二段使用浮點向量整體進行距離計算,在候選集范圍較大的前提下,再進行浮點距離計算,檢索結(jié)果的召回率和暴力匹配的差距很小,不超過1個百分點。比海明距離排序更精確。
如果數(shù)據(jù)庫中有n條記錄,暴力匹配需要做n次距離計算,而采用本方案的方法,根據(jù)所選參數(shù)的不同,候選集中的記錄數(shù)為n/100~n/10,大大減少了計算了,大大提高了匹配速度。且在構(gòu)建檢索樹的過程中,第一階段聚類的數(shù)據(jù)分割成多個部分,多個部分的聚類過程是完全獨立的,因此可以使用多線程技術(shù)進行聚類,提高聚類速度。
作為優(yōu)選,向量入庫的方法為:
將入庫特征向量分割成不相交的p個部分;
在每個部分內(nèi)部進行聚類中心個數(shù)為k1的k-means聚類;
針對每個聚類中心,將所有分配到該聚類中心的數(shù)據(jù)做向量量化,聚類中心個數(shù)為k2;
用p個哈希表分別記錄映射到對應(yīng)聚類中心的所有特征的id或?qū)?yīng)圖片的名稱。
進一步的,向量匹配的具體方法為:
將待匹配特征向量分割成不相交的p個部分;
在每個部分內(nèi)部,計算待匹配特征向量與k1個聚類中心的距離,并選擇距離最小的w個聚類中心;
針對選取的w個聚類中心,將待匹配特征向量與該聚類中心對應(yīng)的k2個第二層聚類中心一一進行距離計算,得到k2個距離;
對w*k2個距離進行排序,取距離最近的m個距離,其中,m為大于1的自然數(shù);
取出m個距離對應(yīng)的聚類中心,找到對應(yīng)的哈希表入口,將這些入口中的圖片名稱或者
id構(gòu)成候選集;
將候選集中的圖片id對應(yīng)的圖片特征向量與待匹配特征向量采用浮點向量一一計算進距離,最后得到距離最小的即為目標。
進一步的,所述k-means聚類采用并行處理方式。
作為優(yōu)選,采用主成分分析方法對特征的維度降維。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下的優(yōu)點和有益效果:
本發(fā)明采用降維聚類構(gòu)建檢索樹和哈希表,在第一層次的聚類時,對其進行分割,各部分數(shù)據(jù)完全獨立,可采用多線程并行處理方式進行加速,將量化器的訓(xùn)練時間大大減少;匹配檢索的過程先選取候選集,再使用浮點向量整體進行距離計算,在候選集范圍較大的前提下,進行浮點距離計算,檢索結(jié)果的召回率和暴力匹配的差距很小,不超過1個百分點,其檢索精度高且高效。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下面結(jié)合實施例,對本發(fā)明作進一步的詳細說明,本發(fā)明的示意性實施方式及其說明僅用于解釋本發(fā)明,并不作為對本發(fā)明的限定。
實施例1
一種圖像特征點匹配方法,包括以下步驟,
入庫圖片特征點提?。禾崛∪霂靾D像的特征并構(gòu)成入庫特征向量,對其維度進行降維;
向量入庫:分割降維后的入庫特征向量,并對分割后的每部分先做乘積量化再做向量量化,構(gòu)成乘積量化器、向量量化器,并建立檢索樹和哈希表;
待匹配圖片特征點提?。禾崛〈ヅ鋱D像的特征并構(gòu)成待匹配特征向量,對其維度進行降維;
向量匹配:分割降維后的待匹配特征向量,找出待匹配特征向量與乘積量化器、向量量化器的聚類中心距離靠前的多個聚類中心,根據(jù)檢索樹和哈希表找到多個聚類中心所對應(yīng)的圖片并構(gòu)成候選集,采用浮點向量計算候選集中與待匹配特征向量的距離最近的圖片。
采用該方法,在檢索過程中,不僅考慮了完全命中的哈希入口,還考慮了其附近的幾個入口,因此,增大了與查詢圖片最相似圖片在候選集中的概率,提高了召回率。在進行重排序時,使用了原始浮點特征向量進行距離計算,這種方式保留了原始浮點特征向量全部的信息,而經(jīng)過量化成為二進制特征碼的方式都有一定程度的精度損失。
實施例2
基于上述實施例的思想,本實施例對各步驟進行了細化。
不管是針對作為檢索樹入庫的圖片還在待匹配的圖片,均需要提取特征點,其特征點的提取方法很多,譬如卷積神經(jīng)網(wǎng)絡(luò),其輸出特征向量的維度是一個比較大的值,可設(shè)定為n,n可能為128、256或者512等。其維度較大,會增大匹配過程的計算量,我們需要對其進行降維,降維可采用主成分分析方法將輸出的特征向量的維度降為d維,其中,d小于等于n,d可取128或者64。采用降維的方法不僅可去除噪聲的影響,且可減小計算量,減小計算時間。
降維具體過程如下:
假設(shè)有s條數(shù)據(jù),在原始空間中,s條n維特征向量可由矩陣m={d1,d2,…dn}表示,其中dn為s*1的列向量。首先,矩陣m求協(xié)方差得到矩陣var(m),var(m)=mtm*1/n,再利用現(xiàn)有方法對協(xié)方差矩陣var(m)求n個特征值和對應(yīng)的特征向量,選取最大的d個特征值以及其對應(yīng)的向量,作為降維的矩陣r,計算mr就能得到一個l*d的矩陣,完成了降維的過程。
提取入庫圖片的特征并降維后為向量入庫構(gòu)建檢索樹做準備,向量入庫的具體方法為:
將入庫特征向量分割成不相交的p個部分,譬如對d=128維的數(shù)據(jù)切割成p=4部分,將特征向量的第1~32個浮點數(shù)作為第一部分,第33~64個浮點數(shù)作為第二部分,第65~96個浮點數(shù)作為第三部分,第97~128個浮點數(shù)作為第四部分。
在每個部分內(nèi)部進行聚類中心個數(shù)為k1的k-means聚類,此處為第一層量化,以第一部分為例說明其具體過程:
1-1.對于第一部分的s條32個浮點數(shù)特征,先從s條特征中選取k1條作為聚類中心;
1-2.將s條特征數(shù)據(jù)分別于k1個聚類中心進行歐式距離計算,特征數(shù)據(jù)與哪個聚類中心的距離最近,就將該條數(shù)據(jù)歸屬于該聚類中心;
1-3.對于每個聚類中心,將上一步中歸屬于該聚類中心的特征數(shù)據(jù),對應(yīng)的每個浮點數(shù)求和取均值,將最后得到的均值向量作為新的k1個聚類中心;
1-4.若聚類次數(shù)或者聚類誤差減少到一定范圍則終止聚類,步驟3中得到的k1個聚類中心即為所求,否則,回到步驟2。
1-5.記錄下k1個聚類中心的值,檢索時需要。
在第一層量化的基礎(chǔ)上,針對每個聚類中心,將所有分配到該聚類中心的數(shù)據(jù)做向量量化,聚類中心個數(shù)為k2,此處為第二層量化,其具體過程如下:
2-1.對于第一層量化每個聚類中心,屬于某聚類中心的特征為si個,其中所有si的和為s,從si中選取k2條作為聚類中心;
2-2.將si條特征數(shù)據(jù)分別于k2個聚類中心進行歐式距離計算,特征數(shù)據(jù)與哪個聚類中心的距離最近,就將該條數(shù)據(jù)歸屬于該聚類中心;
2-3.對于每個聚類中心,將上一步中歸屬于該聚類中心的特征數(shù)據(jù),對應(yīng)的每個浮點數(shù)求和取均值,將最后得到的均值向量作為新的k2個聚類中心;
2-4.若聚類次數(shù)或者聚類誤差減少到一定范圍則終止聚類,步驟3中得到的k2個聚類中心即為所求,否則,回到步驟2;
2-5.記錄下k1個聚類中心的值,檢索時需要。
用p個哈希表分別記錄映射到對應(yīng)聚類中心的所有特征的id或?qū)?yīng)圖片的名稱,每個哈希表的哈希碼為log2(k1)+log2(k2)位。例如:
1.假設(shè)k1=16,k2=16,則哈希碼為4+4=8位,前4位表示第一層中16個聚類中心的一個,后4位表示對應(yīng)于第一層聚類中心的16個二層聚類中心的一個。
2.對應(yīng)每個映射到第二層聚類中心的特征數(shù)據(jù),將其對應(yīng)的圖片名字或id加入到哈希碼對應(yīng)的哈希入口中。此處的哈希只是為聚類中心進行編碼,是一種數(shù)據(jù)結(jié)構(gòu),用于存儲。
向量入庫的實質(zhì)是為向量匹配奠定基礎(chǔ),檢索樹、哈希表搭建好后,即可進行向量的匹配。若有待匹配的圖片輸入,按上述方法提取待匹配圖片特征點后即開始向量匹配步驟,向量匹配的具體方法為:
將待匹配特征向量分割成不相交的p個部分;分割方法和入庫時分割方法一樣。
在每個部分內(nèi)部,計算待匹配特征向量與k1個聚類中心的距離,排序并選擇距離最小的w個聚類中心,以p=4,k1=16,k2=16,w=4,待查詢向量的第一個部分為例進行說明,
對入庫時的第一個部分的16個聚類中心,用待查詢向量的第一個部分,即1~32個浮點數(shù)向量與16個聚類中心進行歐式距離的計算。對16個距離進行排序,選取最小的w=4個聚類中心。
針對選取的w個聚類中心,將待匹配特征向量與該聚類中心對應(yīng)的k2個第二層聚類中心一一進行距離計算,得到k2個距離,具體的,對個選取的聚類中心,在其內(nèi)部,用待查詢向量的32個浮點數(shù)向量與第二層次聚類的16個聚類中心進行歐式距離計算。
將w*k2個距離依次放入大頂堆中,保證大頂堆中只有m個距離,其中,m為大于1的自然數(shù),之所以取前m個而不是一個,是為了保證召回率。
取出大頂推中m個距離對應(yīng)的聚類中心,找到對應(yīng)的哈希表入口,這些入口中的圖片名稱或者id構(gòu)成候選集。對于m個距離對應(yīng)的聚類中心,入庫時曾為每個聚類中心編碼了哈希碼,每個哈希碼對應(yīng)哈希表的唯一入口,將m個入口中的id求并集即可得到候選集。
將候選集中的圖片id對應(yīng)的圖片特征向量與待匹配特征向量一一進行距離計算,最后得到距離最小的即為目標,具體為:
對于候選集中的每個id,取得其完整的128維浮點特征向量,用待查詢向量和這些浮點特征向量一一進行距離計算;
選取步驟2中最小的k個結(jié)果,其對應(yīng)的id即為所求的最相似圖片。當k為1時,為準確搜索,當k>1時,為k近鄰搜索。
實施例3
針對實施例2,現(xiàn)公開一詳細實施方式。
入庫圖片特征點提取和待匹配圖片特征點提取步驟不在此實施例贅述。
向量入庫:利用數(shù)據(jù)庫中的大量特征向量,進行乘積量化器和向量量化器的訓(xùn)練。步驟如下:
將降維后的d維入庫特征向量分割成不相交的p個部分,以d=128、p=4為例,將特征向量的第1~32位作為第一段,第33~64位作為第二段,第65~96位作為第三段,第97~128位作為第四段。
在每個部分內(nèi)部進行聚類中心個數(shù)為k1的k-means聚類,共p*k1個聚類中心,所有聚類中心為[c1i]p={[c1i]p,i=0,1,2,…,k1;p=0,1,2,…,p},將聚類中心[c1i]p進行存儲,由于上一步中已經(jīng)對特征進行了分段,所以存儲的空間消耗僅為d/p*k1,這一步稱之為pq,即乘積量化,也成為第一層量化,得到對應(yīng)的pq量化器。并且,由于各個部分的獨立性,這個過程可以使用多線程,多進程甚至多節(jié)點進行并行處理,提升聚類速度。
在第一層量化的基礎(chǔ)上,對所有聚類到聚類中心c1ij的數(shù)據(jù),再次進行聚類,生成k2個聚類中心,共p*k1*k2個聚類中心,所有聚類中心為[c2ij]p={[c2ij]p,i=0,1,2,3,…,k2;j=0,1,2,3…k1;p=0,1,2,…,p},將聚類中心進行存儲,這一步稱之為vq,即向量量化,也成為第二層量化,可以得到對應(yīng)的vq量化器。
建立p個哈希表,與第一步中分出的p個部分的向量集一一對應(yīng),每個哈希表中一共
以上四個步驟完成以后,能夠得到基于大量樣本數(shù)據(jù)的pq量化器,vq量化器,檢索樹以及基于多哈希表的倒排索引結(jié)構(gòu)。
檢索樹和哈希表建立完成后,若有待匹配的圖片輸入,則進入向量匹配檢索。
當給定一個待匹配特征向量y時,從檢索樹以及倒排索引中檢索與之最鄰近的向量,步驟如下:
將向量y分成相交的p個部分,y=[y1,y2,y3,…,yp]。
對于yp,一一計算其與第p部分第一層量化得到的k1個聚類中心的距離。定義dist(yp,[c1i]p)=||yp–[c1i]p||2為待查詢向量y的第p部分與樣本數(shù)據(jù)第p部分的第i個聚類中心的距離。
由于聚類過程的不確定性,在樣本空間中和y距離最近的某個特征,很有可能歸屬于附近的其他聚類中心,所以要考慮離yp最近的聚類中心周圍的其他聚類中心。對于上一步驟中求出的yp和各聚類中心的距離進行重排序,選取其中距離最小的w個聚類中心,做為下面要進行的查詢的范圍。
對選取出的距離最小的w個第一層聚類中心,對w個聚類中心,每個聚類中心下有k2個第二層聚類中心,定義dist(yp,[c1ij]p)=||yp–[c1ij]p||2為待查詢向量y的第p部分與樣本空間中第一層的第i個聚類中心下的第j個第二層聚類中心之間的距離。
對步驟4得到的w*k2個距離進行排序,由于這個距離只是對樣本空間第p部分的距離,所以不能僅僅取距離最近的一個,取前m個距離對應(yīng)的聚類中心,根據(jù)聚類中心找到對應(yīng)的哈希表入口,將m各哈希表入口中存儲的圖片id或者名字求并集,最終得到最相似圖片id的候選集。
將圖片id對應(yīng)的特征向量取出,一次與完整的待查詢向量y進行距離計算,采用小頂堆這種數(shù)據(jù)結(jié)構(gòu),不管最后的數(shù)據(jù)集有多大,都能夠很好的工作,并且占用內(nèi)存量也是極小的。最后得到距離排序前k的即為搜索結(jié)果的topk,當k=1時,即為最相似的圖片。
本實施例采用乘積量化,向量量化,多哈希索引解決最近鄰搜索問題,利用聚類的并行計算過程以及檢索過程兩段式劃分提高檢索了召回率。
以上所述的具體實施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施方式而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。