• 沒有找到結果。

近年來,隨著硬體效能的升級而帶動整個人工智慧研究的熱潮,各種技術也 相繼問世,其中以深度 學習更與之受益,最為常見的模型為摺積神經網路 (Convolutional Neural Network;CNN),在各大比賽以及研究成果顯示出對於在圖 像辨識方面皆有很好的表現,伴隨著相關技術隨之衍生而出的應用也多不勝數,

消耗高且可攜性也低,這些缺點都會造成一些問題,剛好FPGA 彌補以上這些缺 像辨識相關的應用有著很好的表現。CNN 是由多層摺積層(Convolution Layer)、

採樣層(Sampling Layer)以及全連接層(Fully Layer)組成的,其中摺積層主要有兩個 功能。第一,權重共享機制,每張輸入的影像都相對數張輸出的影像,相較於其

他網路有著更為簡單的架構且辨識率也更好,常用的模型架構有LeNet-5、AlexNet 以及VGGNet。

我們以論文[1]為例,這篇論文是用 CNN VGGNet 來實現人臉辨識的應用,

然而VGGNet 是較為複雜的 CNN,以圖 1-1 為示,總共有 16 層之多。然而也因 為層數越多所以模型也就越複雜,使得運算複雜度會提高,進而增加硬體設計所 需的成本。反之,好處是可以辨識包含複雜背景的人臉圖像,也能辨識更多的人 臉類別,從圖1-2(由鄭博文同學所提供[2])我們可以知道這幾張圖每個人臉所在的

圖像背景都不盡相同,而且又是全彩圖,這更能說明複雜的 CNN 的確在更為複

雜的圖像上有著很好的表現。

圖 1-1 VGGNet-16 模型架構圖

圖 1-2 人臉辨識示意圖

再來,我們從硬體的層面去切入,這篇論文[3]主要是用硬體來實現 VGGNet,

由於較為複雜的CNN 有兩種特性。第一,在 CNN 淺層的部分,Input Feature Map Size 會比較大且 Weight 比較少,第二,在 CNN 深層的部分 Input Feature Map Size 會比較小且 Weight 比較多,所以基於以上兩種特性,這篇論文使用 Workload Division 的方法來實現 CNN 電路。Workload Division 顧名思義就是工作量的分 配,把一大塊的資料劃分為數個小塊的資料,再從每個小塊的資料取一小部分的 Partial Output 部分輸出結果,進而降低記憶體存取次數以提升電路的效能。第二,

CNN Model 每一層都會共享相同的運算核心,也就意謂著每個摺積層以及全連接 層都要透過一樣的運算核心才能完成運算,這樣的好處是可以大幅下降硬體所需 的消耗資源,進而降低設計硬體的成本。然而壞處是因為每層共享相同的運算核 心,所以下一層必須等到上一層運算完,方能開始執行運算,所以這種架構並沒 有運用到每一層間的平行計算,所以導致Latency 拉長、Throughput 降低等問題。

第二個壞處是 Controller 設計不易,因為 FPGA 的 Cache 通常不會很大,又根據

CNN 前段以及後段性質上的差別,會使得 Cache 要在哪個階段做哪些事,而造成 設計Controller 會比較複雜。

圖 1-3 PE Array 架構圖

除了上述所提到的使用架構複雜的 CNN 來實現人臉辨識系統,也可以使用

架構較為簡單的CNN 來實現人臉辨識系統,以圖 1-4 為示。從軟體層面來說,直 觀上我們可以得知跟VGGNet 相比模型架構簡單許多,這樣的好處是運算複雜度 會大幅的降低,然而壞處有兩點。第一,較為複雜的背景人臉圖像會不容易辨識,

從圖 1-5 我們可以得知每張人臉所在的圖片背景幾乎都是一樣的且圖像還是灰階 圖。第二點,辨識的人臉類別有限,綜合以上兩點,明顯的可以知道一件事,就 是較為簡單的CNN 圖像辨識能力是不足的。

圖 1-4 LeNet-5 模型架構圖

圖 1-5 耶魯大學所提供的人臉資料集[5]

那如何來改善較為簡單的CNN 的辨識率呢?本論文會用額外的前處理再結 合Face Detection 演算法來加強人臉的辨識率,如圖 1-6 所示,我們可以不管周 遭背景如何,只框出人臉所在位置,這樣就不會因環境改變而去影響系統的辨 識率。

圖 1-6 Face Detection 示意圖

我們從硬體的層面來探討比較簡單的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 運算時間平均,必須更動到電路架構,當然代價就是必須犧 牲額外的硬體資源,而當層數拉深情況會越來越嚴重。

圖 1-8 LeNet-5 電路流程圖 1

圖 1-9 LeNet-5 電路流程圖 2

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

圖 1-10 LeNet-5 電路 Latency 示意圖

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

1-2 研究目的

前一節提及到多種架構來實現CNN Model,並分析出孰優孰劣,因而衍生出 本論文最主要的兩大目的,第一,必須透過改善現有電路架構,來提高運算速度

以及降低運算的複雜度,同時加速整個 CNN 電路以及降低硬體電路的面積。第

二,因為在現有論文很多電路都只局限於使用單一FPGA 來執行演算法來觀測其 輸出結果,並沒有跟其他IO 周邊來整合,所以必須要讓 FPGA 與 IO 介面整合,

以實現出真正的人臉即時辨識系統。

1-3 研究方法

本論文透過改善現有電路架構的方式來讓整個 CNN 電路做到快速計算以及

低面積的特性,首先,拿掉Pipeline Register 來讓電路每級間可以平行計算,來加 速整體電路的運算,而當中摺積層的部分,各自的運算單元可以藉由參數調整的 方式來降低電路的面積。FPGA 要與相關 IO 資源來做整合,如 HDMI Out 等螢幕 顯示周邊,再來我們還必須結合臉部偵測的演算法,來提高系統的辨識率。

相關文件