• 沒有找到結果。

基礎理論與技術背景

這一章節會先簡單介紹摺積層以及採樣層的運作原理。再解釋我們如何來使 用 Data reuse 的架構應用在本論文電路裡,電路又會再根據軟體模型每一層性質

以及輸出入各數的不同而衍生出不同架構的使用。

2-1 摺積運算

這一小節本論文會透過一個簡單的例子來介紹摺積運算是怎麼來運作,摺積 運算最主要的目的就是擷取特徵,怎麼來擷取呢?就是藉由摺積核(Kernel)來篩選 出輸入資料的部分區域的特徵,輸入資料的每個 pixel 會與對應的摺積核做矩陣

相乘最後再加總起來得出輸出結果,舉個例子如圖 2-1:首先給定原始輸入圖片

(Input feature map)大小為 5×5,Kernel size 為 3×3,Kernel 會鎖定輸入圖片的部分 區域(紅框的部分),一個一個 pixel 去做相乘,再把剛剛所相乘的結果全部加總起 來得出部分的結果值,之後紅框滑動一個 Pixel 的距離做重複的動作以此類推,

最後得出所有特徵圖(Output feature map)。

圖 2-1 摺積運算過程圖

2-2 Max Pooling 運算

這一小節會藉由一個簡單的例子來介紹 Max pooling 運算的原理,給定

一個輸入圖片大小為 4×4,這邊分為四大區塊,我們用顏色來區分開來,每一個

區塊找出最大值,把最大值當作是部分的輸出結果,藍色的區塊最大值為0.8,而 黃色的部分為0.6 等等以此類推,最後導出最後的輸出特徵圖。

圖 2-2 Max Pooling 運算過程圖

2-3 Face Detection

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 運作圖

為了解決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 去做運算,由圖 6 所示,直到 8 被最後一次使用為止。由 2-7 我們可以知道 8 已經被使用了 6 次,但 Memory access 只有 1 次,也就是只要 一次Memory access,8 這個值就可以被重複使用了 6 次,完整的詮釋 Data reuse 的精隨。

圖 2-5 Snake Buffer 運作流程圖 1

圖 2-6 Snake Buffer 運作流程圖 2

圖 2-7 Snake Buffer 運作流程圖 3

再者,我們來介紹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 算完為止。

圖 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 個數

圖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

根據摺積層的性質,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 中,如圖 2-14 所示。

圖 2-14 Output buffer 運作圖 1

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

圖 2-15 Output buffer 運作圖 2

當綠色的權重在這輪算完時,這時 Shift register 會做移動的動作,輪到橘色 的部分來跟橘色的權重來做運算,算出的結果再丟進Output buffer 中,如圖 2-16 所呈現。

圖 2-16 Output buffer 運作圖 3

上述的運作以此類推,直到Input feature map 算完為止,這時 Output buffer 就 會是滿的狀態,會同時把綠、橘、黃兩組部分輸出結果給加總起來,並行(Parallel output)的輸出結果(Output feature map),如圖 2-17 所示。

圖 2-17 Output buffer 運作圖 4

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

圖 2-18 Max pooling 電路架構圖

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

圖 2-19 Max pooling 電路運作圖

相關文件