本發(fā)明涉及計算機數(shù)據(jù)檢索領域,更具體地,涉及一種自適應的二進制量化哈希編碼方法及裝置。
背景技術:
目前,隨著大數(shù)據(jù)時代的到來,互聯(lián)網(wǎng)上每時每刻都在產生海量的圖像、視頻等等非結構化數(shù)據(jù),如何對這些數(shù)據(jù)建立高效的檢索算法成為了一個亟待解決的問題。在實際應用中,人們常常需要查詢給定樣例的最相似對象,而數(shù)據(jù)通常表示為由特征提取得到的特征向量,例如圖像局部特征采用尺寸不變特征變換算法(scale-invariantfeaturetransform,sift)得到特征向量,全局特征采用通用搜索樹算法(generalizedsearchtrees,gist)得到特征向量,因此問題就轉化成在高維特征空間中的最近鄰搜索問題。如果采用簡單的順序掃描的方法進行搜索,將面臨維數(shù)過高和數(shù)據(jù)規(guī)模過大兩重困難,效率非常低下。實際上,用戶查詢時并不苛求查詢結果必須是嚴格的最近鄰,近似最近鄰搜索(approximatenearestneighbor,ann)足以滿足需求。因為近似最鄰近搜索允許一定的相似誤差,返回近似的最近鄰結果,從而降低搜索空間,提高查詢效率。ann算法的一個典型代表是基于樹結構的索引方法,例如k-d樹,但這類方法僅在處理低維數(shù)據(jù)時效果較好,隨著維數(shù)的增長,其性能甚至會低于線性掃描。另外基于樹的最近鄰搜索很少能夠在理論上保證最近鄰搜索的準確率。
近年來,以位置敏感哈希(localitysensitivehash,lsh)為代表的基于哈希的ann方法因其存儲效率高、檢索速度快的優(yōu)勢得到了廣泛關注。這類方法將高維特征映射為海明空間中的二元編碼,使海明空間在一定程度上保持了原有空間的信息。通過采取由粗到細的查詢策略,哈希編碼方法可以在不犧牲過多查詢精度的前提下,大幅度提高檢索效率。在空間消耗方面,由于哈希編碼方法使用壓縮二進制編碼,數(shù)據(jù)長度大大縮短,降低了數(shù)據(jù)存儲消耗。在時間消耗方面,查詢時利用哈希編碼的海明距離,而這個過程涉及二進制位操作,直接為計算機底層硬件支持,具有非??斓臋z索速度。因此,利用此類哈希方法進行最近鄰搜索,具有空間、時間上的雙重優(yōu)勢。
但是,目前的方法大多試圖建立數(shù)據(jù)空間到編碼空間的一個完備匹配,而數(shù)據(jù)分布通常并不滿足編碼空間中的規(guī)則的超立方體結構,因此這些方法難以保持空間關系,從而檢索效果不優(yōu)。
技術實現(xiàn)要素:
為克服上述問題或者至少部分地解決上述問題,本發(fā)明提供了一種自適應的二進制量化哈希編碼方法及裝置。
一方面,本發(fā)明提供了一種自適應的二進制量化哈希編碼方法,包括:s1,選取數(shù)據(jù)空間中的聚類中心構成聚類中心集合,并分別為每個聚類中心賦予海明空間中的二進制編碼,得到對應的二進制編碼集合;s2,根據(jù)得到的所述二進制編碼集合,更新所述聚類中心集合和所述數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心,直到所述數(shù)據(jù)空間與所述海明空間對齊,將所述數(shù)據(jù)空間的所有數(shù)據(jù)映射至其所屬聚類中心對應的二進制編碼,以完成哈希編碼。
優(yōu)選的,所述s1具體包括:s11,隨機選取數(shù)據(jù)空間中的聚類中心構成聚類中心集合;s12,根據(jù)貪心算法,在海明空間中獲取構成的超立方體結構與所述數(shù)據(jù)空間結構最一致的二進制編碼,構成二進制編碼集合。
優(yōu)選的,所述s12具體包括:根據(jù)貪心算法,利用量化損失函數(shù)計算所述數(shù)據(jù)映射至其所屬聚類中心的二進制編碼產生的量化損失,最小量化損失對應的二進制編碼為在海明空間中構成的超立方體結構與所述數(shù)據(jù)空間結構最一致的二進制編碼。
優(yōu)選的,所述s2具體包括:s21,通過枚舉方式為每個數(shù)據(jù)重新分配所述聚類中心集合中的聚類中心,并重新確定各聚類中心的位置,形成新的聚類中心集合;s22,根據(jù)所述新的聚類中心集合更新數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心。
優(yōu)選的,構建所述量化損失函數(shù)具體包括:根據(jù)任意兩個數(shù)據(jù)的距離和其所屬聚類中心的二進制編碼的海明距離平方根的差值,構建量化損失函數(shù)。
優(yōu)選的,所述量化損失函數(shù)具體為:
其中,x=[x1,x2,…,xn]∈rd×n表示數(shù)據(jù)空間,xi∈rd為第i個數(shù)據(jù)樣本中的特征向量,p={pk|pk∈rd}為聚類中心集合,c={ck|ck∈{-1,1}b}為海明空間中與聚類中心集合對應的二進制編碼集合,k=1~k,do(xi,pk)為數(shù)據(jù)樣本xi到聚類中心pk的距離,
優(yōu)選的,s22具體包括:根據(jù)所述新的聚類中心集合,利用k-means聚類算法更新數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心。
另一方面,本發(fā)明提供了一種自適應的二進制量化哈希編碼裝置,包括:聚類選取模塊、集合更新模塊和迭代完成模塊;其中,聚類選取模塊用于選取數(shù)據(jù)空間中的聚類中心集合,并分別為每個聚類中心賦予海明空間中的二進制編碼,得到對應的二進制編碼集合;集合更新模塊用于更新所述聚類中心集合和所述數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心;迭代完成模塊用于迭代執(zhí)行所述聚類選取模塊和所述集合更新模塊的動作,直到所述數(shù)據(jù)空間與所述海明空間對齊,將所述數(shù)據(jù)空間的所有數(shù)據(jù)映射至其所屬聚類中心對應的二進制編碼,以完成哈希編碼。
又一方面,本發(fā)明提供了一種計算機程序產品,所述計算機程序產品包括存儲在非暫態(tài)計算機可讀存儲介質上的計算機程序,所述計算機程序包括程序指令,當所述程序指令被計算機執(zhí)行時,使所述計算機執(zhí)行上述哈希編碼方法。
再一方面,本發(fā)明提供了一種非暫態(tài)計算機可讀存儲介質,所述非暫態(tài)計算機可讀存儲介質存儲計算機指令,所述計算機指令使所述計算機執(zhí)行上述哈希編碼方法。
本發(fā)明提供的一種自適應的二進制量化哈希編碼方法及裝置,基于聚類中心的基本思想,采取非完全編碼的方案,自適應地確定聚類中心的數(shù)量和對應的二進制編碼,從而減少量化損失,提高哈希檢索的性能。本發(fā)明提供的非完全編碼與現(xiàn)有技術中的完全編碼相比,擁有更高的搜索自由度,能夠在海明空間中獲取到最能反映數(shù)據(jù)分布的編碼組合,因此更好地保持數(shù)據(jù)的最近鄰結構。
附圖說明
圖1為本發(fā)明一實施例提供的自適應的二進制量化哈希編碼方法流程圖;
圖2為圖1中構成聚類中心集合并得到二進制編碼集合的方法流程圖;
圖3為圖1中更新聚類中心集合和數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心方法流程圖;
圖4為本發(fā)明另一實施例提供的一種自適應的二進制量化哈希編碼裝置結構圖。
具體實施方式
下面結合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
目前,為了更好的將數(shù)據(jù)分類,引入聚類的概念,即根據(jù)數(shù)據(jù)的屬性對整個數(shù)據(jù)空間中的數(shù)據(jù)進行類別的識別,把整個數(shù)據(jù)空間按照數(shù)據(jù)的相似度歸成若干類,形成若干聚類中心。每個聚類中心代表著屬于該聚類中心的數(shù)據(jù),每個聚類中心在對應的海明空間均有一個對應的二進制編碼。所以,對于數(shù)據(jù)空間中的每一個數(shù)據(jù),均對應著海明空間中所屬聚類中心對應的二進制編碼。
目前,給定一個二進制編碼的比特數(shù)b,最多可以生成2b個相異的二進制編碼,絕大多數(shù)哈希方法嘗試利用所有可能的編碼,即在數(shù)據(jù)空間中的聚類中心的數(shù)量為p=2b,即“完全編碼”。從幾何視角上看,完全編碼構成的二進制編碼集合可以視作在海明空間中形成一個b維的完整超立方體,每個超立方體的頂點為一個二進制編碼,對應于數(shù)據(jù)空間的一個聚類中心。在此完整的超立方體中,每個棱對應的兩個頂點之間的海明距離為1,而任意兩個頂點之間的海明距離等于從一個頂點到另一個頂點沿超立方體的棱所經(jīng)過的最短長度,這樣的距離關系與歐幾里得空間的距離度量是一致的。如果數(shù)據(jù)空間中各聚類中心的分布恰好對應于此超立方體的各個頂點位置,則可直接為各聚類中心賦予這些頂點對應的編碼。但通常數(shù)據(jù)并不會滿足超立方體的分布結構,將數(shù)據(jù)空間的聚類中心與海明空間的二進制編碼強行建立完全映射,不可避免地會造成較大的畸變誤差。因此需要設計一種哈希編碼方法,尋找一個聚類中心集合以及海明空間中對應二進制編碼集合,最大化保持聚類中心映射到超立方體前后的空間結構關系。
本發(fā)明提供的方法僅利用完全編碼的一部分,即在數(shù)據(jù)空間形成數(shù)量小于2b的聚類中心,在海明空間中獲取完全編碼對應的超立方體的一個子結構映射,即“非完全編碼”。
如圖1所示,本發(fā)明的一實施例提供了一種自適應的二進制量化哈希編碼方法,包括:s1,選取數(shù)據(jù)空間中的聚類中心構成聚類中心集合,并分別為每個聚類中心賦予海明空間中的二進制編碼,得到對應的二進制編碼集合;s2,根據(jù)得到的所述二進制編碼集合,更新所述聚類中心集合和所述數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心;s3,迭代執(zhí)行上述步驟,直到所述數(shù)據(jù)空間與所述海明空間對齊,將所述數(shù)據(jù)空間的所有數(shù)據(jù)映射至其所屬聚類中心對應的二進制編碼,以完成哈希編碼。
具體的,本實施例中采用非完全編碼,即設給定一個二進制編碼的比特數(shù)為b,最多可以生成2b個相異的二進制編碼,在數(shù)據(jù)空間形成數(shù)量小于2b的聚類中心,對應于海明空間中數(shù)量小于2b的二進制編碼。這里所說數(shù)據(jù)空間與所述海明空間對齊是指:維持數(shù)據(jù)空間中數(shù)據(jù)間的距離和海明空間中的海明距離之間的一致性。本實施例中用量化損失函數(shù)來描述空間對齊這一概念,即根據(jù)量化損失函數(shù)計算得到的量化損失的最小值來描述空間對齊。
如圖2所示,步驟s1具體包括:s11,隨機選取數(shù)據(jù)空間中的聚類中心構成聚類中心集合;s12,根據(jù)貪心算法,在海明空間中獲取構成的超立方體結構與所述數(shù)據(jù)空間結構最一致的二進制編碼,構成二進制編碼集合。
設數(shù)據(jù)空間x中包含n個數(shù)據(jù)樣本,以下數(shù)據(jù)樣本簡稱為樣本。首先設在數(shù)據(jù)空間x內形成2b個聚類中心,分別對應于海明空間的2b個二進制編碼。記x=[x1,x2,…,xn]∈rd×n,記xi∈rd表示第i個樣本的特征向量,其中d表示特征向量的維度。設隨機選取k個聚類中心,構成聚類中心集合為p={pk|pk∈rd},其中,k=1~k。每個聚類中心在海明空間中都被賦予一個長度為b的二進制編碼ck∈{-1,1}b,在海明空間中構成二進制編碼集合c={ck|ck∈{-1,1}b}。對于任意的樣本xi,均可以被距離最近的聚類中心
其中,d0(xi,pk)表示樣本xi與聚類中心pk之間的距離,函數(shù)
利用量化損失函數(shù)來形式化地描述數(shù)據(jù)空間和海明空間的關系,量化損失函數(shù)如下式:
其中,y=[y1,y2,…,yn]∈rd為海明空間中n個數(shù)據(jù)樣本對應的二進制編碼,do(xi,xj)為第i個數(shù)據(jù)樣本和第j個數(shù)據(jù)樣本的距離,dh(yi,yj)為第i個數(shù)據(jù)樣本和第j個數(shù)據(jù)樣本對應的二進制編碼之間的海明距離的平方根。即
λ為尺度參數(shù),用于使數(shù)據(jù)空間的距離與海明空間的距離保持為同一尺度。在后面的優(yōu)化迭代過程中可知,優(yōu)化迭代過程對于參數(shù)λ不敏感,即對于不同取值的參數(shù)λ,對優(yōu)化迭代得到的結果產生的影響可以忽略不計。所以,為簡化計算過程,在聚類空間的數(shù)量為2b時計算參數(shù)λ,并將其設為一個常數(shù),計算參數(shù)λ的公式如下:
其中,dh(ck,cl)表示二進制編碼ck和二進制編碼cl的海明距離的平方根,
上述的量化損失函數(shù)是在完全編碼的情況下的計算公式,式中包括n2個樣本對的計算,對于大規(guī)模的數(shù)據(jù)空間是難以實現(xiàn)的。利用聚類方法降低問題的復雜度,并且將空間量化引入哈希學習。在非完全編碼的情況下,對于隨機選擇的k個聚類中心進行研究。對于任意的樣本xi,與另一個樣本xj的距離可以用如下公式近似:
即將兩個樣本之間的距離近似等于一個樣本與另一個樣本所屬聚類中心之間的距離。
因此,量化損失函數(shù)可以重新表示為更簡單有效的形式:
其中do(xi,pk)為樣本xi到聚類中心pk的距離,
當上述量化損失函數(shù)取得最小值時,即如下式時,表示數(shù)據(jù)空間和海明空間對齊:
其中,ck∈{-1,1}b,cktcl≠b,l≠k,即保證任意兩個聚類中心不會被賦予同一個二進制編碼。
s12,根據(jù)貪心算法,在海明空間中獲取構成的超立方體結構與所述數(shù)據(jù)空間結構最一致的二進制編碼,構成二進制編碼集合。
對于隨機選擇的k個聚類中心,假設已經(jīng)求出各個樣本對應的聚類中心的編號,則要在海明空間中尋找構成的超立方體結構與所述數(shù)據(jù)空間結構最一致的二進制編碼,即要求數(shù)據(jù)空間與海明空間形成最優(yōu)的對齊,也即計算量化損失函數(shù)的最小值。如果直接枚舉所有的二進制編碼組合,對于b個比特位,一共存在高達2b種組合,這顯然是不切實際的。所以,利用貪心算法進行求解自適應的二進制編碼。
貪心算法又稱貪婪算法,是指在對一個問題進行求解時,總是做出在當前看來是最好的選擇,即不從整體最優(yōu)上加以考慮。通過貪心算法得到的是通常是局部最優(yōu)解。貪心算法不是對所有問題都能得到整體最優(yōu)解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無后效性,即某個狀態(tài)以前的過程不會影響以后的狀態(tài),只與當前狀態(tài)有關。
為聚類中心p1隨機賦予一個海明空間中的二進制編碼c1,不斷增加聚類中心,并分別為其賦予一個海明空間中的二進制編碼,根據(jù)量化損失函數(shù)計算量化損失,將對應最小量化損失的各二進制編碼分別賦予各聚類中心。設聚類中心p1,p2,…,pl(1≤l≤k)已經(jīng)被分別賦予二進制編碼c1,c2,…,cl(1≤l≤k),則需要從可利用的剩余二進制編碼集合
并通過下式計算使量化損失函數(shù)取值最小的二進制編碼ck:
因為此時海明空間是限制在一個較小的范圍,即
如圖3所示,s2具體包括:s21,通過枚舉方式為每個數(shù)據(jù)重新分配所述聚類中心集合中的聚類中心,并重新確定各聚類中心的位置,形成新的聚類中心集合;s22,根據(jù)所述新的聚類中心集合更新數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心。
s21,通過枚舉方式為每個數(shù)據(jù)重新分配所述聚類中心集合中的聚類中心,并重新確定各聚類中心的位置,形成新的聚類中心集合。
盡管好的聚類中心能夠反映數(shù)據(jù)空間的數(shù)據(jù)分布,但是對于哈希學習問題,聚類中心還需要具備數(shù)據(jù)空間到海明空間的映射保持能力。因此,在確定了二進制編碼集合c之后,需要進一步調整聚類中心集合p的分布,使數(shù)據(jù)空間和海明空間得到更好的對齊。因此,數(shù)據(jù)空間和海明空間的對齊條件轉化為:
其中,|c|為二進制編碼集合中包含的二進制編碼的數(shù)量。
為了獲取最優(yōu)的聚類中心的位置,首先為數(shù)據(jù)空間的各個樣本重新分配聚類中心,然后根據(jù)新的聚類中心的分布確定聚類中心的位置,以形成新的聚類中心集合。
利用上述轉化后的數(shù)據(jù)空間和海明空間的對齊條件,每一個樣本xi重新分配最適合的聚類中心,這可通過簡單枚舉方式完成,即要保證樣本xi滿足如下公式:
為每個樣本重新分配聚類中心后,通過如下公式重新確定各個聚類中心的位置:
在更新聚類中心集合的過程中,由于一些缺乏信息量、不能體現(xiàn)空間對齊的聚類中心被舍棄,導致聚類中心的數(shù)量可能發(fā)生變化,使聚類中心集合被縮小。這是與之前對哈希編碼的研究差異最大的地方。經(jīng)后續(xù)的迭代操作,聚類中心集合會逐漸地適應二進制編碼集合,達到數(shù)據(jù)空間和海明空間對齊的目的。
s22,根據(jù)所述新的聚類中心集合更新數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心。
更新聚類中心集合之后,數(shù)據(jù)空間的樣本分布也將隨之改變。在后續(xù)的迭代操作中,海明空間的二進制編碼應該盡可能保持與數(shù)據(jù)空間分布的一致性,因此需要對數(shù)據(jù)空間的數(shù)據(jù)分布進行更新,即對樣本所屬聚類中心的編號進行更新。這一更新操作利用k-means聚類算法完成:
s3,迭代執(zhí)行上述s1和s2,直到數(shù)據(jù)空間與海明空間對齊,將數(shù)據(jù)空間的所有數(shù)據(jù)映射至其所屬聚類中心對應的二進制編碼,以完成哈希編碼。由于每次迭代操作都會使數(shù)據(jù)空間與海明空間更加對齊,這里所說的迭代執(zhí)行上述s1和s2,直到數(shù)據(jù)空間與海明空間對齊是指,下次迭代操作不會對數(shù)據(jù)空間與海明空間對齊產生有利影響,即本次的迭代操作產生的量化誤差是所有迭代操作得到的量化誤差中的最小值,下次迭代操作產生的量化誤差大于或等于本次迭代操作產生的量化誤差。
本發(fā)明實施例提供的自適應的二進制量化哈希方法,基于聚類中心的基本思想,采取非完全編碼的方案,自適應地確定聚類中心的數(shù)量和對應的二進制編碼,從而減少量化損失,提高哈希檢索的性能。本發(fā)明提供的非完全編碼與現(xiàn)有技術中的完全編碼相比,擁有更高的搜索自由度,能夠在海明空間中獲取到最能反映數(shù)據(jù)分布的編碼組合,因此更好地保持數(shù)據(jù)的最近鄰結構。
如下表所示,為自適應量化哈希算法流程。
表1自適應量化哈希算法流程
如圖4所示,本發(fā)明的另一實施例提供了一種自適應的二進制量化哈希編碼裝置,包括:聚類選取模塊41、集合更新模塊42和迭代完成模塊43。
其中,聚類選取模塊41用于選取數(shù)據(jù)空間中的聚類中心集合,并分別為每個聚類中心賦予海明空間中的二進制編碼,得到對應的二進制編碼集合。集合更新模塊42用于更新所述聚類中心集合和所述數(shù)據(jù)空間的數(shù)據(jù)所屬的聚類中心。迭代完成模塊43用于迭代執(zhí)行所述聚類選取模塊和所述集合更新模塊的動作,直到所述數(shù)據(jù)空間與所述海明空間對齊,將所述數(shù)據(jù)空間的所有數(shù)據(jù)映射至其所屬聚類中心對應的二進制編碼,以完成哈希編碼。
具體的,本實施例中編碼裝置的操作流程與上述方法類實施例一一對應,在此不再贅述。
本發(fā)明的另一實施例中,提供了一種計算機程序產品,所述計算機程序產品包括存儲在非暫態(tài)計算機可讀存儲介質上的計算機程序,所述計算機程序包括程序指令,當所述程序指令被計算機執(zhí)行時,所述計算機執(zhí)行的方法如本發(fā)明一實施例提供的編碼方法所述。
本發(fā)明的又一實施例中,提供了一種非暫態(tài)計算機可讀存儲介質,所述非暫態(tài)計算機可讀存儲介質存儲計算機指令,所述計算機指令使所述計算機執(zhí)行如本發(fā)明一實施例提供的編碼方法。
最后,本發(fā)明的方法僅為較佳的實施方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。