近來卷積神經網絡(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文章
21761瀏覽量
604384 -
cpu
+關注
關注
68文章
10882瀏覽量
212238 -
卷積神經網絡
+關注
關注
4文章
367瀏覽量
11883
發布評論請先 登錄
相關推薦
評論