基PYNQ台实现手写数字识
1设计概述
11PYNQ台简介
PYNQ全称Python Productivity for Zynq原Zynq架构基础添加python支持Zynq赛灵思公司推出行业第扩展处理台系列芯片中集成ARM处理器FPGA编程逻辑器件旨视频监视汽车驾驶员辅助工厂动化等高端嵌入式应提供需处理计算性水PYNQ希够助python语言身易易学扩展库全社区活跃贡献度高等特性效降低Zynq嵌入式系统开发门槛PYNQARM处理器FPGA器件底层交互逻辑完全封装起顶层封装python需import应模块名称导入应硬件模块进行底层层数交互者系统提供硬件加速
简单说直接硬件底层进行封装户助封装库文件直接python语言操作硬件IO脚等功软件工程师说需复杂繁琐开发工具基浏览器Jupyter Notebook工具直接编辑工程代码系统架构师助PYNQ设计更清晰软件接口系统架构硬件工程师言设计硬件台够更开发背景
目前支持PYNQ开发板3种图11示设计中开发板zcu104
图11支持pynq开发板
12设计目标概述
终实现目标:完全python脚控制手写数字识读入手写数字图片python opencv库函数读取测试图片Python控制Arm处理器调卷积池化等高速硬件电路进行计算然出手写数字识结果整体框图图12示
图12设计实现目标
2神网络搭建训练
21 MNIST数集
实验中选择MNIST数集进行手写数字识MNIST数集已嚼烂数集 教程会手 成 典范
MNIST 数集 httpyannlecuncomexdbmnist 获取 包含四部分
l Training set images trainimagesidx3ubytegz (99 MB 解压 47 MB 包含 60000 样)
l Training set labels trainlabelsidx1ubytegz (29 KB 解压 60 KB 包含 60000 标签)
l Test set images t10kimagesidx3ubytegz (16 MB 解压 78 MB 包含 10000 样)
l Test set labels t10klabelsidx1ubytegz (5KB 解压 10 KB 包含 10000 标签)
MNIST 数集美国国家标准技术研究 National Institute of Standards and Technology (NIST) 训练集 (training set) 250 手写数字构成 中 50 高中学生 50 口普查局 (the Census Bureau) 工作员 测试集(test set) 样例手写数字数
张图片28*28(图)黑白色构成(里黑色01浮点数黑色越深表示数值越1)图片采集手写09数字TensorFlow数集相关操作封装库中
22 神网络设计
搭建神网络输入图片进行训练终合适权重偏置权值存储起提供面硬件
实验中设置网络6层包括两卷积层两池化层两全连接层接softmax分类器输出概率值网络层输入输出kernel参数图示:
221 卷积层
卷积质种应加运算通设定步长 Kernel原图矩阵面移动做加运算值存放进入输出矩阵中
数通卷积网络图中显著特征会提取质信号处理卷积类似周围信息加权求者说信号进行滤波
222 池化层
卷积运算中存交叠程计算提取特征存关联性说特征冗余项特征表示面进行采样操作加池化层
池化种方法常般值池化均值池化项目实验中两池化层值池化
池化意义:
l 减少卷积运算产生冗余
l 池化层邻域特征点整合新特征
l 池化特征参数减少时(旋转移伸缩等)特性保留
223 机失活
神网络训练程中Dropout种广泛trickDropout说起非常简单训练程中前层输出值里会部分神元机死亡种死亡暂时训练时发生测试时恢复
Dropout减神元间赖问题减少拟合产生
224 Softmax
Softmax非线性函数
数全连接层已成维量值应取labelsoftmax进行化直观理解概率问题label加1
softmax直白说原输出313通softmax函数作映射成(01)值值累1(满足概率性质)理解成概率选取输出结点时候选取概率(值应)结点作预测目标
23 tensorflow训练
Tensorflow拥层级结构部署类服务器PC终端网页支持GPUTPU高性数值计算广泛应谷歌部产品开发领域科学研究机器学领域tensorflow方便搭建需神网络通调tensorboard网络训练准确率损失函数变化进行视化
MNIST数集搭建神网络面进行1000次迭代测试集面准确率达98左右面硬件设计
tensorboard中网络结构:
电脑终端中进行1000次迭代训练显示:
tensorboard中训练程中训练集测试集准确率变化:
时损失函数降低:
准确率趋势变化稳排拟合性训练结束层网络权值参数文件保存(bin文件)提供续硬件
3Vivado HLS实现硬件电路
31高层综合简介
传统FPGA设计流程中般顶模块化设计模块包括户编写RTL代码高层次综合指户采C\C++等高级语言编写程序通高层综合工具综合成RTL代码样极提高开发效率软件开发员参硬件开发中
Vivado HLSXilinx公司推出高层综合工具Vivado工具设计理念IP核心功模块做封装成IPVivado集成实现化设计复Vivado HLS做IP封装工具封装CC++SystemC者OpenCL等高级语言实现功函数
部分工作通高层次综合工具描述卷积池化运算C代码综合RTL代码载板子硬件电路实现卷积池化运算加速
32设计流程
设计输入里三文件需手动编写TestBenchC函数文件头文件Constraints文件创建工程时候完成器件时钟频率约束Directive理解引导文件通添加引导工具生成想电路全串行全行等
321实现方法
需实现种通卷积池化运算电路第步第二步卷积运算电路中实现第步第二步池化运算电路中实现
全连接运算中池化输出三维数组展开成维然权重矩阵相输出种运算通卷积运算实现权重矩阵转换四维数组然池化输出四维数组进行卷积运算样运算结果前面样需实现两种电路全连接运算通卷积运算电路完成
两模块通axi总线挂载cpu总线通cpu配置参数完成运算
322代码讲解
描述卷积运算需参数输入数矩阵高度宽度输出数矩阵高度宽度卷积核移动步长输入通道数输出通道数等padding指矩阵周围填充数值两种模式种全部填零种填入元素相等值里采第二种
通定义变量描述卷积运算参数
图中定义描述池化运算参数
实现卷积运算池化运算c语言程序
卷积运算:
池化运算:
Vivado HLS工具代码中添加引导文件样生成带axi总线接口模块通axi总线接口模块连接总线cpu配置参数
终生成模块示
1
4硬件系统搭建
41硬件系统集成
开vivado进入block design界面HLS生成两ip添加进需开发板面Arm处理器添加进zcu104开发板arm处理器ip名Zynq Ultrascale+ MPSoCxilinx开发板系统默认DDR接Arm处理器受块Arm处理器控制次设计中希Arm控制什时候进行卷积操作时需卷积池化两电路够访问存存中读取数工作流程图示
生成block design出加进zynqconvpool三ip外新ip两AXI interconnectAXI smartconnectprocessor system reset中AXI interconnectAXI smartconnect总线互连器ARM处理器master口通总线互连器分成两master线分连接convpoolslave接口实现卷积池化两ip控制Convpool两ipslave接口master接口卷积池化操作需存中读取数Convpool两ipmaster接口通总线互连器连接arm处理器slave接口实现存访问
42Python开发硬件
421pythonip操作
Pynq必须python3Python硬件配置调Overlay函数调方法from pynq import Overlay面介绍Overlay函数功
Overlay函数指定烧写FPGAbit文件首先指定特流文件
方法:
from pynq import Overlay
olOverlay(testbit)
bit文件烧进PL调Overlaydownload函数
oldownload()
Download函数Python通download函数PS发出指令PL进行编程PL指Progarmmable Logic开发板编程逻辑部分FPGA PS指 Processing System开发板面arm处理器
执行oldownload()需bit文件tcl脚Bit文件vivado工程生产bitstreamtcl脚生成:开block design状态export block designpython脚放相路径
查调设计中ip
ip_dict函数
执行ip_dict函数返回设计中物理址物理址宽度ip类型等等参数help(Conv_0)查函数执行convolConv_0相ippython中实现例化help(conv)查ip函数里readwrite函数
Write函数需指定需写寄存器址需写入值Read函数需指定寄存器址返回该寄存器值(讲pre时说读写存应该读写ip中寄存器值)
址必须int类型值必须int者bytes否会出错
422python存操作
函数:Xlnk调方法from pynq import XlnkXlnk官方介绍
Xlnk法numpy类似存中开出块数组存放需权值矩阵数值Xlnk开出物理址连续空间存储数DDR中连续区间存储数调pointer函数physical_address函数返回虚拟址真实物理址Xlnk开数组保证设计convpool ip取数时候取出取正确数
第次卷积操作需数进行存分配实际操作代码
开出数组需训练网络权值导入权值矩阵供续首先bin文件中权值读出重新排列写入存中
43 完整硬件计算程
代码示分分类图片数读入第层卷积第层池化第二层卷积第二层池化第层全连接第二层全连接出分类结果阶段面阶段具体操作进行讲解
分类图片数读入
读入手写数字图片张jpg尺寸28*28(改变尺寸mnist数集相)素点灰度值255原灰度值mnist图片中255代表黑普通图片0黑
图数存入存中名image物理空间中
第层卷积
根面讲write函数卷积电路功配置次卷积需参数
配置卷积核高度卷积核宽度XY方步长Padding模式否需relu权值矩阵W全部值权值矩阵b全部值输出卷积计算结果等等
convwrite函数寄存器写数物理址写入存中相应值第层卷积操作中相应寄存器写入卷积核高度卷积核宽度XY方步长Padding模式否需relu具体值存放权值矩阵W权值矩阵b寄存器通读取存中数赋值卷积计算结果放入存h_conv1中
分计算开始束信号定义电路结构关vivado hls做完高层综合会生产c语言驱动需读写寄存器c语言函数中定义Run poolRun conv函数c驱动翻译式改写面C语言驱动路径
第层池化
池化操作函数定义
基操作模式第层卷积相次卷积次池化两次全连接终计算出09数字概率选取作结果输出
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档