近來卷積神經(jīng)網(wǎng)絡(luò)(CNN)的研究十分熱門。CNN發(fā)展的一個瓶頸就是它需要非常龐大的運算量,在實時性上有一定問題。而FPGA具有靈活、可配置和適合高并行度計算的優(yōu)點,十分適合部署CNN。
快速開始
環(huán)境需求PYNQ v2.4,Python 3.6.5。
需要安裝caffe和Lasagne這兩個計算平臺。我們將使用caffe中預(yù)訓(xùn)練的參數(shù)并利用Lasagne來搭建網(wǎng)絡(luò)
具體安裝過程參見github項目文件中的 PYNQ案例-分類器.docx這個文檔,其包含了本項目的詳細(xì)操作步驟。
Overlay介紹
PYNQ-Classifcation是一個軟件上基于caffe和Lasagne,硬件加速的CNN分類器項目,它使用python語言在PYNQ框架下進(jìn)行軟件編程和硬件驅(qū)動。
上圖為工程項目示意圖。通過軟硬件劃分,在PS端中負(fù)責(zé)Linux和通信,而PL端負(fù)責(zé)運算加速。在PYNQ中加載bit時,PL端的控制部分將以IP核形式呈現(xiàn)。通過Python,對IP核的參數(shù)配置來實現(xiàn)控制。
此項目中采用的CNN結(jié)構(gòu)示意圖(以CIFAR_10為例子),本項目中的卷積層由兩個子層構(gòu)成,一個是im2col子層,它的作用是將輸入矩陣中的卷積窗口展開乘一維向量,另一個是點乘子層,它的作用是將im2col子層輸出的向量和展開成一維的卷積核相乘加。卷積層有一個參數(shù)是output_rectify,這對應(yīng)的是當(dāng)前卷積層是否應(yīng)用Relu非線性層,0為否,1為是。池化層(pool)有兩種選項,一是最大值池化,二是平均值池化。
項目演示(CIFAR-10為例)
運行
/PYNQ-Classification/python_notebooks/Theano/CIFAR_10/Using a Caffe Pretrained Network - CIFAR10.ipynb
-- 如果想嘗試Lenet5則運行
/PYNQ-Classification/python_notebooks/Theano/Lenet/Using a Caffe Pretrained Network - LeNet5.ipynb
它們的notebook類似,只不過硬件上部署的網(wǎng)絡(luò)不一樣
開始
將庫都包含進(jìn)工程,并且讀取caffe中預(yù)先訓(xùn)練好的CIFAR_10模型。
然后
建立一個Lasagne的網(wǎng)絡(luò)結(jié)構(gòu),這個網(wǎng)絡(luò)結(jié)構(gòu)和硬件中的結(jié)構(gòu)類似,硬件中去掉了第一個ReLU層。將訓(xùn)練好的模型參數(shù)導(dǎo)入到這個網(wǎng)絡(luò)中。
接下來
導(dǎo)入CIFAR_10數(shù)據(jù)集
這里我們構(gòu)建一張新的網(wǎng)絡(luò),把原來的中間層換成我們自定義的FPGA_CIFAR10層,這一層把原來的中間層全部包含了進(jìn)去,并在FPGA上實現(xiàn)。然后輸入數(shù)據(jù)集,得到結(jié)果,結(jié)果保存在FPGA_predicted中。最后顯示了準(zhǔn)確度,達(dá)到72.8%。這里也會顯示一些耗時。
這里我們可以看到這個網(wǎng)絡(luò)的部分識別結(jié)果。
這里再用CPU運行一遍這個網(wǎng)絡(luò),可以看到它用時46.5秒,比使用FPGA完成卷積慢了很多。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21748瀏覽量
603976 -
cpu
+關(guān)注
關(guān)注
68文章
10873瀏覽量
212051 -
卷積神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
4文章
367瀏覽量
11877
發(fā)布評論請先 登錄
相關(guān)推薦
評論