基于FPGA的卷积神经网络实现(一)简介

2023-11-11

目录:

  1. 简介
  2. 框架
  3. 资源分配(1)
  4. 资源分配(2)
  5. 数据量化(1)
  6. 数据量化(2)
  7. 数据读写
  8. 卷积模块
  9. 池化、全连接与输出

事先声明,仅用于记录和讨论,有任何问题欢迎批评指正,只是觉得菜的大佬们请绕路,就不用在这里说大实话了,因为本身就是一个粗糙的demo。ISE的v文件在github,由于大家想要vivado工程,我就做了一个,有点大,传到了百度网盘。
链接:https://pan.baidu.com/s/1OEUPTEQ3miRcPFCaWy-3MA
提取码:bqit

提起把项目代码讲解一下的念头主要是源于最近一个同学开始转行做这个,感觉很复杂无从下手。在给他讲的时候想起我最开始入手一块FPGA到自己写出整个框架的艰辛,以及寻找并阅读开源项目的艰难,所以打算把整个过程完整的记录下来,也方便和大家交流。
现在github上对于在FPGA实现卷积神经网络的项目也很多,各大公司也都有做,Xilinx和AMD的开源项目也能搜到,但是由于功能太强大而导致代码复杂新手很难阅读(也许这是FPGA口的一个特色?)。另外就是有很多论文,各种各样的加速方式,看了之后,woc NB,但是咋复现啊。本项目由于主要是从结构出发,因此只是对结构进行了实现,对于硬件层面的优化较少,都是使用最简单的方式进行实现的,因此可能理解起来也算是容易一些。当然现在越来越多的研究者和同学使用HLS进行开发,确实HLS相对于简单很多,开发周期大大缩短。
对于基于FPGA实现CNN的研究,个人感觉单纯的在这方面进行普适性的研究已经许久没有颠覆性的进步了,研究人员在FPGA上面实现了VGG、Resnet等各种各样的网络结构,各种各样的硬件级优化也都做了很多。而我们从工程应用的角度把他作为一种工具去在某一个领域去进行加速,这样是可以针对特定的应用场景特定的网络进行特定的处理。很多现在的论文也是这样,做一个项目场景,而FPGA的使用是为了加速这一过程,至于CNN,那也只是一种方法而已。
从工程角度,对于使用FPGA加速CNN,个人觉得应该分为四个步骤

  1. 在软件层面对CNN进行优化
  2. 在软件层面对CNN进行FPGA适应性处理
  3. 将CNN算法分解为适合FPGA实现的结构
  4. FPGA实现及优化

这整个应该是一个完整的流程。
首先FPGA本身的存储空间有限,现在的大型网络具有巨大的参数量,哪怕是在一些具体应用中使用了较小的网络(如本项目,因为要实现的功能并不复杂,因此网络结构也比较简单),参数量仍然很大,因此第一步应该在软件层面就优化一些,比如剪枝,既可以减少参数量又可以减少计算量,何乐不为。
其次CNN不一定完全适合FPGA,比如我们希望在FPGA中调用DSP单元进行定点数计算,那么我们需要对CNN的参数进行定点数量化处理。
分解的话主要是提取CNN的计算流程,把每一步的计算公式完整的使用matlab或者python等进行实现,而且不掉调用库函数,完全来仿真FPGA的实现,比如卷积是否要分解为多步进行等。
最后才是在FPGA上的实现以及优化。
个人意见哈~也不见得对,而且仅限于单片处理,多片的话要考虑的东西就更多了。
总之呢,下篇开始我将会对这个项目按照我个人写程序时候的顺序进行讲解。所有的.v文件我已经上传到了github。

我发现点下面的链接会跳到一个不知道是谁的CSDN下面需要付费下载,这个很迷惑,麻烦自行复制下面的链接。
Github:https://github.com/MasLiang/CNN-On-FPGA
那个不知道是谁的链接:https://download.csdn.net/download/weixin_42138780/18551586
没有下载不让举报,有办法的朋友麻烦举报一下

之前做的一个讲解视频也传到了B站。
最后,有任何问题请及时指出,欢迎各路大佬进行交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于FPGA的卷积神经网络实现(一)简介 的相关文章

随机推荐

  • cmos是计算机主板上的一块可读写,关于基本输入输出系统(BIOS)及CMOS存储器,下列说法中错误的是...

    选B CMOS通常是指主板上一块可读写的存储芯片 它用于存储计算机的时钟信息和硬件配置信息等内容BIOS芯片是主板上一块长方型或正方型芯片 BIOS中主要存放 自诊断程序 加电自检程序 通过读取CMOS RAM中的内容识别硬件配置 并对其进
  • Burpsuite使用教程

    目录 Burpsuite基础 1 Proxy 2 spider 3 Decoder burp 进阶 1 Scanner 2 intruder 3 Repeater 4 comparer 5 sequencer Burp Suite是一款集成
  • SQL计算留存率等指标

    一 问题1 留存率计算 字段及表说明 表名 user log 字段名 log day 登录日期 device id 用户设备id app id 用户app的id 其中device id和app id确定唯一的用户 1 1计算某日留存率 次日
  • 关于SD卡挂载失败问题的解决方法

    单片机为STM32F103RBT6 SD卡为金士顿8G 在SD卡初始化通过后 在挂载SD卡时 遇到了问题 挂载部分代码如下 exfuns init 为fatfs相关变量申请内存 while FR OK f mount pfs 0 0 1 挂
  • 房屋、贷款相关公开数据集(免费下载链接)

    1 Loan Prediction 简单的贷款预测 贷款预测 包含贷款ID 性别 婚否 教育 贷款价格等 DataCastle 数据科学创新与实践平台https www datacastle cn dataset description h
  • 【软件测试】单元测试、系统测试、集成测试的区别及示例

    目录 一 单元测试 二 集成测试 三 系统测试 一 单元测试 定义 单元测试是对软件组成单元进行测试 细粒度 测试目的 用于检验软件基本组成单位的正确性 测试对象 一个工作单元 通常是类内部的一个方法 测试使用方法 白盒测试 测试依据 详细
  • “ldd”命令详解

    ldd 命令详解 ldd 1 语法 2 举例说明 背景知识 1 ldd不是一个可执行程序 而只是一个shell脚本 2 ldd实质是通过ld linux so elf动态库的装载器 来实现的 3 ld linux so查找共享库的顺序 3
  • 二、@RequestMapping注解和参数的获取

    1 RequestMapping RequestMapping value testRequestMapping method RequestMethod POST params username jack headers Accept v
  • 53.Eight (15分待续)

    题目内容 在3 3的棋盘上 摆有八个棋子 每个棋子上标有1至8的某一数字 棋盘中留有一个空格 空格用0来表示 空格周围的棋子可以移到空格中 要求解的问题是 给出一种初始布局和目标布局 为了使题目简单 设目标状态为 1 2 3 8 0 4 7
  • 用SPM技术固定EBS标准功能的SQL执行计划

    Introduction介绍 本文是Oracle SPM技术的一个应用实例 分享给没了解过SPM或者没用过SPM的老铁们 通过本文 应该要了解什么是SPM 它的作用是什么 它的应用场景是什么 这个应用实例总结就是 通过使用SPM技术 固定S
  • 找错:ZdalRuleCalculateException: 规则引擎计算出错,拆分值=

    序言 这一段是我遇上问题的过程 可以直接跳转到下面的正文 在刚写的博客 Zdal分库分表介绍 超详细一步一步搭建简单的zdal框架 中 是通过向线程中存放数据库远程路由来指定操作哪个数据库 在mybatis执 行插引用块内容入操作时 会从数
  • JVM调优

    1 查看当前jvm使用详情 java XX PrintGCDetails或者 Xloggc data jvm gc log或者 verbose gc 2 JVM调优工具 jps l 查看java程序pid 3 jstat gc pid 50
  • IMT-2030(6G)推进组发布《6G总体愿景与潜在关键技术》白皮书

    来源 中国信通院CATCT 编辑 蒲蒲 当前 新一轮科技革命和产业变革突飞猛进 随着5G商用的大规模部署 全球业界已开启对下一代移动通信 6G 的探索研究 日前 IMT 2030 6G 推进组 以下简称 推进组 正式发布 6G总体愿景与潜在
  • 编译原理四元式实验_记一次编译原理实验——词法+语法&语义分析(Python实现)...

    记一次编译原理实验 词法 语法 语义分析 Python实现 编译原理是每个CS学子的必修课 编译原理的实验课对提高我们对编译过程的理解很重要 本文章写于实验结束后 所有代码已上传至Github https github com kabu12
  • Netty入门(六) WebSocket协议开发

    一 WebSocket协议介绍 1 WebSocket协议介绍 WebSocket协议是和Http协议同地位的应用层协议 都是基于TCP协议之上 但是其是以Http协议为基础的 未了解决Http协议半双工通信模式且数据冗杂的缺点 HTML5
  • 【三维目标分类】PointNet++详解(一)

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 上一节主要介绍了Po
  • 2023最新如何轻松升级、安装和试用Navicat Premium 16.2.10 教程详解

    博主猫头虎 带您 Go to New World 博客首页 猫头虎的博客 面试题大全专栏 文章图文并茂 生动形象 简单易学 欢迎大家来踩踩 IDEA开发秘籍专栏 学会IDEA常用操作 工作效率翻倍 100天精通Golang 基础入门篇 学会
  • 数组的初识

    目录 1 初识数组 2 数组的简单操作 2 1读取元素 2 2更新元素 2 3插入元素 2 4删除元素 1 初识数组 数组是有限个相同类型的变量所组成的有序集合 数组中的每一个变量被称为元素 数组是最简单 最为常用的数据结构 以整型数组为例
  • HTML5全栈工程师好就业吗

    2017突然流行起来的一个新职位 全栈工程师 大概在很多人眼里 全栈工程师是一个全能人才 事实的确如此 以web前端为主 需求 后台 前台 用户 设计等内容为辅 全栈工程师拥有更广阔的视野和更广泛的学识 全栈工程师可以从更高的角度去看待问题
  • 基于FPGA的卷积神经网络实现(一)简介

    目录 简介 框架 资源分配 1 资源分配 2 数据量化 1 数据量化 2 数据读写 卷积模块 池化 全连接与输出 事先声明 仅用于记录和讨论 有任何问题欢迎批评指正 只是觉得菜的大佬们请绕路 就不用在这里说大实话了 因为本身就是一个粗糙的d