开云-使用 PYNQ 训练和实现 BNN

利用 PYNQ 练习和实现 BNN 时候:2024-12-13 21:30:41 手机看文章

扫描二维码随时随地手机看文章

利用 PYNQ 可以轻松在 FPGA 上实现加快 AI/ML,而无需编写一行 HDL!让我们看看若何做到这一点...

介绍

机械进修是近几年的热点话题,有很多用例和利用。Zynq 和 Zynq MPSoC 等异构 SoC 则更具显著优势,由于它们答应在可编程逻辑内实现推理收集。

在 PL 中实现推理收集可显著提高机能。固然,对那些不熟习机械进修的人来讲,很难知道从哪里最先,特别是假如想利用可编程逻辑来加快机能。

这就是 Pynq 框架的感化地点,它答应我们利用 Python 等更高级的说话,“拜候”可编程逻辑来履行 ML 加快。

对今天项目,我们将利用合用在 Pynq Z2、Z1 和 Ultra96 的Quantized / Binary Neural Network(BNN)。

该项目标重点是新参数的练习和利用。

在 PYNQ 上设置装备摆设 BNN

Pynq 映像启动后,利用 Web 阅读器经由过程地址http://pynq:9090毗连到 Pynq(假如要求输入暗码,请输入“xilinx”)

要安装 BNN,需要利用终端窗口,可以在阅读器中经由过程选择新建 - 终端打开一个新的终端

我们将利用来自 NTNU 的 Xilinx BNN 存储库的 Fork,此 Fork 可以很好地展现若何练习新收集。

sudo pip3.6 install git+https://github.com/maltanar/BNN-PYNQ.git

下载和安装需要几秒钟。

完成后,将看到一个新的 BNN 文件夹,此中有几个新的notebook。

LFC - 全毗连收集,专为 28 x 28 灰色图象输入而设计 CNV - 专为 RGB 运算设计的卷积收集,32 x 32 输入

二者的布局以下所示。

测试安装

安装 BNN 后,下一步是运行一个(或多个)示例以确保安装可以正常运行。

对这个例子,决议运行 Road-Signs-Batch。这个notebook利用卷积收集对路标进行分类。

此notebook仅针对由一个标记构成的小图象进行测试,以后的测试将利用包括一个标记和其他图象的年夜图象。在这类环境下,算法会检测标记并对其进行分类。

该算法的第一遍测试会发生几个潜伏的符号候选者,以下所示。

对该初始图象利用阈值后可准确辨认终究的标记上。

固然,我们可以在利用法式中利用我们本身供给的收集。

练习本身的收集

要建立我们本身的收集,我们需要几样工具,此中起首需要的是一组准确标识表记标帜的练习数据。在这个例子中,我们将利用 fashion mnist 数据集练习神经收集,使其可以或许辨认服装。

当我们为笼盖层构建新收集时,最主要的是确保我们练习的收集与我们但愿利用的笼盖层上的收集不异。

Xilinx BNN GitHub 供给了一个练习目次,此中包括很多可用在建立新收集的 Python 剧本,很多剧本可以充任模板。

在 BNN github 的 BNN- SRC- Training 目次下,会发现很多可以帮忙练习新收集的剧本

此中包罗

lfc.py - 描写 LFC 收集布局 cnv.py - 描写 CNV 收集布局 binary_net.py-包括很多有助在练习的函数 finnthesizer.py-履行二进制格局的转换 mnist.py - 练习 LFC 收集进行 mnist 字符辨认 - LFC 收集的杰出模板 cifar10.py - 为 cifar 图象表征收集练习 CNV 收集 - CNV 收集的杰出模板

在这个例子中,将利用 fashion-mnist.py,它是 mnist.py 的改编版,用在练习 LFC 收集来检测和分类服装。

为了进行此练习们需要以下东东:

AWS 或高端 GPU 耐烦

一旦决议了练习情况,需要做的第一件事是设置 SW 情况,确保安装了以下内容。

Python - 包罗 NumPy 和 SciPy Theano - 用在处置多维数组的 Python 库 PyLearn2——机械进修的 Python 库 Lasange - 用在构建和练习神经收集的 Python 库

在包括 GPU 的宿主机上利用以下号令:

sudoapt-getinstallgitpython-devlibopenblas-devliblapack-devgfortran-ywgethttps://bootstrap.pypa.io/get-pip.py pythonget-pip.py--userpipinstall--usergit+https://github.com/Theano/Theano.git@rel-0.9.0beta1pipinstall--userhttps://github.com/Lasagne/Lasagne/archive/master.zippipinstall--usernumpy==1.11.0git clone https://github.com/lisa-lab/pylearn2美金 cd pylearn2pythonsetup.pydevelop--user

安装软件情况后,下一步就是下载练习图象和标签

可使用以下号令下载这些。

wget-nchttp://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz;gunzip-ftrain-images-idx3-ubyte.gzwget-nchttp://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz;gunzip-ftrain-labels-idx1-ubyte.gzwget-nchttp://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz;gunzip-ft10k-images-idx3-ubyte.gzwget-nchttp://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz;gunzip-ft10k-labels-idx1-ubyte.gz

如许我们便可以最先练习了。

pythonfashion-mnist.py

练习完成后,我们将具有颠末练习的收集 npz 文件。

利用 WinSCP 将 npz 文件传输到 Pynq。

同时将 binary_net、fashino-mnist-gen-binary-weights 和 finnthesizer python 剧本一并上传。

在 PYNQ 上实现

在 Pynq 上运行新收集之前,需要将权重转换为二进制格局。

经由过程运行下面的 Python 剧本来实现这一点

pythonfashion-mnist-gen-binary-weights.py

这将建立一个包括所有权重的新目次。

完成后我们便可以最先建立我们本身的notebook。

在 BNN 区域下建立notebook,履行以下操作:

设置根目次和parameter目次 - 在parameter目次中,将找到分歧练习收集的所有收集参数。

将 fashion-mnist 生成的权重传输到 param 目次中。不外,只需要在第一次运行此剧本时履行此操作。

一旦将参数加载到 params 目次中后,我们就要查抄它们是不是可以经由过程 LFC 收集的 available_params 函数拜候。

假如安装准确,还应显示 fashion-mnist-lfc 和最初的两个收集。

最后阶段是利用参数运行推理。为此,我们需要加载图象,将其转换为 mnist 图象格局并将其利用到收集。

然后我们可以输出推理的成果并显示图象以查看猜测是不是准确。

正如所看到的,它从图象输入中准确地辨认出了一条裤子。

为了领会收集的整体正确度,我们可以下载并运行 10K 张标识表记标帜图象。

然后我们可以批量处置图象并计较收集的整体正确度。

这相当在正确率略低在 85%,在线搜刮时正确率为 84.87%,与其他fashion-MNIST 正确率比拟,这略低在其他的,其他实现的正确率在 88-92% 规模内,具体取决在收集。

欲知详情,请下载word文档 下载文档

上一篇:开云-新手都能看懂的 USB 通信协议 下一篇:开云-《HelloGitHub》第 45 期