- 博客(7)
- 收藏
- 关注
原创 pynq实现hog+svm行人检测(1)
接下来,将这个窗口分成一个个cell,比如128x64的窗口分成16x8个8x8的cell,根据每个cell内的梯度方向,对应幅值加权分到9个bin上,可以得到16x8个长度为9的数组,也就是梯度直方图。对图像进行提取hog特征时,是以窗口为单位,比如一个128x64大小的窗口,以步长为8在一张图片进行滑动,滑动一次提取一次hog特征,进行一次判断。计算完后,可以得到每个像素的梯度和幅值。接下来进行下一步,划分block,将4个8x8的cell组成1个的block,然后以步长为8移动,继续组成block。
2023-05-14 20:40:44 325
原创 基于PYNQ实现LeNet(6)在jupyter notebook上使用lenet ip
打开xlenet_pynq.c,之前我们使用XLenet_pynq_Set_img_r和XLenet_pynq_Set_OUT_offset两个函数进行ip输入和输出数据,在xlenet_pynq.c中我们可以看到,操作就是往XLENET_PYNQ_CTRL_ADDR_IMG_R_DATA和XLENET_PYNQ_CTRL_ADDR_OUT_OFFSET_DATA两个地址写入数据,这两个地址可以在xlenet_pynq_hw.h中找到,如下图。首先,在官网上下载SD卡的映像文件,如下图。
2023-03-26 14:56:00 836
原创 基于PYNQ实现LeNet(5)HLS IP的导出及上板验证
然后可以开始导出ip,点击Export RTL,选择Verilog,点击configuration,将Version设置为1.0,这一步是为了防止报错,因为2022年后使用会出现一个官方的bug,导致无法导出ip,当然官方也发布了脚本补丁,不过需要自己去论坛手动下载运行。然后就可以launch sdk,转到SDK开始写代码,先创建一个新的文件main.c,写上需要的头文件,如下。然后打开vivado,创建工程,选择刚刚创建的文件夹,再选择开发板为pynq-z2,确定后完成创建。换图片为7,结果如下。
2023-03-25 15:22:19 957 2
原创 基于PYNQ实现LeNet(4)HLS约束及优化
使用PIPELINE和UNROLL并行计算后,工程所消耗的周期会大大降低,而工程所消耗的资源量会提高,这就要求我们在资源和时间中取得平衡,在使用这些优化过程中,对代码也有一定要求,有些代码添加优化后并不能得到想要的结果,甚至与没有添加优化的代码综合结果一样,这就需要改写代码或者使用其他优化方法。接下来是接口相关的约束,数据和模块的INTERFACE。还有数据的读取接口,选择m_axi,depth是数据的个数,port是数据,offest设置为slave,bundle为接口名称可自行设置。
2023-03-24 11:30:20 664
原创 基于PYNQ实现LeNet(3)仿真验证
在验证之前,要在matlab上跑一遍正确的结果,以及把网络的权重转成.h头文件导入HLS工程文件夹下。以上为将28x28图片转为头文件的代码,记得将数据转置后处理,测试图片可以打开电脑的画图软件自己画,只要是28x28的黑底白字图片即可,格式为bmp图片。接下来就可以开始仿真,点击HLS中的Run C Simulation,即可开始仿真。在前篇文章中在HLS上完成了LeNet的编写,编写完lenet后,要确保网络的功能正确就需要仿真测试,在HLS上可以使用c语言仿真验证代码。以上是将权重转为头文件的代码,
2023-03-22 23:08:00 575 2
原创 基于PYNQ实现LeNet(2)通过HLS实现
在HLS编写lenet时(除去约束优化)基本没有任何硬件相关,只要懂c或c++,还有神经网络基本的知识就可以完成。但是在HLS上,要注意写出来的代码是否可以被系统综合,还有一些语句或方法是不能在HLS使用(如递归),或者有特殊编写方式的,具体可以参考xilinx官方的UG902文档的以下章节。然后选择希望达到的目标周期时间和芯片型号,这里选择20ns(即50MHz时钟,先完成目标,再追求速度),芯片型号为xc7z020clg400-1对应pynq开发板。在进入全连接层前需要将输入转化成列(行)向量。
2023-03-21 23:08:01 813 1
原创 基于pynq实现Lenet(1)LeNet简介
本次在pynq上实现的lenet网络为28x28输入,到6个5x5的卷积核,输出6x24x24的特征图(feature map),再到最大池化层(2x2size)输出6x12x12的特征图,输入到16个6x5x5的卷积核,输出16x8x8的特征图,再到最大池化层(2x2size)输出16x4x4的特征图,最后经过三个全连接输出(120,84,10)。池化其实是一个下采样的过程,用来缩小高、长方向的尺寸,减小模型规模,提高运算速度,简单来说,就是为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合。
2023-03-21 22:51:21 690
lenet HLS代码(pynq-z2)
2023-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人