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