• 沒有找到結果。

基於臉部偵測及CNN模型之硬體臉部辨識系統

N/A
N/A
Protected

Academic year: 2021

Share "基於臉部偵測及CNN模型之硬體臉部辨識系統"

Copied!
66
0
0

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

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文. 指導教授: 黃文吉 博士. 基於臉部偵測及 CNN 模型之硬體臉部辨識系統 Hardware Face Recongnition System Based on Face Detection and CNN Model. 研究生: 中華民國. 謝斯宇. 一○八. 年. 撰 八. 月.

(2) 中文摘要 本論文透過 FPGA(Field Programmable Gate Array)的特性,如運算速度快、 功率消耗低以及可攜性高等,來實現基於簡單 CNN Model LeNet-5 的人臉即時 辨識系統。 LeNet-5 是簡單的 CNN Model,對於複雜背景的影像有著極低的辨識率,為 了改善其缺點,有兩種作法。第一,使用較為複雜的 CNN Model 如 VGG-Net16 等,第二,新增額外的前處理人臉偵測方式來改善。 如果使用較為複雜的 CNN,在現有基於複雜的 CNN 電路絕大多數是使用 PE (Process Element)Array 的架構,每層電路共享相同的運算單元,而這種方法 會造成一些問題,硬體資源消耗高、硬體設計複雜以及 Latency 長等問題。所以 本論文是使用較為簡單的 CNN 來設計電路,根據軟體模型不同層的特性去做不 同的設計,藉由改善電路的架構,使得每一層電路部分重疊的方式,提升電路 平行計算的能力,進而提高電路的運算速度。 本論文使用簡單的 CNN 電路搭配人臉偵測的方式,來實現即時人臉辨識系 統,不僅辨識率足以跟複雜的 CNN 匹敵之外,更重要的是我們只需花成本低的 硬體規格就能實現實際的應用,如手機上的 APP 人臉解鎖功能以及家庭人臉辨 識等應用,符合普及計算(Pervasive Computing)的概念。 關鍵字:人臉辨識、人臉偵測、深度學習、CNN、FPGA。 i.

(3) 目錄 中文摘要.......................................................................................................................... i 目錄................................................................................................................................. ii 圖目錄............................................................................................................................ iii 表目錄............................................................................................................................. v 第一章 緒論................................................................................................................... 1 1-1 研究背景與動機 .............................................................................................. 1 1-2 研究目的 ........................................................................................................ 10 1-3 研究方法 ........................................................................................................ 10 第二章 基礎理論與技術背景..................................................................................... 11 2-1 摺積運算 ........................................................................................................ 11 2-2 Max Pooling 運算 .......................................................................................... 12 2-3 Face Detection ................................................................................................ 13 2-4 Data Reuse 架構 ............................................................................................. 14 第三章 系統架構......................................................................................................... 25 3-1 電路架構 ........................................................................................................ 25 3-2 C1 電路........................................................................................................... 26 3-3 S2 電路 ........................................................................................................... 28 3-4 C3 電路........................................................................................................... 29 3-5 F5 電路 ........................................................................................................... 32 3-6 Pipelined operations ....................................................................................... 37 3-7 電路 Latency .................................................................................................. 42 3-8 人臉辨識系統架構 ........................................................................................ 43 第四章 實驗數據與效能分析..................................................................................... 45 4-1 開發平台與實驗環境 .................................................................................... 45 4-2 實驗結果與效能分析 .................................................................................... 51 第五章 結論................................................................................................................. 58 參考文獻....................................................................................................................... 59. ii.

(4) 圖目錄 圖 圖 圖 圖 圖 圖 圖. 1-1 VGGNet-16 模型架構圖................................................................................... 3 1-2 人臉辨識示意圖 ................................................................................................ 3 1-3 PE Array 架構圖 ................................................................................................ 5 1-4 LeNet-5 模型架構圖 .......................................................................................... 6 1-5 耶魯大學所提供的人臉資料集[5].................................................................... 6 1-6 Face Detection 示意圖 ....................................................................................... 6 1-7 LeNet-5 電路架構圖 .......................................................................................... 7. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 1-8 LeNet-5 電路流程圖 1 ....................................................................................... 8 1-9 LeNet-5 電路流程圖 2 ....................................................................................... 8 1-10 LeNet-5 電路 Latency 示意圖 ......................................................................... 9 2-1 摺積運算過程圖 .............................................................................................. 12 2-2 Max Pooling 運算過程圖 ................................................................................ 12 2-3 No Data Reuse 運作圖 ..................................................................................... 14 2-4 Snake Buffer 架構圖 ........................................................................................ 15 2-5 Snake Buffer 運作流程圖 1 ............................................................................. 16 2-6 Snake Buffer 運作流程圖 2 ............................................................................. 16 2-7 Snake Buffer 運作流程圖 3 ............................................................................. 16. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 2-8 Snake Buffe 與 Kernel core 架構圖 ................................................................. 17 2-9 Snake Buffe 與 Kernel core 運作圖 ................................................................. 18 2-10 Interleaved shift register 架構圖 .................................................................... 18 2-11 Interleaved shift register 運作圖 1 ................................................................. 19 2-12 Interleaved shift register 運作圖 2 ................................................................. 19 2-13 Output buffer 架構圖 ..................................................................................... 20 2-14 Output buffer 運作圖 1 .................................................................................. 21 2-15 Output buffer 運作圖 2 .................................................................................. 21 2-16 Output buffer 運作圖 3 .................................................................................. 22 2-17 Output buffer 運作圖 4 .................................................................................. 23. 圖 圖 圖 圖 圖. 2-18 Max pooling 電路架構圖 ............................................................................... 23 2-19 Max pooling 電路運作圖 ............................................................................... 24 3-1 本論文電路架構圖 .......................................................................................... 26 3-2 本論文電路 Latency 示意圖 ........................................................................... 26 3-3 C1 電路架構圖 1.............................................................................................. 27. 圖 3-4 C1 電路架構圖 2.............................................................................................. 28 圖 3-5 S2 電路架構圖 ................................................................................................. 29 圖 3-6 C3 電路架構圖 1.............................................................................................. 30 iii.

(5) 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 3-7 C3 電路架構圖 2.............................................................................................. 31 3-8 C3 電路架構圖 3.............................................................................................. 31 3-9 F5 電路架構圖 ................................................................................................. 33 3-10 F5 電路運作圖 1 ............................................................................................ 34 3-11 F5 電路運作圖 2 ............................................................................................ 35 3-12 F5 電路運作圖 3 ............................................................................................ 36 3-13 F5 電路運作圖 4 ............................................................................................ 36 3-14 Pipeline operations 錯誤運作圖 1 ................................................................. 37 3-15 Pipeline operations 錯誤運作圖 2 ................................................................. 38 3-16 Pipeline operations 錯誤運作圖 3 ................................................................. 38. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 3-17 Pipeline operations 正確運作圖 1 ................................................................. 39 3-18 Pipeline operations 正確運作圖 2 ................................................................. 40 3-19 Pipeline operations 正確運作圖 3 ................................................................. 40 3-20 Pipeline operations 正確運作圖 4 ................................................................. 41 3-21 Pipeline operations 正確運作圖 5 ................................................................. 42 3-22 本論文電路 Latency 公式圖 ......................................................................... 43 3-23 人臉辨識系統架構圖 .................................................................................... 44 4-1 鄭博文同學所提供的人臉資料集[2](已作前處理) ....................................... 47 4-2 Altera StratixIV EP4SGX230KH40C2 開發板................................................ 49 4-3 Xilinx Zynq XC7Z020-1CLG400C 開發板..................................................... 50. 圖 4-4 CNN 各電路資源消耗複雜度表 ..................................................................... 53 圖 4-5 實驗結果展示圖 .............................................................................................. 57. iv.

(6) 表目錄 表 表 表 表 表 表 表. 1-1 FPGA 與軟體運作於 CPU 及 GPU 之特性比較 ............................................. 2 1-2 現有電路比較 .................................................................................................... 9 2-1 現有人臉偵測比較 ......................................................................................... 13 4-1 Keras 辨識結果 ................................................................................................ 46 4-2 現有人臉偵測各項數據比較 ......................................................................... 47 4-3 電路與軟體辨識率比較 .................................................................................. 48 4-4 Altera StratixIV EP4SGX230KH40C2 規格表................................................ 49. 表 表 表 表 表. 4-5 Xilinx Zynq XC7Z020-1CLG400C 規格表..................................................... 51 4-6 不同 Kernel core 個數各項數據比較 ............................................................. 54 4-7 本論文電路與其他現有電路之資源消耗比較 .............................................. 55 4-8 本論文電路與其他現有電路之效能比較 ...................................................... 56 4-9 電路與軟體運算時間比較 .............................................................................. 57. v.

(7) 第一章 緒論 近年來,隨著硬體效能的升級而帶動整個人工智慧研究的熱潮,各種技術也 相繼問世,其中以深度 學習更與之受益,最為常見的模型為摺積神經網路 (Convolutional Neural Network;CNN),在各大比賽以及研究成果顯示出對於在圖 像辨識方面皆有很好的表現,伴隨著相關技術隨之衍生而出的應用也多不勝數, 常見的應用如:人臉辨識系統以及語音辨識系統等。. 1-1 研究背景與動機 人臉辨識系統的相關應用遍布於各行各業,根據需求的不同,應用系統也會 有所不同。大致應用如機場進出海關以及公司門禁系統等,小至一般手機解鎖功 能,這些應用都是透過人臉辨識去判斷到底符不符合目標結果,在採取應對措施。 大多數的應用都只存在於特定的條件下,人們沒辦法隨時隨地在任何條件下去使 用到人臉辨識的應用,如果要使人臉辨識應用到需要普及計算的環境,一定要考 量硬體所需要匹配的規格,所以必須具備體積小、運算速度快、移植性高以及功 率消耗低等特性,這些因素都是本論文所要參考的重要指標。根據表 1-1,我們可 以看到每個硬體的性質都有所不同,其中 CPU 根據種類的不同,運算速度和功率 消耗也有所不同,在我們電腦平常用的 Intel i7 運算速度快,而 Cortex A9 則運算 速度慢,GPU 運算速度快,除了 Cortex A9,其他部分都有共同的缺點,就是功率 1.

(8) 消耗高且可攜性也低,這些缺點都會造成一些問題,剛好 FPGA 彌補以上這些缺 點,FPGA 同時兼顧運算速度快、功率消耗低以及可攜性高的適用性,所以本論 文選擇了 FPGA 來實現人臉辨識系統。. 表 1-1 FPGA 與軟體運作於 CPU 及 GPU 之特性比較 CPU. CPU. Intel i7. Cortex A9. 運算速度. 快. 功率消耗 可攜性. 硬體. FPGA. GPU. 慢. 快. 快. 高. 低. 低. 高. 低. 高. 高. 低. 根據相關論文,我們可以得知 CNN 經常被用於人臉辨識系統相關應用,CNN 是屬於監督式前饋神經網路,最主要的目的是擷取資料的局部特徵,所以對於影 像辨識相關的應用有著很好的表現。CNN 是由多層摺積層(Convolution Layer)、 採樣層(Sampling Layer)以及全連接層(Fully Layer)組成的,其中摺積層主要有兩個 功能。第一,權重共享機制,每張輸入的影像都相對數張輸出的影像,相較於其 他類神經網路模型,CNN 所用到的訓練參數更少,讓網路模型架構更為簡單。第 二,擷取資料的部分區域,並篩選出相匹配的特徵。採樣層主要目的是降低特徵 大小以便計算之外,也能透過旋轉、縮放、平移調整圖像仍能辨識成功。全連接 層是將資料拉成一維向量的方式呈現,所有輸入對應所有輸出,透過矩陣運算把 所有特徵值綜合起來,並從中將資料做分類。綜合以上的特性,讓 CNN 比起其. 2.

(9) 他網路有著更為簡單的架構且辨識率也更好,常用的模型架構有 LeNet-5、AlexNet 以及 VGGNet。 我們以論文[1]為例,這篇論文是用 CNN VGGNet 來實現人臉辨識的應用, 然而 VGGNet 是較為複雜的 CNN,以圖 1-1 為示,總共有 16 層之多。然而也因 為層數越多所以模型也就越複雜,使得運算複雜度會提高,進而增加硬體設計所 需的成本。反之,好處是可以辨識包含複雜背景的人臉圖像,也能辨識更多的人 臉類別,從圖 1-2(由鄭博文同學所提供[2])我們可以知道這幾張圖每個人臉所在的 圖像背景都不盡相同,而且又是全彩圖,這更能說明複雜的 CNN 的確在更為複 雜的圖像上有著很好的表現。. 圖 1-1 VGGNet-16 模型架構圖. 圖 1-2 人臉辨識示意圖 3.

(10) 再來,我們從硬體的層面去切入,這篇論文[3]主要是用硬體來實現 VGGNet, 由於較為複雜的 CNN 有兩種特性。第一,在 CNN 淺層的部分,Input Feature Map Size 會比較大且 Weight 比較少,第二,在 CNN 深層的部分 Input Feature Map Size 會比較小且 Weight 比較多,所以基於以上兩種特性,這篇論文使用 Workload Division 的方法來實現 CNN 電路。Workload Division 顧名思義就是工作量的分 配,把一大塊的資料劃分為數個小塊的資料,再從每個小塊的資料取一小部分的 資料去做運算,所以只需要花費一小塊的記憶體空間就可以讓運算順利的完成, 進而避免了因為 Memory Size 不夠的問題。 當然, Workload Division 的方法還可以搭配 PE Array 來實現出 CNN 硬體, 而根據這篇論文[4],使用了此架構來實現 CNN 硬體, PE Array 是由一組運算單 元所構成的一種架構,以圖 1-3 為示。這種架構有兩種特性,第一,高度的利用 了 Diverse Data Reuse 的架構,這些資料包含 Input 輸入資料、Weight 權重以及 Partial Output 部分輸出結果,進而降低記憶體存取次數以提升電路的效能。第二, CNN Model 每一層都會共享相同的運算核心,也就意謂著每個摺積層以及全連接 層都要透過一樣的運算核心才能完成運算,這樣的好處是可以大幅下降硬體所需 的消耗資源,進而降低設計硬體的成本。然而壞處是因為每層共享相同的運算核 心,所以下一層必須等到上一層運算完,方能開始執行運算,所以這種架構並沒 有運用到每一層間的平行計算,所以導致 Latency 拉長、Throughput 降低等問題。 第二個壞處是 Controller 設計不易,因為 FPGA 的 Cache 通常不會很大,又根據 4.

(11) CNN 前段以及後段性質上的差別,會使得 Cache 要在哪個階段做哪些事,而造成 設計 Controller 會比較複雜。. 圖 1-3 PE Array 架構圖. 除了上述所提到的使用架構複雜的 CNN 來實現人臉辨識系統,也可以使用 架構較為簡單的 CNN 來實現人臉辨識系統,以圖 1-4 為示。從軟體層面來說,直 觀上我們可以得知跟 VGGNet 相比模型架構簡單許多,這樣的好處是運算複雜度 會大幅的降低,然而壞處有兩點。第一,較為複雜的背景人臉圖像會不容易辨識, 從圖 1-5 我們可以得知每張人臉所在的圖片背景幾乎都是一樣的且圖像還是灰階 圖。第二點,辨識的人臉類別有限,綜合以上兩點,明顯的可以知道一件事,就 是較為簡單的 CNN 圖像辨識能力是不足的。 5.

(12) 圖 1-4 LeNet-5 模型架構圖. 圖 1-5 耶魯大學所提供的人臉資料集[5]. 那如何來改善較為簡單的 CNN 的辨識率呢?本論文會用額外的前處理再結 合 Face Detection 演算法來加強人臉的辨識率,如圖 1-6 所示,我們可以不管周 遭背景如何,只框出人臉所在位置,這樣就不會因環境改變而去影響系統的辨 識率。. 圖 1-6 Face Detection 示意圖. 6.

(13) 我們從硬體的層面來探討比較簡單的 CNN Model,下圖 1-7 是這篇論文[6]的 電路架構,根據軟體模型如圖 1-4 總共分為三級,Stage1 包含 C1 以及 S2,Stage2 包含 C3 以及 S4,Stage3 包含 F5 以及 F6,共 6 層。每一個 Stage 間都放置一個 Pipeline Register,用意是在系統一直不斷辨識人臉的情況下,能快速計算出辨識 結果。. 圖 1-7 LeNet-5 電路架構圖. 舉個例子,假設有三張圖要做辨識,理想的情況是的一張圖片到 Stage3,而 第二張圖片到 Stage2,第三張圖片到 Stage1,如圖 1-8 呈現。如果真的是這樣運 作,運算速度的確會很快,不過有個大前提,就是每個 Stage 間所花的時間必須 盡可能的一樣。如果差異很大,只要電路訊號控制稍微沒有處理好,就會造成電 路在運算的過程中讀取錯誤的資料進而導致錯誤的運算結果,如圖 1-9 呈現。為 了讓電路每個 Stage 運算時間平均,必須更動到電路架構,當然代價就是必須犧 牲額外的硬體資源,而當層數拉深情況會越來越嚴重。. 7.

(14) 圖 1-8 LeNet-5 電路流程圖 1. 圖 1-9 LeNet-5 電路流程圖 2. 我們從圖 1-10 可以看到資料是怎麼隨著時間去流動的,資料會一路從 C1 電 路執行到 F6 電路最後輸出結果。Pipeline Register 除了上述提到提高 Throughput 還有一個重要的功用,就是維持每個電路間 Clock 不同步的問題,所以這樣一來 會增加不少電路的 Latency,當層數拉深 Latency 也就越長。. 8.

(15) 圖 1-10 LeNet-5 電路 Latency 示意圖 綜合以上所有提到的電路架構整理成如表 1-2 所示,CNN Model 在簡單或複 雜的情況下會有不同的架構來做設計,像是[1]以及[2]都是用 PE Array 架構來設 計,因為共享相同的運算核心,所以每個 Layer 之間沒有重疊,這也導致 Latency 會比較長的問題。然而[6]是用每層間有部分重疊的架構,且每一層都是獨立的電 路,但因為部分的平行計算也讓這種電路架構 Throughput 會提高且 Latency 也會 比較短。. 表 1-2 現有電路比較 現有電路. [3]. [4]. [6]. CNN Model. 複雜. 複雜. 簡單. Overlapped Execution. X. X. O. Area Cost. 高. 高. 高. Throughput. 高. 高. 高. Latency. 長. 長. 短. Layer-Level. 9.

(16) 1-2 研究目的 前一節提及到多種架構來實現 CNN Model,並分析出孰優孰劣,因而衍生出 本論文最主要的兩大目的,第一,必須透過改善現有電路架構,來提高運算速度 以及降低運算的複雜度,同時加速整個 CNN 電路以及降低硬體電路的面積。第 二,因為在現有論文很多電路都只局限於使用單一 FPGA 來執行演算法來觀測其 輸出結果,並沒有跟其他 IO 周邊來整合,所以必須要讓 FPGA 與 IO 介面整合, 以實現出真正的人臉即時辨識系統。. 1-3 研究方法 本論文透過改善現有電路架構的方式來讓整個 CNN 電路做到快速計算以及 低面積的特性,首先,拿掉 Pipeline Register 來讓電路每級間可以平行計算,來加 速整體電路的運算,而當中摺積層的部分,各自的運算單元可以藉由參數調整的 方式來降低電路的面積。FPGA 要與相關 IO 資源來做整合,如 HDMI Out 等螢幕 顯示周邊,再來我們還必須結合臉部偵測的演算法,來提高系統的辨識率。. 10.

(17) 第二章 基礎理論與技術背景 這一章節會先簡單介紹摺積層以及採樣層的運作原理。再解釋我們如何來使 用 Data reuse 的架構應用在本論文電路裡,電路又會再根據軟體模型每一層性質 以及輸出入各數的不同而衍生出不同架構的使用。. 2-1 摺積運算 這一小節本論文會透過一個簡單的例子來介紹摺積運算是怎麼來運作,摺積 運算最主要的目的就是擷取特徵,怎麼來擷取呢?就是藉由摺積核(Kernel)來篩選 出輸入資料的部分區域的特徵,輸入資料的每個 pixel 會與對應的摺積核做矩陣 相乘最後再加總起來得出輸出結果,舉個例子如圖 2-1:首先給定原始輸入圖片 (Input feature map)大小為 5×5,Kernel size 為 3×3,Kernel 會鎖定輸入圖片的部分 區域(紅框的部分),一個一個 pixel 去做相乘,再把剛剛所相乘的結果全部加總起 來得出部分的結果值,之後紅框滑動一個 Pixel 的距離做重複的動作以此類推, 最後得出所有特徵圖(Output feature map)。. 11.

(18) 圖 2-1 摺積運算過程圖. 2-2 Max Pooling 運算 這一小節會藉由一個簡單的例子來介紹 Max pooling 運算的原理,給定 一個輸入圖片大小為 4×4,這邊分為四大區塊,我們用顏色來區分開來,每一個 區塊找出最大值,把最大值當作是部分的輸出結果,藍色的區塊最大值為 0.8,而 黃色的部分為 0.6 等等以此類推,最後導出最後的輸出特徵圖。. 圖 2-2 Max Pooling 運算過程圖. 12.

(19) 2-3 Face Detection 本論文會與現有人臉偵測演算法則整合起來,以提高人臉在複雜背景下仍 有著很高的辨識率。臉部偵測有需多方式,像是傳統的 Haar 演算法[7][8]以及 HOG 演算法[9],或是藉由深層網路擷取特徵的 DNN[10]。 由表 2-1 我們可以知道 Haar 因為計算複雜度比較低,所以硬體所需的效能 要求也比較低,不過與 HOG 一樣臉部偵測的動作也比較不精準,容易去偵測到 其他非臉部的特徵,關於這一問題在此篇論文[2]已被解決。雖然 DNN 臉部偵測 較為精準,不過由於計算複雜度高,使得硬體所需的效能要求也較為嚴苛,亦 即 Clock rate 需要比較高的 CPU,執行效率才會比較好,所以並不適合在嵌入式 平台來應用。因此,本論文擇用演算法的標準是可以在 Clock rate 比較低的環境 上可以即時的執行臉部偵測的運算以符合 FPGA 的特性,所以本論文選擇 Haar 演算法則來結合 CNN 以實現人臉即時辨識系統。. 表 2-1 現有人臉偵測比較 Haar. HOG. DNN. 臉部偵測. 較不精準. 較不精準. 精準. 計算複雜度. 低. 高. 高. 硬體所需效能. 低. 高. 高. 通用性. 高. 低. 低. 13.

(20) 2-4 Data Reuse 架構 這一小節會回歸到硬體層面的探討,開始介紹現有的電路架構以及原理。 Data reuse 是 AI on chip 設計常用的一種架構,這種架構顧名思義就是資料重複不 斷的使用,可以避免因為 Memory io 等存取的問題,拖慢整體電路的效能,進而 提升運算速度,所以降低 Memory access 次數是本論文使用這個架構最主要的目 的。我們以一個例子來說明如果沒有使用 Data reuse 架構會發生什麼問題,如圖 2-3 所示,給定 Kernel size 為 3×3(深紅色框起來的部分),我們只關注 Pixel 8(紅色 來標記)這個值的一舉一動。深紅色的框每滑動一次,8 就被 Memory access 一次, 而 8 總共被 Memory access 了 6 次,可以只使用一次就能解決的事,變成要使用 6 次,更何況還有其他 Pixel 值。. 圖 2-3 No Data Reuse 運作圖. 14.

(21) 為了解決 Meomory access 次數過高的問題,我們使用了 Data reuse 架構來應 用到本論文的電路。Snake buffer 是一種 Shift register,如圖 2-4 所示,然而這種 架構是適用於單一 Input feature map 的情況,其 Size 是根據 Image size 以及 Kernel size 大小所定。. 圖 2-4 Snake Buffer 架構圖. 我們用一個例子如圖 2-5 到 2-7 來解釋 Snake buffer 的運作原理,首先,給定 Image size 為 5×5,Kernel size 為 3×3,我們會把 Image 每個資料一個一個 Pixel 丟 到 Snake buffer 中,直到 Buffer 滿為止,在這邊我們一樣只關注 8 這個 Pixel,這 時 8 已經被使用了一次,深紅色框起來的區塊為 Kernel 選取的範圍,把這些區塊 在丟到 Kernel core 去做運算,由圖 2-6 所示,直到 8 被最後一次使用為止。由 27 我們可以知道 8 已經被使用了 6 次,但 Memory access 只有 1 次,也就是只要 一次 Memory access,8 這個值就可以被重複使用了 6 次,完整的詮釋 Data reuse 的精隨。 15.

(22) 圖 2-5 Snake Buffer 運作流程圖 1. 圖 2-6 Snake Buffer 運作流程圖 2. 圖 2-7 Snake Buffer 運作流程圖 3. 16.

(23) 再者,我們來介紹 Snake buffer 是如何與專門負責摺積運算的 Kernel core 結 合,每個 Kernel core 會根據軟體模型所提供的 Kernel 數來決定有幾種權重,進而 影響到輸出個數,而每個結果是交錯輸出呈現(Interleaved output),如圖 2-8 所示。. 圖 2-8 Snake Buffe 與 Kernel core 架構圖. 至於實際的運作我們會以例子來解釋原理,由圖 2-9 所示,首先,由 Kernel 鎖定的區塊(深紅色的區塊)丟到 Kernel core 去做運算,每一次運算會由 Kernel core 所提供的權重種類來決定輸出個數,輸出個數彼此交錯輸出,每個顏色對應所匹 配的顏色,直到 Input 算完為止。. 17.

(24) 圖 2-9 Snake Buffe 與 Kernel core 運作圖. 還有一種是多個 Input feature map 的情況,所以當發生這種情況下,輸入就 是以交錯的形式去輸入(Interleaved input)到 Buffer 中,進而衍生出 Snake buffer 的 變形為 Interleaved shift register,此架構如圖 2-10 為示。. 圖 2-10 Interleaved shift register 架構圖. 因為輸入是交錯的形式來呈現,所以多出一個參數我們叫做 Interleave 個數 u,由 u 來決定此 Buffer 的大小。我們以一個例子來說明此架構如何來運作,由 18.

(25) 圖 2-11 以及 2-12 來呈現,有 3 個 Input feature map,分別用三個不同的顏色來區 分,彼此交錯的輸入到 Buffer 中,直到滿為止。一樣由 Kernel 所框出來的部分(深 紅色)丟進 Kernel core 去做運算,直到 Input 算完為止。. 圖 2-11 Interleaved shift register 運作圖 1. 圖 2-12 Interleaved shift register 運作圖 2. 19.

(26) 根據摺積層的性質,Kernel 會決定輸出幾張 Output feature map,所以我們必 須額外多加一個 Buffer 去接收部分的輸出結果,再把這些相匹配的部分結果加總 起來,最後算出 Output feature map。這種架構我們稱為 Output buffer,如圖 2-13 所示,因為有剛剛上述的性質,所以多一個參數 v 來代表每個 Kernel core 共享的 Output feature map 個數,由 v 跟 u 來決定此 Buffer 的大小。. 圖 2-13 Output buffer 架構圖. 我們以例子來展示 Output buffer 是怎麼與 Interleaved shfit register 以及 Kernel core 來運作。假設 Input feature map 有三張,分別用不同顏色來區分,每個顏色 會與相匹配顏色的權重來做運算,Kernel core 提供三種權重,每一種權重有兩個。 當 Shift register 塞滿時便開始計算,算完第一個值存進 Output buffer 中,如圖 214 所示。. 20.

(27) 圖 2-14 Output buffer 運作圖 1. 接下來同樣的值繼續與 Kernel core 下一個權重來做運算,可以 Kernel core 紅框的部分做移動,並得到第二個輸出值,再推進 Output buffer 中,如圖 2-15 所示。. 圖 2-15 Output buffer 運作圖 2 21.

(28) 當綠色的權重在這輪算完時,這時 Shift register 會做移動的動作,輪到橘色 的部分來跟橘色的權重來做運算,算出的結果再丟進 Output buffer 中,如圖 2-16 所呈現。. 圖 2-16 Output buffer 運作圖 3. 上述的運作以此類推,直到 Input feature map 算完為止,這時 Output buffer 就 會是滿的狀態,會同時把綠、橘、黃兩組部分輸出結果給加總起來,並行(Parallel output)的輸出結果(Output feature map),如圖 2-17 所示。. 22.

(29) 圖 2-17 Output buffer 運作圖 4. 還會有另一種情況是發生在上一層結果是以交錯的形式輸出,所以該層會以 交錯的方式輸入到 Buffer 中,其原理與 Interleaved shift register 相似,差別在於有 幾張 Input feature map 就會有幾張 Output feature map,而這種情形特別適合用在 Max pooling 的電路上,如圖 2-18 所示。. 圖 2-18 Max pooling 電路架構圖. 23.

(30) 我們同樣以一個例子來說明,總共有 3 張 Input feature map,一個一個 Pixel 以交錯的方式丟進 Buffer 中,直到 Buffer 為滿的狀態為止。再丟進 Comparator core 去運算,Comparator core 是負責從深紅色區塊中比較出最大值,再以交錯的 方式輸出結果,如圖 2-19 所示。. 圖 2-19 Max pooling 電路運作圖. 24.

(31) 第三章 系統架構 這一章節會說明本論文電路架構以及原理。首先,會先從摺積層到採樣層在到全 連接層逐層而介紹。再來會介紹如何處理每一級電路間的溝通,以避免因為 Clock 不同步的問題,而造成錯誤的計算。當我們了解電路架構以及原理的運作,會推 導出整體電路的 Latency 公式,求出電路的運算速度。最後,結合 IO 周邊資源以 實現出人臉辨識系統。. 3-1 電路架構 本論文的電路架構模型是基於軟體網路模型 LeNet-5 去實現,電路總共劃分 為五級,如圖 3-1 為示。本論文每一級電路都有不同的性質,根據其性質進而去 影響到電路的設計,摺積層電路包含 C1 以及 C3,採樣層包含 S2 以及 S4,而全 連接層則是 F5。C1 的輸入為 32×32 的人臉特徵圖,C1 所提供 Kernel 個數有 6 個,而 Kernel size 為 5×5,所以出來的 Output feature map 為 6×28×28。C1 出來的 結果進到 S2,根據採樣層的特性,其 Output feature map 的大小會直接減半為 6× 14×14。至於 C3 以及 S4 其性質與 C1、S2 差異不大,所以出來的 Output feature map 為 12×5×5。再把這些結果攤成一維向量,輸入到 F5 去做運算,根據 F5 提供 的 Label 個數,去判斷哪個所對應的 Label 向量是最大的,就作為最後的辨識結 果。. 25.

(32) 圖 3-1 本論文電路架構圖. 本論文的電路每一級間都沒有安插 Pipelined register,所以每級電路間皆是 Overlapped,也因為這些重疊的部分,使得電路每級間皆有平行計算的能力,進而 增加電路運算速度,如圖 3-2 所示。. 圖 3-2 本論文電路 Latency 示意圖. 3-2 C1 電路 這一小節會介紹 C1 電路的架構,如圖 3-3 所示。C1 電路由 Shift register 以 及 Kernel core 所組成,每個電路單元有各自的功能,Shift register 是使用 Data reuse 26.

(33) 的架構所設計的電路,負責接收 Input 的資料。Kernel core 則是專門負責摺積運 算以及儲存權重的電路,根據軟體模型我們得知 C1 提供 6 個 Kernel 個數,由圖 3-3 可以得知總共有兩個 Kernel core,所以每個 Kernel core 分到了 3 個權重。Input 每個 Pixel 會隨著時脈依序對權重來運算,Kernel core 有三個權重所以需要花 3 個 時脈才會運算出第一個輸出值,輸出結果會交替的形式輸出到下一層電路,直到 Input 運算完為止。. 圖 3-3 C1 電路架構圖 1. 如果要看 C1 電路的運算時間,除了最後一個 Pixel 之外的每個 Pixel 所需要 的延遲時間,還要再加上最後一個 Pixel 所花的運算時間就是 C1 真正的執行時 間,如圖 3-4 所示。. 27.

(34) 圖 3-4 C1 電路架構圖 2. 3-3 S2 電路 由於上一層的輸出結果是以交錯的方式來進行,所以便以交錯的形式來當作 下一層的輸入。根據軟體模型採樣層的特性,有幾個 Input feature map 便會有幾 個 Output feature map,所以當輸入為交錯的形式進來,輸出就會以交錯的形式輸 出到下一層。綜合以上兩種特性而設計出的架構如圖 3-5 所示,由 Interleaved shift register 以及 Comparator core 所組成。Interleaved shift register 與上一節提到的 Shift register 概念相似,負責接收交錯的輸入資料。Comparator core 主要功能為找出 Input 部分區塊的最大值。當電路運算完,就會以交錯的形式來輸出到下一層。. 28.

(35) 圖 3-5 S2 電路架構圖. 3-4 C3 電路 這一小節會介紹 C3 電路架構,C3 電路與 C1 電路概念上類似,差別在於輸 入特徵圖數量的多寡,C1 電路的輸入是一張 Input feature map,而 C3 則是多張 Input feature map。由於上一層的輸出是交錯的形式進到 C3 電路,所以 C3 電路必 須要有一個 Buffer 去接收交錯的資料,以及負責摺積運算的電路單元,其電路原 理與上一小節有所提到的電路一樣。除此之外,還需要多一個電路去接收已經摺 積運算完的部分輸出結果,這也是 C3 與 C1 電路最大的不同所在,其電路架構如 圖 3-6 所示。C3 電路由 Interleaved shift register、Kernel core 以及 Output buffer 所 構成,我們可以從圖 3-6 所看到 Input 是交錯的進來,平行的輸出,而根據軟體模 型我們可以得知 C3 提供 12 個權重,Input feature map 總共有 6 張,所以總權重 為 6×12=72 個。C3 電路總共有 6 個 Kernel core,每個 Kernel core 被分到 12 個 權重。每一輪運算有兩組輸入資料,每組輸入資料有 3 筆,每筆輸入資料會與相 對應的權重來運算,我們會以顏色來依序對應,一個輸入資料需要花 4 個 clock, 29.

(36) 所以整組資料運算需要花 12 個 clock 才會算出部分輸出結果。Output buffer 會接 收經由 Kernel core 所算出來的部分結果,把這些結果所對應的 Output feature map 加總起來算出真正的 Output feature map。. 圖 3-6 C3 電路架構圖 1. 根據上述所提到 C3 電路的特性,我們會由 Kernel core 的個數來決定每組輸 入資料需要延遲多少 clock。如果 Kernel 個數多,所需要的延遲就會短,反之, Kernel core 個數少,所需要的延遲就會長,進而影響整體電路的運算速度。除了 影響運算速度,還會影響到電路硬體資源消耗,Kernel core 是負責摺積運算的電 路單元,所以會使用到大量的浮點計算,如乘法器以及加法器,這些電路元件都 會使用到很多硬體資源,佔據本論文電路絕大部分的硬體資源消耗,使得電路設 計成本提高。我們舉兩個例子來呈現 Kernel core 個數可以怎麼調整,給定權重總 數都是 72。首先,如圖 3-7 所示,Kernel core 個數是 4,所以每個 Kernel core 被 30.

(37) 分到 18 個權重,也就是每一組輸入資料需要花 18 個 clock 才能運算完。再換到 另一個例子,如圖 3-8 所示,Kernel core 個數是 2,所以每個 Kernel core 被分到 36 個權重,所以每組輸入資料需要花 36 個 clock 來執行運算。經過這兩個例子的 說明,本論文可以根據需求的不同,透過調整 Kernel core 的方式來改善運算速度 以及電路面積,使得電路設計更為彈性。. 圖 3-7 C3 電路架構圖 2. 圖 3-8 C3 電路架構圖 3. 31.

(38) 3-5 F5 電路 這一小節會先介紹全連接層電路的架構,再介紹其運作原理。首先,如圖 39 所示,這是全連接層電路架構,由 Computation core、Rom、AGU 以及 Partial accumulation buffer 組成,Computation core 是負責處理運算單元,ROM 是儲存權 重單元,AGU 為產生 ROM 的位址,Partial accumulation buffer 主要功能為暫存部 分的結果並持續做累加的計算。 我們用符號來代表每個全連接層電路所有參數的意義,輸入資料總數由上一層的 輸出總數來決定,I 為輸入資料的總個數,s 為每次運算的輸入個數,所以每個輸 入個數的總數為 I÷s,我們用 N 來代表符號。O 為輸出總個數,t 為每次運算的輸 出個數。權重總數由輸入資料總個數 I 以及輸出資料總個數 O 來決定,由於每次 運算的權重個數是由輸入個數 s 以及輸出個數 t 來決定,所以公式分別為 I×O 以 及 s×t,進而推導出 Rom 有多少組權重,公式為 I×O/s×t。根據軟體模型特性,只 要電路設計有牽涉到權重的部分,輸入資料就必須與相匹配的權重去做運算,所 需要的代價就是額外的延遲 Clock,來防止錯誤資料的計算。我們定義一個符號 R,代表電路每組 Input 需要對應到幾組權重來執行運算,公式為 I×O/s×t×N,這 樣我們就能知道每組 Input 需要花多少 Clock,進而求出 F5 的運算時間。. 32.

(39) 圖 3-9 F5 電路架構圖. 我們用一個例子來說明其全連接層電路的運作,假設權重總數為 32,給定 I、 O、s 以及 t 分別為 16、2、4 以及 2,所以每次運算會需要 8 個權重,總共 4 組權 重,進而推導出 N 為 4 以及 R 為 1,如圖 3-10 所示。每次運算會丟 4 個輸入個 數以及 8 個權重(紅框的部分)去 Computatiom core 執行運算,我們用顏色來代表 每個輸入個數的總數,以及所對應的權重,每組輸入會對應一組權重。計算完後, Computation core 會吐出運算完的資料丟進 Partial accumulation buffer 暫存起來, 直到有新的值要準備進到 Buffer 中,再執行累加的動作。. 33.

(40) 圖 3-10 F5 電路運作圖 1. 當電路運算完第一輪之後,紅框的部分會移動到下一個 Pixel,而 AGU 會指 向 2,告訴 Rom 必須移動到所對應的位址。運算完之後吐出新的輸出結果(藍色 的部分),電路發出一個訊號告訴 Buffer 有新的值要進來可以準備接收,這時已經 再 Buffer 等候一段時間的輸出結果(前一輪的值,紫色的部分)得知有新的值準備 進來,執行累加的動作,算完的結果再存回 Buffer 中(深紅色的部分),如圖 3-11 所示。. 34.

(41) 圖 3-11 F5 電路運作圖 2. 電路一樣的動作以此類推,Input 移動到下個 Pixel,權重指向於 AGU 所指定 的位址,新的輸出與舊的輸出執行累加運算,直到 Input 算完為止,如圖 3-12 以 及 3-13 為示。. 35.

(42) 圖 3-12 F5 電路運作圖 3. 圖 3-13 F5 電路運作圖 4. 36.

(43) 3-6 Pipelined operations 這一小節會介紹到如何讓每級電路之間的溝通運作能夠正常的執行且出來 的運算結果是正確的,如果錯誤會發生什麼問題,所以同不同步的問題在這一小 節是重要的關鍵。接下來會先舉錯誤的電路運作例子來看看會發生什麼問題,如 圖 3-14 所示。之後,再詳細的探討我們會利用什麼方法來解決問題。. 圖 3-14 Pipeline operations 錯誤運作圖 1. 首先,給定 Input feature map 為𝑍1 ,C1 Kernel core 提供三個權重,C3 Kernel core 則提供 12 個權重,所以分別需要花 3 個 Clock 以及 12 個 Clock。電路執行 第一個 Clock 時,如圖 3-15 所示,紅色的部分為電路當前執行的情況,都還是正 確的運作。然而當電路執行到第二個 Clock 時,如圖 3-16 所示,C1 的輸出結果 𝑋 2 對應錯誤的權重𝑊1,2,造成錯誤的運算結果。這一切發生錯誤的原因都是因為 每級電路間發生 Clock 不同步而發生 Race condition 的問題,C1 運算速度比較快, 37.

(44) 當 C3 還在計算時 C1 已經丟新的一筆資料給 C3,直接中斷 C3 原有的運作流程, 導致錯誤的運算結果。. 圖 3-15 Pipeline operations 錯誤運作圖 2. 圖 3-16 Pipeline operations 錯誤運作圖 3. 38.

(45) 為了使每級電路之間可以同步執行運算,首先,必須要看每級電路間誰的每 組輸入資料需要花最多的 Latency,在圖 3-17 這個例子,我們假設是 C3 花最多 時間,所以每級電路都需要遷就於 C3 電路。本論文使用 Finite state machine(Cntr) 來維持每級電路之間的 Clock 的同步,透過這個方法可以控制每個輸入資料對應 到所匹配的權重,而解決電路 Clock 不同步的問題。. 圖 3-17 Pipeline operations 正確運作圖 1. 電路執行第一個 Clock 時,由圖 3-18 可以得知第一個狀態為紅色,電路會根 據 Cntr 所指定的狀態來決定權重必須要停留多少個 Clock,所以𝑋1 會與 C3 的𝑊1,1 來執行運算。. 39.

(46) 圖 3-18 Pipeline operations 正確運作圖 2. 緊接著電路執行第二個 Clock,如圖 3-19 所示,Cntr 第二個狀態為紅色, 也就是𝑊1,1目前已經停了兩個 Clock,所以 C1 出來的結果仍就是𝑋1 ,並與 C3 的 𝑊1,2執行運算。. 圖 3-19 Pipeline operations 正確運作圖 3. 40.

(47) 接著,同樣的運作原理不斷的重複,如圖 3-20 所示。電路執行到第五個 Clock 時,也就是 C1 的𝑊1,1在這一輪已經運算完,必須換到下一個權重𝑊1,2,所 以 C1 出來的運算結果為𝑋 2 ,並與 C3 的𝑊2,1執行運算。. 圖 3-20 Pipeline operations 正確運作圖 4. 當電路執行到第九個 Clock 時,如圖 3-21 所示,也就是 C1 的𝑊1,2在這一輪已經 運算完,必須換到下一個權重𝑊1,3,所以 C1 出來的運算結果為𝑋 3 ,並與 C3 的 𝑊3,1執行運算,重複相同的動作以此類推,直到輸入資料算完為止。電路透過 Finite state machine 控制的作法,完全避免了電路 Clock 非同步的問題,讓每級電路之 間可以彼此重疊,增加電路的平行計算能力,進而提升運算速度。. 41.

(48) 圖 3-21 Pipeline operations 正確運作圖 5. 3-7 電路 Latency 上一小節有提到如果要使每級電路之間 Clock 可以同步,必須取決於電路間 最大的延遲時間。我們定義符號 d 代表 Input 每個 Pixel 所延遲的時間,公式為 𝑚𝑎𝑥𝑖𝑚𝑢𝑚(𝑇3 , 𝑅),其中𝑇3 代表 C3 每組 Input 所延遲的時間,而 R 則代表 F5 每組 Input 所延遲的時間,𝑇3 公式為𝑤/𝑘,𝑤為 C3 的權重總數,𝑘為 C3 的 Kernel core 個數。為什麼 d 會從 C3 與 F5 找出最大的延遲時間呢?C3 與 F5 有個類似的地 方,就是權重總數較多,而怎麼調整每組 Input 與權重的關係是非常重要的,也 因為這相同的性質,必須從中找出最大的延遲時間,所有電路都需要配合,避免 Race condition 的問題。我們在 C1 的小節有介紹到,只看最後一個值去執行運算, 所花的時間再加上每個 Pixel 所延遲的時間,就是 C1 最後的執行時間,公式為 𝑑(𝐿1 2 − 1) + 𝐷1 ,其中𝐷1 為 C1 Kernel Core 運算的時間。由於本論文的電路每級 間皆是平行計算,所以我們只需要看最後一個值所對應的電路所花的時間就可以 42.

(49) 推導出該級電路執行完的時間。𝐷2 為 Comparator Core 運算的時間,𝐷3 為 C3 Kernel core 運算的時間,𝐷4 為 Computation core 運算的時間。我們把上述提到的參數整 理成電路 Latency 公式圖,如圖 3-22 所呈現。. 圖 3-22 本論文電路 Latency 公式圖. 3-8 人臉辨識系統架構 上述每個小節都是說明 CNN 電路層面的運作,這一小節會介紹本論文所設 計的 CNN 電路怎麼與其他 IO 資源來整合,並結合軟體端提供人臉偵測演算法, 以實現人臉即時辨識系統。首先,Xilinx 所提供的 FPGA 有具備支援 Python 開發 的套件,透過 Python 我們可以很輕易地連結到所需要使用到的 IO 周邊資源,型 號為 Pynq-Z2,如圖 3-23 所示。Pynq-Z2 主要有兩大區塊,PS(Process System)處 理器系統以及 PL(Programmable Logic)可編成邏輯區塊。PS 是負責運算以及控制 協調每個 PL 的區塊以級 IO 周邊資源,不過 PL 端的控制需要透過 AXI bus,PS 端才能掌控。我們會先把 CNN 以及 HDMI 電路包裝成 IP 核,透過 Block design 43.

(50) 的方式,使得 PS 端與各個 PL 端所在的資源整合一起,生成 FPGA 所需要設定的 檔案(Bitstream 檔)。我們把 Bitstream 檔案放置到 FPGA 上,FPGA 就會透過檔案 生成軟體控制所需要的套件 Overlay,Overlay 提供了一個管道讓 Python 可以直接 與 FPGA 來溝通。Pynq-Z2 還提供一個叫做 MMIO(Memory mapping io)API,藉由 Memory mapping 的方式存取對應位址的 IP 核,讓 FPGA PL 端完全的執行人臉辨 識的運算以及 HDMI 訊號的顯示。最後,結合人臉偵測的演算法,由 OpenCV API 所提供,擷取 Web camera 所獲取的影像,框出人臉的位置,輸入到 CNN 電路去 運算,回傳運算結果,完成人臉即時辨識的任務。. 圖 3-23 人臉辨識系統架構圖. 44.

(51) 第四章 實驗數據與效能分析 這一章節來介紹本論文研究所開發的平台、實驗環境以及實驗數據結果與分 析的探討。從軟體模型訓練到測試準確率幾乎百分之百的情況下,取出已經訓練 好的模型參數,放置經由設計好的 CNN 電路,軟體與硬體端出來的執行結果彼 此間相互的驗證,分析出實驗數據間的關係與效能的比較。最後,CNN 電路整合 IO 周邊相關資源並結合軟體人臉偵測來實現即時人臉辨識系統,再進一步分析出 軟體與硬體間運算時間上的差異。. 4-1 開發平台與實驗環境 深度學習網路模型普遍上皆是以軟體開源函式庫 Keras 所提供來設計。Keras 是由純 Python 所編寫出來的 API,後端為 Tensorflow,有支援 GPU 之使用,透過 平行計算提高訓練速度,因此讓使用者可以方便又快速的設計深度學習網路模型。 本論文以 Keras 當作主要軟體開發平台,作業系統為 Window10,GPU 為 Nvidia Force GTX 1070,以耶魯大學[5]以及鄭博文同學[2]所提供的人臉資料當作當作訓 練以及測試集。從已經訓練好的模型中選出最高辨識率的網路模型,從中取出相 關參數,並實現於硬體電路設計模型。 本論文以耶魯大學[5]以及鄭博文[2]同學所提供的資料集作為訓練以集測試, 由第一章圖 1-5 以及圖 4-1 所示。從圖中可以知道類別個別分為 28 以及 4 類,訓. 45.

(52) 練資料個數分別為 14000 以及 6966,測試集為 2128、2013,耶魯大學所提供的測 試資料是在固定的角度、光源以及背景下去拍攝。而這篇論文[2]沒有拍攝限制, 且是在一般背景下去做拍攝。其辨識率分別為 99.86%以及 100%,由表 4-1 所示。. 表 4-1 Keras 辨識結果 資料集. 耶魯大學. [2]. 資料類別. 28. 8. 訓練資料個數. 14000. 6966. 測試資料個數. 2128. 2013. 測試資料環境. 固定角度、光源跟背景. 無拍攝限制+一般背景. 辨識率. 99.86%. 99.45%. 耶魯大學的人臉資料影像都為灰階圖,由圖 1-5 我們也可以知道每個人臉的 背景都是一樣的,這代表較為簡單的 CNN 模型辨識能力是有限的,必須做額外 的前處理,所以鄭博文同學所提供的資料也就要從複雜的全彩圖轉成簡單的灰階 圖,以增加模型的辨識率。原本影像大小為 640×480,把影像大小降至 32×32,目 的是之後實現硬體電路設計,如果影像大小過大會造成硬體面積過於龐大,進而增加 硬體設計成本。. 46.

(53) 圖 4-1 鄭博文同學所提供的人臉資料集[2](已作前處理). 簡單的 CNN 因為其圖像辨識能力極為有限,所以必須結合人臉偵測的演算 法以提高圖像的辨識率。我們經由實驗比較如表 4-2 其中三個人臉偵測的演算法, Haar、HOG 以及 DNN 各項實驗數據的比較。實驗的資料及為[2]所提供,資料類 別為 4 種,影像規格為 320×320(RGB),測試資料個數為 164 筆。我們可以看到 三個演算法結合 CNN Model 其人臉辨識機率幾乎相同,但是各自的運算時間有 所差異,Haar 演算法是效能最好的,所以本論文選擇使用 Haar 當作人臉偵測的 演算法。. 表 4-2 現有人臉偵測各項數據比較 Haar. HOG. 資料集. [2]. 資料類別. 8. 影像規格. 320×320(RGB). 測試資料個數. 164. DNN. 人臉辨識率. 99.39%. 97.46%. 99.36%. 運算時間(/張). 0.008692 s. 0.045645 s. 0.033791 s. 接著,由表 4-8 所示,本論文電路與軟體端[2]所辨識的次數都是 175 次,資 47.

(54) 料的類別都是 4 種,如果有結合人臉偵測的演算法其辨識率都是 99%,沒有結合 的話,其辨識率為 18%。這說明了一件事,較為簡單的 CNN 模型其辨識率是極 其有限的,如果沒有人臉偵測演算法,程式會擷取整張影像,因為整張影像會包 含千變萬化的複雜背景,會使得辨識率非常低,這也是之所以本論文必須搭配人 臉偵測以實現人臉即時辨識系統。. 表 4-3 電路與軟體辨識率比較 軟體[2]. 本論文電路. 辨識次數. 175. 資料類別. 8. Face Detection 辨識率. 99%. No Face Detection 辨識率. 18%. 在設計硬體電路方面,本論文使用 Altera 所提供電路設計的 IDE Quartus II 14.0 以及 Xilinx Vivado 2018.3 作為撰寫 Verilog 硬體描述語言之開發平台。本論 文使用了 ModelSim 來模擬出已經設計完畢的電路 RTL-level 訊號波型圖,透過波 型圖觀測出電路行為功能的正確性,數據是否照著設計的電路去跑流程,結果與 軟體端是否一致,確認一致,我們把電路燒至 FPGA 來觀察數據結果是不是正確 的。本論文使用的 FPGA 型號為 Altera StratixIV EP4SGX230KH40C2,如圖 4-2 所. 48.

(55) 示,其規格由表 4-2 所呈現。. 圖 4-2 Altera StratixIV EP4SGX230KH40C2 開發板. 表 4-4 Altera StratixIV EP4SGX230KH40C2 規格表 Logic Elements(LEs). 228000. Total Memory Kbits. 17133. Total DSP Blocks. 1288. Total PLLs. 8. Total I/Os. 744. 49.

(56) 本論文還有使用 Xilinx FPGA,型號為 Zynq XC7Z020-1CLG400C,如圖 4-3 所 示,其規格由表 4-3 所呈現。至於為什麼要使用 Zynq 這塊 FPGA 呢?因為此塊 FPGA 有支援 Python 相關的開發套件,可以很容易的與 IO 周邊相關資源做整合,以實現人 臉即時辨識的應用。. 圖 4-3 Xilinx Zynq XC7Z020-1CLG400C 開發板. 50.

(57) 表 4-5 Xilinx Zynq XC7Z020-1CLG400C 規格表 Logic Slices. 22800. Total Memory Kbits. 630. Total DSP Blocks. 220. Total PLLs. 4. 4-2 實驗結果與效能分析 本小節主要探討硬體電路資源消耗以及效能上與其他電路和軟體端的比較 分析。首先,會先從硬體資源消耗的評估與分析來說明,推導出每個電路元件會 對本論文電路有什麼影響以及關係。第二,說明本論文電路與其他電路間效能的 差異,透過前一章提及的電路 Latency 公式來推算出運算時間與 Frame rate 的比 較。第三,電路 Kernel core 個數的多寡會影響本論文電路的硬體資源消耗與 Latency,我們會把關係整理成表格來說明。最後,我們會呈現本論文的研究實驗 結果,進而分析出軟體端與本論文電路之間辨識率以及運算時間上的差異。 首先對 CNN 電路來進行硬體資源消耗的評估與分析,CNN 電路基本由乘法 器、加法器以及暫存器所構成。我們定義參數 Li×Li 為第 i 層 Input feature map 之 大小,C1 的 Input feature map 的大小為 L1×L1,S2 則為 L2×L2,C3 為 L3×L3,K×K 為 Kernel 之大小,Ii 為第 i 層 Input feature map 個數,Oi 則為第 i 層 Output feature. 51.

(58) map 的個數,s 與 t 分別為 F5 每次運算的輸入與輸出個數。 我們從表 4-4 可以觀察到 C1 與 C3 由於需要做摺積運算,所以需要較多的浮 點數乘法器與加法器,至於 F5 乘法器與加法器的個數取決於每一次運算輸入以 及輸出個數的多寡。 再來討論到 Registers 的部分,C1 的部分前一章有提到 Snake buffer 就是 Shift register,其大小由 Li 以及 K 來決定,所以電路資源複雜度評估亦會隨著 Buffer 大 小來決定,然而實際的 Registers 個數為 Li(K-1)+K,不過這裡是討論其複雜度的 問題,所以為 O(KL1)。C3 的部分因為是多個 Input feature map 的情況下,所以其 𝐼. Register 大小多一個參數 Ii 來決定,實際電路 Registers 個數為 𝑢3(𝑢𝐿3(𝐾−1)+𝑢𝐾), 其電路複雜度為 O(I3KL3)。S2 與 S4 電路資源複雜度亦由 Buffer 大小來決定,實 𝐼. 際電路個數分別為 𝑢2(𝑢𝐿2+(𝑢+1))以及 I4(𝐿4+2),其複雜度分別為 O(I2L2)以及 O(I4L4)。 F5 由輸出個數來決定 Register 各數多寡,其電路資源複雜度為 O(t)。綜合以上的 評估,Registers 個數的多寡最主要由 Input feature map 大小來決定,Input feature map 越大,Register 各數越多,電路資源消耗越大。. 52.

(59) 圖 4-4 CNN 各電路資源消耗複雜度表. 本論文電路設計效能與資源消耗分析與 Kernel core 個數有著很大的關連 性,Kernel core 個數的多寡會去影響整體電路的運作與效能。由表 4-7 是我們透 過 Kernel core 的個數與其他電路資源以及 Latency 關係而整理的表格,我們可以 看到隨著 Kernel core 個數的遞減,不管是 LUTs 還是 DSP Blocks 等等都會隨之 遞減,Kernel core 各數減少,數學運算子包含加法器以及乘法器使用量就會減 少,進而使電路整體資源消耗大幅下降。反之,隨著 Kernel core 個數的遞增, 電路的 Latency 就會隨之減少,進而提升電路的運算速度,這樣的調控使得本論 文的電路在設計上更為彈性。. 53.

(60) 表 4-6 不同 Kernel core 個數各項數據比較 Kernel Core 個數. 8 (電路 1). 6 (電路 2). 4 (電路 3). 2 (電路 4). 1 (電路 5). LUTs. 191530. 171597. 138654. 104609. 98625. FF. 180129. 138632. 98229. 78129. 68631. DSP Blocks. 1064. 864. 664. 464. 264. Latancy. 0.0866 ms. 0.1297 ms. 0.1911 ms. 0.3754 ms. 0.7439 ms. Adder. 304. 255. 204. 155. 141. Mutiplier. 274. 216. 166. 116. 66. 最後我們來探討本論文電路主要的硬體資源消耗與其他現有電路作比較,比 較四大部分,分別為 Look-up tables(LUTs)、Embedded memory bits、DSP Blocks 以及 Flip-Flops(FFs)。其中 LUTs 是用來實現組合邏輯電路,常用在數學運算子以 及多工器等,Embedded memory bits 則是用來實現 FPGA 內建的記憶體,DSP Blocks 只能用於實現數學運算子,FFs 用來實現暫存器等時序電路。 從表 4-5 我們可以發現跟這篇論文電路[11]相比電路資源消耗,各項數據皆 顯示本論文電路有著更少的電路資源消耗。由於 C1 以及 C3 電路佔據本論文龐大 的硬體資源消耗,大量的摺積運算使得電路必須使用更多乘法器以及加法器。我 們透過彈性的調整 Kernel core 個數,讓本論文電路面積大幅得下降。除此之外, 因為本論文電路不需要考量維持電路每級間的平衡,所以不需要為了維持每級電 54.

(61) 路間的平衡而去額外多新增電路,像是 Pipeline register 以及多餘的全連接層電路。 Pipeline register 會使用到不少的 FFs,而全連接層電路會佔據電路的內部記憶體 (Memory bits)龐大的比例,因為全連接層會有大量的權重。本論文電路因為硬體 資源消耗較低,所以使用成本更為低的 FPGA 來實現 CNN 電路。. 表 4-7 本論文電路與其他現有電路之資源消耗比較 Memory Bits (Kbits). FPGA Devices. FFs. DSP Blocks. 本論文電路 5. Altera Stratix IV EP4SGX230. 68631. 264. 287.55. 電路[11]. Altera Stratix IV EP4SGX530. 165920. 928. 1298.56. 由上一章我們得知本論文電路 Latency 的運算公式,透過公式的演算,我們 可以推導出實際電路所運算的時間,本論文電路同時與這兩篇論文[11]與[12]做效 能的比較,由表 4-6 所呈現。所有電路都在同樣的條件下去做效能的評估,Clock rate 都是 100 Mhz,藉由本論文電路 Latency 公式推算出每一張影像的運算時間為 0.0631 ms,我們從表 4-6 可以得知[11]與[12]所花的 Latency 分別為 0.0789 ms 以 及 0.8327 ms。由此可知,電路執行每一張影像所花的時間在同樣的條件下是最快 的,從 Latency 我們可以進而推導出 Frame rate(每秒可以執行多少張影像)。從表 4-6 可以知道每個電路的 Frame rate 分別為 15847.86、12674.27 以及 1200.91,換 55.

(62) 句話說,本論文電路每秒可以執行最多張影像。. 表 4-8 本論文電路與其他現有電路之效能比較 本論文電路 1. 電路[11]. 電路[12]. Clock Rate. 100Mhz. 100Mhz. 100Mhz. Latancy. 0.0631 ms. 0.0789 ms. 0.8327 ms. Frame Rate(/s). 15847.86. 12674.27. 1200.91. 關於實驗結果的部分,由圖 4-4 可以很清楚的看到綠色框所框出的範圍就是 人臉偵測演算法所執行出來的結果,透過人臉偵測的執行,可以不用管拍攝地點 的所在,換言之,就是不受背景變化的影響,因而大幅提高 CNN 電路的辨識率, 運算完回傳的結果由圖示黃色的標籤來呈現,並顯示出對應的名稱。. 56.

(63) 圖 4-5 實驗結果展示圖. 根據表 4-8 所示,我們把人臉辨識系統的運作給拆開來看,分別觀察系統每 個運作所需要花的時間。HDMI 顯示部分都是由 FPGA 所執行運算,所以所花 的時間差不多。至於運算時間的比較,很明顯地,經由硬體加速的 CNN 辨識運 算,每一張影像其運算時間都比起軟體 CPU 執行的時間快上 100 多倍。. 表 4-9 電路與軟體運算時間比較 軟體[2]. 本論文電路 5. 相機拍攝. 0.02383. 0.02308. HDMI Out. 0.00321. 0.00256. Face Detection. 0.12484. 0.06485. CNN 辨識運算. 4.2664. 0.03514. 整體時間(1 張影像). 4.41828s. 0.12563s. 57.

(64) 第五章 結論 本論文電路 CNN 整合 IO 介面周邊資源並結合人臉偵測演算法,完整的實現 人臉即時辨識系統。本論文電路透過改善架構的方式,使得 CNN 電路可以在每 一級間相互重疊,大幅提高平行計算能力,進而增加電路整體運算速度。 本論文電路可以根據使用者需求,藉由調整 Kernel core 個數的方法,讓 CNN 電路在設計上有很大的彈性,Kernel core 個數多,Latency 愈短且電路資源消耗 大,反之,Kernel core 個數少,Latency 愈長且電路資源消耗小,會整體影響電路 效能以及面積。 本論文電路選擇使用 Xilinx Pynq-Z2 這塊 FPGA 來實現人臉即時辨識系統, 由於 Pynq-Z2 有提供 Python 開發套件,讓我們可以比較容易讓 CNN 電路整合 IO 周邊資源,並結合人臉偵測的演算法,以提高人臉的辨識率,實現完整的人臉即 時辨識系統。本論文電路辨識運算相較於軟體辨識所花的時間快了 100 多倍,成 功使用 FPGA 達到硬體加速的效果。. 58.

(65) 參考文獻 [1]Sun, Y.; Ding, L.; Wang, X.; and Tang, X. 2015. Face recognition with very deep neural networks. CoRR. [2] 鄭博文, “基於嵌入式系統的深度學習應用之研究—以人臉辨識為例” 國立台 灣師範大學, 2019 [3] D. Shin, et al.: “DNPU: An energy-efficient deep-learning processor with heterogeneous. multi-core. architecture,”. IEEE. Micro 38 (2018). 85. (DOI:. 10.1109/MM.2018.053631145). [4] S. Yin et al., "A high energy efficient reconfigurable hybrid neural network processor for deep learning applications", IEEE J. Solid-State Circuits, vol. 53, no. 4, pp. 968-982, Apr. 2018. [5]“Yale Face Database,”[Online].Available: http://vision.ucsd.edu/content/yale-facedatabase/. [Accessd Oct. 15, 2018] [6] 王雅慶, “以 FPGA 實現摺積類神經網路及應用於人臉辨識之研究” 國立台灣 師範大學, 2016 [7] P. Viola and M. Jones, “Robust Real-Time Face Detection,” Int’l J. Computer Vision, vol. 57, no. 2, pp. 137-154, May 2004. [8] R. Lienhart and J. Maydt, "An extended set of Haar-like features for rapid object detection," Proceedings. International Conference on Image Processing, Rochester, NY, USA, 2002, pp. I-I. 59.

(66) [9] N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. In CVPR, 2005. [10] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. 2015. Deep residual learning for image recognition. arXiv preprint arXiv:1512.03385. [11] W.Hwang, Y. Jhang, T. Tai, "An efficient FPGA-Based architecture for convolutional neural networks", 40th International Conference on Telecommunications and Signal Processing, 2017. [12] 張茗雅, “低面積 BNN 積體電路設計及應用於人臉辨識之研究” 國立台灣師 範大學, 2019. 60.

(67)

參考文獻

相關文件

• 可編程實體實物(Programmable physical objects),是指 一些可以讓人們設計及運行程序的物件,通常是一些電子 設備..

™ 其功能是列出系統的 ARP Table,以及設定及 刪除 ARP

然後利用 parametric model 來 evaluate 任何的 input image 是否為人臉的 image。我們用 PCA 來做這件事情,我們可以想像所有的 image 都是 high dimensional vector,然後 PCA 會把它

‡ RFID 運作原理是透過一片小型硬體的無線射頻辨識技 術晶片( RFID chips),利用內含的天線來傳送與接

電腦內部是使⽤用位元 (Bit) 這個基本單位來表⽰示資料 並儲存於記憶單元 (記憶體) 或輔助記憶單元 (硬碟) 中。.. 每個位元只可以表⽰示

 提高業主、物業管理人及 用戶對妥善保養內部水管 系統的重要性,以及在內 部水管系統中使用合規格

2012 資資喳喳資訊週

智慧型手機的 Android