时间:2024-08-10 来源:网络搜集 关于我们 0
根据FPGA使用、AI这样的关键词进行检索,找到一篇“AI赋能FPGA”的系列文章,整理成表如下:
一级搜集
二级搜集
引申
AI赋能FPGA(一)沂舟无限进步公众号 20230417
InnovateFPGA大赛
集成电路大赛 海云捷讯杯 学习如何使用FPGA来做人工智能加速
Intel的FPGA 前面视频那块我很熟悉 ,文章写得很细致,我可以认真读,吃透
2023年海云捷讯杯设计任务:
要求选手通过获取PL端摄像头数据,完成图像预处理,使用提供的模型和CNN加速器进行推理,并将推理结果叠加到原视频流,通过PL端HDMI接口进行输出,最终通过HDMI输出刷新帧率和推理结果刷新速度来进行评分。
使用带框架的FPGA AI加速器,虽然比较便利,但是会消耗一定的时间来处理框架开销,会降低加速器性能,影响视频流输出显示的帧率。
因此鼓励选手对AI框架进行深度优化,从而更高效的利用CNN加速器。同时鼓励选手自行设计PL端CNN加速器,以获得更高的帧率输出。
7. 开发工具支持:Cyclone V得到了Intel的强大开发工具支持,如Quartus Prime开发环境、OpenCL SDK等。
需要一个DVP摄像头来捕获图像,以及一个HDMI接口来输出视频,其中海云捷讯官方提供的AIEP平台均有涉及。
Quartus Prime:这是Intel FPGA开发软件,进行FPGA硬件设计;我们使用飞浆官方网站的在线模型训练平台;DS-5 Development Studio:这是一款针对ARM处理器的集成开发环境(IDE),在本设计中,Cyclone V FPGA内部集成了一个ARM处理器;为了能够在PC上开发和编译适用于FPGA上的ARM处理器的软件,我们需要搭建一个交叉编译环境。这可以通过在虚拟机中安装一个Linux发行版并配置相应的交叉编译工具链来实现
专门的性能分析工具,如VTune Amplifier或者gprof等,来深入分析软件性能,找出瓶颈所在,并进行优化。
3.2 图像帧捕获与存储
使用FPGA内部的BRAM作为图像行缓冲区,用于临时存储捕获到的图像行数据;
将捕获到的图像行数据通过Avalon接口或AXI接口传输到外部DRAM,并按照图像的行和列顺序进行存储;
使用帧缓冲区管理模块(Frame Buffer Manager)来控制图像帧在外部存储器中的读写操作,以便于图像处理算法对图像数据进行访问。
确实和我做过的一样,先把行场信号锁拍,捕获有效数据的部分,再有都是缓存一行在FPGA内部,接下来用来缓存一帧的是AXI接口道外部DRAM,这个设计是要一帧来了就推到HDMI输出,HDMI输出这部分是流水线,一帧输出HDMI的同时,下一帧已经在缓存,两部分交替
图像预处理,我做过的是色域转换,还有尺寸缩放、归一化等,这就大概了解为什么要做图像预处理了,就是为了后续的使用,确实这里有很多加减乘除算法的东西,这些算法也没有那么神奇
AI赋能FPGA(二)沂舟无限进步公众号 20230418
这一篇讲的是神经网络方面的知识。
神经网络的优化与训练策略是关键环节,涉及到学习率(Learning Rate)、梯度下降算法(Gradient Descent Algorithm)、正则化(Regularization)等多个方面
网络层数增加会导致计算量和参数量的增加,可能会降低FPGA上的运行效
较大的参数量意味着网络在FPGA上需要更多的资源。为了在有限的FPGA资源下实现高性能神经网络,可以采取一些策略,如模型剪枝、参数共享、模型量化
AI在FPGA上使用的关键步骤:
(3)转换神经网络模型:为了将训练好的模型部署到FPGA上,需要将模型转换为FPGA能理解的格式。可以使用OpenVINO或其他类似的工具,将模型转换为适用于FPGA的格式
(6) 开发FPGA软件:编写软件来控制FPGA上的神经网络加速器。这包括与外部设备(如摄像头和显示器)的通信、读取输入图像数据、启动神经网络加速器、读取推理结果等。
(7) 验证和优化:在部署神经网络到FPGA之后,需要对其进行验证以确保正确性和性能。如果发现性能瓶颈,可以通过对神经网络模型进行剪枝、量化、融合等操作来优化模型。此外,也可以针对FPGA硬件进行优化,以提高资源利用率和性能
为了在FPGA上获得更高的帧率输出,可以自行设计PL端的CNN加速器。以下是一个自定义CNN加速器设计的详细流程:
(1) 确定网络结构:首先,需要选择一个适用于FPGA实现的神经网络结构。可以根据项目需求选择一个预先训练好的模型,或者根据FPGA资源和性能要求设计一个新的网络结构。
(2) 网络模型转换:将神经网络模型从原始格式(如TensorFlow、PyTorch等)转换为硬件描述语言(如Verilog、VHDL等)或高层次综合(HLS)描述的格式,以便在FPGA上实现。
(3) 硬件加速模块设计:针对网络中的卷积层、池化层、全连接层等不同类型的层,设计相应的硬件加速模块。可以利用FPGA的并行计算能力和资源特性进行优化,以提高加速器的性能。
(4) 数据流与控制流设计:设计数据流和控制流以实现网络层之间的数据传输和控制信号传递。这包括考虑数据重用、缓存策略和流水线设计等方面。
(5) 系统集成与接口设计:将设计好的硬件加速模块集成到一个完整的系统中,并设计与处理器(如ARM)或外部设备(如摄像头、显示器等)的接口。可以使用Avalon接口或其他标准接口进行集成
推理结果叠加:(这是HDMI输出在FPGA上的实现部分,这块除了叠加之外是熟悉的)
(1) 结果格式转换:首先,将神经网络推理得到的结果(通常为多维张量)转换为适用于视频显示的格式。例如,可以将检测到的物体边界框坐标和类别信息转换为图形绘制命令。
(2) 叠加层设计:设计一个叠加层,用于将神经网络推理结果与原始视频流相结合。这一层可以通过硬件模块(如专门的叠加IP核——这个查一下:视频叠加就是画中画,Video Mixer IP是OSD的升级版,vivado2019.1后OSD已不再使用,Video Mixer IP主要功能就是实现视频叠加输出,最多可叠加16路视频)或软件实现。叠加层需要接收原始视频帧和神经网络的输出结果,并在适当位置叠加推理结果。
(3) 图形绘制:根据转换后的推理结果,使用图形绘制功能在原始视频帧上绘制边界框、类别标签和其他相关信息。绘制过程可以通过硬件加速(如使用FPGA上的图形处理单元)或在软件中实现。
(4) 帧缓存与同步:设计帧缓存以存储叠加后的视频帧,并确保视频流的同步。由于神经网络加速器的推理速度可能与摄像头的帧率不同,因此需要在帧缓存中实现帧同步机制,以防止画面撕裂或卡顿现象。
AI赋能FPGA(三)沂舟无限进步公众号 20230419
InnovateFPGA大赛
集成电路大赛 海云捷讯杯 学习如何使用FPGA来做人工智能加速
1. 权重共享:权重共享是一种减少模型大小的方法,通过将具有相似值的权重聚类并共享同一个权重,可以显著减少权重数量,降低计算量和存储需求。权重共享可以减小模型尺寸,同时在FPGA上节省资源。
2. 低比特量化:低比特量化是一种降低权重精度的方法。通过将权重和激活函数的精度从32位浮点数降低到更低比特宽度的整数(例如8位或16位),可以减少存储需求和计算复杂度,同时保持较高的推理性能。低比特量化在FPGA上具有较好的适应性,因为FPGA可以灵活地实现定制化的低精度算子。
3. 网络剪枝:网络剪枝是一种减少神经网络参数和计算量的方法。通过剪除网络中的一些不重要的权重或神经元,可以在保持模型性能的同时减小模型尺寸。这有助于在FPGA上实现更高效的神经网络加速器。
4. 循环展开与流水线设计:循环展开是一种优化计算过程的方法。通过将循环结构展开并在硬件中并行执行,可以显著提高计算速度。与此同时,采用流水线设计可以充分利用FPGA的并行计算能力,进一步提高性能。但这种方法可能会增加硬件资源消耗。
5. 存储优化:神经网络加速器中的存储操作通常是性能瓶颈。为了优化存储,可以使用局部存储器(例如BRAM)缓存权重和中间结果,减少访问外部存储器的次数。此外,可以采用数据重用策略,减少存储器带宽需求。
没有看到如何选择飞桨平台,是知识类的介绍
作者对AI赋能FPGA的展望
1. 新型AI芯片与系统:为了满足日益增长的AI应用需求,未来可能会出现专门针对AI应用的FPGA芯片和系统。这些新型AI芯片将在硬件架构、计算资源、存储容量等方面进行优化,以提供更高的性能和更低的功耗。
2. 混合硬件平台:FPGA与其他AI硬件(如GPU、ASIC等)的结合可能成为一种趋势,构建混合硬件平台以充分发挥各自的优势。例如,FPGA可以负责实时和低功耗的计算任务,而GPU可以用于大规模的并行计算,从而实现更高效的AI应用。
(这个看到很多,异构计算类的新想法)
3. 智能编译与调度:随着AI框架和工具的发展,未来的FPGA编译器可能会更加智能化,可以自动优化神经网络的部署和映射。此外,运行时调度器也将实现更高效的资源管理和任务分配,从而提高FPGA上AI应用的性能。
4. 端到端的AI解决方案:FPGA可能会成为端到端AI解决方案的重要组成部分,涵盖数据采集、预处理、神经网络加速、结果输出等环节。这将使得FPGA在各种AI应用场景中具有更强的竞争力。
5. 开源与标准化:为了降低开发门槛和促进技术创新,未来可能会出现更多的开源FPGA工具和标准。
6. 安全与隐私保护:通过硬件层面的加密和安全机制,FPGA可以为AI应用提供更高级别的安全保障。