• 沒有找到結果。

以圖形處理器加速臉部辨識

N/A
N/A
Protected

Academic year: 2021

Share "以圖形處理器加速臉部辨識"

Copied!
57
0
0

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

全文

(1)國立臺灣師範大學科技應用與人力資源發展學系 碩士論文. 以圖形處理器加速臉部辨識. 研 究 生:黃瀚興 指導教授:林政宏. 中 華 民 國 一 ○ 二 年 七 月.

(2)

(3)

(4)

(5) 謝誌 能順利完成這篇論文是求學階段的里程碑,最要感謝的是指導教授 林政宏老師這三年來對我的諄諄教誨,在我遇到挫折時給予我幫助,在 研究上也指引我解決問題的方向,讓我能夠順利完成階段性研究,在此, 向老師獻上最誠摯的謝意。 感謝口試委員蕭顯勝老師與陳勇志老師在百忙之中撥冗詳閱所給 予的指導與建議,讓我能夠使論文能夠更為完善。還要感謝張玉山老師 在學生迷惘時能夠給予鼓勵,以及系上老師們的教導。另外也要感謝這 三年來陪伴我一起努力的HCL實驗室的學長以及學弟們,讓我在煩雜的 課業中有討論的對象。 最後要感謝始終支持我的家人以及幫助過我的朋友,沒有老師、同 學、家人及朋友在課業與生活中適時給予我幫助及關懷,我很難走到這 里程碑,這一路上要感謝的人事物太多了,感謝主讓這一切都有圓滿的 落幕,謝謝。 黃瀚興 於 台北 中華民國一○二年七月. i.

(6) ii.

(7) 以圖形處理器加速臉部辨識 研 究 生:黃瀚興 指導教授:林政宏. 中文摘要 臉部辨識(Face Recognition)是一種生物辨識,透過臉部特徵進行 身分辨識。其中主成分分析法(Principle Component Analysis, PCA)被 廣泛運用在臉部辨識,因為此法可以保留臉部特徵的主要成分,以降低 資料維度及計算複雜度。運用主成分分析法進行臉部辨識分為訓練與辨 識兩步驟。在訓練步驟,傳統的主成分分析法先計算訓練樣本的共變異 矩陣並求得主成分的特徵向量。在辨識步驟,則透過計算訓練樣本與測 試樣本投影在主成分特徵向量上投影量,決定辨識結果。 主成分分析法在針對高資料維度,計算共變異矩陣的特徵向量所花 費的時間與所需記憶體空間都相當可觀。本研究提出以圖形處理器 (Graphical Processing Units, GPU)分別加速臉部辨識的訓練與辨識步驟, 其中訓練步驟以 GPU 加速 NIPALS 和 GS 於計算訓練樣本的的主成分, 辨識步驟則以 GPU 加速測試樣本對特徵向量的投影計算。實驗結果顯 示相較於 OpenCV 的 Eigenface,訓練部分 NIPALS GPU 在得到 5.9 倍的 加速,GS GPU 則有 5.25 倍的加速,辨識方面能夠有 1.57 倍的加速效果。. 關鍵詞:臉部辨識、主成分分析法、非線性迭代偏最小二乘法、 Gram-Schmidt 重正交法、圖形處理器. iii.

(8) iv.

(9) Accelerating Face Recognition Using Graphic Processing Units Author: Huang, Han-Hsing Adviser: Lin, Cheng-Hung. ABSTRACT Face Recognition is one of biometric recognitions used to identify a person by facial features. Principle Component Analysis(PCA) has been widely used in face recognition because it can retain the main component of facial features, and therefore reduce the data dimension and computing complexity. Using PCA for face recognition has two phases:training and recognition. In the training phase, the traditional PCA calculates the covariance matrix of training samples and obtains the principal component eigenvectors. In the recognition phase, testing images are first projected to the principal component eigenvectors and then the recognition results are determined by calculating the projection distance of the testing images with the training samples. For high-dimensional data, the computing time and required memory for PCA to calculate eigenvectors of the covariance matrix is quite considerable. In this thesis, we propose to accelerate PCA using graphical processing units (GPU) both in training and recognition phases. In the training phase, NIPALS and GS algorithms are accelerated while in the recognition phase, the projection to the eigenvectors of training and testing samples are accelerated. Experimental results show that the proposed NIPALS GPU approach achieves 5.9 times faster and GS GPU approach achieves 5.25 times faster in. v.

(10) the training phase and 1.57 times faster in the recognition phase than the Eigenface implementation of OpenCV.. Keywords: Face recognition, principle component analysis, non-linear iterative partial least squares, Gram-Schmidt reorthogonalization, graphical processing units. vi.

(11) 目錄 謝誌 .................................................................................................................. i 中文摘要 ........................................................................................................ iii ABSTRACT .................................................................................................... v 目錄 ............................................................................................................... vii 表次 ................................................................................................................ ix 圖次 ................................................................................................................ xi 第一章. 緒論 .............................................................................................. 1. 第一節 研究背景 ...................................................................................... 1 第二節 研究動機與目的 .......................................................................... 1 第三節 研究流程 ...................................................................................... 2 第四節 研究貢獻 ...................................................................................... 3 第二章. 臉部辨識 ...................................................................................... 5. 第一節 主成分分析法 .............................................................................. 5 第二節 非線性迭代偏最小二乘法........................................................ 10 第三節 Gram-Schmidt 重正交法 ........................................................... 13 第四節 GPU 與臉部辨識相關研究....................................................... 18 vii.

(12) 第三章. 實驗架構 .................................................................................... 23. 第一節 OpenCV 簡介............................................................................. 23 第二節 平行化運算 ................................................................................ 23 第三節 實驗規劃 .................................................................................... 28 第四章. 實驗結果 .................................................................................... 29. 第一節 實驗平台 .................................................................................... 29 第二節 實驗結果 .................................................................................... 29 第三節 結果分析 .................................................................................... 34 第五章. 結論 ............................................................................................ 37. 參考文獻 ....................................................................................................... 39. viii.

(13) 表次 表 3-1 實驗規劃………………………………...……………..…………...28 表 4-1 實驗一辨識率之實驗數據…...…………………………………….30 表 4-2 訓練時間紀錄………………………………………………………31 表 4-3 辨識時間紀錄………………………………………………………32 表 4-4 實驗二辨識率之實驗數據……….…………………………………33. ix.

(14) x.

(15) 圖次 圖 2-1 原始圖片 (左)與特徵臉 (右)…………..……………..……………..5 圖 2-2 PCA 投影示意圖…………………………………………………......6 圖 2-3 原始圖像轉換……………………………..…………….....………...7 圖 2-4 訓練與辨識流程圖……………………….……………………….....9 圖 2-5 輸入矩陣分解圖................................................................................10 圖 2-6 主成分示意圖………………………………………………………11 圖 2-7 NIPALS 程序………………………………………………………..13 圖 2-8 Gram-Schmidt 正交化………………………………………………14 圖 2-9 Gram-Schmidt reorthogonalization 程序……………………………17 圖 2-10 草繪表情…………………………………………………………..19 圖 2-11 實驗數據………………………………….……………………….20 圖 3-1 NIPALS 平行化...………………………………………………………25 圖 3-2 GS 平行化...…………………………………………………………26 圖 3-3 實驗流程圖…………………………………………………………27 圖 3-4 不同姿勢與光線之圖像……………………………………………28 圖 4-1 實驗一辨識率直條圖………...………………………….…………30 圖 4-2 訓練時間直條圖……………………………………………………31 圖 4-3 辨識時間直條圖.. ………………………….………………………33 圖 4-4 實驗二辨識率直條圖………...………………………….…………34. xi.

(16) xii.

(17) 第一章. 緒論. 本章節首先介紹臉部辨識與應用,提出研究動機及研究流程。本章 主要分為研究背景、研究動機與目的、研究流程及研究貢獻共四小節。 說明如下:. 第一節. 研究背景. 臉部辨識(Face Recognition)是一種生物辨識,每個人擁有不同的 臉部特徵,例如眼睛、鼻子、嘴巴及臉部輪廓等特徵,透過這些特徵可 以直接進行身分確認。臉部辨識廣泛應用於隱私安全及監視系統方面, 隱私安全方面例如電腦加密及門鎖系統;監視系統方面例如機場海關即 時監控系統,2001 年美國 911 事件後,臉部辨識更是被重視運用於預防 犯罪行為上。 臉部辨識的方法最常見的有主成分分析法(Principal Component Analysis, PCA) ,主要分為兩個步驟,分別是訓練與辨識。訓練時,將現 有訓練樣本計算特徵值與特徵向量,保留一定個數的特徵向量構成特徵 空間,將訓練樣本投影至特徵空間,儲存成一訓練集,此方式可以降低 原始圖像維度,減少儲存的空間和計算的複雜度;辨識時,先對測試圖 像進行正規化,再將測試圖像投影至特徵空間,藉由計算測試圖像與訓 練圖像的投影量的歐式距離,決定辨識結果。. 第二節. 研究動機與目的. 應用主成分分析法於臉部辨識時,訓練與辨識這兩個步驟各有其最 耗時的地方,訓練方面最耗時的地方在於計算特徵值與特徵向量,其次 1.

(18) 是將訓練樣本投影至特徵空間;辨識方面最耗時的地方在於將待辨識的 圖片投影至特徵空間。 主成分分析法在計算特徵向量,常見的方法有 Non-linear Iterative Partial Least Squares (NIPALS)( Štruc, V., & Pavešić, N., 2009; Wold, S., Esbensen, K., & Geladi, P., 1987; Schwartz, W., Guo, H., & Davis, L., 2010). 與 Gram-Schmidt orthogonalization(Sajid, I., Ahmed, M. M., & Taj, I., 2009; Ramesha, K., & Raja, K. B., 2011; Andrecut, M., 2009)。在特徵值與 特徵向量計算上,2009 年 Andrecut 提出運用圖形處理器(Graphical Processing Units, GPU) 加 速 非 線 性 迭 代 偏 最 小 二 乘 法 ( Non-linear Iterative Partial Least Squares, NIPALS) 與 Gram-Schmidt 重正 交化 (Gram-Schmidt reorthogonalization, GS)計算的方法。本研究提出以圖 形處理器(Graphical Processing Units, GPU)分別加速臉部辨識的訓練與 辨識步驟,其中訓練步驟以 GPU 加速 NIPALS 和 GS 於計算訓練樣本的 的主成分以及訓練樣本對特徵向量的投影計算,辨識步驟則以 GPU 加 速測試樣本對特徵向量得投影計算。. 第三節. 研究流程. 為做實驗比較,本研究共實現五種 PCA 版本,包括 OpenCV 實現 的 Eigenface、 NIPALS CPU 版本、GS CPU 版本、NIPALS GPU 版本與 GS GPU 版本。Eigenface 是採用 OpenCV Ver. 2.4.5 ,而後面四者是實現 Andrecut 提出兩種計算特徵值與特徵向量的加速方法,並結合 OpenCV 做 PCA 的臉部辨識,並將訓練與辨識時做特徵投影的步驟實現於 GPU 上。資料庫採用 Georghiades, Belhumeur 和 Kriegman (2001)建構的 Extended YaleB 臉部資料庫,其中共有 28 人,每人 9 種姿勢以及 64 種 不同光源的圖像。 2.

(19) 第四節. 研究貢獻. 就上述五種方法,實驗結果顯示,在訓練部分,相較於 OpenCV 實 現的 Eigenface,CPU 版本的 NIPALS 能夠得到 1.3 倍的加速,而 GS 可 得到 1.2 倍的加速,GPU 版本的 NIPALS 能夠得到 5.9 倍的加速,而 GS 可以得到 5.25 倍的加速。另一方面相較於 NIPALS 與 GS 的 CPU 版本, GPU 版本則可以得到 4.5 倍的加速。在辨識部分,我們也利用 GPU 做 特徵投影的加速,實驗結果顯示透過 GPU 加速可以能夠得到 1.57 倍的 加速。. 3.

(20) 4.

(21) 第二章. 臉部辨識. 前一章提到了主成分分析法與計算特徵值及特徵向量的方法。本章 節首先介紹主成分分析法,接著對計算特徵值與特徵向量的兩種方法: 非線性迭代偏最小二乘法與Gram-Schmidt重正交化方法分別做說明,接 著對GPU與臉部辨識相關研究進行探討,茲說明如下:. 第一節. 主成分分析法. 主成分分析法(PCA)是1991年由Turk 和Pentland 研究提出,以提 取臉部的主要成分計算出eigenvalue和eigenvector方式,決定保留的特徵 臉(Eigenface)數來重新建立圖片如圖2-1,因為只保留較大的特徵值數 相對應的特徵向量建構成特徵空間,將原始圖片投影至特徵空間後得到 的圖片與原始圖片有相似的輪廓(Turk, M. A., & Pentland, A. P., 1991a; Lizama, E., Waldoestl, D., & Nickolay, B., 1997 ; Kim, K. I., Jung, K., & Kim, H. J., 2002)。. 圖2-1 原始圖片(左)與特徵臉(右). 主成分分析法又稱為Karhunen-Loeve Transform(KLT),主要利用 提取特徵臉進行臉部辨識,概念是經過投影後,找到資料最分散的方向 如圖2-2,而其過程主要由圖像訓練及辨識兩階段所組成(Turk, M. A., & 5.

(22) Pentland, A. P., 1991b)。. 圖2-2 PCA投影示意圖. 一、 訓練階段 首先假設待訓練的圖像樣本有M個,樣本大小為N×N,接著將N×N 的圖像轉換成N2×1的xi列向量(column vector),並得到訓練樣本集合X:. X  x1 , x2 ,..., xM  其中向量xi為N×N資料轉化成N2×1的資料如圖2-3:. 6.

(23) 圖2-3 原始圖像轉換. 求取平均值(平均臉) Ψ:. 1  M. M. x i 1. i. 計算每個臉部圖像 xi 與平均臉Ψ的差值即做正規化,也就是將M張 臉部圖像做統一原點:. d i  xi   i  M 計算 d i 的共變異矩陣(covariance matrix) C : 1 C M. M. d d i 1. i. T i.  AAT , A  d1 d 2 ,..., d M . 上式中A矩陣的大小為N2×M,共變異矩陣的大小為N2×N2 ,其特徵 向量為 ui ,考慮到共變異矩陣的資料維數較大,計算量也較大,所以採 用奇異值分解(Singular Value Decomposition, SVD) ,先算出 AT A 矩陣的 特徵向量 vi ,其中 AT A 矩陣的維數為M×M,其推算式如下: 7.

(24) AT Avi  i vi AT Avi  i vi  AAT Avi  i Avi  CAvi  i Avi. (ui  Avi ). 由上述推算式中,可以得知要獲得共變異矩陣C的特徵向量 ui ,只 要計算 AT A 矩陣的特徵向量 vi 後在乘上一個A矩陣就可以得到 ui 。 計算共變異矩陣 C 的特徵值𝜆𝑖 與對應的特徵向量 ui :. ui  Avi  i  ui. Cui  iui. 特徵值經過排序後由大至小,取出指定的特徵值數p及其對應的特 徵向量,將每一個正規化後的臉部圖像 d i 投影至特徵空間W,並儲存成 訓練集  i :. w  u1 , u2 ,...,u p , i  wT di i  1,2,..., M   w1i   i w  i   2 `, i  1,2,..., M ....    wPi  將以上所計算的結果儲存至資料庫內,以利辨識時使用。 二、 辨識階段 將待辨識的臉部圖像 xnew 與訓練步驟中計算出的平均臉做正規化 後,投影到特徵空間:.  new  wT xnew    採用歐式距離(Euclidean Distance)來計算Ωnew與訓練集中的每個 8.

(25) 投影量的距離:.  i 2  i  . 2 new. i  1,2,..., M . 歐氏距離是一種普遍的分類法,將待辨識圖像樣本投影至特徵空間 的投影量比對訓練集中每一訓練樣本的投影量,以找出最短距離即為相 似影像,也就是當εi 為最小時,則未知圖像屬於第i張圖像。 舉例來說,若訓練集樣本為100×100(Pixels)的圖片,將訓練樣本 轉置為1002×1,若樣本數M為100張,訓練樣本集合矩陣為1002×100,接 著求出Ψ、 d i 與 C 的特徵值與特徵向量,而後將 d i 投影至特徵空間w, 得到訓練集。讀入待辨識之圖像,投影至特徵空間得到  n ew ,計算  i , 完成辨識,訓練與辨識流程如圖2-4。. 圖2-4 訓練與辨識流程圖. 三、 PCA分析 PCA在做訓練時樣本與樣本之間為單一個體,彼此之間沒有關聯性 且在資料壓縮上有很好的效果,即原始圖像經過PCA步驟後,只保留指 定的特徵向量可稱作特徵臉(Eigenface),也就是保留主要成分,可以 減少計算的複雜度。 因為訓練樣本之間無關聯性,同一個人的臉部如果改變其表情或者 9.

(26) 照射的光線強度改變,便可能無法判斷是否為同一個人,這問題可以透 過在訓練樣本中加入多種表情或者角度的照片。 PCA進行臉部辨識時,訓練階段最花費時間的是在計算共變異矩陣 的特徵值與特徵向量,當訓練樣本屬於高維度時,用傳統方法計算其共 變異矩陣的特徵值與特徵向量是無效率的,傳統方法像是特徵分解 (Eigen Decomposition) ,因此有學者提出用迭代的方式計算前幾個主成 分,例如:非線性迭代偏最小二乘法。除了計算特徵值與特徵向量費時 外,其次是做特徵投影的部分,由之前的介紹的計算式可以發現都是矩 陣的乘法,因此可以說加速臉部辨識即加速矩陣的計算。. 第二節. 非線性迭代偏最小二乘法. 非線性迭代偏最小二乘法(NIPALS) 若要追朔其概念最早在 1923 年 Fisher 與 MacKenzie 這兩位學者就有提及,經由 H. World 與 H. Hotelling 這兩位學者進一步的發展,而後在 1987 年由 S. World、K. Esbensen 及 P. Geladi 學者改良並運用於 PCA,是一種變異的 Power 演 算法用於矩陣對角化,透過迭代的方式計算特徵向量,其概念如下: 可以把待計算的矩陣分解成許多主成分加上殘差,分解如圖 2-5: 𝑋 = 𝑃𝐶𝑠 + 𝑅 = 𝑡𝑖 𝑝𝑖𝑇 + 𝑅 , (𝑖 = 1,2 … , 𝑀) 上式中 X 為待計算的矩陣,PCs 為主成分,R 為殘差,若輸入的矩 陣為 M×M 則會計算出 M 個主成分。. 圖 2-5 輸入矩陣分解圖 10.

(27) 而 NIPALS 的計算目標則是透過迭代過程計算出 score matrix 𝑡𝑖 與 loading matrix 𝑝𝑖 ,迭代過程中算出的第一個𝑡1 𝑝1𝑇 即第一主成分,其空間 意義如圖 2-6,𝑡𝑖 表示正交投影後的 score 而𝑝𝑖 表示為一 loading 的向量 方向,x 為待計算矩陣的元素點。. 圖 2-6 主成分示意圖. 計算步驟,首先將待計算矩陣 X 當成第一個殘差 R 也就是 R(0) ← X 接著把𝑡𝑖 放入 R 矩陣的一個 column 向量即 t←R 在進入迭代過程前要先設置一初始特徵值λ為 0,一個閥值 (threshold)為 0.0001,並開始迭代計算特徵向量的過程: 1. 將 t 投影至 R,找到一個相對應的 p: 𝑝 = (𝑅𝑇 𝑡)/(𝑡 𝑇 𝑡) 2. 正規化 p 向量,長度為 1: 11.

(28) 𝑝 = 𝑝 ∗ ( 𝑝 𝑻 𝑝). −0.5. 3. 將 p 投影至 R,接著找到一個相對應的 t: 𝑡 = (𝑅𝑝)/(𝑝𝑻 𝑝) 4. 檢視收斂程度,這時候能夠得到一個新的特徵值λ̍並與之前的λ 做比較其比較式為: λ̍=(𝑡 𝑇 t) ,ε = threshold ∗ 𝜆′ , |λ̍ − λ| ≦ ε 如果上述比較式成立則,繼續步驟 5,表示特徵值收斂,若 不成立,則把新的特徵值λ̍ 取代原本的λ,回到步驟 1 重複。 5. 將 R 矩陣扣除計算出的主成分,扣除後將新得到 R 矩陣代回步 驟 1 做至矩陣計算完為止: 𝑅 = 𝑅 − 𝑡𝑝𝑇 6. 保留 p 為特徵向量,特徵值為λ。 程式的程序如圖 2-7:. 12.

(29) 圖 2-7 NIPALS 程序 資料來源:出自 M. Andrecut(2009:4). 第三節. Gram-Schmidt 重正交法. 在說明 Gram-Schmid 重正交法(Gram-Schmidt reorthogonalization) 之前先說明 Gram-Schmid 正交化(Gram-Schmidt orthogonalization), Gram-Schmidt 正交化在線性代數中提供了一種方法能夠使不正交的向 量經過 Gram-Schmidt 正交化後得到其正交基,也就是向量間彼此正交, 如有兩向量𝑎⃗、𝑏⃗⃗,要找到一個向量 B 與𝑎⃗正交如圖 2-8,得到最後的正交 基 q1 及 q2 其步驟如下:. 13.

(30) 圖 2-8 Gram-Schmidt 正交化. 𝐴 ||𝐴||. 1.. 𝑞1 =. 2.. 𝐴 = 𝑎⃗. 3.. 𝐴 𝑏 𝐵 = 𝑏⃗⃗ − 𝑇 𝐴. 𝑞2 =. ,. 𝐵 ||𝐵||. 𝑇. 𝐴 𝐴. 在此舉一範例說明: 有兩向量 1 1 a=[1] = 𝐴 , 𝑏 = [0] 1 2 求與 A 正交的 B 1 1 1 1 0 𝐴𝑇 𝑏 3 B=[0] − 𝑇 [1]=[0] − [1]=[−1] 𝐴 𝐴 3 2 1 2 1 1 得到正交基 Q 1. 𝑞2]=. 𝑄 = [𝑞1. 0. √3 1. −1. √3 1. √2 1. [√3. √2 ]. 但是 Gram-Schmidt 正交化在計算過程中會有正交損失,也能夠說是 捨入性誤差,在前一小節所介紹的 NIPALS 也有這種問題(Kramer, 1998), 14.

(31) 以下舉一簡單範例說明正交損失: 有一 4×3 矩陣 1 1 1 𝑥 0 0 𝐴=[ ] 0 𝑥 0 0 0 𝑥 設 x 為極小正數,數值計算誤差1 + 𝑥 2 ≈ 1,≈代表捨入過程,接下 來計算正交基 Q 1 𝑥 1. 𝑢1 ← 𝑎1 = [ ] 0 0. 1 𝑢1 𝑥 , ‖𝑢1‖ = √1 + 𝑥 2 ≈ 1 , 𝑞1 ← ‖𝑢1‖ = [ ] 0 0. 1 0 2. 𝑢2 ← 𝑎2 = [ ] 𝑥 0. 0 −𝑥 , 𝑢2 ← 𝑢2 − (𝑞1𝑇 𝑎2)𝑞1 = [ ] 𝑥 0. 0 −1⁄ √2 𝑢2 ‖𝑢2‖ = √2𝑥 2 , 𝑞2 ← = ‖𝑢2‖ 1⁄ √2 [ 0 ] 1 0 3. 𝑢3 ← 𝑎3 = [ ] , 𝑞1𝑇 𝑎3 = 1, 𝑞2𝑇 𝑎3 = 0 0 𝑥 0 −𝑥 𝑢3 ← 𝑢3 − (𝑞1𝑇 𝑎3)𝑞1 − (𝑞2𝑇 𝑎3)𝑞2 = [ ] 0 𝑥 0 −1⁄ √2 𝑢3 ‖𝑢3‖ = √2𝑥 2 , 𝑞3 ← = 0 ‖𝑢3‖ 1⁄ [ √2 ] 15.

(32) 0 0 −1 −1 1 ⁄ ⁄ √2 √2 𝑥 4. 𝑄 = 0 0 1⁄ 1 √2 0 ⁄ √2 ] [ 0 由 Q 矩陣可以明顯看出 q2 與 q3 偏離正交。 Gram-Schmidt 重正交可以改良正交損失,提供更穩定的數值其最主 要是在迭代計算過程中對 scores(T)和 loadings(P)進行重正交校正。 如同 NIPALS 可以把待計算矩陣 X 分為主成分與殘差 𝑇 𝑋 = 𝑉(𝐾) 𝛬 (𝐾) 𝑈( + 𝑅,(𝐾 = 1,2, … 𝑀) 𝐾). 上式可以看做奇異值分解(SVD),對比 NIPALS 𝑇 𝑇 𝑇(𝐾) = 𝑉(𝐾) 𝛬 (𝐾) ,𝑃( = 𝑈( 𝐾) 𝐾). 其詳細計算過程如程序為圖 2-9:. 16.

(33) 圖 2-9 Gram-Schmidt reorthogonalization 程序 資料來源:出自 M. Andrecut(2009:5). 17.

(34) 由圖 2-9 可以得知其特徵值為𝜆𝑘,特徵向量為 p,雖然 Gram-Schmidt 重正交多做了一次正交化的動作在計算上複雜了一點,但是能夠實現平 行化運算,Andrecut 提出運用 BLAS library 在 CPU 上平行計算以及 CUBLAS library(NVIDIA , 2008)在 GPU 上計算。. 第四節 一、. GPU 與臉部辨識相關研究. GPU. 2008 年 NVIDIA 公司發表了利用顯示卡晶片上計算單元,做平行化 運算的技術 CUDA,並將此技術嵌入顯示卡產品中,CUDA 的程式設計 特性,可以讓使用者直接使用熟悉的 C, C++ 及 Fortran 等程式語言編 譯。 運用 GPU 平行運算主要的原理是首先將資料從主機(Host)端傳 送至顯示卡(Device)執行平行運算,再把運算結果傳回主機。如此可 節省程式於 CPU 上執行的時間,達到加速效果。 二、. 相關研究. Wu 和 Song 等人在 2006 年提出一種利用 GPU 增強臉部表情辨識 的方法,使用 GPU 的過濾器進行預先處理,並能夠快速地轉換成灰階 的草繪表情圖像如圖 2-10,該方法被稱為 Eigenexpress,並實驗比較 PCA 與此方法的辨識度與速度,結果顯示 Eigenexpress 在辨識度上與速度都 勝於 PCA 方法,但因為是草繪圖像,當表情圖像不是差異很大時,則辨 識度的差異便顯現不出來。. 18.

(35) 圖 2-10 草繪表情 出自: Wu, Q., Song, M., Bu, J., & Chen, C.(2006). R. Jošth 和 J. Antikainen 等人在 2012 提出使用 PCA 計算醫學光譜影 像,加速 PCA 演算法中共變異矩陣的計算於 GPU 上,因為通常 PCA 在 計算過程中計算量最大的就是共變異矩陣,並比較 C 語言、SSE 指令集 及 CUDA 的速度,發現在資料量較大時 CUDA 的效率比其他都好,但 資料量小時,因為 CUDA 需要資料上傳的必要時間,所以效率不會比其 他的好。 Devrari 和 Vinay Kumar 在 2011 年提出改善 Haar 特徵並使用 SVM 進行訓練與分類的方法,在 GPU 進行人臉檢測,除了能夠得到相當好 的識別率和速度,但是在圖形大小為 640×480 之前的加速效果不明顯, 在高解析度的圖形加速效果大概能夠到 2.5 倍如圖 2-11。. 19.

(36) 圖 2-11 實驗數據 出自:Devrari, K., & Kumar, K. V.(2011). Kong 和 Deng 於 2010 提出一個以 Viola-Jones 為基礎,使用 CPU-GPU 合作執行下的臉部偵測 系統。實驗結果表示, 該系統在 GTX280 的顯示卡上的運行與在 Intel Core 2 Duo CPU 處理器運行相比, 速度可以增加 20 倍,同時確切地保持相同的檢測質量,在圖像大小的 方面,也提供了良好的可擴充性。 Krpec 和Němec 於2012年使用了Viola and Jones algorithm在CPU基 本線程的版本上做臉部偵測。然後,將基本的應用擴大到多線程CPU版 本。最後,臉部偵測演算法也透過CUDA的技術應用在GPU上,再進行 比較,GPU的執行速度平均比一個線程的CPU快了 35倍,多線程的CPU 實驗結果雖然跟GPU更接近些,但GPU仍然是比較快。 20.

(37) 綜合以上的相關研究說明,使用 GPU 在臉部偵測或者是臉部辨識 方面,具有一定的加速效果,但是要以資料量的大小為前提,當資料量 越大,加速的效果越好。. 21.

(38) 22.

(39) 第三章. 實驗架構. 為做實驗比較,本研究共實現五種 PCA 版本,包括 OpenCV 實現 的 Eigenface、 NIPALS CPU 版本、GS CPU 版本、NIPALS GPU 版本與 GS GPU 版本。Eigenface 是採用 OpenCV library,而後面四者是實現 Andrecut 學者提出兩種計算特徵值與特徵向量的加速方法,並結合 OpenCV 做 PCA 的臉部辨識,並將訓練與辨識時做特徵投影的步驟實現 於 GPU 上。最後本研究將運用 Extended YaleB 的臉部資料庫來做實驗, 並比較在 CPU 與 GPU 執行的成效。. 第一節. OpenCV 簡介. OpenCV (Open Source Computer Vision Library)是一套 BSD (Berkeley Software Distribution license)授權的開放原始碼,其中提供 了相當多優化過的程式庫,而 OpenCV 最常被用來做圖像分割、圖像追 蹤、人臉識別及定位,在 2010 年時 OpenCV 結合了 GPU 新增了 GpuMat library,能夠將矩陣傳送至 GPU 上進行運算,隨著版本的提升功能也更 為完善,目前最新版本為 OpenCV2.4.5 能夠結合 CUDA4.2 版,OpenCV 於實現 PCA 做臉部辨識可以利用內建的程式庫,其計算 PCA 特徵值與 特徵向量的方法是 Jacobian 矩陣算法,將 OpenCV 實現的 PCA 也可以 稱為 Eigenface 做為之後比較的對象。. 第二節. 平行化運算. 平行運算的概念是將任務或資料分配到多個執行緒(thread),以 23.

(40) CPU 來說雙核心處理器則表示有兩個執行緒核心,可以一次執行兩個任 務或資料,而 GPU 更適合用於平行運算,因為其顯示晶片上擁有相當 多的執行緒,以 NVIDIA® GeForce® GTX680 GPU 為例,其中有 1,536 個執行緒,於處理資料上有相當的加速效果。 BLAS(Basic Linear Algebra Subprograms,基礎線性代數程序集) 是最基本的數學庫之一,能夠用於向量與矩陣間的運算,其中運算又分 為三級: Level 1:向量與向量的運算 Level 2:矩陣與向量的運算 Level3:矩陣與矩陣的運算 每一個級別都有屬於各自的子函式,主要實現一般對記憶體階層優化 (Memory Hierarchy Optimization)或減少轉譯後備緩衝區失誤(TLB miss)而提高運算效能(陳少虎、張雲泉、張先軼、程豪,2010),在 2008 年時 NVIDIA 根據 BLAS 提出了 GPU 版本的 CUBLAS,更加速了 矩陣與向量的運算時間。 如前一章節圖 2-7 與圖 2-9 所示之程式程序,將過程運用 CUBLAS 做平行化,其 NIPALS 運算過程使用的函式如圖 3-1,而 GS 運算過程如 圖 3-2:. 24.

(41) 圖 3-1 NIPALS 平行化. 25.

(42) 圖 3-2 GS 平行化. 本實驗初步架構分為訓練與辨識兩階段。訓練方面首先對訓練圖像 進行預先處理,例如:圖像的大小調整,接著利用 OpenCV 讀取圖像建 立 Label,並完成圖像的正規化及產生共變異矩陣,接著是計算特徵值 26.

(43) 與特徵向量,在此除了原本 OpenCV 的計算方法,更實驗其他四種版本 分別是 NIPALS、NIPALS(GPU)、GS 及 GS(GPU),其中 CPU 的版 本運用了 BLAS library,GPU 版本則是運用 CUBLAS library,而進行訓 練樣本的投影運用了 GpuMat library,最後集合成訓練集;辨識方面預 先處理未知圖像利用 OpenCV 做正規化,投影至特徵空間則運用 GpuMat library,接著與訓練集計算歐式距離,得到結果。規劃流程如圖 3-3,黃 色為訓練步驟,藍色為辨識步驟,綠色為 GPU 做特徵投影的部分。. 圖 3-3 實驗流程圖. 27.

(44) 第三節. 實驗規劃. 本實驗採用 Extended YaleB 的臉部圖像資料庫,共有 28 個人且每人 有 9 種姿勢,每種姿勢有 64 種光線,圖像維度為 640×480,其中同一個 人不同表情及不同光線的圖像如圖 3-4:. 圖 3-4 不同姿勢與光線之圖像. 進行實驗時先把維度統一調降至 100×75,以利實驗,本研究規畫進 行實驗,如表 3-1:. 表 3-1 實驗規劃 取 756 張圖像,訓練每人 3 張圖像,28 人共 84 張,辨識未訓練. 實驗一. 672 張,分別保留 20%、50%、80%、100%的特徵向量數,測試 其辨識率. (A) 取 756 張圖像,訓練每人 27 張,28 人共 756 張,分別保 留 20%、50%、80%、100%的特徵向量數,測試期訓練時間. 實驗二 (B) 辨識全部圖片 16380 張包括訓練樣本 756 張,根據訓練 所保留的特徵向量數,測試辨識時間及辨識率. 28.

(45) 第四章. 實驗結果. 本章主要分為二個小節,分別為實驗平台、實驗結果以及結果分析。 說明如下:. 第一節. 實驗平台. 本實驗平台配備的主機端(Host)及顯示卡(Device),規格如下: Host 端搭配 Intel® CoreTM i7-3770 @3.40GHz、Ubuntu 11.10 X86_64 作業 系統、16GB DDR3-1600 記憶體、PCIe-3.0 x16 以及 OpenCV2.4.5 版;而 device 端則使用 NVIDIA® GeForce® GTX680 GPU 與驅動版本 304.33 和 CUDA 4.2 版。. 第二節. 實驗結果. 根據第三章所述實驗流程與架構,利用 Extended YaleB 資料庫進行 實驗,其中有 16380 張圖像。 實驗一:辨識率測試,訓練每人 3 張圖像共 84 張,辨識剩下未訓練的 672 張,其實驗數據如表 4-1:. 29.

(46) 表 4-1 實驗一辨識率之實驗數據 # of Eigenvectors / % of total Eigenvectors 16 / 20%. 42 / 50%. 67 / 80%. 84 / 100%. Eigenface. 89.434. 92.708. 93.154. 93.154. GS. 89.434. 92.261. 92.708. 91.369. GS(GPU). 89.434. 92.261. 92.708. 93.005. NIPALS. 88.69. 92.113. 92.559. 92.113. NIPALS(GPU). 88.69. 92.113. 92.559. 92.857. 訓練每人3張共84張,辨識672張 94 93. 辨識率. 92 91 90 89 88 87 86 20% 50% 80% 100%. Eigenface 89.434 92.708 93.154 93.154. GS 89.434 92.261 92.708 91.369. GS(GPU) 89.434 92.261 92.708 93.005. NIPALS 88.69 92.113 92.559 92.113. NIPALS(GPU) 88.69 92.113 92.559 92.857. 圖 4-1 實驗一辨識率直條圖. 由圖 4-1 可以發現當保留 50%特徵向量數時所得到的辨識率與保留 100%特徵向量數的辨識率相差不到 1%,而且 GS 與 NIPALS 計算特徵 向量的方法運用在臉部辨識上,所得到的辨識率與 Eigenface 的辨識率. 30.

(47) 差距也不會到 1%,至於 CPU 版本與 GPU 版本之間的辨識率有些許誤 差乃因為運用的 library 不同所導致的浮點運算誤差。 實驗二:訓練 756 張圖像與辨識 16380 張圖像,紀錄其訓練所花費時間 與辨識所花費時間,訓練時間紀錄之數據如表 4-2,紀錄辨識 時間之數據如表 4-3 以及辨識率之數據表 4-4:. 表 4-2 訓練時間紀錄 # of Eigenvectors / % of total Eigenvectors 151 / 20%. 378 / 50%. 604 / 80%. 756 / 100%. Eigenface. 28599. 28844. 29708. 30345. GS. 23206. 23775. 24321. 24689. GS(GPU). 5611. 5672. 5700. 5774. NIPALS. 21588. 22023. 22676. 23005. NIPALS(GPU). 4967. 5019. 5084. 5124 單位:ms. 訓練時間(ms). 訓練每人27張,共756張 35000 30000 25000 20000 15000 10000 5000 0 Eigenface GS GS(GPU) NIPALS NIPALS(GPU). 20% 28599 23206 5611 21588 4967. 50% 28844 23775 5672 22023 5019. 圖 4-2 訓練時間直條圖 31. 80% 29708 24321 5700 22676 5084. 100% 30345 24689 5774 23005 5124.

(48) 從圖 4-2 可以看出當保留 100%特徵向量數時,與 Eigenface 做比較, CPU 版本的 NIPALS 能夠得到 1.3 倍的加速,而 GS 可得到 1.2 倍的加速。 GPU 版本的 NIPALS 能夠得到 5.9 倍的加速,而 GS 可以得到 5.25 倍的 加速。另一方面相較於 NIPALS 與 GS 的 CPU 版本,GPU 版本則可以得 到 4.5 倍的加速。GS 與 NIPALS 的 GPU 版本大概比 CPU 版本快上 4.5 倍。. 表 4-3 辨識時間紀錄 # of Eigenvectors / % of total Eigenvectors 151 / 20%. 378 / 50%. 604 / 80%. 756 / 100%. Eigenface. 31462. 36485. 56332. 70118. GS. 33050. 37312. 56701. 70039. GS(GPU). 31141. 37151. 43394. 44386. NIPALS. 31794. 37310. 56811. 69834. NIPALS(GPU). 31147. 37076. 43462. 44414 單位:ms. 32.

(49) 辨識每人585張,共16380張 80000 70000 辨識時間(ms). 60000 50000 40000 30000 20000 10000 0 Eigenface GS GS(GPU) NIPALS NIPALS(GPU). 20% 31462 33050 31141 31794 31147. 50% 36485 37312 37151 37310 37076. 80% 56332 56701 43394 56811 43462. 100% 70118 70039 44386 69834 44414. 圖 4-3 辨識時間直條圖. 由於辨識部分只有投影與計算歐式距離,而本研究只加速投影的計 算,由圖 4-3 能發現當保留的特徵向量數越少其辨識時間越短,根據實 驗一要保有辨識率至少要保留 50%的特徵向量數,當保留 100%特徵向 量數時,GS 與 NIPALS 的 GPU 版本大概能加速 1.57 倍。. 表 4-4 實驗二辨識率之實驗數據 # of Eigenvectors / % of total Eigenvectors 151 / 20%. 378 / 50%. 604 / 80%. 756 / 100%. Eigenface. 83.327. 83.706. 83.791. 83.797. GS. 83.431. 83.791. 83.882. 83.565. GS(GPU). 83.431. 83.791. 83.882. 83.51. NIPALS. 83.486. 83.754. 83.821. 82.161. NIPALS(GPU). 83.486. 83.754. 83.821. 82.075. 33.

(50) 訓練每人27張共756張,辨識16380張 84.5 84 辨識率. 83.5 83 82.5 82 81.5 81 20% 50% 80% 100%. Eigenface 83.327 83.706 83.791 83.797. GS 83.431 83.791 83.882 83.565. GS(GPU) 83.431 83.791 83.882 83.51. NIPALS 83.486 83.754 83.821 82.161. NIPALS(GPU) 83.486 83.754 83.821 82.075. 圖 4-4 實驗二辨識率直條圖. 實驗二訓練每人 27 張包括每個姿勢三種不同光線,共有 9 種姿勢, 辨識資料庫所有圖像每人 585 張,共 16380 張,所得到辨識率三種方法 的辨識率平均是 83%左右。. 第三節. 結果分析. 綜合以上實驗,NIPALS 與 GS 計算特徵值與特徵向量的方法運用來 做 PCA 臉部辨識上其辨識率與 OpenCV 的 Eigenface 的辨識率相差不到 1%,可是 NIPALS 與 GS 的執行速度不論是 CPU 版本或者 GPU 版本都 比 OpenCV 的 Eigenface 快,由實驗二的辨識率可以發現,NIPALS 在保 留 100%特徵向量時,辨識率明顯下降,因為 NIPALS 能夠算出前幾個 主成分,而後因為其捨入性誤差,會導致計算出的特徵向量不是正交的, 也就是數值的不穩定,而 PCA 的主要精神是保留主成分,也就是去除雜 訊,當只保留 80%特徵向量時 GS 的辨識率是最好的,而保留 100%的特 徵向量,則是連雜訊都保留了,所以辨識率不會優於只保留 80%特徵向 34.

(51) 量的辨識率。 NIPALS 與 GS 在 PCA 臉部辨識上的比較,NIPALS 因為其捨入性 誤差的問題若保留全部的特徵向量則在辨識率上比 GS 來的差,但是 GS 由於在計算上要做重正交所以在運算時間上比 NIPALS 多,在 PCA 保留 主成分的前提下,實驗二保留 80%的特徵向量時兩種方法的辨識率都有 83.8%,故雖然 NIPALS 有計算上數值的不穩定有捨入性誤差,但是只 保留前幾個主成分,其誤差的影響有限,GS 與 NIPALS 的辨識率的差距 約 0.06%,由圖 4-2 可以發現 NIPALS 的 CPU 與 GPU 版本能夠比 GS 方 法的兩種版本快 1.1 倍,所以顯示 NIPALS 較 GS 適合於 PCA 的臉部辨 識。. 35.

(52) 36.

(53) 第五章. 結論. 本論文目的為利用圖形處理器加速人臉辨識,本論文提出以 NVIDIA 的 CUBLAS library 加速 NIPALS 和 GS 演算法,可以有效加速 特徵向量與特徵值的計算,並利用 OpenCV 的 GpuMat library 加速特徵 投影的計算,實驗結果顯示透過圖形處理器可以有效加速人臉辨識。 未來更可運用在其他臉部辨識方法上例如:Fisherface,因為計算特 徵向量算是研究臉部辨識的基礎,除了運用在其他方法上,對於圖形處 理器的使用可以往多個圖形處理器執行作探討,相信都能獲得效率上的 提升。而實際的應用方面,上下班的打卡系統以及學校的點名系統,都 能夠設計並且實現。. 37.

(54) 38.

(55) 參考文獻 一、中文部分 陳少虎、張雲泉、張先軼、程豪(2010) 。BLAS庫在多核處理器上的性 能測試與分析。Journal of Software 軟件學報,21,214-223。. 二、外文部分 Andrecut, M. (2009). Parallel GPU implementation of iterative PCA algorithms. Journal of Computational Biology, 16(11), 1593-1599. Devrari, K., & Kumar, K. V. (2011). Fast face detection using graphics processor. International Journal of Computer Science and Information Technologies, 2(3), 1082-1086. ExtendedYaleB.. (2001).. Face. database,. Available. from. http://vision.ucsd.edu/extyaleb/ExtendedYaleB.tar.bz2 Georghiades, A. S., Belhumeur, P. N., & Kriegman, D. J. (2001). From few to many: Illumination cone models for face recognition under variable lighting and pose. IEEE Transactions on Pattern Analysis and Machine Intelligence, 23(6), 643-660. Jošth, R., Antikainen, J., Havel, J., Herout, A., Zemčík, P., & Hauta-Kasari, M. (2012). Real-time PCA calculation for spectral imaging (using SIMD and GP-GPU). Journal of Real-Time Image Processing, 7 (2), 95-103. Kong, J., & Deng, Y. (2010, August). GPU accelerated face detection. Paper presented at the 2010 International Conference on Intelligent Control and Information Processing (ICICIP), Dalian, China. Kim, K. I., Jung, K., & Kim, H. J. (2002). Face recognition using kernel 39.

(56) principal component analysis. IEEE Signal Processing Letters, 9(2), 40-42. Krpec, J., & Němec, M. (2012, January). Face detection CUDA accelerating. Paper presented at ACHI 2012, The Fifth International Conference on Advances in Computer-Human Interactions, Valencia, Spain. Kramer, R. (1998). Chemometric techniques for quantitative analysis. New York: Dekker. Lizama, E., Waldoestl, D., & Nickolay, B. (1997, October). An eigenfaces-based automatic face recognition system. Paper presented at the 1997 IEEE International Conference on Systems, Man, and Cybernetics, Orlando, FL. NVIDIA Corporation. (2008, March). CUDA CUBLAS Library. Available from http://oz.nthu.edu.tw/~d947207/NVIDIA/CUBLAS_Library_2.0.pdf OpenCV. (2013). OpenCV: Open Source Computer Vision (Version 2.4.5) [Software]. Available from http://opencv.org/ Ramesha, K., & Raja, K. B. (2011). Gram-Schmidt orthogonalization based face recognition using DWT. International Journal of Engineering Science and Technology, 3(1), 494-503. Štruc, V., & Pavešić, N. (2009). Gabor-based kernel partial-least-squares discrimination features for face recognition. Informatica, 20(1), 115-138. Schwartz, W., Guo, H., & Davis, L. (2010). A robust and scalable approach to face identification. Computer Vision–ECCV 2010, 6316, 476-489. Sajid, I., Ahmed, M. M., & Taj, I. (2009). Time efficient face recognition using stable Gram-Schmidt orthonormalization. International Journal of 40.

(57) Signal Processing, Image Processing and Pattern Recognition, 2(1), 35-48. Turk, M., & Pentland, A. (1991). Eigenfaces for recognition. Journal of cognitive neuroscience, 3(1), 71-86. Turk, M. A., & Pentland, A. P. (1991, June). Face recognition using eigenfaces. Paper presented at the 1991 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, Maui, HI. Wu, Q., Song, M., Bu, J., & Chen, C. (2006). Eigenexpress approach in recognition of facial expression using GPU. Computer Vision in Human-Computer Interaction, 3979, 12-20. Wold, S., Esbensen, K., & Geladi, P. (1987). Principal component analysis. Chemometrics and intelligent laboratory systems, 2(1), 37-52.. 41.

(58)

參考文獻

相關文件

[r]

從角度 (viewing point) 辨識 AR和VR 的分別 Exterior view..

 把有着相同符號的圖畫書編 成小單元,歸類施教,引導 學生認識符號的共通點,辨 別其中的細微差異,建構文 學鑑賞能力.

• Philip Kotler and Lane Keller (2009), Marketing Management, Upper Saddle River, NJ, Prentice-Hall. • Kotler & Armstrong, Principles of

「唯識相」的部分即佔了二十四個偈頌,亦即佔了五分之四(80%)的

 法國農業四個機構跨業合作研發成功的 Pl@ntNet App, 目 前已經可以辨識八百多種歐洲植物,中長期目標希望

學習活動扼要描述: 學生以兩種感受:觸覺和視覺去分辨水與冰的不同,從而認識 水的溫度改變(觸覺)形態亦會改變(視覺) 。學生選出圖卡表

指導教授:江茂綸 老師