电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

HLS-卷积运算单元设计与SDK测试

45页
  • 卖家[上传人]:Baige****0346
  • 文档编号:266123132
  • 上传时间:2022-03-14
  • 文档格式:DOCX
  • 文档大小:2.66MB
  • / 45 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、 HLS卷积运算单元设计与SDK测试 目录o 一、引言o 二、概念o 三、程序o 四、优化o 五、测试o 六、补充一、引言涉及内容包括:多位宽并行,动态定点数运算,设置LOOP_TRIPCOUNT来性能分析等。二、概念1、功能定义。为了让卷积运算单元更具灵活性,在输入图层的长宽高、卷积核的大小、Stride的大小等很多功能上可设置。2、feature的内存排布。之前的池化模块的feature,是一个四维数组。而卷积核没有分块前,也是四维的。这边按问答方式对一些概念进行整理。为什么未分块前,卷积核(feature、kernel)为四维的?从下面这张图上看,卷积核可以表示为2x3x3x3,即:个数x长x宽x通道数,不同的地方将这四个参数的位置可能颠倒了下,但都只是这四个概念。下面对这四个参数做个理解,个数:表示不同卷积核的数目,对于一张完整的图(RGB都有),要提取里面的不同特征,需要多个不同的卷积核来进行提取,从之前的学习中,可以知道,卷积核本质就是特征feature,用一个特征怎么可能得到不同特征嘛,所以需要多个卷积核。长x宽:这个为卷积核的size,很好理解,是和局部特征单独运算相关

      2、的。通道数:相同卷积核的数目(权值共享),与一张完整图片中准备卷积处理的通道数相同,一般处理R、G、B通道,一个卷积核的通道数,也就为3了,同时可以得到3张feature map。在下面这张图的例子中,输入6x6,kernel为3x3,输出4x4,首先确定不是same模式,为valid模式,padding为0。只看H,有4-1=(6-3+2xpadding)/stride,则stride为1。通过在通道方向上相乘求累加后,9个点再做一次累加,得到输出feature map上的一个点。为什么分块后,卷积核(feature、kernel)为五维的?从下面这张图上看,可以把kernel上任意个数据表示为kernel: CHoutKyKxCHin/KK。CHout表示的是有多少个kernel,Ky和Kx为一个kernel的宽和长,CHin/K为在输入图层方向切了多少个子块,K为每个子块的索引。因此,本设计中,由一个四维的输入图层feature map和五维的feature(卷积核、权重),得到一个输出的feature map输出图层。3、卷积运算的full、same和vaild模式是啥?这个参

      3、考了前人的一篇文章,讲的很好,非常感谢,Add在最后边了。橙色为image,蓝色为kernel。1full mode模式:从image和kernel刚相交,就开始做卷积运算。而其余白色的地方全部填0,这样一张橙色的image先补了两行两列的0后,如果stride为1的卷积运算后,图片反而变大了,这模式很少用。2same mode模式:当kernel的中心K与image的边角重叠时,开始做卷积运算。这种模式下,如果stride为1的卷积运算后,输出的feature map尺寸是保持不变的(相当于输入图)。相比full mode,这模式就用的多了。该模式可以在前向传播的过程中,让特征图的大小保持不变,调参师不需要精准计算尺寸的变化,因为根本就没有变化。由于卷积核的size尺寸一般为奇数,故可以总结一个padding公式,用来计算需要补多少行列的0数据,才能满足same mode模式。具体公式为:padding_x=(kx-1)/2,padding_y=(ky-1)/2。举个例子,这里size为33,那么,padding_x=padding_y=1。3valid mode模式:当kernel

      4、全在image里时,进行卷积运算,明显地,会丢掉一部分的数据。如何计算卷积运算后的feature map的尺寸大小?也参考了前人的博文,但网上貌似没有发现推导的过程,举几个例子应该也能总结下,这里也直接作为经验来使用了。计算的公式为:output_h =(originalSize_h+padding x 2-kernelSize_h)/stride +1。其中,originalSize_h为原始输入image的H或W,padding为填充的行或列数,kernelSize_h为kernel的size大小,stride为x或y方向上的步长。拿一道面试的题来试试手吧。(卷积向下取整,池化向上取整)input image:200200first layer_conv:kernel size 55,padding 1,stride 2second layer_pooling:kernel size 33,padding 0,stride 1third layer_conv:kernel size 33,padding 1,stride 1output feature map?答:1(200-5+

      5、21)/2+1 为99.5,取99。2(99-3)/1+1 为97。3(97-3+2*1)/1+1 为97。分块时为什么是沿输入图层的方向,而不是输出图层方向?为了并行地做子块的矩阵乘累加运算,得到结果(和之前FIR滤波器案例类似)。要时刻把握住,是取出输入feature map的一个子块,和权重的一个子块,来进行相乘累加的操作。三、程序1、conv_core.h文件。#ifndef _CONV_CORE_H_#define _CONV_CORE_H_#include #include using namespace std;#define K 8/ 单个数据是16bit位宽,一个子块数据是16*K位宽,用bus表示。/ 输入图层和权重都是ap_inttypedef ap_int dtype_dat;typedef ap_int dtype_bus;/ 两个INT16数据相乘,得到的结果会溢出,用32位来存。根据经验,用40位来作为累加的结果位宽。typedef ap_int dtype_mul;typedef ap_int dtype_mul_bus;typedef ap_int d

      6、type_acc;/ C语言无法传可变索引的数组的,但在硬件内存中,都按照一维分布,故可以把地址传进去。/ 后续得自己计算存放的地址来取数据/ 定点化后的数据由三个小数点的参数来计算得到,INT16,小数点由四位来表示void Conv(ap_uint CHin, / 输入通道数ap_uint Hin, / 输入特征的高度ap_uint Win, / 输入特征的宽度ap_uint CHout, / 输出特征的通道数ap_uint Kx, / 卷积核的宽度ap_uint Ky, / 卷积核的高度ap_uint Sx, / 卷积核扫描时,宽度方向的步进ap_uint Sy, / 卷积核扫描时,高度方向的步进ap_uint mode, / 卷积的模式,valid还是sameap_uint relu_en, / 激活非线性反激活层标志dtype_bus feature_in, / 输入feature map的数据,由于C中无法使用可变数组,故使用指针,传地址来定位具体数据,四维数组按一维分布/ 之前池化使用的是固定大小的,可以按照固定数组来传,但这里数组长度是变的ap_uint feature

      7、_in_precision, / 输入feature map数据小数点位置dtype_bus W, / 输入权重的数据,也是指针索引ap_uint W_precision, / 输入权重数据小数点位置dtype_bus feature_out, / 输出feature map的数据,也是指针索引ap_uint feature_out_precision / 输出feature map数据小数点位置);/mode: 0:VALID, 1:SAME#endif2、conv_core.cpp文件。#include conv_core.h/ 输入特征图四维:C/KHWK/ 输入权重值五维:CHoutKyKxCHin/KK/ 输出特征图四维:C/KHWK,均可以计算出来void Conv(ap_uint CHin, / 输入通道数(输入图层方向上的数目)(卷积核与特征图参量)ap_uint Hin, / 输入特征的高度(卷积核与特征图参量)ap_uint Win, / 输入特征的宽度(卷积核与特征图参量)ap_uint CHout, / 输出特征的通道数(卷积核参量)ap_uint Kx, /

      8、卷积核的宽度ap_uint Ky, / 卷积核的高度ap_uint Sx, / 卷积核扫描时,宽度方向的步进ap_uint Sy, / 卷积核扫描时,高度方向的步进ap_uint mode, / 卷积的模式,valid还是sameap_uint relu_en, / 激活非线性反激活层标志dtype_bus feature_in, / 输入feature map的数据,由于C中无法使用可变数组,故使用指针,传地址来定位具体数据,四维数组按一维分布/ 之前池化使用的是固定大小的,可以按照固定数组来传,但这里数组长度是变的ap_uint feature_in_precision, / 输入feature map数据小数点位置dtype_bus W, / 输入权重的数据,也是指针索引ap_uint W_precision, / 输入权重数据小数点位置dtype_bus feature_out, / 输出feature map的数据,也是指针索引ap_uint feature_out_precision / 输出feature map数据小数点位置)/mode: 0:VALID, 1:SAMEap_uint pad_x,pad_y; / padding数据,表示x和y方向待填补的行列数ap_uint CHin_div_K=(CHin+K-1)/K; / 输入图层方向上,切块后每个的长度ap_uint out_truncate;out_truncate=feature_in_precision+W_precision-feature_out_precision;if(mode=0) / valid下不进行paddingpad_x=

      《HLS-卷积运算单元设计与SDK测试》由会员Baige****0346分享,可在线阅读,更多相关《HLS-卷积运算单元设计与SDK测试》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.