• 沒有找到結果。

以圖形處理器加速尺度不變特徵轉換演算法

N/A
N/A
Protected

Academic year: 2021

Share "以圖形處理器加速尺度不變特徵轉換演算法"

Copied!
49
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學科技應用與人力資源發展學系 碩士論文. 以圖形處理器加速尺度不變特徵轉換演算法. 研 究 生:蔡睿烝 指導教授:林政宏. 中華民國一○二年六月.

(2) 以圖形處理器加速尺度不變特徵轉換演算法 研 究 生:蔡 睿 烝 指導教授:林 政 宏. 中文摘要 圖像內容檢索(CBIR)為一種電腦視覺技術,使用圖像的內容在大 型資料庫中進行檢索,如顏色、形狀、紋理等而非關鍵字、標籤或其他 描述方法。許多圖像運算與電腦視覺的技術皆需要擷取圖像中的內容, 大部分皆透過尺度不變特徵轉換演算法(SIFT)來達成。尺度不變特徵 轉換被廣泛應用於物件辨識、圖像拼接、立體對照、描述圖像特徵等。 在特定的應用如圖像內容檢索中,特徵點擷取被視為預處理程序,之後 的特徵點比對便成為運算最密集的程序。圖形處理器(GPU)因其在大 量資料平行運算的卓越能力收到關注,因此,本研究提出基於圖形處理 器平行化的尺度不變特徵轉換演算法,藉此加速線性搜尋法與 k-近鄰搜 尋法。於實驗結果中,相較於傳統的最近鄰居搜尋法,本研究得到 22 倍的加速;而相較於傳統的 k-近鄰搜尋法,得到 11 倍的加速。. 關鍵字:圖形處理器、尺度不變特徵轉換、圖像內容檢索、K-近鄰搜尋 法、線性搜尋法. i.

(3) Accelerating Scale-Invariant Feature Transform Using Graphic Processing Units Author: Tsai, Ruei-Jen Adviser: Lin, Cheng-Hung. ABSTRACT Content-based image retrieval (CBIR) is the application of computer vision techniques to the searching for digital images from large databases using image actual contents such as colors, shapes, and textures rather than the metadata such as keywords, tags, and/or descriptions associated with the image. Many techniques of image processing and computer vision are applied to capture the image contents. Among them, the scale invariant features transform (SIFT) has been widely adopted in many applications, such as object recognition, image stitching, and stereo correspondence to extract and describe local features in images. In certain application such as CBIR, feature extraction is a preprocessing process and feature matching is the most computing-intensive process. Graphic Processing Units (GPUs) have attracted a lot of attention because of their dramatic power of parallel computing on massive data. In this thesis, we propose a GPU-based SIFT by accelerating linear search and K-Nearest Neighbor (KNN) on GPUs. The proposed approach achieves 22 times faster than the ordinary Nearest Neighbor (NN) performed on CPUs, and 11 times faster than the ordinary linear search and KNN performed on CPUs.. iii.

(4) Keywords: Content-based image retrieval, scale invariant features transform, Graphic Processing Units, K-Nearest Neighbor linear search. iv.

(5) 目錄 中文摘要 .......................................................................................................... i ABSTRACT .................................................................................................. iii 目錄 ................................................................................................................. v 表次 ...............................................................................................................vii 圖次 ................................................................................................................ ix 第一章 緒論 ................................................................................................. 1 第一節 研究背景與動機 ..................................................................... 1 第二節 研究目的 ................................................................................. 3 第二章 尺度不變特徵轉換 ......................................................................... 5 第一節 特徵點抓取 ............................................................................. 5 第二節 k-近鄰搜尋法與 k-維樹 ....................................................... 12 第三節 綜合分析 ............................................................................... 16 第三章 研究方法 ....................................................................................... 19 第一節 平行化運算架構 ................................................................... 19 第二節 線性搜尋法平行化 ............................................................... 19 第三節 最近鄰搜尋法平行化 ........................................................... 21 第四節 k-近鄰搜尋法平行化 ............................................................ 23 第四章 實驗結果 ....................................................................................... 27 第一節 實驗環境 ............................................................................... 27 第二節 實驗簡介 ............................................................................... 27 第三節 實驗數據 ............................................................................... 28 第四節 實驗分析 ............................................................................... 29 第五章 程式應用 ....................................................................................... 31 v.

(6) 第六章 結論 ............................................................................................... 35 參考文獻 ....................................................................................................... 37. vi.

(7) 表次 表 1 K-NN 與 K-D Tree 比較表 ................................................................ 15. vii.

(8) viii.

(9) 圖次 圖1. CBIR 系統示意圖 .............................................................................. 1. 圖2. 特徵點對應線 .................................................................................... 2. 圖3. SIFT 尺度圖 ....................................................................................... 6. 圖4. 高斯模糊公式表 ................................................................................ 6. 圖5. DoG 圖像群產生示意圖 ................................................................... 8. 圖6. 像素探訪示意圖 ................................................................................ 9. 圖7. 特徵抓取示意圖 ................................................................................ 9. 圖8. 消除不佳特徵點 .............................................................................. 10. 圖9. 定位關鍵點方向 .............................................................................. 11. 圖 10 圖片特徵資料內容 .......................................................................... 12 圖 11 k-近鄰搜尋法示意圖 ....................................................................... 14 圖 12 GPU 階層圖 ..................................................................................... 19 圖 13 GPU 儲存示意圖 ............................................................................. 20 圖 14 歐式距離計算程序 .......................................................................... 21 圖 15 歐幾里得距離 .................................................................................. 21 圖 16 NN 與 K-NN 差異圖 ....................................................................... 22 圖 17 Reduce 方法程序 ............................................................................. 23 圖 18 Non-recursive quick sorting 程序 .................................................... 25 圖 19 NN 執行時間結果 ........................................................................... 28 圖 20 K-NN 執行時間結果 ....................................................................... 29 圖 21 封面資料庫 ...................................................................................... 32 圖 22 系統流程圖 ...................................................................................... 33. ix.

(10) 第一章. 緒論. 第一節 研究背景與動機 CBIR(Content-Based Image retrieval,基於內容的圖像檢索)為一種 使用圖像中的實際內容而非關鍵字、標籤或圖片描述,像是色彩、形狀 和紋理等來從一個大資料庫中檢索數位圖像的電腦視覺科技應用程式。 CBIR 被應用於許多方面,如建築與工程設計、藝品收集、犯罪防治、 地理資訊遙測系統、智慧財產、醫療診斷、軍事、照片檔案與零售目錄 等。原始的 CBIR 系統,會先將書籍資料庫進行預處理,並且在使用者 輸入查詢時,與資料庫中預處理完成的資料進行比對,以輸出查詢結果。 如圖 1 所示:. 圖1. CBIR 系統示意圖 資料來源:自製。. 1.

(11) 尺度不變特徵轉換(Scale-Invariant Feature Transform, SIFT) (Lowe, 2004)廣泛被 CBIR 採用作為特徵擷取與辨識的演算法(Li, Kong, Wang, & Fu, 2009; Xu, Wu, Liu, Zhu, & Shi, 2008; Do, Kijak, Furon, & Amsaleg, 2010) 。SIFT 被廣泛地應用於許多領域,諸如物件辨識、3D 建模、手勢 偵測、影像追蹤等,為電腦視覺(computer vision)的一種重要的解決方 案。SIFT 演算法的主要優點為,其特徵描述器(feature descriptor)對於 以下數值保有不變性:「尺度(Scale)」 、「旋轉(Rotation) 」、 「明度 (Illumination) 」、 「視點(Viewpoint) 」 (Sinha, 2000)。. 圖 2 特徵點對應線 資料來源:自製。. 使用 SIFT 演算法作物件辨識時主要有兩個步驟:「特徵點抓取 (feature extraction) 」與「特徵點比對(feature matching)」 。在特定的應 用中,例如 CBIR,特徵點抓取將會被視為預處理的程序。相對的,特 2.

(12) 徵比對的效能成為大型 CBIR 系統的重要議題。 近年來,圖形處理器(graphic processing units)因為具有針對大量 資料的平行運算能力而被廣泛運用在科學與工程計算上,例如流體動力 學、分子動力學、地質探勘、大氣科學、資料探勘、金融財務等等。 Heymann、Muller、Smolic、Frohlich、Wiegand 等人(2007)的研 究提出透過圖形處理器平行化語言 GPGPU 對 SIFT 演算法進行加速。 CUDA 發表之後,Warn、Emeneker、Cothren、Apon 等人(2009)也提 出使用 CUDA GPU 進行 SIFT 的加速。另外,Bonato、Marques、 Constantinides 等人(2008)、Huang、Huang、Ker、Chen 等人(2012) 以及 Huo、Pan、Huo、Zhou 等人(2012)的研究則提出以平行化演算 法加速 SIFT,無論是用硬體加速或軟體加速上皆獲得不錯的實驗結果。 1999 年版本的 SIFT 演算法先計算所有點對點的距離,再採用 k-近 鄰搜尋法(k nearest neighbor)進行特徵點的比對(Lowe, 1999) 。這種方法 對於單線程的運算來說為一件沒有效率且耗時的工作,但是卻具有高度 的可平行化的機會。. 第二節. 研究目的. 基於以上論述,如果能夠利用 GPU 加速 SIFT 特徵點比對的效率, 整體效能將可以有效的提升。為了改善傳統的 SIFT 演算法特徵比對的. 3.

(13) 效能,Lowe 於 2004 年提出採用 K-D Tree 以降低特徵比對的複雜度。 K-D Tree 為一種空間分割的資料結構,能夠將內含的點儲存在一個 k-維 度的空間。此方法雖然可以加速比對部分的運算時間,但是卻有精確度 上的缺陷與建樹時需要大量記憶體的負擔。相反地,傳統的 K-NN 演算 法,沒有精確度上的誤差與建樹的記憶體負擔,且其具有高度平行化的 機會,有利於實現於 GPU 上以加速特徵比對的程序。 因此,本研究將提出一個針對加速 SIFT 特徵比對程序的平行運算 架構,並實現於 NVIDIA®圖形處理器上,透過 GPU 的平行運算能力, 能夠有效降低 SIFT 特徵比對的執行時間,進而提升大型 CBIR 的效能。. 4.

(14) 第二章. 尺度不變特徵轉換. 第一節. 特徵點抓取. 在 SIFT 演算法中,特徵點包含了許多圖形上的元素,並非只有尺 度的差異。SIFT 的特徵描述,對於以下元素具有不變性:「尺度」 、「旋 轉」、 「明度」 、「視角與視點」。在人類的肉眼中,很容易理解一張圖片 中擁有的各項特徵。但是對於機器、電腦,如何將這些看似「顯眼」 、 「特 殊」的區塊化為重要的特徵值,在 SIFT 中需要透過以下的步驟: 一、建構尺度空間(Construct a scale space): 真實世界中的物件,其意義是只存在於某些尺度中。例如盆栽中的 一朵花,人類的眼睛可能看來是清楚、完美的。但是如果將尺度放大到 整個銀河系來看,這朵花幾乎是不存在的。因此在處理圖像的過程中, 為了要找出那些顯眼的特徵,首先要進行物件的模糊化。在 SIFT 中, 程式會將圖像模糊後將大小縮為一半,這個步驟稱為一個「octave」 ,每 個 octave 會產生五個圖像,象徵著這個圖像的「尺度」被增加了。. 5.

(15) 圖 3 SIFT 尺度圖 資料來源:出自 Sinha (2000)。. 由圖 3 可發現每個進程後,圖片會縮小一半、並且漸進模糊。此步 驟是 Lowe 認為最佳的尺度變化,即四個 octave、五次模糊。模糊化的 過程為採用高斯模糊(Gaussian blur),其採用的公式如圖 4:. 𝐿(𝑥, 𝑦, 𝜎) = 𝐺(𝑥, 𝑦, 𝜎) ∗ 𝐼(𝑥, 𝑦) 𝐺(𝑥, 𝑦, 𝜎) = 圖 4 高斯模糊公式表 資料來源:出自 Sinha (2000)。. 6. 1 2 2 2 𝑒 −(𝑥 +𝑦 )/2𝜎 2 2𝜋𝜎.

(16) 圖 4 公式中,L 為模糊化後的圖像、G 為高斯模糊的參數、I 為原始圖像。 在本步驟中,程式可得到一系列經過高斯模糊處理的圖像,並在之後的 步驟中繼續加以應用。 二、高斯拉普拉斯近似(Perform LoG approximation): 在前一步當中,程式產生了一組逐漸模糊、收縮的圖像群,接下來 要運用這些圖像產生另一組圖像,以下稱為「差異性高斯(Difference of Gaussians,DoG)」圖像群,這組圖像將會是找出關鍵點的重要圖像。 一般的高斯拉普拉斯程序大致為將圖形模糊化,接著計算其二階導數 (又稱拉普拉斯算子)。經過這個程序的圖像,可以被輕易地標示出圖 中的邊緣或角,這些元素對於尋找關鍵點是相當好的素材。但是二階導 數計算對於雜訊相當敏感,圖像中的雜訊容易造成程式的誤判,於是前 一步進行的模糊化將能有效地過濾雜訊,達到穩定計算之目的。二階導 數的計算量非常密集,對於程式執行的效率會有一定程度的影響。因此 在 SIFT 演算法中,Lowe 使用以下的方法來快速求出需要的圖像群。. 7.

(17) 圖5. DoG 圖像群產生示意圖. 資料來源:出自 Sinha (2000)。. 由圖 5 可以看出,在 SIFT 演算法中,程式只是對兩個連續的高斯 模糊圖像做相減,如此可以快速得出兩個圖片之間的差異圖像群 DoG, 取代原本需要密集運算的二階導數法。 三、尋找關鍵點(Find key points): 前一步程式求出了高斯的差異值,而這一步將會尋找這些值當中的 最大值與最小值,並且將他們標示出來。在本步驟中包含兩個部分: 「在 DoG 圖像中尋找最大值、最小值」以及「尋找子像素的最大值、最小值」 。 第一部分,程式將經歷每一個像素,並且檢查所有鄰近它的像素, 這樣的像素將會有 26 個,示意圖如圖 6:. 8.

(18) 圖 6 像素探訪示意圖 資料來源:來自 Sinha (2000)。. X 代表正被檢查的像素,在其立體空間相鄰的所有像素點是接著要被檢 查的範圍。此搜尋法看似瑣碎費時,但事實上有許多的像素點在檢查完 26 個鄰居之前就會先被程式判定無用而遺棄,只有被認定有價值的像素 會被檢查完。另外,最上面與最下面的尺度因為沒有足夠的鄰居,可以 直接省略。. 圖 7 特徵抓取示意圖 資料來源:Sinha (2000)。. 9.

(19) 圖 7 為本部分的示意圖,程式在三個 DoG 圖像中計算差異,可以得 出如圖 7 右側的關鍵點圖。在下一步中,程式將刪除掉對比對過程較為 不佳的關鍵點,以達到節省特徵點比對時間的效果。 四、去除不佳的關鍵點(Get Rid of Bad Keypoints): 為了消除對於比對沒有幫助且耗費時間的關鍵點,SIFT 使用一個步 驟進行不佳關鍵點的消去。首先是消除對比度較低的關鍵點,程式會訂 定一個臨界值,當一關鍵點的 DoG 值之絕對值小於該臨界值時,此關鍵 點將會被視為無效,並予以刪除;接著進行「邊緣」的刪除,程式給定 關鍵點兩個垂直的梯度(gradient),並判斷兩個梯度的值。當兩梯度都 較小時,視為平面;一大一小則為邊緣;兩梯度都大時則定義為角。夾 角為圖像辨識中相當優良的特徵,所以當一個點的兩個梯度皆大於臨界 值時,此點將不會被忽略。透過以上步驟,可以從圖 8 看出變化:. 圖 8 消除不佳特徵點 資料來源:出自 Sinha (2000)。. 10.

(20) 五、決定關鍵點的方向性(Assign an orientation to the key points): 程式進行特徵點偵測後,將知道在甚麼尺度會得到這些特徵點,於 是已達成「尺度不變」。而在有可用且穩定的關鍵點群後,程式將會對 關鍵點的方向性做定位來確保「旋轉的不變性」。 這個步驟的做法首先要收集所有關鍵點的梯度方向以及大小,但是 要蒐集完一張大圖片上所有的資料勢必會消耗許多時間,因此程式會依 這些關鍵點的「尺度」來決定需要的收集區大小。在這塊收集區中,程 式會找出這個區域中最突出 (prominent)的方向來指定為關鍵點的方向, 如圖 9 所示:. 圖 9 定位關鍵點方向 資料來源:出自 Sinha (2000)。. 六、產生 SIFT 特徵(Generate SIFT Features): 在一系列的轉換、處理之後,每個關鍵點將轉換成為一個特殊的「指 紋(fingerprint) 」 ,這個指紋將能夠將這些關鍵點表示為獨一無二的特徵. 11.

(21) 點。這個指紋包含了 128 個數值,相當於這關鍵點周圍的 16 個像素區 塊的 8 個向量定義值,並且在解決掉可能發生的旋轉度、明度問題後, 程式將能產出一個關於整張圖像的特徵值資料:. 圖 10 圖片特徵資料內容 資料來源:自製。. 第二節. k-近鄰搜尋法與 k-維樹. K-近鄰搜尋法(k nearest neighbor search algorithm)為一種慣用的機 器學習(machine learning)演算法。機器學習目的是讓機器接收外界輸 入的資料之後,依照某種演算法訓練出一種模型(model)。有了模型, 機器看到新的資料的時候,就能夠有某種程度的經驗與智慧來對新的資 料產生理解。機器學習分為「監督式」與「非監督式」,主要以是否需 要訓練階段而定義,本節中所介紹 k-近鄰演算法則屬於「監督式」的機 器學習法。. 12.

(22) 通常在進行 k-近鄰演算法時,使用者會給定一個 k 值。顧名思義, 便是去尋找距離查詢點最近的 k 個鄰居,以分類查詢點為例,當機器接 收到一個查詢點(query point)時,機器會依照某些值將查詢資料去與 散布在一空間中的所有參照點(reference points)去做相似度或是距離的 計算。使用者決定一個 k 值之後,機器會尋找出與查詢點最相似或最接 近的 k 個點,並且將這 k 個點做整理,如果這些點中某個類別的佔有比 例較高,則機器會將該查詢點歸類在比例較高的類別當中。以圖 11 為例, 當使用者將 k 值設定為 3 時(如同圖中的實線圓圈取出的範圍),代表 機器將會去尋找距離查詢點(綠色圓圈)最近的三個鄰居。此時機器得 到的三個結果分別為二個紅色三角形與一個藍色正方形,根據近鄰演算 法的定義,機器會將查詢點歸類在紅色三角形的組別中。接著,若使用 者輸入的 k 值改為 5 時(如同圖中的虛線圓圈所取出的範圍),機器將 會找出距離查詢點最近的五個鄰居,於是會得到三個藍色正方形與二個 紅色三角形,並將查詢點歸類到藍色正方形的組別。. 13.

(23) 圖 11 k-近鄰搜尋法示意圖 資料來源:出自維基百科(2012)。. 根據以上提到的演算法步驟,k-近鄰搜尋法最直接的實現方式就是 一對一比對兩份資料所有值的差(亦稱線性搜尋法,linear search algorithm),所以如果資料一有 M 筆資料、資料二有 N 筆資料時,則必 須要做 M*N 次計算,隨著資料量越來越多,程式的執行效率也會越來 越慢。 在 SIFT 演算法中,Lowe 為了要降低整體程式的運算時間,在進行 特徵點抓取的時候,演算法會根據一些規則省略相當多的特徵點,這樣 儘管可以加快特徵點比對的進行,但是卻會降低圖形比對的精確度。為 了要加速特徵點比對的效率,其採用了基於 K-D Tree 演算法延伸的 Best-Bin-First(BBF)方法作為比對工具。K-D Tree 為一種二元樹,其 節點(node)皆為一個 k 維度,即將上述的 k-近鄰搜尋法中的各個參照. 14.

(24) 點先整理進一個二元樹中,並將可用的數值存在每一個節點中(Bently, 1975)。如此一來,當查詢點被機器接收到的時候,機器可以快速地利 用二元樹搜尋法得到解答,此演算法在 CPU 上可以比線性搜尋法快速。 雖然程式的運算效率加快,但是卻存在著隱憂,K-D Tree 架構具有稱為 「維樹災難(curse of dimensionality)」的問題,此問題會造成在高維度 的時候造成比對的精確度降低(Bellman, 2003)。. 表1. K-NN 與 K-D Tree 比較表. K-NN. K-D Tree. O(1). O(n). Time complexity in sequential. O(n2) + O(n2logn). O(nlogn). Time complexity in parallelize. O(1) + O(nlogn). N/A. Exec. Speed on CPUs. Slow. Fast. Parallelizable. High. Low. Space complexity. 資料來源:自製。. 另外,由於 K-D Tree 是一種二元樹(binary tree)架構,因此在程 式運算初期必須要先進行建樹,此步驟將會佔用相當多的記憶體空間, 對於 GPU 上昂貴的記憶體空間來說會是相當大的負擔。表 1 將 k-近鄰 搜尋法與 K-D Tree 做簡單的比較,可以作為工具選擇的參考衡量。. 15.

(25) 第三節. 綜合分析. 本章介紹的幾種演算法,皆有研究將其延伸、改進,如同 SIFT 演 算法將比對方式改進為 BBF 演算法。但是如前文所述,K-D Tree 因為會 出現誤判的情況,加上其可平行化的機會不高且需要建構二元樹的關係, 將影響其可研究性。因此將線性搜尋法做平行處理,透過其高精確度與 高度可平行化的特點,達到為整體程式加速為本研究之主要想法。 在先前學者研究方面。在 CPU 運算階段,Bosch、Zisserman、Muñoz 等人(2008)與 Jégou、Douze、Schmid 等人(2011)還有 Liu、Yuen、 Torralba 等人(2011)的文章中皆有提出以近鄰搜尋法加速 SIFT 演算法 的想法並加以實驗。另外,Bonato、Marques、Constantinides 等人(2008)、 Huang、Huang、Ker、Chen 等人(2012)以及 Huo、Pan、Huo、Zhou 等人(2012)的文章則提出以平行化的演算法進行 SIFT 演算法的加速, 無論是使用硬體加速亦或是軟體加速皆可以獲得不錯的實驗結果。 而在 GPU 演算發明之後,Heymann、Muller、Smolic、Frohlich、Wiegand 等人(2007)提出透過圖形處理器平行化語言 GPGPU 對 SIFT 演算法進 行加速。其後在 CUDA 被發表之後,Warn、Emeneker、Cothren、Apon 等人(2009)也提出使用 OpenMP 與 CUDA 進行 SIFT 的加速。兩者皆 對於原始的 SIFT 版本得到不錯的加速效果。就本文欲加以改進使用的 k-近鄰搜尋法而言,Garcia、Debreuve 在 2008 年以及兩人與 Nielsen、. 16.

(26) Barlaud 於 2010 年發表關於使用 GPU 架構加速 k-近鄰搜尋法的兩篇文 章,另外 Sismanis、Pitsianis、Sun 等人於 2012 年曾經提出以基於平行 運算而發明的 bitonic sorting 作為排序方式的近鄰搜尋法。Zhang、Li、 Jestes 等人(2012)將平行化後的近鄰搜尋法應用在大量資料的 MapReduce 中,提供了本研究對於 NN 加速的想法。而 Kuang、Zhao 等 人於 2009 年提出利用 CUDA 的平行化來加速 K-NN 演算法,並且得到 不錯的成果。本研究除著重在線性搜尋法的平行化處理,增進整體圖片 辨識的效率。並在往後的研究中,期望加入多 GPU 運算(multi-GPU) 方法以及利用 Amazon 的雲端架構進行多伺服器雲端運算。. 17.

(27) 18.

(28) 第三章. 第一節. 研究方法. 平行化運算架構. 本研究將針對 SIFT 的特徵比對部分,提出 GPU 的平行運算架構。 在 NVIDIA® GPU 中,GPU 軟體有三層架構:Grid、Block、Thread 如圖 12 所示。以本研究使用的 NVIDIA® GeForce® GTX680 為例,在一個 grid 中可以使用 2,147,483,647x65,535x65,535 個 block,而一個 block 中可以 使用 1,024x1,024x64 個 thread。而運算卡的 GPU 晶片擁有 1536 個核心, 在理論上可以同時啟動 1536 個執行緒,相較於 CPU 上的 8 個執行緒有 相當大的差距。. 圖 12. GPU 階層圖. 資料來源:NVIDIA Corporation (2012)。. 19.

(29) 統一計算架構(Compute Unified Device Architecture, CUDA)為 NVIDIA®推出的一種基於圖形處理器的整合技術。該技術可與常見的程 式語言如 C、C++、Fortran 等結合,藉由開放計算語言(Open Computing Language, OpenCL)或者其自家的編譯器便可對程式進行編譯,經由此 方法編譯的指令可根據撰寫規則,將工作交由圖形處理器運算核心計算。 (NVIDIA Corporation, 2012). 第二節. 線性搜尋法平行化. 當輸入的兩個特徵檔分別擁有 n1 與 n2 個特徵點時,CPU 單線程上 的線性搜尋法將會進行 n1*n2 次計算,為相當緩慢的步驟。而平行化的 運算結構中,本研究將會規畫 n1*n2 個 block,每個 block 中會有 128 個 thread,分別代表 128 個特徵值。以圖 13 為例,當有一圖片的特徵數為 N 個時,其在 GPU 記憶體中的儲存方式為:. 圖 13. GPU 儲存示意圖. 資料來源:自製。. 運算過程中,每個 block 會選定兩個特徵點 p 與 q,進行兩特徵點 20.

(30) 間歐幾里得距離之計算,其公式如圖 15。程式碼如圖 14: threadsPerBlock = 128; void function dist_call(feat1, feat2, d, n1, n2) dim3 blockPerGrid(n2, n1); dist<<<blockPerGrid, threadsPerBlock>>>( dev_feat1, dev_feat2, dev_d, n1, n2 ); __global__ void function dist(a, b, c, n, m ) if blockIdx.y < n && blockIdx.x < m temp = a[blockIdx.y * blockDim.x + threadIdx.x] - b[blockIdx.x * blockDim.x + threadIdx.x]; diff = temp*temp; cache[cacheIndex] = diff; int i = threadsPerBlock/2; while i != 0 if cacheIndex < i cache[cacheIndex] += cache[cacheIndex + i]; i /= 2; if cacheIndex == 0 c[blockIdx.y*gridDim.x + blockIdx.x] = cache[0];. 圖 14 歐式距離計算程序. 圖 15 歐幾里得距離. 每個 block 計算完成以後,第一個 thread 會統整計算結果並儲存在 一個 n1*n2 大小的陣列中,如圖 14 中最後的陣列 C,以便後續的計算。. 第三節. 最近鄰搜尋法平行化. 本研究亦使用「最近鄰居法(Nearest Neighbor, NN)」來進行 SIFT 21.

(31) 特徵點的分類與計算,但是在實驗的過程中發現,倘若一張欲被比對的 圖片中有兩個目標物,NN 會因只保留最接近的結果而忽略了第二個目 標(如圖 16 所示) 。. 圖 16. NN 與 K-NN 差異圖 資料來源:自製。. 但因 NN 從結果陣列中搜尋的結果是由原始資料中直接尋找最小的 數值,所以相較於 K-NN 使用不同的尋找方式,本研究在 NN 的部分使 用 Reduce 方法,程序如圖 17。. 22.

(32) __global__ void function reduce (distance, dd, range, size ) idx = blockIdx.x * size + threadIdx.x; thread_idx = threadIdx.x; dm = blockDim.x / 2; while dm != 0 if distance[idx] >= distance[idx+dm] distance[idx] = distance[idx+dm]; dm /= 2; dd[blockIdx.x] = distance[idx2]; 圖 17. Reduce 方法程序. Distance 為線性搜尋法中得到的結果陣列、dd 為此步驟輸出之後的 結果。程式在建置階段會規畫 n1 個 block、1024 個 thread,每個 block 負責一個 Image 1 上的特徵點,此 block 中的所有 thread 將會去與其後面 的第 dm 個項目做大小比較,較小的取代之。每次迴圈完成後,dm 會除 以 2,並再次執行迴圈,如此一來,最小的數據最後會被 reduce 到陣列 的第一個項目中。接著由第一個 thread 將結果存入 dd 陣列中做後續運 算。. 第四節. k-近鄰搜尋法平行化. 進行完線性搜尋法的距離計算以後,結果陣列中的數據是未經過排 序的,所以必須要進行結果矩陣的排序。 基於平行化的排序方法相當多,例如 Sismanis 等人(2012)的研究 中使用 bitonic sorting 進行資料的排序。但是本研究發現,bitonic sorting. 23.

(33) 最佳的輸入資料必須要為 2 的次方數,本研究的輸入數據卻難以預估且 保證為 2 次方數,因此 bitonic sorting 並不適用於本研究。而單一執行緒 可以進行的排序法中,本研究選擇了速度較快的快速排列法(quick sorting) 。即使 quick sorting 在 CPU 架構上非常快速且便利,但是一般的 quick sorting 皆須要透過遞迴來達成。對於目前 GPU 運算的技術,遞迴 並不是完全支援的功能。本研究採用了 D. R. Finley(2005)發表的非遞 迴快速排序法,在 GPU 架構中會規畫 n1 個 block,每個 block 代表第一 個輸入檔的其中一個特徵點,而每個 block 裡會有 1 個 thread,這個 thread 將會對這個特徵點對於第二個輸入檔的每個距離做排序,如圖 18 所示。. 24.

(34) __global__ void function sort (arr, n2, mod ) idx = blockIdx.x * blockDim.x + threadIdx.x + mod; left = idx * n2; right = ( idx + 1 ) * n2; beg[0] = left; end[0] = right; while i >= 0 L = beg[i]; R = end[i] - 1; if L < R piv = arr[L]; while L < R while arr[R] >= piv && L < R R--; if L < R arr[L++] = arr[R]; while arr[L] <= piv && L < R L++; if L < R arr[R--] = arr[L]; arr[L] = piv; beg[i+1] = L + 1; end[i+1] = end[i]; end[i++] = L; if end[i] - beg[i] > end[i-1] - beg[i-1] swap = beg[i]; beg[i] = beg[i-1]; beg[i-1] = swap; swap = end[i]; end[i] = end[i-1]; end[i-1] = swap; else i--; 圖 18. Non-recursive quick sorting 程序. 25.

(35) 26.

(36) 第四章. 第一節. 實驗結果. 實驗環境. 本研究所採用的實驗平台可分為 Host 端與 Device 端,在 Host 端的 環境為 Intel® CoreTM i7-3770 CPU、Ubuntu 11.10 x86_64、16GB DDR3 記憶體,以及擁有 PCIe-3.0 x16 傳輸技術的主機板;Device 端即指運算 卡的部分,本研究使用 NVIDIA® GeForce® GTX680 顯示晶片,搭配 2GB DDR5 圖形記憶體,CUDA 套件的版本為 5.0、運算卡驅動程式版本 304.33。. 第二節. 實驗簡介. 本次實驗中,本研究將會比較 NN 在 CPU 與 GPU 上的執行時間, 以及 K-NN 在 CPU 與 GPU 上的執行時間。實驗將會使用 10 組數據,每 組數據皆為由圖片透過 SIFT 特徵點抓取後轉存的文字檔,10 組數據分 別為 462*462、602*602、2,332*2,332、5,278*5,278、7,042*7,042、 8,685*8,685、12,187*12,187、15,154*15,154、18,296*18,296、 20,252*20,252,數據數字代表該特徵檔原本之圖片所擁有的特徵點數, 一般以 2,448px*3,264px 儲存的圖書封面圖形檔,約擁有 5,000 個特徵點。 在實驗過程中,本研究發現同一組數據每次執行所需的時間差距不大, 因此本實驗預計以 10 次執行時間之平均值作為實驗結果。 27.

(37) 第三節. 實驗數據. 以下圖 19 與圖 20 為本次實驗結果,分別呈現 NN 與 K-NN 在 CPU 與 GPU 上的執行 10 次之平均時間差異。. Execution times (sec.) 180 160 140. Times (s). 120 100 80 60 40 20 0. 462. 602. 2332. 5278. 7042. 8685. 12187. 15154. 18296. 20252. CPU 0.097825 0.161961 2.27533 11.50701 20.41107 30.99942 61.11478 94.36417 137.7597 168.8418 GPU 0.996711 1.005922 1.125181 1.538279 1.887046 2.306776 3.450315 4.709063 6.296626 7.45108. Input points. 圖 19. NN 執行時間結果. 28.

(38) Execution times (sec.) 250. Times (s). 200. 150. 100. 50. 0. 462. 602. 2332. 5278. 7042. 8685. 12187. 15154. 18296. 20252. CPU 0.110137 0.183554 2.652754 13.65874 24.35601 37.18157 73.50149 114.1472 166.8571 204.8758 GPU 1.029975 1.047669 1.540063 2.676545 3.517533 4.436839 6.835031 9.36011 15.08114 17.35252. Input points. 圖 20. K-NN 執行時間結果. 第四節. 實驗分析. 從實驗數據中可以發現,在 NN 的執行時間中,CPU 雖然一開始略 快於 GPU,但在輸入 2,332*2,332 個特徵點之後,CPU 執行的時間開始 迅速攀升,最後在輸入 20,252*20,252 個特徵點時,執行的時間達到 168.842 秒。相對的,GPU 的執行時間雖然在一開始略慢於 CPU,但是 在 CPU 的執行時間開始增加時,GPU 卻依然可以維持速度,而在輸入 20,252*20,252 個特徵點的檔案時,GPU 只需要 7.45108 秒。於是從 NN 的實驗中得到,在輸入 20,252*20,252 個特徵點時,GPU 的執行速度相 較於 CPU 得到 22 倍的加速。 29.

(39) 在 K-NN 的部分,由於多了一個排序步驟,因此在 CPU 以及 GPU 的執行時間都略慢於 NN。但從實驗數據中依然可以看出,雖然 CPU 一 開始在小特徵點數量的實驗中略優於 GPU,但在特徵點數量漸漸變大的 過程中,CPU 的執行時間不僅越來越慢,而且與 GPU 之間的執行時間 差距越來越大。在輸入 20,252*20,252 個特徵點時,CPU 需要 204.876 秒、GPU 需要 17.3525 秒。因此本研究從 K-NN 的實驗中得出,在輸入 20,252*20,252 個特徵點時,GPU 的執行時間相較於 CPU 可以得到大約 11 倍的加速。. 30.

(40) 第五章 第一節. 程式應用 應用簡介. 本研究呈現一個使用圖形辨識技術將書本封面做整理的系統。系統 藉由 SIFT 的圖像辨識功能,將圖書的封面轉為特徵值,並建立特徵值 資料庫。當使用者查詢書籍時,只需將欲查詢圖書之封面輸入資料庫, 系統便可以根據特徵比對的結果輸出特定資料,並於圖書資料庫中找尋 到查詢的資訊。在系統的建置階段,使用 SIFT 演算法將館內現有的藏 書建檔,將圖書之封面使用數位攝影機拍攝後,透過演算法轉換為特徵 點集合,其中的每一個特徵點都擁有 128 個特徵值可供比對。建置完成 後,系統會得到一個全館藏書封面的特徵點資料庫,每一筆資料都會對 應書籍資料庫。當使用者欲使用本系統查詢藏書資料時,只需將封面拍 下並上傳至系統,系統會將該封面轉換為特徵點,並使用 GPU 做平行 比對出待查的書籍。. 31.

(41) 圖 21 封面資料庫 資料來源:自製。. 本研究將資料庫設計為辨識圖片後,資料庫能夠回傳一 ISBN 碼, 並且讓程式利用此 ISBN 碼向國立臺灣師範大學圖書館網頁做檢索。流 程如圖 22 所示:. 32.

(42) 圖 22 系統流程圖 資料來源:自製。. 33.

(43) 34.

(44) 第六章. 結論. 本研究提出一個加速 SIFT 特徵比對程序的平行運算架構,以 NVIDIA® GPU 加速 NN 以及 K-NN 演算法,相較於 CPU 上可以得到 22 倍以及 11 倍的加速,有效提升 SIFT 演算法特徵比對的效能。未來透過 Multi-GPU 技術或是雲端運算叢集技術,可望將整體系統運算的效能更 進一步有效地提升。 而在應用層面,本研究提出了一個基於 SIFT 演算法的圖書辨識系 統之雛形。以目前的成果,辨識一本書從上傳圖片到輸出比對結果的網 頁時間不超過五秒,相信將來在運算效能更加提升之後,可以將比對的 時間縮短,並且將比對的資料庫逐步擴大。未來更可以結合手機軟體撰 寫,讓使用者只須要拍下書籍的封面,便能夠以手機上網向圖書館和網 路書店檢索書籍。. 35.

(45) 36.

(46) 參考文獻 Bellman, R. E. (2003). Dynamic Programming. Mineola, NY: Courier Dover Publications. Bentley, J. L. (1975). Multidimensional binary search trees used for associative searching. Communications of the ACM, 18(9), 509-517. Bonato, V., Marques, E., & Constantinides, G. A. (2008). A parallel hardware architecture for scale and rotation invariant feature detection. IEEE Transactions on Circuits and Systems for Video Technology, 18(12), 1703-1712. Bosch, A., Zisserman, A., & Muñoz, X. (2008). Scene classification using a hybrid generative/discriminative approach. IEEE Transactions on Pattern Analysis and Machine Intelligence, 30(4), 712-727. Do, T., Kijak, E., Furon, T., & Amsaleg, L. (2010, October). Deluding image recognition in SIFT-based CBIR systems. Paper presented at the Proceedings of the 2nd ACM workshop on Multimedia in forensics, security and intelligence, Firenze, Italy, 2010. Finley, D. R. (2005). Optimized QuickSort — C Implementation (Non-Recursive). Retrieved June 18, 2013 from http://alienryderflex.com/quicksort/ Garcia, V., & Debreuve, E. (2008, June). Fast k nearest neighbor search using GPU. Paper presented at the 2008 IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops, Anchorage, Alaska, USA, 2008. Garcia, V., Debreuve, E., Nielsen, F., & Barlaud, M. (2010, September). K-nearest neighbor search: fast GPU-based implementations and 37.

(47) application to high-dimensional feature matching. Paper presented at the International Conference on Image Processing (ICIP), Hong Kong, 2010. Heymann, S., Muller, K., Smolic, A., Frohlich, B., & Wiegand, T. (2007, February). Sift implementation and optimization for general-purpose gpu. Paper presented at the 15-th International Conference in Central Europe on Computer Graphics, Visualization and Computer Vision, Bory, Czech Republic, 2007. Huang, F. C., Huang, S. Y., Ker, J. W., & Chen, Y. C. (2012). High-performance SIFT hardware acceleration for real-time image feature extraction. IEEE Transactions on Circuits and Systems for Video Technology, 22(3), 340-351. Huo, C., Pan, C., Huo, L., & Zhou, Z. (2012). Multilevel SIFT matching for large-size VHR image registration. IEEE Geoscience and Remote Sensing Letters, 9(2), 171-175. Jégou, H., Douze, M., & Schmid, C. (2011). Product quantization for nearest neighbor search. IEEE Transactions on Pattern Analysis and Machine Intelligence, 33(1), 117-128. Kuang, Q., & Zhao, L. (2009, December). A practical GPU based kNN algorithm. Paper presented at the International Symposium on Computer Science and Computation Technology (ISCSCT), Huangshan, China, 2009. Li, B., Kong, X., Wang, Z., & Fu, H. (2009, September). SIFT-based image retrieval combining the distance measure of global image and sub-image. Paper presented at the fifth International Conference on Intelligent Information Hiding and Multimedia Signal Procseeing, 38.

(48) Kyoto, Japan, 2009. Liu, C., Yuen, J., & Torralba, A. (2011). SIFT flow: dense correspondence across scenes and its applications. IEEE Transactions on Pattern Analysis and Machine Intelligence, 33(5), 978-994. Lowe, D. G. (2004). Distinctive image features from scale-invariant keypoints. International Journal of Computer Vision, 60(2), 91. NVIDIA Corporation. (2012). CUDA: Compute Unified Device Architecture (Version 5.0) [Software]. Available from http://www.nvidia.com/object/cuda_home_new.html NVIDIA Corporation. (2012). CUDA C Programming Guide. Retrieved July 2, 2013, from http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html OpenCV. (2013). OpenCV: Open Source Computer Vision (Version 2.4.5) [Software]. Available from http://opencv.org/ Sinha, U. (2010). SIFT: Scale Invariant Feature Transform. Retrieved October 5, 2012, from http://www.aishack.in/2010/05/sift-scale-invariant-feature-transform/ Sismanis, N., Pitsianis, N., & Sun, X. (2012, September). Parallel search of k-nearest neighbor with synchronous operations. Paper presented at the 2012 IEEE Conference on High Performance Extreme Computing (HPEC), Waltham, Massachusetts, USA, 2012. Tarhini, A. (2011). Parallel k-Nearest Neighbor. Retrieved October 5, 2012, from http://alitarhini.wordpress.com/2011/02/26/parallel-k-nearest-neighbor/ Xu, W., Wu, J., Liu, X., Zhu, L., & Shi, G. (2008, December). Application of image SIFT features to the context of CBIR. Paper presented at the 2008 39.

(49) International Conference on Computer Science and Software Engineering, Wuhan, Hubei, China, 2008. Zhang, C., Li, F., & Jestes, J. (2012, March). Efficient parallel kNN joins for large data in MapReduce. Paper presented at the Proceedings of the 15th International Conference on Extending Database Technology, Berlin, Germany, 2012.. 40.

(50)

參考文獻

相關文件

– Any set of parallel lines on the plane define a vanishing point. – The union of all of these vanishing points is the

 The stereo matching techniques developed in the computer vision community along with ima ge-based rendering (view interpolation) tech niques from graphics are both essential

平移、旋轉、鏡射等變換又稱為剛體變換, 其特性為形狀、大小、角度與 面積均不改變。.. 段考錦囊 隨時隨地為你補充考試重點

Mehrotra, “Content-based image retrieval with relevance feedback in MARS,” In Proceedings of IEEE International Conference on Image Processing ’97. Chakrabarti, “Query

SERVQUAL Scale and relevant scales to bus service quality, and based on service content and customer service related secondary data of H highway bus service company, to design the

根據研究背景與動機的說明,本研究主要是探討 Facebook

Keywords: Computer game applications; CCNA Certification Training; digital content design; game-based Learning;

keywords: Ant Colony Optimization, Guided Local Search, Pickup and Delivery Problem with Time Windows, Time Window Partitioning Strategy... 第三章 PDPTW 轉換