使用 PYNQ 训练和实现 BNN

发布时间:2024-12-13  

使用 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 的宿主机上使用以下命令:

sudo apt-get install git python-dev libopenblas-devliblapack-dev gfortran -y
wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py --user
pip install --usergit+https://github.com/Theano/Theano.git@rel-0.9.0beta1
pip install --user https://github.com/Lasagne/Lasagne/archive/master.zip
pip install --user numpy==1.11.0 
git clone https://github.com/lisa-lab/pylearn2$ cd pylearn2
python setup.py develop --user

安装软件环境后,下一步就是下载训练图像和标签

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

wget -nc http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz; gunzip -f train-images-idx3-ubyte.gz
wget -nc http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz; gunzip -f train-labels-idx1-ubyte.gz
wget -nc http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz; gunzip -f t10k-images-idx3-ubyte.gz
wget -nc http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz; gunzip -f t10k-labels-idx1-ubyte.gz

这样我们就可以开始训练了。

python fashion-mnist.py

训练完成后,我们将拥有经过训练的网络 npz 文件。

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

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

在 PYNQ 上实现

在 Pynq 上运行新网络之前,需要将权重转换为二进制格式。

通过运行下面的 Python 脚本来实现这一点

python fashion-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% 范围内,具体取决于网络。



文章来源于:21IC    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    的分析仪和训练器。支持100多个 LTSSM 测试,用以检查 2.5-32 GT/s 链路训练,并且支持调入预配置设置文件,可快速设置训练器和分析仪。赋能前沿技术,是德......
    标准已经开始演进到5.0,是德科技也为了满足客户需求,推出了针对PCIe 5.0的分析仪和训练器。支持100多个 LTSSM 测试,用以检查 2.5-32 GT/s 链路训练,并且支持调入预配置设置文件,可快速设置训练器......
    达到显示器在各种光照环境下数据信息的清晰显示目标,利用一种能实现人眼仿真的集成化可见光亮度传感器LX1970,实现了对训练器材LCD显示器的智能调节,保证了显示器能适时清晰地显示数据信息,从而延长LCD的使用寿命。 引言 随着......
    加湿器语音播放芯片应用方案!;加湿器不仅可以增加空气中的湿度,避免我们的鼻腔过于干燥,还可以缓解鼻塞。同时,开加湿器湿化空气,实际上也是美国儿科学会以及其他权威儿科机构推荐的治疗上呼吸道感染的方法......
    病毒肺炎(COVID-19)大流行进一步将呼吸分析带到一线,作为从含病毒气溶胶中检测通过空气传播的传染病的方法。例如,带有冻干CRISPR传感器的口罩可以使用传统的横向流分析检测新冠病毒(SARS-CoV-2)的核......
    出与控制。PWM作为一种十分常用的工具,在灯光,电机控制方面有非常广泛的应用,大家如果不满足于简单的呼吸灯,还可以通过电机驱动控制电机,用PWM来实现电机调速,希望大家可以通过动手实践,掌握PWM的使用方法。 ......
    参数与记录是应用最多的基础护理技术操作,各项技术比较成熟。但普通便携式设备大多功能单一,精度不高,且仅能作为临时测量使用,无法跟踪病人的整个治疗过程:医院里使用的大型医疗设备能够提供很高的精度,且功能全面,但过于专业的使用方法......
    失性快速存储器)技术的器件进行全方位协议层分析。这些分析工具可作为选件与 Agilent U4301A PCIe 协议分析仪和 U4305 PCIe 训练器配合使用,在业界率先支持下一代 PCI Express......
    示波器的使用方法(二),数字示波器的使用方法介绍;示波器的使用方法并非唯一,对于不同的示波器,往往具有不同示波器的使用方法。前文中,对模拟示波器的使用方法有所介绍。为增加大家对示波器的使用方法,本文将对数字示波器的使用方法......
    检查串口连接是否正确,并设置好串口的波特率和数据位、停止位、校验位等参数。 5. 下载升级程序 下载单片机的升级程序是单片机UART升级的关键步骤。下载程序的具体方法视芯片型号和开发环境而定。通常......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>