前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >优秀的 Verilog/FPGA开源项目介绍(二十一)- 卷积神经网络(CNN)

优秀的 Verilog/FPGA开源项目介绍(二十一)- 卷积神经网络(CNN)

作者头像
碎碎思
发布于 2022-06-06 00:26:39
发布于 2022-06-06 00:26:39
12.5K0
举报
文章被收录于专栏:OpenFPGAOpenFPGA

介绍

深度学习中,卷积神经网络(CNN或ConvNet)是一类人工神经网络(ANN),最常用于分析视觉图像。

CNN 也称为移位不变或空间不变人工神经网络(Shift Invariant or Space Invariant Artificial Neural Networks ,SIANN ),它基于卷积核或滤波器的共享权重架构,沿输入特征滑动并提供称为特征映射的平移等变响应。它们在图像和视频识别、推荐系统、图像分类、图像分割、医学图像分析自然语言处理脑机接口和金融时间序列中都有应用。

CNN 是多层感知器的正则化版本。多层感知器通常表示全连接网络,即一层中的每个神经元都连接到下一层中的所有神经元。这些网络的“完全连通性”使它们容易过度拟合数据。正则化或防止过拟合的典型方法包括:在训练期间惩罚参数(例如权重衰减)或修剪连接性(跳过连接、丢失等) CNN 采用不同的正则化方法:它们利用数据中的分层模式并使用在过滤器中压印的更小更简单的图案来组装复杂度越来越高的图案。因此,在连接性和复杂性的规模上,CNN 处于较低的极端。

与其他图像分类算法相比,CNN 使用的预处理相对较少。这意味着网络通过自动学习来学习优化过滤器(或内核),而在传统算法中,这些过滤器是手工设计的。这种独立于先验知识和特征提取的人为干预是一个主要优势。

cnn_hardware_acclerator_for_fpga

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

https://thedatabus.io/introduction

这是完全参数化的 Verilog 实现CNN,用于加速 FPGA 上的卷积神经网络推理

软件工具:

设计 - Xilinx Vivado 2017

验证 - Python 3.6 和 Xilinx ISE 14.7 命令行工具

convolution_network_on_FPGA

https://github.com/hunterlew/convolution_network_on_FPGA

描述

该项目使用 ISE 14.7 和 vertix-7 FPGA 构建。它使用某些加速策略执行 7 层网络前向计算。首先,使用MatConvNet在 MSTAR 数据集上训练一个 SAR 目标分类网络,并使用 early-stop。然后,使用 Matlab 将权重和输入转换为 FPGA 可以加载的 COE 文件。接下来,设计原生 verilog 编写的模型来完成前向计算。系统使用 16 位定点数据来保持精度。结果证明,它每张图像的花费不到 1ms,优于其他计算平台。

加速

第一个转换需要对 FPGA 的资源和速度之间权衡,考虑到第一个转换中输入和权重的大小,如果层较大,那么该层就应该使用移位寄存器结构进行加速。另一个转化,层仅需要使用管道结构。请注意,有 18 个文件以 m_conv_1 命名,表示第一个 conv 中有 18 个移位寄存器。

对于带宽的限制,第二个转换层,使用通道分组并行化方案。使用 v7-415t 和 v7-485t FPGA 进行比较,它们根据不同的资源量使用不同的组号(4 vs 1)。可能会注意到文件 CNN_top.v 中的方案,其中包含控制通道分组和合并的信号“ram_ready”。

CNN-FPGA

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

有以下几个模块:

Conv2d

说明:

卷积模块,可以进行二维卷积。支持多个卷积核,不同步长,是否启用边缘0填充等

可配置参数:

PADDINGENABLE 边缘是否使用0填充,1代表是,0代表否 0

输入输出:

Max_pool

说明:

最大池化模块,可以对输入进行最大池化运算。

可配置参数:

输入输出:

FPGA-CNN

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

FPGA 实现的CNN:

CNN.v是顶层设计,初始化A,B,I。模板为16x16层模块sixteenbysixteen.v

SixteenbySixteen.java生成Verilog代码

clacc

https://github.com/taoyilee/clacc

原为清华大学深度学习硬件加速器课程项目,由林允龙教授主讲。该课程相当于斯坦福大学的CS231n(http://cs231n.stanford.edu/)。

深度学习加速器(卷积神经网络)

这是在 Verilog 中实现类似 MIT Eyeriss 的深度学习加速器

注:clacc代表卷积层加速器

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

具有详细设计的两层 CNN

详细的设计文档:

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

这是清华大学IC LAB提供的一个非常详细的设计项目,逐步实现一个CNN,并附带测试项目。

下面是每一步的功能,并且每一步都有详细的设计文档。

最终实现:使用 CNN 进行数字分类

ES203-COA-CNN

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

具体的实现过程:

代码介绍:

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

结果:

MNIST_CNN_HDL

https://github.com/makifozkanoglu/MNIST_CNN_HDL

https://github.com/flystandard1/CNN_hardware_ECE1718_UofT

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

文件夹“design_files”包括硬件中的所有设计文件

文件夹“verification_files”是设计文件的验证环境

文件夹“weights”包括 mnist 和输入图像的权重

CNN-Implementation-in-Verilog

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

使用 Python & Verilog 实现卷积神经网络

实现框图:

仿真波形

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

详细要求在./resource/Project_2.0.pdf中有详细介绍。

下面列出一些主要要求:

  • 所有输入特征图和权重的位长为 8 位,输出为 25 位数据。
  • 输入特征图带宽为8x8位,权重带宽也是8x8位(最大同时读取8个输入特征图和8个权重)
  • 输出带宽为 2x25 位(最多同时将 2 个输出写入主存)

结果如下:

注意:这个项目有一部分所需的文件没有公开,但是,可以将此设计合成到 FPGA。

CNN-FPGA

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

在ZYNQ FPGA上实现CNN,使用MNIST数据库对手写数字进行分类

网络 Conv2D->Tanh Activation->AvgPool->Conv2D->Tanh Activation->AvgPool->Conv2D->Tanh Activation->全连接层->Relu->全连接层->Softmax

该项目很完整,虽然Readme写的不是很完整,但是有个详细的设计、仿真及验证完档。

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

Image-Classification-using-CNN-on-FPGA

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

简介

在 FPGA 上使用 CNN 进行图像分类

项目是关于在 FPGA 上设计一个经过训练的神经 n/w(CIFAR-10 数据集),以使用深度学习概念(CNN-卷积神经网络)对图像 I/P 进行分类。

有 6 层(滑动窗口卷积、ReLU 激活、最大池化、扁平化、完全连接和 Softmax 激活)决定了我们的 I/P 图像的类别。内核/过滤器用于从图像 I/P 进行特征检测。图像 I/P 可以是灰度/彩色的。

使用的工具

  • Vivado v17.4
  • Matlab vR2018.a

DigitalRecognition

https://github.com/suisuisi/FPGAandCNN

基于FPGA的数字识别-实时视频处理的定点卷积神经网络实现

posture_recognition_CNN

https://github.com/cxdzyq1110/posture_recognition_CNN

简介

基于CNN的姿态识别

帮助机器通过摄像头了解我们人类在做什么是很重要的。一旦实现,机器就可以对人类的各种姿势做出不同的反应。但是这个过程也非常困难,因为通常这个过程实现不仅速度跟不上并且耗电,同时也需要非常大的内存空间。

这里我们专注于实时姿势识别,并尝试让机器“知道”我们做出什么姿势。姿态识别系统由DE10-Nano SoC FPGA Kit、摄像头和HDMI监视器组成。SoC FPGA 从摄像头捕捉视频流,通过 CNN 模型识别人体姿态,最后通过 HDMI 接口显示原始视频和分类结果(站立、行走、挥手等)。

我们上传我们的项目,包括 Matlab、Python 和 Quartus。

软件版本:

  • Matlab r2017b
  • Python 3.6.3
  • Anaconda 5.1.0
  • TensorFlow-gpu 1.3.0
  • Quartus 14.0

同时在该仓库中含有作者的论文,论文中包含详细的设计。

NPU_on_FPGA

https://github.com/cxdzyq1110/NPU_on_FPGA

目的 在FPGA上面实现一个NPU计算单元。能够执行矩阵运算(ADD / ADDi / ADDs / MULT / MULTi / DOT等)、图像处理运算(CONV / POOL等)、非线性映射(RELU / TANH / SIGM等)。

  • 优点 考虑到灵活性较强,易于修改网络结构,适用于实现小型CNN/RNN网络。
  • 缺陷 由于指令串行执行、缺少Cache导致外存读写频繁,运算性能较低。

该项目也是上面项目的同一作者,详细的设计,完整的工程,值得去操作一下。

neural-engine

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

大多数新的 iPhone 和 iPad 都有神经引擎,这是一种特殊的处理器,可以让机器学习模型变得非常快,但对于这种处理器的实际工作原理,公众知之甚少。

Apple 神经引擎(或 ANE)是NPU的一种,代表神经处理单元。它就像 GPU,但 NPU 不是加速图形,而是加速卷积和矩阵乘法等神经网络操作。

ANE 并不是唯一的 NPU——除了 Apple 之外,许多公司都在开发自己的 AI 加速器芯片。除了神经引擎,最著名的 NPU 是谷歌的 TPU(或 Tensor Processing Unit)。

这个项目并不是一个实现CNN的项目,但是是一个关于Apple 神经引擎(或 ANE)介绍及相关文档的集合的项目。

总结

今天介绍了N个CNN的项目,前面的项目比较“单薄”,只适合学习CNN设计,从NTHU-ICLAB(包含)之后的项目更适合实践,因为这些项目都有详细的设计文档及板卡验证过程。

结合之前的TPU及今天的相关项目,大家应该对神经网络应该不会再恐惧了,下一篇文章我们将介绍一些DNN项目,将这个系列完善一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
为了缓解传递间的梯度和遗忘问题,设计了各种各样的RNN cell,最著名的两个就是LSTM和GRU了
新智元
2023/08/05
7250
Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
【NLP】从word2vec, ELMo到BERT
还记得不久之前的机器阅读理解领域,微软和阿里在SQuAD上分别以R-Net+和SLQA超过人类,百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类。这些网络可以说一个比一个复杂,似乎“如何设计出一个更work的task-specific的网络"变成了NLP领域政治正确的研究方向。而在这种风向下,不管word2vec也好,glove也好,fasttext也好,都只能充当一个锦上添花的作用。说好的迁移学习、预训练呢?在NLP似乎始终没成主角。
yuquanle
2020/02/21
9250
通俗讲解从Transformer到BERT模型!
在学会 Transformer 和 Bert 之前,我们需要理解Attention和Self-Attention机制。Attention的本质是要找到输入的feature的权重分布,这个feature在某一个维度有一个长度的概念,如果我们输入一个长为 n 的 feature,那么 Attention 就要学习一个长为 n 的分布权重,这个权重是由相似度计算出来的,最后返回的得分就将会是权重与feature的加权和。
Datawhale
2020/08/28
1.8K0
通俗讲解从Transformer到BERT模型!
NLP大魔王 · BERT 全解读
BERT(Bidirectional Encoder Representations from Transformers)来自谷歌人工智能语言研究人员发表的论文
NewBeeNLP
2022/04/14
7930
NLP大魔王 · BERT 全解读
【NLP】XLNet详解
BERT本身很有效,但它也存在一些问题,比如不能用于生成、以及训练数据和测试数据的不一致(Discrepancy)。在本文中,我们重点介绍比BERT更强大的预训练模型XLNet,它为了达到真正的双向学习,采用了Permutation语言模型、以及使用了双流自注意力机制,并结合了Transformer-XL的相对位置编码。
yuquanle
2020/03/13
1.3K0
机器学习|7种经典预训练模型原理解析
目前无论在CV领域还是NLP领域,预训练都是一个很普遍和普适的方法。我们都知道深度学习的模型越庞大,模型参数越多,为了避免过拟合就需要相应大规模的数据集,但对于很多任务而言,样本标注的成本昂贵。相反,大规模无标签数据库相对容易建立,为了充分利用这些无标记数据,我们可以先使用它们在其他一些任务上学习一个好的特征表示,再用于训练目标任务。
智能生信
2021/02/04
5.5K0
虽被BERT碾压,但还是有必要谈谈BERT时代与后时代的NLP
2018年是NLP的收获大年,模型预训练技术终于被批量成功应用于多项NLP任务。之前搞NLP的人一直羡慕搞CV的人,在ImageNet上训练好的模型,居然拿到各种任务里用都非常有效。现在情形有点逆转了。搞CV的人开始羡慕搞NLP的人了。CV界用的还是在有监督数据上训练出来的模型,而NLP那帮家伙居然直接搞出了在无监督数据上的通用预训练模型!要知道NLP中最不缺的就是无监督的文本数据,几乎就是要多少有多少。还有个好消息是目前NLP中通用预训练模型的效果还远没达到极限。目前发现只要使用更多的无监督数据训练模型,模型效果就会更优。这种简单粗暴的优化方法对大公司来说实在再经济不过。而且,算法本身的效果也在快速迭代中。NLP的未来真是一片光明啊~
AI科技大本营
2019/07/03
1.5K0
虽被BERT碾压,但还是有必要谈谈BERT时代与后时代的NLP
一文读懂深度学习:从神经元到BERT
自然语言处理领域的殿堂标志 BERT 并非横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型,深入浅出地介绍了深度学习在 NLP 领域进展,并结合工业界给出了未来的 NLP 的应用方向,相信读完这篇文章,你对深度学习的整体脉络会有更加深刻认识。
统计学家
2019/05/27
1.3K0
​迁移学习在NLP中的演化:从基础到前沿
论文标题:Evolution of Transfer Learning in Natural Language Processing
AI科技评论
2019/10/31
8920
​迁移学习在NLP中的演化:从基础到前沿
BERT论文解读
BERT的设计是通过在所有层中对左右上下文进行联合调节,来预先训练来自未标记文本的深层双向表示。
程序员一一涤生
2019/10/10
1.2K0
BERT论文解读
BERT_Paper_Chinese_Translation: BERT论文中文翻译版
Google发布的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,提到的BERT模型刷新了自然语言处理的11项记录。算是NLP的里程碑事件,也开始了大公司之间的数据和算力的装备竞赛。放一篇比较好的中文论文翻译。
AINLP
2019/07/10
2K0
BERT_Paper_Chinese_Translation: BERT论文中文翻译版
【论文阅读】BERT:Pre-training of deep bidirectional transformers for language understanding
authors:: Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova container:: Proceedings of the 2019 conference of the north American chapter of the association for computational linguistics: Human language technologies, volume 1 (long and short papers) year:: 2019 DOI:: 10.18653/v1/N19-1423 rating:: ⭐⭐⭐⭐⭐ share:: false comment:: 经典bert的模型
EmoryHuang
2022/10/31
1.8K0
【论文阅读】BERT:Pre-training of deep bidirectional transformers for language understanding
【综述专栏】超详细的NLP预训练语言模型总结清单!
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2021/03/17
1.4K0
【综述专栏】超详细的NLP预训练语言模型总结清单!
关于BERT,面试官们都怎么问
BERT 来自 Google 的论文Pre-training of Deep Bidirectional Transformers for Language Understanding[1],BERT 是“Bidirectional Encoder Representations from Transformers”的首字母缩写,整体是一个自编码语言模型(Autoencoder LM),并且其设计了两个任务来预训练该模型。
NewBeeNLP
2020/08/26
4.1K0
关于BERT,面试官们都怎么问
NLP之从word2vec到ELMO GPT再到BERT与attention transformer过程笔记与详解
在NLP自然语言处理学习或者发展过程中,在13年word2vec word embedding后,人们发现一个单词通过Word Embedding表示,很容易找到语义相近的单词,但单一词向量表示,不可避免一词多义问题。于是迎来Google的ELMO transformer BERT等动态表征模型,BERT模型更是刷新了GLUE benchmark的11项测试任务最高记录。
大鹅
2021/02/21
3.4K0
【Pre-Training】BERT:一切过往,皆为序章
今天我们学习的是谷歌的同学 2018 年的论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,目前引用量超 3800 次。
yuquanle
2020/04/20
1.4K0
【Pre-Training】BERT:一切过往,皆为序章
BERT模型介绍
BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年提出的一种预训练语言模型,它在自然语言处理(NLP)领域引起了广泛的关注和应用。BERT的核心思想是通过双向Transformer编码器(双向的编码器部分
@小森
2024/12/25
1.6K0
BERT模型介绍
跨界出圈 | 谈谈BERT跨模态预训练
BERT以及BERT后时代在NLP各项任务上都是强势刷榜,多模态领域也不遑多让。前几天我们刚分享了复旦邱锡鹏老师的报告:复旦邱锡鹏教授 | 『语言+X』预训练模型,今天就来详细整理一些代表性工作。
NewBeeNLP
2021/03/03
1.2K0
跨界出圈 | 谈谈BERT跨模态预训练
「课代表来了」跟李沐读论文之——BERT
BERT:Pre-trainingof Deep Bidirectional Transformers for Language Understanding
beyondGuo
2022/01/04
8510
「课代表来了」跟李沐读论文之——BERT
生成式预训练模型之BART
每天给你送来NLP技术干货! ---- 写在前面 在文本理解任务(Natural Language Understanding)上,预训练模型已经取得了质的飞跃,语言模型预训练+下游任务fine-tune基本上已经成为标配。 很多人曾经尝试将 BERT 等预训练语言模型应用于文本生成任务(Natural Language Generation),然而结果并不理想。究其原因,是在于预训练阶段和下游任务阶段的差异。 BART这篇文章提出的是一种符合生成任务的预训练方法,BART的全称是Bidirectional
zenRRan
2022/08/31
2.9K0
生成式预训练模型之BART
推荐阅读
相关推荐
Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 介绍
  • cnn_hardware_acclerator_for_fpga
    • 软件工具:
  • convolution_network_on_FPGA
    • 描述
    • 加速
  • CNN-FPGA
    • Conv2d
    • Max_pool
  • FPGA-CNN
  • clacc
  • RTL-Implementation-of-Two-Layer-CNN
  • NTHU-ICLAB
  • ES203-COA-CNN
  • MNIST_CNN_HDL
  • CNN-Implementation-in-Verilog
  • CNN_Core
  • CNN-Accelerator-VLSI
  • CNN-FPGA
  • Image-Classification-using-CNN-on-FPGA
    • 简介
    • 使用的工具
  • DigitalRecognition
  • posture_recognition_CNN
    • 简介
    • 软件版本:
  • NPU_on_FPGA
  • neural-engine
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档