介紹
深度神經(jīng)網(wǎng)絡(luò) (DNN) 是一種人工神經(jīng)網(wǎng)絡(luò)(ANN),在輸入層和輸出層之間具有多層。有不同類型的神經(jīng)網(wǎng)絡(luò),但它們基本由相同的組件組成:神經(jīng)元、突觸、權(quán)重、偏差和函數(shù)。這些組件的功能類似于人類大腦,可以像任何其他 ML 算法一樣進(jìn)行訓(xùn)練。
例如,經(jīng)過訓(xùn)練以識別狗品種的 DNN 將遍歷給定的圖像并計算圖像中的狗是某個品種的概率。用戶可以查看結(jié)果并選擇網(wǎng)絡(luò)應(yīng)該顯示哪些概率(超過某個閾值等)并返回建議的標(biāo)簽。每個數(shù)學(xué)操作都被認(rèn)為是一個層,復(fù)雜的 DNN 有很多層,因此被稱為“深度”網(wǎng)絡(luò)。
關(guān)于DNN、ANN、CNN區(qū)別,請看下圖:
https://blog.csdn.net/lff1208/article/details/77717149
IBM_AccDNN
https://github.com/IBM/AccDNN
AccDNN(深度神經(jīng)網(wǎng)絡(luò)加速器核心編譯器)又名;DNNBuilder
項目介紹
在這個項目中,我們提出了一種新穎的解決方案,可以自動將經(jīng)過 Caffe 訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換為 FPGA RTL 級別的實現(xiàn),無需任何編程工作,并為用戶的識別任務(wù)提供統(tǒng)一的 API。
因此,沒有任何 FPGA 編程經(jīng)驗的開發(fā)人員可以將他們的 FPGA 加速深度學(xué)習(xí)服務(wù)部署在數(shù)據(jù)中心或邊緣設(shè)備中,僅提供他們經(jīng)過訓(xùn)練的 Caffe 模型。該作品發(fā)表在 ICCAD'18 上,并獲得了前端最佳論文獎。了解更多設(shè)計細(xì)節(jié)。請參考我們的論文(https://docs.wixstatic.com/ugd/c50250_77e06b7f02b44eacb76c05e8fbe01e08.pdf)。
轉(zhuǎn)換過程
轉(zhuǎn)換包括三個階段:
首先對 Caffe 網(wǎng)絡(luò)文件進(jìn)行解析,得到網(wǎng)絡(luò)結(jié)構(gòu)。我們估計每一層的工作量以確定在 FPFA 資源約束下的并行度。
該網(wǎng)絡(luò)中定義的每一層通過在庫中實例化相應(yīng)的神經(jīng)層來生成一個定制的 Verilog 模塊。頂層模塊也是根據(jù)net文件中定義的層順序?qū)⑦@些自定義實例連接在一起生成的,并且在這個階段也生成了權(quán)重所需的片上內(nèi)存。
綜合生成的源文件、布線和布局,生成可執(zhí)行的 FPGA 位文件。
AccDNN 缺點(diǎn)
僅支持 Caffe 框架訓(xùn)練的模型。
僅支持卷積層、最大池化層、全連接層和批量歸一化層。
Caffe .prototxt 中定義的網(wǎng)絡(luò)中卷積層和全連接層的總數(shù)應(yīng)少于 15 層
DNN-Hardware-Accelerator
https://github.com/ryaanluke/DNN-Hardware-Accelerator
https://github.com/gwatcha/dnn_accelerator
介紹
在本實驗中,將以嵌入式 Nios II 系統(tǒng)為核心構(gòu)建深度神經(jīng)網(wǎng)絡(luò)加速器。在本項目中還將學(xué)習(xí)如何與片外 SDRAM 連接,以及如何使用 PLL 生成具有特定屬性的時鐘。
由于整個系統(tǒng)比我們之前構(gòu)建的系統(tǒng)更復(fù)雜,因此在將設(shè)計的所有部分連接在一起之前,編寫大量的測試單元并仔細(xì)調(diào)試將變得尤為重要。
深度神經(jīng)網(wǎng)絡(luò)
我們將使用一種稱為多層感知器 (MLP) 的神經(jīng)網(wǎng)絡(luò)對 MNIST 手寫數(shù)字?jǐn)?shù)據(jù)集進(jìn)行分類。也就是說,我們的 MLP 將以 28×28 像素的灰度圖像作為輸入,并確定該圖像對應(yīng)的數(shù)字 (0..9)。
MLP 由幾個線性層組成,它們首先將前一層的輸出乘以權(quán)重矩陣,并為每個輸出添加一個恒定的“偏差”值,然后應(yīng)用非線性激活函數(shù)來獲得當(dāng)前層的輸出(稱為激活)。我們的 MLP 將有一個 784 像素的輸入(28×28 像素的圖像)、兩個 1000 個神經(jīng)元的隱藏層和一個 10 個神經(jīng)元的輸出層;具有最高值的輸出神經(jīng)元將告訴我們網(wǎng)絡(luò)認(rèn)為它看到了哪個數(shù)字。對于激活函數(shù),我們將使用整流線性單元 (ReLU),它將所有負(fù)數(shù)映射到 0,將所有正數(shù)映射到自身。
在推理過程中,每一層計算a' = ReLU( W · a + b ),其中W是權(quán)重矩陣,a是前一層的激活向量,b是偏置向量,a'是當(dāng)前層的激活向量。
不要被神經(jīng)網(wǎng)絡(luò)等花哨的術(shù)語嚇倒——你實際上是在構(gòu)建一個加速器來進(jìn)行矩陣向量乘法。這里的大部分挑戰(zhàn)來自與片外 SDRAM 存儲器的交互以及正確處理諸如waitrequest和readdatavalid 之類的信號。
不需要知道這些網(wǎng)絡(luò)是如何訓(xùn)練的,因為我們已經(jīng)為您訓(xùn)練了網(wǎng)絡(luò)并預(yù)先格式化了圖像(請參閱data文件夾的內(nèi)容和測試輸入列表)。但是,如果好奇,可以查看scripts/train.py我們是如何訓(xùn)練 MLP 的。
關(guān)于該項目的一些補(bǔ)充說明請查看下面的PDF:
https://github.com/ryaanluke/DNN-Hardware-Accelerator/blob/main/Deep%20Neural%20Networks%20on%20FPGA.pdf
DNN-accelerator-on-zynq
https://github.com/joycenerd/DNN-accelerator-on-zynq
https://github.com/karanam1997/Dnnweaver-Zed-board-/tree/master/DNNWeaver_original
https://github.com/anonsum/DNNWeaver_Simulations
設(shè)計要求:
整個系統(tǒng)框圖如下:
相關(guān)的設(shè)計文檔:
https://github.com/joycenerd/DNN-accelerator-on-zynq/blob/master/2019DD_lab12Finalv4.pdf
Handwritting-number-distinguishing-with-DNN-by-Nexys-4-DDR-in-Verilog-HDL
https://github.com/MaxMorning/Handwritting-number-distinguishing-with-DNN-by-Nexys-4-DDR-in-Verilog-HDL
用 Verilog HDL 實現(xiàn) DNN 區(qū)分手寫數(shù)字,在Nexys 4 DDR 上運(yùn)行。
總結(jié)
今天介紹了3個DNN的項目,主要是DNN復(fù)雜度較TPU或者CNN高了幾個臺階,所以用它來直接對FPGA進(jìn)行移植難度很大,還是只建議對第一個IBM項目進(jìn)行研究,其他在ZYNQ上進(jìn)行數(shù)字識別適合實現(xiàn),其他都不怎么推薦。
關(guān)于DNN或者CNN也介紹了幾十個項目了,這些只適合學(xué)習(xí)研究,并不適合拿來商用,所以后臺噴我的小伙伴要求也不要太高,這些開源的項目能直接商用的少之又少,大部分項目只適合學(xué)習(xí)。還有一些項目是學(xué)生做的,所以你們也不必噴:說是拿一些學(xué)生做的項目能干什么,我這里只想說,這些項目至少能給您一些參考,什么事情總比從零開始好,或者讓你們了解一些同齡人在學(xué)校里在干什么,最后,這些項目您又看不上您開源幾個出來~
審核編輯 :李倩
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4772瀏覽量
100809 -
dnn
+關(guān)注
關(guān)注
0文章
60瀏覽量
9058
原文標(biāo)題:?優(yōu)秀的 Verilog/FPGA開源項目- 深度神經(jīng)網(wǎng)絡(luò) (DNN)
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論