0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog/FPGA開源項目卷積神經(jīng)網(wǎng)絡(luò)

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-05-16 10:14 ? 次閱讀

介紹

深度學(xué)習(xí)中,卷積神經(jīng)網(wǎng)絡(luò)(CNN或ConvNet)是一類人工神經(jīng)網(wǎng)絡(luò)(ANN),最常用于分析視覺圖像。

8c328034-d4b0-11ec-bce3-dac502259ad0.png

CNN 也稱為移位不變或空間不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)(Shift Invariant or Space Invariant Artificial Neural Networks ,SIANN ),它基于卷積核或濾波器的共享權(quán)重架構(gòu),沿輸入特征滑動并提供稱為特征映射的平移等變響應(yīng)。它們在圖像和視頻識別、推薦系統(tǒng)、圖像分類、圖像分割、醫(yī)學(xué)圖像分析、自然語言處理、腦機(jī)接口和金融時間序列中都有應(yīng)用。

8c655fc2-d4b0-11ec-bce3-dac502259ad0.png

CNN 是多層感知器的正則化版本。多層感知器通常表示全連接網(wǎng)絡(luò),即一層中的每個神經(jīng)元都連接到下一層中的所有神經(jīng)元。這些網(wǎng)絡(luò)的“完全連通性”使它們?nèi)菀走^度擬合數(shù)據(jù)。正則化或防止過擬合的典型方法包括:在訓(xùn)練期間懲罰參數(shù)(例如權(quán)重衰減)或修剪連接性(跳過連接、丟失等) CNN 采用不同的正則化方法:它們利用數(shù)據(jù)中的分層模式并使用在過濾器中壓印的更小更簡單的圖案來組裝復(fù)雜度越來越高的圖案。因此,在連接性和復(fù)雜性的規(guī)模上,CNN 處于較低的極端。

8c9757ca-d4b0-11ec-bce3-dac502259ad0.png

與其他圖像分類算法相比,CNN 使用的預(yù)處理相對較少。這意味著網(wǎng)絡(luò)通過自動學(xué)習(xí)來學(xué)習(xí)優(yōu)化過濾器(或內(nèi)核),而在傳統(tǒng)算法中,這些過濾器是手工設(shè)計的。這種獨(dú)立于先驗知識和特征提取的人為干預(yù)是一個主要優(yōu)勢。

8cb4b8b0-d4b0-11ec-bce3-dac502259ad0.png

cnn_hardware_acclerator_for_fpga

https://github.com/sumanth-kalluri/cnn_hardware_acclerator_for_fpga

https://thedatabus.io/introduction

這是完全參數(shù)化的 Verilog 實現(xiàn)CNN,用于加速 FPGA 上的卷積神經(jīng)網(wǎng)絡(luò)推理

8ce27836-d4b0-11ec-bce3-dac502259ad0.png

軟件工具:

設(shè)計 - Xilinx Vivado 2017

驗證 - Python 3.6 和 Xilinx ISE 14.7 命令行工具

8d219430-d4b0-11ec-bce3-dac502259ad0.png

convolution_network_on_FPGA

https://github.com/hunterlew/convolution_network_on_FPGA

描述

該項目使用 ISE 14.7 和 vertix-7 FPGA 構(gòu)建。它使用某些加速策略執(zhí)行 7 層網(wǎng)絡(luò)前向計算。首先,使用MatConvNet在 MSTAR 數(shù)據(jù)集上訓(xùn)練一個 SAR 目標(biāo)分類網(wǎng)絡(luò),并使用 early-stop。然后,使用 Matlab 將權(quán)重和輸入轉(zhuǎn)換為 FPGA 可以加載的 COE 文件。接下來,設(shè)計原生 verilog 編寫的模型來完成前向計算。系統(tǒng)使用 16 位定點(diǎn)數(shù)據(jù)來保持精度。結(jié)果證明,它每張圖像的花費(fèi)不到 1ms,優(yōu)于其他計算平臺。

8d8dfe90-d4b0-11ec-bce3-dac502259ad0.png

加速

第一個轉(zhuǎn)換需要對 FPGA 的資源和速度之間權(quán)衡,考慮到第一個轉(zhuǎn)換中輸入和權(quán)重的大小,如果層較大,那么該層就應(yīng)該使用移位寄存器結(jié)構(gòu)進(jìn)行加速。另一個轉(zhuǎn)化,層僅需要使用管道結(jié)構(gòu)。請注意,有 18 個文件以 m_conv_1 命名,表示第一個 conv 中有 18 個移位寄存器。

對于帶寬的限制,第二個轉(zhuǎn)換層,使用通道分組并行化方案。使用 v7-415t 和 v7-485t FPGA 進(jìn)行比較,它們根據(jù)不同的資源量使用不同的組號(4 vs 1)??赡軙⒁獾轿募?CNN_top.v 中的方案,其中包含控制通道分組和合并的信號ram_ready”。

CNN-FPGA

https://github.com/QShen3/CNN-FPGA

有以下幾個模塊:

Conv2d

說明:

卷積模塊,可以進(jìn)行二維卷積。支持多個卷積核,不同步長,是否啟用邊緣0填充等

可配置參數(shù):

8dd48c70-d4b0-11ec-bce3-dac502259ad0.png

PADDINGENABLE邊緣是否使用0填充,1代表是,0代表否0

輸入輸出:

8dfb4298-d4b0-11ec-bce3-dac502259ad0.png

Max_pool

說明:

最大池化模塊,可以對輸入進(jìn)行最大池化運(yùn)算。

可配置參數(shù):

8e0e2cfa-d4b0-11ec-bce3-dac502259ad0.png

輸入輸出:

8e453178-d4b0-11ec-bce3-dac502259ad0.png

FPGA-CNN

https://github.com/dem123456789/FPGA-CNN

FPGA 實現(xiàn)的CNN:

8e5bbbb4-d4b0-11ec-bce3-dac502259ad0.png

CNN.v是頂層設(shè)計,初始化A,B,I。模板為16x16層模塊sixteenbysixteen.v

SixteenbySixteen.java生成Verilog代碼

clacc

https://github.com/taoyilee/clacc

原為清華大學(xué)深度學(xué)習(xí)硬件加速器課程項目,由林允龍教授主講。該課程相當(dāng)于斯坦福大學(xué)的CS231n(http://cs231n.stanford.edu/)。

深度學(xué)習(xí)加速器(卷積神經(jīng)網(wǎng)絡(luò))

這是在 Verilog 中實現(xiàn)類似 MIT Eyeriss 的深度學(xué)習(xí)加速器

注:clacc代表卷積層加速器

8e852a3a-d4b0-11ec-bce3-dac502259ad0.png

RTL-Implementation-of-Two-Layer-CNN

https://github.com/Haleski47/RTL-Implementation-of-Two-Layer-CNN

https://github.com/Di5h3z/ECE-564-Convolutional-Neural-Network-Accelerator

具有詳細(xì)設(shè)計的兩層 CNN

8e9eb36a-d4b0-11ec-bce3-dac502259ad0.png

詳細(xì)的設(shè)計文檔:

https://github.com/Haleski47/RTL-Implementation-of-Two-Layer-CNN/blob/master/report/Apar%20Bansal%20ECE564%20Project.pdf

NTHU-ICLAB

https://github.com/LeoTheBestCoder/NTHU-ICLAB

這是清華大學(xué)IC LAB提供的一個非常詳細(xì)的設(shè)計項目,逐步實現(xiàn)一個CNN,并附帶測試項目。

下面是每一步的功能,并且每一步都有詳細(xì)的設(shè)計文檔。

8ebaf5c0-d4b0-11ec-bce3-dac502259ad0.png

8efd4542-d4b0-11ec-bce3-dac502259ad0.png

最終實現(xiàn):使用 CNN 進(jìn)行數(shù)字分類

ES203-COA-CNN

https://github.com/akcgjc007/ES203-COA-CNN

8f1c8cae-d4b0-11ec-bce3-dac502259ad0.png

具體的實現(xiàn)過程:

8f83df26-d4b0-11ec-bce3-dac502259ad0.png

代碼介紹:

https://www.youtube.com/watch?v=3J2X-j0z2M8

結(jié)果:

8fa17b94-d4b0-11ec-bce3-dac502259ad0.png

MNIST_CNN_HDL

https://github.com/makifozkanoglu/MNIST_CNN_HDL

https://github.com/flystandard1/CNN_hardware_ECE1718_UofT

通過硬件加速提升 CNN-mnist 的性能

文件夾“design_files”包括硬件中的所有設(shè)計文件

文件夾“verification_files”是設(shè)計文件的驗證環(huán)境

文件夾“weights”包括 mnist 和輸入圖像的權(quán)重

CNN-Implementation-in-Verilog

https://github.com/boaaaang/CNN-Implementation-in-Verilog

使用 Python & Verilog 實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

實現(xiàn)框圖:

8fc48fee-d4b0-11ec-bce3-dac502259ad0.png

仿真波形

9019d4f4-d4b0-11ec-bce3-dac502259ad0.png

CNN_Core

https://github.com/0x5b25/CNN_Core

使用 Altera Avalon-MM 總線

使用 quartus prime ide 在 Stratix IV 上編譯和測試。

更多介紹請參考instructions.txt

CNN-Accelerator-VLSI

https://github.com/lirui-shanghaitech/CNN-Accelerator-VLSI

90354fa4-d4b0-11ec-bce3-dac502259ad0.png

詳細(xì)要求在./resource/Project_2.0.pdf中有詳細(xì)介紹。

下面列出一些主要要求:

所有輸入特征圖和權(quán)重的位長為 8 位,輸出為 25 位數(shù)據(jù)。

輸入特征圖帶寬為8x8位,權(quán)重帶寬也是8x8位(最大同時讀取8個輸入特征圖和8個權(quán)重)

905083be-d4b0-11ec-bce3-dac502259ad0.png

輸出帶寬為 2x25 位(最多同時將 2 個輸出寫入主存)

909d534c-d4b0-11ec-bce3-dac502259ad0.png

結(jié)果如下:

90bc045e-d4b0-11ec-bce3-dac502259ad0.png

注意:這個項目有一部分所需的文件沒有公開,但是,可以將此設(shè)計合成到 FPGA。

CNN-FPGA

https://github.com/omarelhedaby/CNN-FPGA

在ZYNQ FPGA上實現(xiàn)CNN,使用MNIST數(shù)據(jù)庫對手寫數(shù)字進(jìn)行分類

網(wǎng)絡(luò) Conv2D->Tanh Activation->AvgPool->Conv2D->Tanh Activation->AvgPool->Conv2D->Tanh Activation->全連接層->Relu->全連接層->Softmax

90dcad3a-d4b0-11ec-bce3-dac502259ad0.png

該項目很完整,雖然Readme寫的不是很完整,但是有個詳細(xì)的設(shè)計、仿真及驗證完檔。

https://github.com/omarelhedaby/CNN-FPGA/blob/master/Hardware%20Documentation.pdf

90fc1f76-d4b0-11ec-bce3-dac502259ad0.png

Image-Classification-using-CNN-on-FPGA

https://github.com/padhi499/Image-Classification-using-CNN-on-FPGA

9142cc8c-d4b0-11ec-bce3-dac502259ad0.png

簡介

在 FPGA 上使用 CNN 進(jìn)行圖像分類

9178362e-d4b0-11ec-bce3-dac502259ad0.png

項目是關(guān)于在 FPGA 上設(shè)計一個經(jīng)過訓(xùn)練的神經(jīng) n/w(CIFAR-10 數(shù)據(jù)集),以使用深度學(xué)習(xí)概念(CNN-卷積神經(jīng)網(wǎng)絡(luò))對圖像 I/P 進(jìn)行分類。

9199d996-d4b0-11ec-bce3-dac502259ad0.png

有 6 層(滑動窗口卷積、ReLU 激活、最大池化、扁平化、完全連接和 Softmax 激活)決定了我們的 I/P 圖像的類別。內(nèi)核/過濾器用于從圖像 I/P 進(jìn)行特征檢測。圖像 I/P 可以是灰度/彩色的。

91b9e4d4-d4b0-11ec-bce3-dac502259ad0.png

使用的工具

Vivado v17.4

Matlab vR2018.a

DigitalRecognition

https://github.com/suisuisi/FPGAandCNN

《基于FPGA的數(shù)字識別-實時視頻處理的定點(diǎn)卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)》

posture_recognition_CNN

https://github.com/cxdzyq1110/posture_recognition_CNN

簡介

基于CNN的姿態(tài)識別

幫助機(jī)器通過攝像頭了解我們?nèi)祟愒谧鍪裁词呛苤匾?。一旦實現(xiàn),機(jī)器就可以對人類的各種姿勢做出不同的反應(yīng)。但是這個過程也非常困難,因為通常這個過程實現(xiàn)不僅速度跟不上并且耗電,同時也需要非常大的內(nèi)存空間。

這里我們專注于實時姿勢識別,并嘗試讓機(jī)器“知道”我們做出什么姿勢。姿態(tài)識別系統(tǒng)由DE10-Nano SoC FPGA Kit、攝像頭和HDMI監(jiān)視器組成。SoC FPGA 從攝像頭捕捉視頻流,通過 CNN 模型識別人體姿態(tài),最后通過 HDMI 接口顯示原始視頻和分類結(jié)果(站立、行走、揮手等)。

我們上傳我們的項目,包括 Matlab、Python 和 Quartus。

軟件版本:

Matlab r2017b

Python 3.6.3

Anaconda 5.1.0

TensorFlow-gpu 1.3.0

Quartus 14.0

同時在該倉庫中含有作者的論文,論文中包含詳細(xì)的設(shè)計。

NPU_on_FPGA

https://github.com/cxdzyq1110/NPU_on_FPGA

目的 在FPGA上面實現(xiàn)一個NPU計算單元。能夠執(zhí)行矩陣運(yùn)算(ADD / ADDi / ADDs / MULT / MULTi / DOT等)、圖像處理運(yùn)算(CONV / POOL等)、非線性映射(RELU / TANH / SIGM等)。

優(yōu)點(diǎn) 考慮到靈活性較強(qiáng),易于修改網(wǎng)絡(luò)結(jié)構(gòu),適用于實現(xiàn)小型CNN/RNN網(wǎng)絡(luò)。

缺陷 由于指令串行執(zhí)行、缺少Cache導(dǎo)致外存讀寫頻繁,運(yùn)算性能較低。

該項目也是上面項目的同一作者,詳細(xì)的設(shè)計,完整的工程,值得去操作一下。

neural-engine

https://github.com/hollance/neural-engine

大多數(shù)新的 iPhone 和 iPad 都有神經(jīng)引擎,這是一種特殊的處理器,可以讓機(jī)器學(xué)習(xí)模型變得非???,但對于這種處理器的實際工作原理,公眾知之甚少。

Apple 神經(jīng)引擎(或 ANE)是NPU的一種,代表神經(jīng)處理單元。它就像 GPU,但 NPU 不是加速圖形,而是加速卷積和矩陣乘法等神經(jīng)網(wǎng)絡(luò)操作。

ANE 并不是唯一的 NPU——除了 Apple 之外,許多公司都在開發(fā)自己的 AI 加速器芯片。除了神經(jīng)引擎,最著名的 NPU 是谷歌的 TPU(或 Tensor Processing Unit)。

這個項目并不是一個實現(xiàn)CNN的項目,但是是一個關(guān)于Apple 神經(jīng)引擎(或 ANE)介紹及相關(guān)文檔的集合的項目。

總結(jié)

今天介紹了N個CNN的項目,前面的項目比較“單薄”,只適合學(xué)習(xí)CNN設(shè)計,從NTHU-ICLAB(包含)之后的項目更適合實踐,因為這些項目都有詳細(xì)的設(shè)計文檔及板卡驗證過程。

結(jié)合之前的TPU及今天的相關(guān)項目,大家應(yīng)該對神經(jīng)網(wǎng)絡(luò)應(yīng)該不會再恐懼了,下一篇文章我們將介紹一些DNN項目,將這個系列完善一下。

最后,還是感謝各個大佬開源的項目,讓我們受益匪淺。后面有什么感興趣方面的項目,大家可以在后臺留言或者加微信留言,今天就到這,我是爆肝的碎碎思,期待下期文章與你相見。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 濾波器
    +關(guān)注

    關(guān)注

    159

    文章

    7673

    瀏覽量

    177227
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    350

    瀏覽量

    22102
  • 卷積神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    4

    文章

    359

    瀏覽量

    11820

原文標(biāo)題:優(yōu)秀的 Verilog/FPGA開源項目介紹(二十一)- 卷積神經(jīng)網(wǎng)絡(luò)(CNN)

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【PYNQ-Z2申請】基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速

    項目名稱:基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速試用計劃:申請理由:本人研究生在讀,想要利用PYNQ深入探索卷積神經(jīng)網(wǎng)絡(luò)的硬件加速,在PYNQ上實現(xiàn)
    發(fā)表于 12-19 11:37

    卷積神經(jīng)網(wǎng)絡(luò)入門資料

    卷積神經(jīng)網(wǎng)絡(luò)入門詳解
    發(fā)表于 02-12 13:58

    全連接神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)有什么區(qū)別

    全連接神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別
    發(fā)表于 06-06 14:21

    基于賽靈思FPGA卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)設(shè)計

    作者:Nagesh Gupta 創(chuàng)始人兼 CEOAuviz Systems Nagesh@auvizsystems.com憑借出色的性能和功耗指標(biāo),賽靈思 FPGA 成為設(shè)計人員構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 06-19 07:24

    卷積神經(jīng)網(wǎng)絡(luò)如何使用

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡(luò)在工程上經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    什么是圖卷積神經(jīng)網(wǎng)絡(luò)?

    卷積神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 08-20 12:05

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)是什么

    卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)
    發(fā)表于 05-05 18:12

    請問為什么要用卷積神經(jīng)網(wǎng)絡(luò)

    為什么要用卷積神經(jīng)網(wǎng)絡(luò)?
    發(fā)表于 06-13 13:11

    卷積神經(jīng)網(wǎng)絡(luò)CNN介紹

    【深度學(xué)習(xí)】卷積神經(jīng)網(wǎng)絡(luò)CNN
    發(fā)表于 06-14 18:55

    卷積神經(jīng)網(wǎng)絡(luò)的層級結(jié)構(gòu)和常用框架

      卷積神經(jīng)網(wǎng)絡(luò)的層級結(jié)構(gòu)  卷積神經(jīng)網(wǎng)絡(luò)的常用框架
    發(fā)表于 12-29 06:16

    卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過程

    。本文就以一維卷積神經(jīng)網(wǎng)絡(luò)為例談?wù)勗趺磥磉M(jìn)一步優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)使用的memory。文章(卷積神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 12-23 06:16

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用轉(zhuǎn)載****地址:http://fcst.ceaj.org/CN/abstract/abstract2521.shtml深度學(xué)習(xí)是機(jī)器學(xué)習(xí)和人工智能研究的最新趨勢,作為一個
    發(fā)表于 08-02 10:39

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn) cnn卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn) cnn卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)?
    的頭像 發(fā)表于 08-21 16:41 ?2714次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)層級結(jié)構(gòu) 卷積神經(jīng)網(wǎng)絡(luò)卷積層講解

    卷積神經(jīng)網(wǎng)絡(luò)層級結(jié)構(gòu) 卷積神經(jīng)網(wǎng)絡(luò)卷積層講解 卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 08-21 16:49 ?7128次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法 卷積神經(jīng)網(wǎng)絡(luò)涉及的關(guān)鍵技術(shù)
    的頭像 發(fā)表于 08-21 16:49 ?1767次閱讀