深度學習網路模型普遍上皆是以軟體開源函式庫Keras 所提供來設計。Keras 是由純Python 所編寫出來的 API,後端為 Tensorflow,有支援 GPU 之使用,透過 平行計算提高訓練速度,因此讓使用者可以方便又快速的設計深度學習網路模型。
本論文以 Keras 當作主要軟體開發平台,作業系統為 Window10,GPU 為 Nvidia Force GTX 1070,以耶魯大學[5]以及鄭博文同學[2]所提供的人臉資料當作當作訓 練以及測試集。從已經訓練好的模型中選出最高辨識率的網路模型,從中取出相 關參數,並實現於硬體電路設計模型。
本論文以耶魯大學[5]以及鄭博文[2]同學所提供的資料集作為訓練以集測試,
由第一章圖1-5 以及圖 4-1 所示。從圖中可以知道類別個別分為 28 以及 4 類,訓
練資料個數分別為14000 以及 6966,測試集為 2128、2013,耶魯大學所提供的測
圖 4-1 鄭博文同學所提供的人臉資料集[2](已作前處理)
料的類別都是4 種,如果有結合人臉偵測的演算法其辨識率都是 99%,沒有結合 14.0 以及 Xilinx Vivado 2018.3 作為撰寫 Verilog 硬體描述語言之開發平台。本論 文使用了ModelSim 來模擬出已經設計完畢的電路 RTL-level 訊號波型圖,透過波 型圖觀測出電路行為功能的正確性,數據是否照著設計的電路去跑流程,結果與 軟體端是否一致,確認一致,我們把電路燒至FPGA 來觀察數據結果是不是正確 的。本論文使用的FPGA 型號為 Altera StratixIV EP4SGX230KH40C2,如圖 4-2 所
示,其規格由表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
本論文還有使用Xilinx FPGA,型號為 Zynq XC7Z020-1CLG400C,如圖 4-3 所 示,其規格由表4-3 所呈現。至於為什麼要使用 Zynq 這塊 FPGA 呢?因為此塊 FPGA
有支援Python 相關的開發套件,可以很容易的與 IO 周邊相關資源做整合,以實現人
臉即時辨識的應用。
圖 4-3 Xilinx Zynq XC7Z020-1CLG400C 開發板
表 4-5 Xilinx Zynq XC7Z020-1CLG400C 規格表
Logic Slices 22800
Total Memory Kbits 630
Total DSP Blocks 220
map 的個數,s 與 t 分別為 F5 每次運算的輸入與輸出個數。
我們從表4-4 可以觀察到 C1 與 C3 由於需要做摺積運算,所以需要較多的浮
點數乘法器與加法器,至於 F5 乘法器與加法器的個數取決於每一次運算輸入以
及輸出個數的多寡。
再來討論到Registers 的部分,C1 的部分前一章有提到 Snake buffer 就是 Shift register,其大小由 Li以及K 來決定,所以電路資源複雜度評估亦會隨著 Buffer 大 評估,Registers 個數的多寡最主要由 Input feature map 大小來決定,Input feature map 越大,Register 各數越多,電路資源消耗越大。
圖 4-4 CNN 各電路資源消耗複雜度表
本論文電路設計效能與資源消耗分析與Kernel core 個數有著很大的關連 性,Kernel core 個數的多寡會去影響整體電路的運作與效能。由表 4-7 是我們透 過Kernel core 的個數與其他電路資源以及 Latency 關係而整理的表格,我們可以 看到隨著Kernel core 個數的遞減,不管是 LUTs 還是 DSP Blocks 等等都會隨之 遞減,Kernel core 各數減少,數學運算子包含加法器以及乘法器使用量就會減 少,進而使電路整體資源消耗大幅下降。反之,隨著Kernel core 個數的遞增,
電路的Latency 就會隨之減少,進而提升電路的運算速度,這樣的調控使得本論 文的電路在設計上更為彈性。
表 4-6 不同 Kernel core 個數各項數據比較 較四大部分,分別為Look-up tables(LUTs)、Embedded memory bits、DSP Blocks 以及Flip-Flops(FFs)。其中 LUTs 是用來實現組合邏輯電路,常用在數學運算子以 及多工器等,Embedded memory bits 則是用來實現 FPGA 內建的記憶體,DSP
路間的平衡而去額外多新增電路,像是Pipeline register 以及多餘的全連接層電路。
Pipeline register 會使用到不少的 FFs,而全連接層電路會佔據電路的內部記憶體 (Memory bits)龐大的比例,因為全連接層會有大量的權重。本論文電路因為硬體 資源消耗較低,所以使用成本更為低的FPGA 來實現 CNN 電路。
Altera Stratix IV EP4SGX230
68631 264 287.55
電路[11]
Altera Stratix IV 的,從Latency 我們可以進而推導出 Frame rate(每秒可以執行多少張影像)。從表 4-6 可以知道每個電路的 Frame rate 分別為 15847.86、12674.27 以及 1200.91,換
句話說,本論文電路每秒可以執行最多張影像。
表 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 電路的辨識率,
運算完回傳的結果由圖示黃色的標籤來呈現,並顯示出對應的名稱。
圖 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