使用FPGA实现深度学习技术应用.docx

上传人:lao****ou 文档编号:796927 上传时间:2024-05-26 格式:DOCX 页数:10 大小:177.63KB
下载 相关 举报
使用FPGA实现深度学习技术应用.docx_第1页
第1页 / 共10页
使用FPGA实现深度学习技术应用.docx_第2页
第2页 / 共10页
使用FPGA实现深度学习技术应用.docx_第3页
第3页 / 共10页
使用FPGA实现深度学习技术应用.docx_第4页
第4页 / 共10页
使用FPGA实现深度学习技术应用.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《使用FPGA实现深度学习技术应用.docx》由会员分享,可在线阅读,更多相关《使用FPGA实现深度学习技术应用.docx(10页珍藏版)》请在第一文库网上搜索。

1、使用FPGA实现深度学习技术应用这是新的系列教程,在本教程中,我们将介绍使用EEGA实现深度学习的技术,深度学习是近年来人工智能领域的热门话题。在本教程中,旨在加深对深度学习和FPGA的理解。用CC+编写深度学习推理代码高级综合(H1S)将C/C+代码转换为硬件描述语言FPGA运行验证在上一篇文章中,我们在MNIST数据集上创建并训练了一个网络模型。从本文开始,为了在FPGA上运行推理处理,我们将首先用C编写推理处理代码。在这篇C+实现的第一篇文章中,我们开始针对卷积层的C+实现。具体内容是(D卷积层的实现,(2)运算校验(C验证,C/RT1协同验证)(就是H1S的流程)卷积层实现在上一篇文章

2、中,我解释了卷积层是对图像的过滤过程,但是并没有解释输入输出通道如何处理,过滤时图像的边缘处理等。由于本文旨在实现层面的理解,因此我将详细介绍这些要点。处理I/O通道在图像处理中,对RGB输入图像进行噪声去除等滤波处理,并频繁地进行RGB图像的处理。在这种情况下,卷积过程往往是针对每个通道(R/G/B)独立完成的,输入的G/B通道值不影响输出的R通道结果。每通道独立卷积另一方面,在卷积层中执行的卷积过程中,所有输入通道的值影响每个输出通道。因此,对于输出图像的每个像素(输出通道,Y坐标,X坐标),所有输入通道和周围的像素区域都会参与计算,导致计算量非常大。使用所有通道的卷积另外,如上所述每个通

3、道独立卷积的卷积层称为DePthWiSeConvo1utj.ono这通常用于减少计算量的网络模型,例如Mobi1eNet(https:/arxiv.org/abs/1704.04861)0图像边缘处理在对图像进行卷积处理时,图像边缘的处理往往是一个问题。由于卷积过程在计算某个像素时使用了周围像素,因此对于没有周围像素的像素,例如图像边缘的像素,就无法获取周围像素。卷积独幽络主要通过以下两种方式处理边缘像素。无填充:输出图像减少了输入图像的卷积区域。补零:将输入图像预先用卷积区域扩展,用零填充该区域,对原始输入图像进行卷积处理。没有填充的卷积的图形表示如下所示:在这种情况下,输出图像将是比输入图

4、像小一个滤波蛰尺寸的区域(橙色部分)。如果内核大小为3(中心像素+/-1),则输出图像大小在宽度和高度上都将为-2,因为图像之外的1个像素是无法进行卷积的区域。无填充卷积:输出图像缩小接下来,零填充的图形表示如下所示。在这个例子中,预先在输入图像的外部添加了一个值为O的区域(灰色区域),进行卷积,这样就不会出现图像缩小现象。如果内核大小为3,则带填充的输入图像大小在宽度和高度上均为+2,因为1像素将添加到屏幕外部且值为零。零填充卷积:输出图像大小保持不变在我们的模型中,我们在所有卷积层中使用零填充。C代码如果根据目前为止的解释用C语言实现卷积过程,它将类似于下面的代码。voidconv2d(c

5、onstf1oat*x,constf1oat*weight,constfIoat*bias,int32twidth,int32theight,int32tinchanne1s,int32_toutchanne15, int32tksize,f1oat*y)for(int32toch=O;ochoutchanne1s;+och)for(int32th=O;hheight;+h)for(int32tw=O;wwidth;+w)f1oatsum=O.f;for(int32_tich=O;ichin_channe1s;+ich)for(int32_tkh=O;khksize;+kh)(for(int3

6、2_tkw二O;kwksize;+kw)int32_tph=h+kh-ksize/2;int32_tpw-w/zeropadding+kw-ksize/2;pwOif(ph=width)Ph=heightcontinue;ph)anne1s*width+ich)int64_tpw;int64_t*ksize+kh)*pixidx=(ich*height+weight_idx=ksize+kw;(och*in_chsum+=xpix_idx*weightweight_idx;)/addbiassum=biasoch;y(och*height+h)*width+w=sum;)此函数的解释如下所示:

7、输入- -x:输入图像。shape=(inchanne1s,height,width)一weight:权重因子。shape=(out_channe1s,in_channe1s,ksize,ksize)一bias:偏置值。shape=(out_channe1s)输出- -y:输出图像。shape-(out_channe1s,height,width)参数:一width:输入/输出图像的宽度- height:输入/输出图像高度一inchanne1s:输入图像的通道数- -out_channe1s:输出图像的通道数一ksize:内核大小每个输入/输出的内存布局shape=(.)如表格所示,但f1oa

8、txin_channe1sheightwidth;将其视为定义为三维数组。卷积层的处理是一个6级循环。第一个三级循环确定输出图像上的位置,随后的三级循环对该位置执行卷积操作。零填充在第24-26行完成。由于实际创建零填充输入图像是低效的,所以零填充是通过在访问图像外部时不参与乘积之和来实现的。第31行是卷积过程中的积和运算部分,这个积和运算outchanne1s*height*width*in_channe1s*ksize*ksize进行了两次。这个卷积过程的操作数量非常大,足很多情况下,卷积层支配着卷积神经网络的执行时间。这就是为什么计算单元比强多的但组和FPGA更适合处理神经网络。第37行

9、是偏差处理部分。到目前为止,我还没有触及什么是偏差处理,但正如我在这里所写的那样,它是一个简单地对输出值进行偏移的过程。这种偏差处理在输入通道/内核大小(Y,X)循环之外,因此处理步骤的数量非常微不足道。运算检查作为对上一节创建的函数运行的确认,conv2d我们将比较结果是否足够接近在PyTorch的C+API(Iibtorch)上执行的卷积计算。每个测试包括以下两个步骤。C.验证C/RT1协同验证1、C验证类似于正常的软件开发,gcc只是用通用的编译器编译源代码并检查结果。2、C/RT1协同验证是使用AMD-Xi1inx提供的高阶综合工具VitisH1S进行验证。对于此验证,H1S首先将C源

10、代码转换为Veri1ogHD1等RT10然后在Vivado中对生成的RT1执行功能仿真。在这个逻辑仿真中,将一个类似于C验证的数据序列输入到创建的电路中,确认输出结果是否正确。本节以后的内容将以运行创建的源代码的形式进行说明。源代码将在后面发布。运行环境运行环境面向1inUX机器。不支持Windows/Mac操作系统。此外,由于预装gcc版本,该发行版针对Ubuntu18.04o难以自行准备运行环境的朋友,看看就行。需要以下工具。Vivado2023.2(2019.2)cmake=3.11Cmake比较麻烦,因为它需要的版本比apt等包管理器可以安装的版本高,但是可以王瑟预构建的二进制文件(c

11、make-1inux-x86_64.tar.gz)0C.验证测试代码/拴stsrcfCOnv2d.cc的使用,我不会在本文中详细介绍,但测试将是一个正常的随机测试。可以按照以下步骤构建代码。请将-也VAD(1H1S_R00T的值相应地替换为安装的Vivado的路径。$mkdir/bui1d$Cd/bui1d$cmake.-DVIVAD0_H1S_R00T=/1oo1s/Xi1inx/Vivado/2023.2$cmake-bui1d.使用以下命令进行测试:如果没有任何错误,那它就是成功的。$ctest-V-Rconv2d_refC/RT1协同验证运行以下命令以使用H1S启动C/RT1协同验证。

12、大约需要5分钟。$ctest-V-R,conv2dhisCoSinr当执行C/RT1协同验证时,会自动创建一个H1S项目文件,因此可以使用它来检查高级综合和RT1仿真波形的结果。要检查这一点,请使用以下命令启动H1S:$vitis_h1s&H1S打开后,单击“打开项目”,如下所示,导航到bui1dtestsh1sconv2dconv2dhiscosim目录并单击“确定。H1eEdi1PreVkHH1SWWcowPMXX1INXVITIS1NetJ)1sFI1XFPCAH1SesO2Viv4fo,h1s1NtJny.detectorH:FI1EJHSede-cany.(Jetectpredfe-

13、cnydetectrOPENRECENTVITISH1SRESOURCESTutoria1sCserGuideRe1easeNottsPROJECTCreateProjectOpenProjectC1oneExaap1s然后,H1S综合报告将显示如下屏幕所示。从此报告中,可以看到从PerformanceEstimates列创建的电路的估计性能,以及从Uti1izationEstimates看到在目标设备上实施时的估计资源使用情况。点击顶部红框包围的区域,可以看到仿真的波形。Fi1eEditProjectSo1utionWindowHe1p.。屈G窗检局UA叼田匐&同6rJSynthesis(s

14、o1ution1)(conv2dh1scsynth.rpt)汉Genera1InformationDate:Version:FriJuI1005:52:0520232019.2(Bui1d2698951onThuOct2419:15:34MDT2019)Project:So1ution:conv2dhiscosimSo1ution1Productfami1y:Virtexup1usTargetdevice:cu200-fsgd2104-2-ePerformanceEstimatesTimingBSummaryC1ockTargetEstimatedUncertaintyap_c1k5.00ns4.087ns0.62nsB1atencyBSummary1atency(cyc1es)1atency(abso1ute)Interva1(cyc1es)minmaxminmaxminmaxType?noneDetai1SInstanceAvai1ab1eAvai1ab1eS1RUti1ization(%)Uti1izationS1R(%)S1oopNameBRAM_18KDSP48EFF1UTURAMDSP-Expression-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服