深度学习的硬件实现与优化技术研究_林楗军

基于FPGA的卷积神经网络加速 --余子健 特征图并行:由细粒度到粗粒度 (1)卷积窗口内部,3*3卷积 (2)同一特征图上,卷积窗口的滑动 (3)不同卷积窗口对应的不同特征图 (4)不同个数的卷积通道对应输入的特征图 (1)窗口内部卷积实现 来一个时钟周期,输入一个数据X。 解析第一行输出,1个时钟周期后,输出X(n,0)*W02无效。3个时钟周期后,第三级流水线得到X(n, 2)*W02+ X(n, 1)*W01+ X(n, 0)*W00,第一级流水线得X(n, 2)*W00,第二级流水线得X... 阅读详情


这是哈尔滨工业大学林楗军的硕士毕业论文。
与上一篇博文《基于FPGA的卷积神经网络加速器_余子健》一样,本文首先就卷积神经网络的并行性做了介绍,内容大致相同,且都是应用于卷积神经网络的前向加速过程。对于一些相同的部分,不在此赘述。

1. 卷积神经网络模型基础

首先根据文章内容继续补充一些基础。

1.1 激活函数

为了模拟生物神经元具有的被激活的特性,增强网络的表达能力,引入了连续非线性激活函数。在传统的神经网络中,最常用的激活函数是以单极性Logistic函数σ(x) 和双极性Tanh函数Tanh(x) 为代表的 Sigmoid型函数,这类激活函数能有效起到控制信号增益效果的作用。近年来,ReLU 函数 ReLU(x)由于其计算简单,导数收敛快,单侧抑制性强的特点,使其开始被广泛应用。
在这里插入图片描述
在这里插入图片描述
从输入与输出的激励关系来看,Sigmoid型函数是一类连续光滑曲线,而 Tanh 函数实际上是 Logistic 函数的一个变形,Logistic 函数是把输入的连续实值压缩到在[0,1]区间内,Tanh 函数的输出则是压缩在[-1,1]区间,ReLU 函数可以看成是一类分段线性函数,当输入变量小于0 时,输出值都是 0,当输入变量大于等于 0 时,输出等于输入。

1.2 抽样层结构

抽样层跟随在卷积层后面,对前一层特征映射图进行二度特征提取。卷积层得益于其结构特点,虽然可以显著减少神经元之间连接路径,减少网络参数,但是卷积层得到的每一个输出特征映射图的神经元总数并没有显著减少。如果卷积层后面直接加入一个全连接方式的分类器,则分类器的输入维度需要很高,容易造成过拟合的问题。为了解决这一问题,一般在卷积层后面添加一个抽样层,可以看作是一个模糊滤波器,进行数据的采样和特征的二度提取,同时也增强了网络抗扭曲能力。
常用方法有:
在这里插入图片描述

2. FPGA优化技术

在FPGA设计与优化过程中,资源面积和计算速度作为矛盾双方,两者的抉择地位是不相等的,当两者发生冲突时,应当优先保证计算速度,满足工程在较高的工作频率。考虑到卷积神经网络高密度的计算特性,需要进行相关的速度优化技术研究。

2.1 并行技术

并行技术从实现方式来划分,可以分为空间并行和时间并行。空间并行是指将计算任务分配到多个独立的计算单元进行并行化处理;时间上的并行则主要是指通过流水线技术,将计算任务分配到数据流驱动过程中的每一个细小环节中并行处理。
空间并行:
在这里插入图片描述
时间并行:
在这里插入图片描述

2.2 乒乓技术

乒乓技术是一个常被用于控制与缓冲数据流。将单通道的数据流分节拍进行双通道切换传输,使得数据得到无缝衔接的缓冲和处理。乒乓操作的核心思想就是以双缓冲器的交互运行方式将数据传输与计算时间进行重叠抵消。乒乓操作示意图如下。
在这里插入图片描述

2.3 复用技术

复用技术是指针对同一块硬件资源需要被多个电路模块使用时,为了避免资源浪费,使重用的硬件资源共享于多个电路模块,做到资源共享,面积最优。硬件实现过程中,模块复用的实现方式有很多种,如时分复用、设置状态机、调整实现方式等等。
在这里插入图片描述

2.4 分块技术

分块技术是结构化设计中的一个重要方法,也是节约硬件资源的一种重要设计策略。卷积神经网络的多层化结构,使其必然需要进行模块划分。
存储器作为系统的记忆设备,是硬件设计中不可缺少的一部分。借鉴逻辑分块的思想,采用存储单元分片设计。结合卷积神经网络权值共享的特性,可以将共享数据,如权值、同一个特征图的神经元,分片存储在同一个存储单元内,提高数据复用率,也减少数据存取时对资源的占用面积。

3. 卷积神经网络的硬件设计与实现
3.1 卷积运算模块

卷积运算模块是整个卷积神经网络前向通路的核心运算模块,不仅具有高密度的运算操作,而且具有高频率的运算重复性,因此,该模块的运行效率也会极大地影响整个卷积神经网络硬件加速性能的效果,是本文的重点设计对象。

  • Z型卷积运算模块
    采用单数据流驱动的方式,3×3大小卷积核为例,详细说明Z型卷积运算模块的设计结构,其结构示意图如下。
    在这里插入图片描述
    注意,上面设计的卷积模块针对的是单输入特征图*单卷积核。
    观察上图,首先左侧部分是数据传输部分,右侧则是卷积运算部分。由于采用单数据流方式,输入特征图和卷积核都将呈Z字形扫描到缓冲FIFO中。在卷积计算时,卷积核的权值需要同时用到,所以在卷积核的缓冲FIFO后面有一个串并转换器得到所有的权值。
    卷积计算时,每行的3个乘法器和3个加法器构成了一个一维的卷积器。为了实现二维卷积窗口的卷积运算,需要将相邻的两个一维卷积器相连。由于输入特征映射图的神经元是按逐行扫描的方式输入,需要将相邻两行的神经元进行数据匹配,因此在前2个一维卷积器后面各添加一个深度为N−3的移位寄存器,作为相邻两个一位卷积器的数据通路,并且用于缓存计算的中间结果,进行数据匹配。这一小点稍难理解,有兴趣的读者请自己画一个实例,一算便知。
    3D-Z型多输入多输出并行运算模块:
    在这里插入图片描述
  • 树型卷积运算模块
    从Z型卷积运算模块的单数据流驱动,逐行扫描的输入方式出发,进一步开发运算模块的运算效率,将单数据流的数据驱动方式拓展成多数据流的数据驱动,提出一种树型卷积运算模块结构。
    在这里插入图片描述
    这种树形卷积运算模块也更好理解一些,跟上一篇《基于FPGA的卷积神经网络加速器_余子健》中介绍“卷积窗口内部并行”思路相同。
    树型结构需要将输入神经元和卷积核参数按行分组,按组进行分块存储,以多数据流驱动的方式将数据并行传递到运算部分,Z型卷积运算结构并不适合这种多数据流驱动的方式;在卷积运算阵列中,树型结构采用分布式并行乘法结构得到乘法结果,乘法结果再传输到加法树中进行累加操作,得到输出结果,加法树每一层加法器之间添加流水线式寄存器,构成流水线式加法树结构。
    在这里插入图片描述
3.2 抽样运算模块

抽样层与卷积层运算窗口移动的步进值不同,卷积层为了获取更精细、更充分的特征,会充分利用每一个,每一组的有效数据,因此卷积窗口的步进值一般为 1;而抽样层则是为了降低特征维度和特征映射图的分辨率,不希望或减少数据的重叠部分,因此一般抽样窗口的步进值与抽样窗口的尺寸保持一致。
采用地址索引的策略来跳跃式索引存储器内的输入数据,以代替原先逐行扫描的顺序驱动方式。
抽样运算模块在FPGA中实现的RTL图如下所示。
在这里插入图片描述
抽样运算模块的功能仿真图:
在这里插入图片描述
抽样运算模块运行,首先通过逻辑控制电路,对地址存储器内预先存储的地址addr1 ~ addr4进行读取,将读取的地址作为地址信号传递给存储输入神经元的输入存储器,读取对应位置上的输入数据pixel1 ~ pixel4,其次将输入数据进行有效位截取,得到与原始输入数据位宽一致的 16bit 数据,保持在寄存器rega ~ regb,然后将位截取后的数据进入四输入比较器,选取最大值,最后将比较的最大值保存到输出存储器中保存。
抽样运算模块同样可以延续卷积运算模块的设计思路,采用分片存储,多数据流驱动的方法进行设计。若采用将 2×2的抽样窗口,那么输入神经元需要分片存储在4个存储单元内,抽样窗口相同位置上的输入神经元存储在同一个存储单元内,并行读取四个存储器的数据,进行卷积窗口的下采样操作。

3.3 激活函数模块

本文以ReLU函数作为卷积神经网络的激活函数,采用分段线性拟合的方法在FPGA上实现,对激活函数模块进行设计。
从ReLU函数的数学表达式,很显然可以看出,输入信号大于0 和小于0时,输出表达式不同,因此可以把ReLU函数分成两段拟合,一段是输入神经元为负值信号,另一段是输入神经元是非负值信号。这是两段简单的线性函数,在FPGA上非常容易实现。激活函数模块的RTL图如下。
在这里插入图片描述
函数实现部分由一个比较器和一个D触发器组成。输入缓存器输入待处理的神经元数据,然后将输入数据与0值比较,当输入数据小于0,则D触发器的输入端置0,输出信号也为 0,当输入数据大于等于0,则 D触发器的输入端为输入数据值保持不变。

4. 实验验证与分析

本文采用“FPGA+CPU”的异构体系作为本次实验验证平台。异构系统的框图如下。
在这里插入图片描述

深度学习中,CPU、GPU、NPU、FPGA如何发挥优势? 随着AI的广泛应用,深度学习已成为当前AI研究和运用的主流方式。面对海量数据的并行运算,AI对于算力的要求不断提升,对硬件的运算速度及功耗提出了更高的要求。 目前,除通用CPU外,作为硬件加速的GPU、NPU、FPGA等一些芯片处理器在深度学习的不同应用中发挥着各自的优势,但孰优孰劣? 以人脸识别为例,其处理基本流程及对应功能模块所需的算力分布如下: 为什么会有这样的应用区分? 意义在哪里? 想... 阅读详情

相关推荐

卷积神经网络硬件实现综述:A Survey of Convolutional Neural Networks on Edge with Reconfigurable Computing

卷积神经网络硬件实现综述阅读

小陈的芯片学习之路 3108

基于FPGA的卷积神经网络加速器_余子健

这是浙大余子健的研究生毕业论文,也是我阅读的第一篇文献。 1. 神经网络计算模型 上图为典型的卷积神经网络的结构。在图中C层代表的是卷积层,S层是子采样层,F代表全连接层。C层与S层是交替出现的。卷积层即特征提取层,子采样层可以二次平均和局部提取。卷积层是FPGA要加速的重点。 上图是一个典型的卷积层,N个输入特征图,M个输出特征图,将会有N*M个卷积核 (Kernals)。这点我觉得很重要:...

Setul 1万+

Deeplearning4j【基础 01】初识Java深度学习框架DL4J_dl4j java

Deeplearning4j是当前最大、最流行的基于JAVA的深度学习框架,正式诞生于2013年,在2017年加入Eclipse基金会,由美国的Skymind开源并维护。支持神经网络模型的构建、模型训练和部署;能够与现有大数据生态进行无缝衔接(Hadoop、Spark等),也是可以原生态支持分布式模型训练的框架之一;支持多线程;跨平台(硬件:CUDA GPU,x86操作系统:Windows/Mac/Linux/Android)。

2401_86358637的博客 1832

ESP-IoT-Solution AI推理:ESP-DL深度学习应用

你是否还在为边缘设备上的AI模型部署而头疼?传统深度学习模型体积庞大、计算复杂,难以在资源受限的嵌入式设备上运行。ESP-IoT-Solution结合ESP-DL(Espressif Deep Learning)框架,为ESP32系列芯片提供了完整的AI推理解决方案,让边缘设备也能轻松运行深度学习模型。 读完本文,你将获得: - ESP-DL框架的核心架构和工作原理 - 模型量化与部署的完整流程...

gitblog_00368的博客 1793

深度学习在推断阶段的硬件实现方法概述

当前主流的深度学习算法在硬件上实现的主要集中在压缩模型和设计计算模型两个方面,前者着力寻找一个简单有效易于实现的模型,后者重点在寻找一个基于现有硬件资源可以高效计算的方法,这二者的结合可以更加高效有效地解决推断阶段带来的计算复杂和存储爆炸等问题。

wonder858的专栏 2877

深度学习硬件GPUFPGATPU加速深度学习

深度学习硬件-GPU、FPGA、TPU加速深度学习 1. 背景介绍 深度学习在近年来取得了巨大的发展,在计算机视觉、自然语言处理、语音识别等众多领域取得了突破性的进展。这些成就离不开硬件的飞速发展和优化。传统的通用CPU已经无法满足深度学习模型日益增长的计算需求,各种专用

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 804

DL框架之DL4J/Deeplearning4j:深度学习框架DL4J/Deeplearning4j的简介、安装、使用方法之详细攻略

Deeplearning4j可以实施的技术包括受限玻尔兹曼机、深度置信网络、深度自动编码器、堆叠式降噪自动编码器、循环神经张量网络,以及word2vec、doc2vec和GloVe。硬件支持包括 CUDA GPU(10.0、10.1、10.2,OSX 除外)、x86 CPU(x86_64、avx2、avx512)、ARM CPU(arm、arm64、armhf)和 PowerPC(ppc64le)。:用于各种格式和文件(HDFS、Spark、图像、视频、音频、CSV、Excel 等)的。

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 6150

FPGA实现CNN:硬件优化与深度学习

FPGA(Field-Programmable Gate Array)即现场可编程门阵列,是现代数字电路设计中广泛使用的一种半导体设备。与传统的ASIC(Application Specific Integrated Circuit)相比,FPGA允许在出厂后对电路进行重新编程,因此具有高度的灵活性和可重配置性。FPGA的工作原理依赖于其内部由逻辑块(Logic Blocks)组成的结构,这些逻辑块通过可编程的互连资源连接。用户可以根据需要配置这些逻辑块及其连接方式,以实现不同的数字电路功能。

weixin_42509513的博客 1363

深度学习在硬件和计算平台上的优化:实现更快、更高效的突破

未来,随着新型硬件的不断涌现和计算平台的不断创新,深度学习在硬件和计算平台上的优化将更加深入和广泛。同时,随着算法和框架的不断进步,深度学习模型的性能和效率也将得到进一步提升。我们期待深度学习在更多领域发挥更大的作用,推动人工智能技术的快速发展

沛哥儿的专栏 2927

Deeplearning4j深度学习示例教程:DL4J, DL4J Spark, DataVec实战

神经网络是深度学习的基础,由大量的节点(或称为“神经元”)相互连接而成。每个神经元可以将输入转换为输出,并在此过程中应用一个非线性激活函数。通过多层的网络结构,复杂的非线性变换得以实现,使得神经网络能够学习数据中的层次结构。Deeplearning4j(DL4J)是针对Java虚拟机(JVM)的开源深度学习库,专为商业环境和生产需求设计。DL4J的特点之一是它的性能优化,在分布式计算、多线程和Hadoop或Spark集成方面表现出色。

weixin_29867767的博客 3459

深度学习:硬件加速CNN代码实现与优化

硬件加速技术通过使用专门设计的硬件设备来执行特定的计算任务,以此减少算法处理时间,提高效率。在CNN的背景下,这种加速可以通过各种方式实现,如使用图形处理单元(GPU)、现场可编程门阵列(FPGA)或专用集成电路(ASIC)。High-Level Synthesis (HLS) 是一种电子设计自动化技术,它允许工程师使用类似于软件编程的语言(如C/C++或SystemC)来描述硬件行为,然后自动转换成可以在FPGA或其他硬件平台实现的硬件描述语言(HDL)代码。

weixin_42601134的博客 1102

ESP-DL是什么?乐鑫官方的ESP32嵌入式深度学习工具库

乐鑫科技推出ESP-DL深度学习开发库,专为ESP32系列芯片设计,支持神经网络推理、图像处理和数学运算。该库提供预置优化模型(如人脸检测)和自定义模型部署工具,通过量化计算和硬件协同加速,在ESP32-S3上实现显著性能提升(16位检测速度达ESP32的4.5倍)。ESP-DL可广泛应用于智能门禁、边缘AI等物联网场景,支持本地化AI处理,降低嵌入式设备开发难度,是推动AIoT普及的关键技术。

m0_59195407的博客 1348

驾驶员疲劳检测技术的算法设计与硬件实现-

驾驶员疲劳检测技术的算法设计与硬件实现。基于深度学习

为什么需要硬件加速来验证深度学习设计?

介绍 毫无疑问,计算机已经彻底改变了我们的生活。尽管如此,在完成复杂的任务(诸如在几乎不需花费时间的情况下解决复杂的数学方程之类)时,计算机的性能远远优于人类;但在解决人类可以轻松完成的任务(例如图像识别)时,它们的性能可能会不如人类。世界上任何人都可以立即识别出猫的照片,但世界上最强大的PC可能需要几个小时才能得到相同的答案。 该问题属于传统的控制处理单元(CPU)冯·诺伊...

路科验证 1578

大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲

本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。

weixin_29051245的博客 435

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2167

【深度学习计算性能】04:硬件

本文讲解计算机的相关硬件。计算机由CPU、内存、以太网连接、高速扩展总线(PCIe)、持久性存储设备等关键部件组成。内存访问、GPU操作及数据传输的延迟差异显著,合理设计可避免性能瓶颈,实现高效系统。

Morse_Chen的博客 2547

BSW:MemMap模块配置及使用

(内存映射(MemMap)模块用于通过内存映射文件将代码和数据映射到特定的内存部分。MemMap生成特定的头文件,其中包含为MemorySection元素和编译器特定指令定义的内存映射预处理器。上面是比较官方的回答,说人话就是把数据和代码放在ECU内指定的地址。初级应用:软件中的bss,data,rodata,code,text,段需要在memory layout中划分具体的物理地址,对于多核系统,要将执行的数据和代码放在目标核的RAM和ROM。

Forever_Oct的博客 3674

探索深度学习的魅力:DL-AndrewNg 项目详解

探索深度学习的魅力:DL-AndrewNg 项目详解 去发现同类优质开源项目:https://gitcode.com/ 该项目,,是一个基于 Andrew Ng 的《斯坦福大学深度学习专项课程》(deeplearning.ai)的学习资源库。它旨在为开发者和学生提供一个易用且互动性强的平台,以实践和理解深度学习的基本原理和技术。 技术分析 1. Jupyter Notebook 整个项目基于 Ju...

gitblog_00060的博客 3500

配电变压器测控终端装置设计

配电变压器测控终端装置在电网运行中承担着数据采集、状态监测、故障预警及远程控制的关键任务,其性能直接关系到配电系统的安全性与可靠性。本研究围绕测控终端的硬件电路、软件算法、通信系统及系统优化展开深入分析,并基于实验测试验证系统性能。硬件设计包括模拟量输入电路、电压电流信号变换电路、A/D转换电路、控制与通信电路及系统电源电路,确保信号采集的高精度与系统的稳定性。软件部分涵盖系统控制程序、数据采集与处理程序、通信程序及显示与控制程序,实现数据的实时处理与传输。通信模块结合RS-485、CAN总线及以太网技术,

weixin_44553616的博客 1102

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1163

探秘DL_Inference:高效、易用的深度学习推理库

在AI领域,模型的训练只是第一步,更重要的是将训练好的模型应用到实际场景中进行推理。是一个专为实现这一目标打造的开源项目,它提供了一套高性能、易于集成的深度学习推理框架。 ## 项目简介 DL_Inference由58同城(WUBA)开发并维护,旨在简化深度学习模型的部署流程,提升推理效率。项目的核心是实现对多种主流深度学习框架(如TensorFlow, PyTorch等)的支持,以及优化不同...

gitblog_00004的博客 545

损失函数大汇总(六十一)(Signed Distance Map Loss附公式推导与代码)

摘要 本文介绍了Signed Distance Map (SDM) Loss,一种将形状先验直接融入分割任务的方法。SDM将每个像素表示为到目标边界的带符号距离(内部为负,外部为正),相比二值mask能更连续地表达形状几何信息。SDM Loss的核心思想是让网络学习这个隐式形状场,通过可微的Heaviside函数近似将SDM转换为分割结果。文中重点分析了一种product-based regression loss,它能同时关注距离数值和内外符号的正确性,对边界区域尤为敏感。SDM Loss通常与传统的分割

悦学共鸣,温柔以待,汇聚光芒,共同成长 187

ESP-DL与ESP-IDF集成:构建完整嵌入式AI应用的架构设计

ESP-DL(Espressif deep-learning library)是乐鑫科技推出的面向AIoT应用的深度学习库,它与ESP-IDF(Espressif IoT Development Framework)的无缝集成,为开发者提供了从模型部署到硬件加速的完整嵌入式AI解决方案。本文将详细解析两者集成的架构设计,帮助新手快速掌握构建嵌入式AI应用的核心方法。 ## 核心架构设计:ESP-

gitblog_00701的博客 1106

CE电流法测试中的dBμV负值解析

传导发射(CE)电流法测试中出现的dBμV负值现象表明被测设备干扰电平低于1μV参考基准。这源于对数计算特性(小于1μV的电压转换后为负值)、设备优良的EMC设计(如滤波效果显著)及测试环境的影响(LISN隔离、屏蔽室低噪声)。负值虽不代表实际负电压,但反映干扰水平优于标准限值,为系统集成预留电磁裕度。工程应用中需结合设备灵敏度、环境背景噪声等因素综合分析,避免误判,这类数据可用于评估EMI设计冗余度。

硬核科技 298

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+
上一篇: 基于FPGA的卷积神经网络加速器_余子健
下一篇: Altera FPGA——使用NIOS控制Serial Flash 第二部分
隋边边
博客等级 码龄11年 304粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值