本發(fā)明屬于計(jì)算機(jī)視覺領(lǐng)域,更具體地,涉及一種基于gpu加速的大規(guī)模圖像詞匯樹檢索方法及系統(tǒng)。
背景技術(shù):
davidnistér等人提出的詞匯樹算法由于其使用樹的結(jié)構(gòu)來對(duì)視覺詞匯進(jìn)行量化,并將視覺詞匯的量化和索引集成為一體,再結(jié)合文本搜索技術(shù)來加快圖像描述符的相似性判斷,使其具有較高的準(zhǔn)確率和效率,在目標(biāo)識(shí)別、場景識(shí)別和三維重建等場合有著十分廣泛的應(yīng)用。
原始的詞匯樹算法主要包含視覺詞匯的學(xué)習(xí)、詞匯樹構(gòu)建及詞匯樹查詢?nèi)齻€(gè)階段。
在視覺詞匯學(xué)習(xí)階段,采用層次性k-means聚類來生成結(jié)構(gòu)化的視覺詞匯。首先需要提取數(shù)據(jù)庫圖像中每幅圖像的尺度不變特征變換(scale-invariantfeaturetransform,sift)特征點(diǎn)來對(duì)圖像進(jìn)行描述表達(dá)。由于所提取的數(shù)據(jù)庫圖像的特征點(diǎn)集合有著非常大的信息冗余,每個(gè)sift特征點(diǎn)對(duì)于描述一幅圖像有著不同的重要性,因此需要采用聚類算法來提取有用的信息,也就是圖像的視覺詞匯。不同于一般的聚類算法,詞匯樹算法采用層次性的k-means聚類算法。也就是,首先對(duì)所有的sift特征點(diǎn)采用k-means算法生成k個(gè)簇中心,將這些sift特征點(diǎn)分成k個(gè)簇,然后再對(duì)每一份sift特征點(diǎn)集使用k-means聚類生成k個(gè)簇中心,又將之前得到的每一份sift特征點(diǎn)集再分成更小的k個(gè)簇,如此循環(huán)不斷將sift特征點(diǎn)層層細(xì)化直到l層。這樣,就得到一個(gè)sift特征點(diǎn)的詞匯樹結(jié)構(gòu),其中,非葉子結(jié)點(diǎn)代表著簇中心,而葉子結(jié)點(diǎn)則代表著視覺詞匯。由于采用層次性的sift特征點(diǎn)表達(dá)形式,可以設(shè)計(jì)近鄰搜索來有效地查找到視覺詞匯。
在詞匯樹構(gòu)建階段,需要將每幅圖像的sift特征點(diǎn)映射到詞匯樹的視覺詞匯上以得到描述直方圖,并采用文本搜索技術(shù)對(duì)得到的直方圖進(jìn)行視覺詞匯獨(dú)特性加權(quán)和歸一化處理。由于在視覺詞匯的學(xué)習(xí)階段將視覺詞匯組織成樹結(jié)構(gòu),因此對(duì)每個(gè)sift特征點(diǎn)對(duì)應(yīng)的視覺詞匯進(jìn)行查詢時(shí)只需要在每一層進(jìn)行k次比較,大大減少了映射時(shí)間。在將數(shù)據(jù)庫圖像集合的所有特征點(diǎn)映射到相應(yīng)的視覺詞匯之后,便得到了每一個(gè)圖像的直方圖描述形式。結(jié)合文本搜索技術(shù),每個(gè)視覺詞匯所代表的顯著區(qū)分性是不同的,同時(shí)為了加快查詢圖像對(duì)數(shù)據(jù)庫圖像的相似性判別,采用倒排文檔技術(shù),結(jié)合詞頻-逆向文件頻率(termfrequncy-inversedocumentfrequency,tf-idf)加權(quán)技術(shù),對(duì)每一個(gè)視覺詞匯更新其獨(dú)特性表達(dá),生成新的描述直方圖。最后,再對(duì)每幅圖像的描述直方圖進(jìn)行歸一化處理,去除每幅圖像由于特征點(diǎn)數(shù)不同所造成的影響。
如圖所示在詞匯樹查詢階段,同樣需要先提取查詢圖像的sift特征點(diǎn),然后將其與詞匯樹的視覺詞匯進(jìn)行映射處理,得到查詢圖像的描述直方圖,再進(jìn)行歸一化處理。最后,將查詢圖像的描述直方圖與所有數(shù)據(jù)庫圖像的描述直方圖進(jìn)行直方圖交叉核計(jì)算,得到查詢圖像與每幅數(shù)據(jù)庫圖像的相似性評(píng)分。這樣,根據(jù)評(píng)分結(jié)果就可以得到想要的相似性圖像。
由于在詞匯樹的構(gòu)建階段需要將所有數(shù)據(jù)庫圖像的sift特征點(diǎn)映射到相應(yīng)的視覺詞匯上,盡管原始的詞匯樹算法采用了層次性的樹結(jié)構(gòu)進(jìn)行比較查詢?cè)谛噬嫌辛艘欢ǖ奶岣撸窃诿鎸?duì)目前普遍的大規(guī)模圖像檢索時(shí),該階段將仍然占用整個(gè)算法巨大的計(jì)算開銷。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于gpu加速的大規(guī)模圖像詞匯樹檢索方法及系統(tǒng),其目的在于針對(duì)gpu平臺(tái)的結(jié)構(gòu)特點(diǎn),首先將原始視覺詞匯的指針鏈表形式轉(zhuǎn)化為線性鏈表結(jié)構(gòu),并將傳統(tǒng)的sift特征點(diǎn)進(jìn)行模塊化組織,使得gpu能一次處理大批量數(shù)據(jù),大大提高sift特征點(diǎn)映射的效率。并根據(jù)在gpu上得到的中間結(jié)果,在后續(xù)階段利用gpu采取相應(yīng)的視覺詞匯獨(dú)特性加權(quán)和歸一化處理等得到最終的查詢圖像相似性評(píng)分,由此解決現(xiàn)有技術(shù)在面對(duì)大規(guī)模圖像檢索時(shí),算法占用巨大的計(jì)算開銷的技術(shù)問題。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種大規(guī)模圖像詞匯樹檢索方法,該方法包括以下步驟:
(1)輸入待查詢圖像;
(2)利用圖像中每個(gè)sift特征點(diǎn)在詞匯樹中最相似視覺詞匯構(gòu)建每幅圖像的圖像直方圖,并對(duì)圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表;
(3)利用視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重更新視覺詞匯索引列表和圖像索引列表中視覺詞匯出現(xiàn)的頻數(shù),具體采用以下公式更新:
qi=niωi,
其中,qi表示一幅圖像中第i個(gè)視覺詞匯的新頻數(shù);ni代表一幅圖像中第i個(gè)視覺詞匯的原頻數(shù),ωi為相應(yīng)視覺詞匯的權(quán)重;最后采用l1范數(shù)對(duì)圖像索引列表進(jìn)行計(jì)算,得到每幅圖像的描述符長度,并以此長度對(duì)每幅圖像直方圖進(jìn)行歸一化;
(4)利用待查詢圖像直方圖和預(yù)先準(zhǔn)備的數(shù)據(jù)庫圖像直方圖,采用直方圖交叉核計(jì)算所有數(shù)據(jù)庫圖像和待查詢圖像的相似性,對(duì)所有數(shù)據(jù)庫圖像的相似性進(jìn)行排序,得到和待查詢圖像相似性最高的數(shù)據(jù)庫圖像;所述采用直方圖交叉核計(jì)算所有數(shù)據(jù)庫圖像和待查詢圖像的相似性具體為采用以下公式:
其中,h1和h2分別表示待查詢圖像和數(shù)據(jù)庫圖像的描述直方圖,i(h1,h2)表示相似性,h1(i)和h2(i)分別表示待查詢圖像直方圖和數(shù)據(jù)庫圖像直方圖第i個(gè)視覺詞匯的最終頻數(shù)。
進(jìn)一步地,所述步驟(4)中預(yù)先準(zhǔn)備的數(shù)據(jù)庫圖像直方圖具體采用以下步驟獲得:
(21)批量輸入數(shù)據(jù)庫圖像;
(22)利用圖像中sift特征點(diǎn)在詞匯樹中找出最相似視覺詞匯構(gòu)建描述每幅圖像的圖像直方圖,并對(duì)由gpu操作引起的稀疏圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表;
(23)在圖像的特征描述點(diǎn)中,每一個(gè)視覺詞匯所代表的權(quán)重是不同的,需要根據(jù)文本搜索技術(shù)中的tf-idf技術(shù)對(duì)視覺詞匯進(jìn)行加權(quán)處理,根據(jù)視覺詞匯索引列表的數(shù)據(jù),采用以下公式計(jì)算每個(gè)視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重:
其中,n代表所有圖像數(shù)據(jù)庫中圖像總數(shù)目,ni代表第i個(gè)視覺詞匯下對(duì)應(yīng)有多少幅數(shù)據(jù)庫圖像與其相關(guān),ωi為第i個(gè)視覺詞匯的權(quán)重,當(dāng)ni為0時(shí),記ωi為0;
(24)為了去除每幅圖像由于特征點(diǎn)數(shù)不同所造成的影響,利用視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重更新視覺詞匯索引列表和圖像索引列表中視覺詞匯出現(xiàn)的頻數(shù);采用l1范數(shù)對(duì)圖像索引列表進(jìn)行計(jì)算,得到每幅數(shù)據(jù)庫圖像的描述符長度,并以此長度對(duì)每幅數(shù)據(jù)庫圖像直方圖進(jìn)行歸一化。
進(jìn)一步地,為符合gpu大規(guī)模并行計(jì)算的特點(diǎn),所述詞匯樹的結(jié)構(gòu)為地址連續(xù)的數(shù)組結(jié)構(gòu),采用廣度優(yōu)先搜索結(jié)合堆棧的方法將視覺詞匯的樹結(jié)構(gòu)轉(zhuǎn)換為地址連續(xù)的數(shù)組結(jié)構(gòu),用數(shù)組的一個(gè)元素表示詞匯樹的一個(gè)節(jié)點(diǎn),以便可以在cpu和gpu之間進(jìn)行視覺詞匯的傳輸和后面gpu對(duì)其便捷地訪問。
進(jìn)一步地,所述數(shù)組的元素包括sift特征描述符、結(jié)點(diǎn)id、該節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)和其第一個(gè)子節(jié)點(diǎn)的地址偏移量屬性。
進(jìn)一步地,所述視覺詞匯索引列表以視覺詞匯為關(guān)鍵字,索引包含該視覺詞匯的圖像id和該視覺詞匯在該圖像中出現(xiàn)的頻數(shù);圖像索引列表以圖像id為關(guān)鍵字,索引該圖像包含的視覺詞匯id和該視覺詞匯在該圖像中出現(xiàn)的頻數(shù);
進(jìn)一步地,所述利用圖像中sift特征點(diǎn)在詞匯樹中找出最相似視覺詞匯構(gòu)建描述每幅圖像的圖像直方圖,并對(duì)圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表具體包括以下步驟:
(31)提取每幅圖像的sift特征點(diǎn),并剔除其中尺度小于設(shè)定閾值的sift特征點(diǎn),此閾值優(yōu)選1.4;
(32)傳統(tǒng)的cpu詞匯樹算法一次性只能處理一個(gè)sift特征點(diǎn)的視覺詞匯映射,如果將一幅圖像的所有sift特征點(diǎn)同時(shí)在gpu上進(jìn)行映射也往往不能充分利用gpu的大規(guī)模并行計(jì)算能力。因此,將圖像的sift特征點(diǎn)用新的存儲(chǔ)結(jié)構(gòu)表示,存儲(chǔ)結(jié)構(gòu)包括sift特征描述符、所屬圖像id和所屬視覺詞匯id屬性,自適應(yīng)計(jì)算判斷gpu所能處理的圖像張數(shù);
(33)按深度優(yōu)先搜索的形式在gpu每個(gè)線程中對(duì)每幅圖像的每個(gè)sift特征點(diǎn)進(jìn)行查找,查找每個(gè)sift特征點(diǎn)在詞匯樹中和其最相似的視覺詞匯,由每幅圖像所有sift特征點(diǎn)對(duì)應(yīng)的所有視覺詞匯組成描述每幅圖像的圖像直方圖;當(dāng)查詢sift特征到達(dá)第0層時(shí),將查詢sift特征的128位描述符根據(jù)其第一個(gè)子節(jié)點(diǎn)的偏移量同其下屬的子結(jié)點(diǎn)的特征描述符依次比較,判斷其屬于第幾個(gè)子節(jié)點(diǎn),然后將查詢特征轉(zhuǎn)移到那個(gè)子節(jié)點(diǎn)上,繼續(xù)比較判斷其屬于第幾個(gè)子節(jié)點(diǎn),直到最后一層得到描述每幅圖像的圖像直方圖;
(34)利用cpu建立一個(gè)視覺詞匯索引列表和圖像索引列表,當(dāng)一個(gè)視覺詞匯在一個(gè)圖像中的頻數(shù)為零的時(shí)候則刪除該索引;由上一步得到的圖像直方圖在實(shí)際中是非常稀疏的,因此需要在建立一個(gè)視覺詞匯索引列表和圖像索引列表的同時(shí)對(duì)圖像直方圖進(jìn)行壓縮,去除直方圖中為零的bin。
按照本發(fā)明的另一個(gè)方面,提供了一種基于gpu加速的大規(guī)模圖像詞匯樹檢索系統(tǒng),該方法包括以下模塊:
查詢圖像輸入模塊,用于輸入待查詢圖像;
圖像直方圖構(gòu)建模塊,用于利用gpu多線程并行計(jì)算出圖像中每個(gè)sift特征點(diǎn)在詞匯樹中最相似視覺詞匯,由每幅圖像的所有sift特征點(diǎn)對(duì)應(yīng)的視覺詞匯組成描述每幅圖像的圖像直方圖,并對(duì)圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表;
圖像直方圖歸一化模塊,用于利用視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重更新視覺詞匯索引列表和圖像索引列表中視覺詞匯出現(xiàn)的頻數(shù),具體采用以下公式更新:
qi=niωi,
其中,qi表示一幅圖像中第i個(gè)視覺詞匯的新頻數(shù);ni代表一幅圖像中第i個(gè)視覺詞匯的原頻數(shù),ωi為相應(yīng)視覺詞匯的權(quán)重;最后采用l1范數(shù)對(duì)圖像索引列表進(jìn)行計(jì)算,得到每幅圖像的描述符長度,并以此長度對(duì)每幅圖像直方圖進(jìn)行歸一化;
圖像檢索模塊,用于利用待查詢圖像直方圖和預(yù)先準(zhǔn)備的數(shù)據(jù)庫圖像直方圖,采用直方圖交叉核計(jì)算所有數(shù)據(jù)庫圖像和待查詢圖像的相似性,對(duì)所有數(shù)據(jù)庫圖像的相似性進(jìn)行排序,得到和待查詢圖像相似性最高的數(shù)據(jù)庫圖像;所述采用直方圖交叉核計(jì)算所有數(shù)據(jù)庫圖像和待查詢圖像的相似性具體為采用以下公式:
其中,h1和h2分別表示待查詢圖像和數(shù)據(jù)庫圖像的描述直方圖,i(h1,h2)表示相似性,h1(i)和h2(i)分別表示待查詢圖像直方圖和數(shù)據(jù)庫圖像直方圖第i個(gè)視覺詞匯的最終頻數(shù)。
進(jìn)一步地,所述數(shù)據(jù)庫圖像直方圖具體包含以下模塊:
數(shù)據(jù)庫圖像輸入模塊,用于批量輸入數(shù)據(jù)庫圖像;
圖像直方圖構(gòu)建模塊,用于利用gpu多線程并行計(jì)算出圖像中每個(gè)sift特征點(diǎn)在詞匯樹中最相似視覺詞匯,由每幅圖像的所有sift特征點(diǎn)對(duì)應(yīng)的視覺詞匯組成描述每幅圖像的圖像直方圖,并對(duì)圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表;
視覺詞匯權(quán)重計(jì)算模塊,用于根據(jù)視覺詞匯索引列表的數(shù)據(jù),采用以下公式計(jì)算每個(gè)視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重:
其中,n代表圖像數(shù)據(jù)庫中所有圖像總數(shù)目,ni代表第i個(gè)視覺詞匯下對(duì)應(yīng)有多少幅數(shù)據(jù)庫圖像與其相關(guān),ωi為第i個(gè)視覺詞匯的權(quán)重,當(dāng)ni為0時(shí),記ωi為0;
數(shù)據(jù)庫圖像直方圖歸一化模塊,用于利用視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重更新視覺詞匯索引列表和圖像索引列表中視覺詞匯出現(xiàn)的頻數(shù);最后采用l1范數(shù)對(duì)圖像索引列表進(jìn)行計(jì)算,得到每幅數(shù)據(jù)庫圖像的描述符長度,并以此長度對(duì)每幅數(shù)據(jù)庫圖像直方圖進(jìn)行歸一化。
進(jìn)一步地,所述詞匯樹的結(jié)構(gòu)為地址連續(xù)的數(shù)組結(jié)構(gòu),采用廣度優(yōu)先搜索結(jié)合堆棧的方法將視覺詞匯的樹結(jié)構(gòu)轉(zhuǎn)換為地址連續(xù)的數(shù)組結(jié)構(gòu),用數(shù)組的一個(gè)元素表示詞匯樹的一個(gè)節(jié)點(diǎn);所述數(shù)組結(jié)構(gòu)的一個(gè)元素包括sift特征描述符、結(jié)點(diǎn)id、該節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)和其第一個(gè)子節(jié)點(diǎn)的地址偏移量屬性。
進(jìn)一步地,所述視覺詞匯索引列表以視覺詞匯為關(guān)鍵字,索引包含該視覺詞匯的圖像id和該視覺詞匯在該圖像中出現(xiàn)的頻數(shù);圖像索引列表以圖像id為關(guān)鍵字,索引該圖像包含的視覺詞匯id和該視覺詞匯在該圖像中出現(xiàn)的頻數(shù)。
進(jìn)一步地,所述圖像直方圖構(gòu)建模塊具體包括以下單元:
特征點(diǎn)提取單元,用于提取每幅圖像的sift特征點(diǎn),并剔除其中尺度小于設(shè)定閾值的sift特征點(diǎn);
特征點(diǎn)轉(zhuǎn)換單元,用于將圖像的sift特征點(diǎn)用新的存儲(chǔ)結(jié)構(gòu)表示,存儲(chǔ)結(jié)構(gòu)包括sift特征描述符、所屬圖像id和所屬視覺詞匯id屬性;
圖像直方圖構(gòu)建單元,用于按深度優(yōu)先搜索的形式在gpu每個(gè)線程中對(duì)每幅圖像的每個(gè)sift特征點(diǎn)進(jìn)行查找,查找每個(gè)sift特征點(diǎn)在詞匯樹中和其最相近的視覺詞匯,由每幅圖像的所有sift特征點(diǎn)對(duì)應(yīng)的所有視覺詞匯組成描述每幅圖像的圖像直方圖;
索引列表建立單元,用于建立一個(gè)視覺詞匯索引列表和圖像索引列表,當(dāng)一個(gè)視覺詞匯在一個(gè)圖像中的頻數(shù)為零的時(shí)候則刪除該索引。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)特征及有益效果:
(1)采用廣度優(yōu)先搜索結(jié)合堆棧的方法將視覺詞匯的樹結(jié)構(gòu)轉(zhuǎn)換為地址連續(xù)的數(shù)組結(jié)構(gòu),用數(shù)組的一個(gè)元素表示詞匯樹的一個(gè)節(jié)點(diǎn),克服了傳統(tǒng)的gpu與cpu不能進(jìn)行非連續(xù)地址指針形式的數(shù)據(jù)結(jié)構(gòu)傳輸?shù)娜毕?,以此能在gpu上實(shí)現(xiàn)利用線性連續(xù)偏移樹結(jié)構(gòu)進(jìn)行快速查找映射的技術(shù)優(yōu)勢;
(2)將圖像的sift特征點(diǎn)用新的存儲(chǔ)結(jié)構(gòu)表示,存儲(chǔ)結(jié)構(gòu)包括sift特征描述符、所屬圖像id和所屬視覺詞匯id屬性,得到可以在gpu上一次性處理數(shù)十萬個(gè)特征點(diǎn)進(jìn)行大規(guī)模并發(fā)查找映射以此加速的技術(shù)優(yōu)勢;
(3)由直方圖緊湊化處理與查找映射的并發(fā)執(zhí)行技術(shù)方案,得到可以將直方圖的緊湊化處理與交叉索引建立的時(shí)間隱藏在gpu上實(shí)現(xiàn)特征點(diǎn)查找映射的步驟之下以此提高總體加速性能的技術(shù)優(yōu)勢。
附圖說明
圖1是現(xiàn)有技術(shù)中待查詢的sift特征映射過程;
圖2是本發(fā)明技術(shù)方案的圖像檢測流程示意圖;
圖3是本發(fā)明技術(shù)方案的對(duì)數(shù)據(jù)庫圖像的gpu操作流程示意圖;
圖4是本發(fā)明技術(shù)方案的以視覺詞匯屬性為關(guān)鍵詞的列表結(jié)構(gòu);
圖5是本發(fā)明技術(shù)方案的以圖像匯屬性為關(guān)鍵詞的列表結(jié)構(gòu)。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
圖2是本發(fā)明技術(shù)方案的圖像檢測流程示意圖,如圖2所示本發(fā)明技術(shù)實(shí)施例包含以下步驟:
(1)輸入待查詢圖像;
(2)利用圖像中sift特征點(diǎn)在詞匯樹中找出最相似視覺詞匯構(gòu)建描述每幅圖像的圖像直方圖,并對(duì)圖像直方圖進(jìn)行緊湊化處理,同時(shí)建立圖像索引列表和視覺詞匯索引列表;
(3)利用視覺詞匯在圖像數(shù)據(jù)庫中的權(quán)重更新視覺詞匯索引列表和圖像索引列表中視覺詞匯出現(xiàn)的頻數(shù);最后采用l1范數(shù)對(duì)圖像索引列表進(jìn)行計(jì)算,得到每幅圖像的描述符長度,并以此長度對(duì)每幅圖像直方圖進(jìn)行歸一化;
(4)利用待查詢圖像直方圖和預(yù)先準(zhǔn)備的數(shù)據(jù)庫圖像直方圖,與傳統(tǒng)的計(jì)算矢量相似性不同,這里采用直方圖交叉核來評(píng)判兩幅圖像描述直方圖的相似性,直方圖交叉核的定義如下:
其中,h1和h2分別表示待查詢圖像和數(shù)據(jù)庫圖像的描述直方圖,i(h1,h2)表示相似性,h1(i)和h2(i)分別表示待查詢圖像直方圖和數(shù)據(jù)庫圖像直方圖第i個(gè)視覺詞匯的最終頻數(shù);
對(duì)數(shù)據(jù)庫所有圖像得到的相似性進(jìn)行排序,得到和待查詢圖像相似性最高的數(shù)據(jù)庫圖像。
其中,為符合gpu大規(guī)模并行計(jì)算的特點(diǎn),對(duì)原始詞匯樹算法得到的視覺詞匯的樹結(jié)構(gòu)采用廣度優(yōu)先搜索結(jié)合堆棧的方式將其轉(zhuǎn)換為地址連續(xù)的新的結(jié)構(gòu)體數(shù)組形式。該數(shù)組結(jié)構(gòu)的定義為:sift特征描述符、結(jié)點(diǎn)id、該節(jié)點(diǎn)的孩子數(shù)和其第一個(gè)孩子結(jié)點(diǎn)的地址偏移量。因此在做廣度優(yōu)先搜索時(shí)對(duì)每個(gè)結(jié)點(diǎn)都要記錄以上信息。這樣,再將原先視覺詞匯的指針形式轉(zhuǎn)換為線性連續(xù)的地址偏移結(jié)構(gòu),可以方便地將視覺詞匯信息傳送到gpu設(shè)備上,也利于后面gpu對(duì)其進(jìn)行便捷訪問。在本發(fā)明的一個(gè)實(shí)施實(shí)例中,將原先深度為6,分支因子為10的具有106個(gè)視覺詞匯的樹的1,111,111個(gè)節(jié)點(diǎn)信息統(tǒng)一組織成具有一定連接關(guān)系的數(shù)組形式。
如圖3所示,預(yù)先準(zhǔn)備數(shù)據(jù)庫圖像直方圖包括以下步驟:
(21)輸入數(shù)據(jù)庫圖像;
(22)對(duì)數(shù)據(jù)庫中每幅圖像提取sift特征點(diǎn),原始的每個(gè)sift特征點(diǎn)包含位置信息、方向信息與尺度信息,由于在構(gòu)建視覺詞匯時(shí)需要的是具有顯著代表性的視覺詞匯,因此將尺度小于一定閾值的sift特征點(diǎn)剔除得到每一幅圖像的臨時(shí)表征,這里優(yōu)選閾值k=1.4;
傳統(tǒng)的cpu詞匯樹算法一次性只能處理一個(gè)sift特征點(diǎn)的視覺詞匯映射,如果將一幅圖像的所有特征點(diǎn)同時(shí)在gpu上進(jìn)行映射也往往不能充分利用gpu的大規(guī)模并行計(jì)算能力。因此,本發(fā)明根據(jù)gpu顯存自適應(yīng)地讀取若干幅圖像的sift特征點(diǎn),以使gpu的利用率盡可能達(dá)到最大,并設(shè)計(jì)一種新的sift特征點(diǎn)存儲(chǔ)結(jié)構(gòu)使其具有sift特征描述符、所屬圖像id和所屬視覺詞匯id等屬性。這樣就能一次性將數(shù)十萬個(gè)sfit特征點(diǎn)同時(shí)送到gpu設(shè)備上進(jìn)行后續(xù)計(jì)算處理又不至于使每個(gè)sift特征點(diǎn)的私有屬性產(chǎn)生混淆;
這里在gpu上開辟一個(gè)永久的直方圖臨時(shí)存儲(chǔ)區(qū),便于每次對(duì)40幅圖像的sift特征點(diǎn)進(jìn)行查找映射時(shí)記錄每幅圖像中每個(gè)視覺詞匯出現(xiàn)的頻數(shù)。由于在詞匯樹中記錄了每個(gè)結(jié)點(diǎn)的孩子數(shù)和第一個(gè)孩子結(jié)點(diǎn)在線性表中的地址偏移,因此可以有效地在gpu上按深度優(yōu)先搜索的形式在每個(gè)線程中對(duì)待查詢sift特征點(diǎn)進(jìn)行查找映射。而且得益于詞匯樹的結(jié)點(diǎn)表達(dá)方式,同時(shí)也保持了原來視覺詞匯樹的深度和分支因子信息,所以每個(gè)待查詢的sift特征點(diǎn)只要進(jìn)行60次的比較就可以搜索到相應(yīng)的視覺詞匯。這樣便得到相應(yīng)的每幅圖像的描述直方圖;
這一步中得到的圖像直方圖在實(shí)際中是非常稀疏的,也就是說在代表106個(gè)視覺詞匯的直方圖中僅有幾千個(gè)bin會(huì)有相應(yīng)的頻數(shù)值,這無論是對(duì)后續(xù)的處理效率還是cpu與gpu的存儲(chǔ)空間而言都是相當(dāng)不利的,因此將數(shù)據(jù)返回cpu對(duì)每幅圖像的直方圖進(jìn)行高效的壓縮處理。在緊湊化的過程中同時(shí)對(duì)圖像與視覺詞匯建立交叉索引,這里將同時(shí)創(chuàng)建以視覺詞匯屬性為關(guān)鍵字和以圖像屬性為關(guān)鍵字的兩個(gè)公共記錄列表視覺詞匯索引列表與圖像索引列表,在每次判別出圖像直方圖的一個(gè)bin的頻數(shù)值不為0時(shí),在視覺詞匯索引列表與圖像索引列表分別作出記錄。視覺詞匯索引列表與圖像索引列表的列表結(jié)構(gòu)如圖4和圖5所示;
(23)在圖像的特征描述點(diǎn)中,每一個(gè)視覺詞匯所代表的權(quán)重是不同的,根據(jù)文本搜索技術(shù)對(duì)視覺詞匯進(jìn)行加權(quán)處理,即根據(jù)上一步驟中所得的視覺詞匯索引列表結(jié)果,采用下式計(jì)算每個(gè)視覺詞匯的相應(yīng)權(quán)重:
其中,n代表所有數(shù)據(jù)庫圖像總的圖像數(shù)目,ni代表第i個(gè)視覺詞匯下對(duì)應(yīng)有多少幅數(shù)據(jù)庫圖像與其相關(guān),當(dāng)ni為0時(shí),記ωi為0;
(24)在得到每個(gè)視覺詞匯相應(yīng)的獨(dú)特性權(quán)重后,對(duì)視覺詞匯索引列表與圖像索引列表中的對(duì)應(yīng)頻數(shù)進(jìn)行相應(yīng)的更新,更新公式為:
qi=niωi
其中,qi表示一幅圖像中第i個(gè)視覺詞匯的新頻數(shù);ni代表一幅圖像中第i個(gè)視覺詞匯的原頻數(shù),ωi為相應(yīng)視覺詞匯的權(quán)重;
同時(shí)為了去除每幅圖像由于特征點(diǎn)個(gè)數(shù)的不同所造成的影響,需要對(duì)每幅圖像的直方圖進(jìn)行歸一化修正,采用l1范數(shù)對(duì)圖像索引列表計(jì)算每幅圖像的描述符長度以此對(duì)每幅圖像的頻數(shù)進(jìn)行歸一化。由于視覺詞匯索引列表與圖像索引列表保存了視覺詞匯和圖像的完備信息,因此同樣可以將每幅圖像的頻數(shù)更新和歸一化放到gpu上進(jìn)行計(jì)算,來得到一定提速。至此,利用大規(guī)模的數(shù)據(jù)庫圖像完成對(duì)視覺詞匯樹的gpu加速構(gòu)建階段。
這里應(yīng)用本發(fā)明算法在大規(guī)模三維場景的重建上進(jìn)行測試。大規(guī)模三維場景重建由于原始的輸入圖像有成千上萬張,然而并不是兩兩圖像之間都有相應(yīng)的匹配對(duì)應(yīng)關(guān)系,因此往往先采用詞匯樹算法來粗略快速地挑選出含有潛在匹配關(guān)系的圖像對(duì)。傳統(tǒng)的詞匯樹算法盡管對(duì)整個(gè)大規(guī)模三維重建的效率有一定的提升,但是其本身的詞匯樹構(gòu)建階段的查找映射時(shí)間瓶頸也是顯然的,采用本發(fā)明算法可以使詞匯樹算法的查找映射階段提速達(dá)到30倍左右,整體效果(由gpu加速導(dǎo)致的整體時(shí)間效應(yīng))也達(dá)到了20倍左右,提升了整個(gè)大規(guī)模場景重建的時(shí)間效率。表1與表2分別展示了三維重建兩個(gè)數(shù)據(jù)集應(yīng)用傳統(tǒng)的詞匯樹算法與gpu加速的詞匯樹算法的時(shí)間性能對(duì)比。其中,所有的cpu時(shí)間都是采用單核c++執(zhí)行得到的,gpu時(shí)間是在nvidiagtxtitanx上采用cudac執(zhí)行得到的。
表1cpu與gpu程序時(shí)間性能比較(2360幅圖像)
表2cpu與gpu時(shí)間性能比較(6280幅圖像)
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。