近來卷積神經網絡(CNN)的研究十分熱門。CNN發展的一個瓶頸就是它需要非常龐大的運算量,在實時性上有一定問題。而FPGA具有靈活、可配置和適合高并行度計算的優點,十分適合部署CNN。
快速開始
環境需求PYNQ v2.4,Python 3.6.5。
需要安裝caffe和Lasagne這兩個計算平臺。我們將使用caffe中預訓練的參數并利用Lasagne來搭建網絡
具體安裝過程參見github項目文件中的 PYNQ案例-分類器.docx這個文檔,其包含了本項目的詳細操作步驟。
Overlay介紹
PYNQ-Classifcation是一個軟件上基于caffe和Lasagne,硬件加速的CNN分類器項目,它使用python語言在PYNQ框架下進行軟件編程和硬件驅動。
上圖為工程項目示意圖。通過軟硬件劃分,在PS端中負責Linux和通信,而PL端負責運算加速。在PYNQ中加載bit時,PL端的控制部分將以IP核形式呈現。通過Python,對IP核的參數配置來實現控制。
此項目中采用的CNN結構示意圖(以CIFAR_10為例子),本項目中的卷積層由兩個子層構成,一個是im2col子層,它的作用是將輸入矩陣中的卷積窗口展開乘一維向量,另一個是點乘子層,它的作用是將im2col子層輸出的向量和展開成一維的卷積核相乘加。卷積層有一個參數是output_rectify,這對應的是當前卷積層是否應用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類似,只不過硬件上部署的網絡不一樣
開始
將庫都包含進工程,并且讀取caffe中預先訓練好的CIFAR_10模型。
然后
建立一個Lasagne的網絡結構,這個網絡結構和硬件中的結構類似,硬件中去掉了第一個ReLU層。將訓練好的模型參數導入到這個網絡中。
接下來
導入CIFAR_10數據集
這里我們構建一張新的網絡,把原來的中間層換成我們自定義的FPGA_CIFAR10層,這一層把原來的中間層全部包含了進去,并在FPGA上實現。然后輸入數據集,得到結果,結果保存在FPGA_predicted中。最后顯示了準確度,達到72.8%。這里也會顯示一些耗時。
這里我們可以看到這個網絡的部分識別結果。
這里再用CPU運行一遍這個網絡,可以看到它用時46.5秒,比使用FPGA完成卷積慢了很多。
-
FPGA
+關注
關注
1630文章
21798瀏覽量
606022 -
cpu
+關注
關注
68文章
10904瀏覽量
213026 -
卷積神經網絡
+關注
關注
4文章
367瀏覽量
11916
發布評論請先 登錄
相關推薦
TF之CNN:CNN實現mnist數據集預測
如何移植一個CNN神經網絡到FPGA中?
如何將DS_CNN_S.pb轉換為ds_cnn_s.tflite?
基于FPGA的通用CNN加速設計
![基于<b class='flag-5'>FPGA</b>的通用<b class='flag-5'>CNN</b>加速設計](https://file1.elecfans.com//web2/M00/A6/D8/wKgZomUMQNKARPZgAAANExyK2_M375.jpg)
KORTIQ公司推出了一款Xilinx FPGA的CNN加速器IP——AIScale
![KORTIQ公司推出了一款Xilinx <b class='flag-5'>FPGA</b>的<b class='flag-5'>CNN</b>加速<b class='flag-5'>器</b>IP——AIScale](https://file1.elecfans.com//web2/M00/A7/24/wKgZomUMQqCAWNqaAAASpYZlEkc793.jpg)
商湯聯合提出基于FPGA的Winograd算法:改善FPGA上的CNN性能 降低算法復雜度
![商湯聯合提出基于<b class='flag-5'>FPGA</b>的Winograd算法:改善<b class='flag-5'>FPGA</b><b class='flag-5'>上</b>的<b class='flag-5'>CNN</b>性能 降低算法復雜度](https://file.elecfans.com/web1/M00/45/DD/o4YBAFp6gI-AcxBhAAATMTgX4AU554.png)
自己動手寫CNN Inference框架之 (一) 開篇
![自己動手寫<b class='flag-5'>CNN</b> Inference框架之 (一) 開篇](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于FPGA的深度學習CNN加速器設計方案
![基于<b class='flag-5'>FPGA</b>的深度學習<b class='flag-5'>CNN</b>加速<b class='flag-5'>器</b>設計方案](https://file1.elecfans.com/web2/M00/89/AF/wKgZomSJdDWAIyOiAACDkd1pLoI630.jpg)
為什么傳統CNN在紋理分類數據集上的效果不好?
![為什么傳統<b class='flag-5'>CNN</b>在紋理<b class='flag-5'>分類</b>數據集<b class='flag-5'>上</b>的效果不好?](https://file.elecfans.com/web2/M00/4E/DC/poYBAGLCjeiALm_WAAAYmfR7Qec474.png)
評論