0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用PYNQ训练和实现BNN

OpenFPGA 来源:OpenFPGA 2024-08-05 17:15 次阅读

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

image.png

介绍

机器学习是近几年的热门话题,有许多用例和应用。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,需要使用终端窗口,可以在浏览器中通过选择新建 -> 终端打开一个新的终端

7bca268a-4f14-11ef-b8af-92fbcf53809c.png

我们将使用来自 NTNU 的 Xilinx BNN 存储库的 Fork,此 Fork 可以很好地展示如何训练新网络。

下载和安装需要几秒钟。

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

7bd59254-4f14-11ef-b8af-92fbcf53809c.png7be4f42e-4f14-11ef-b8af-92fbcf53809c.png

LFC - 全连接网络,专为 28 x 28 灰色图像输入而设计

CNV - 专为 RGB 运算设计的卷积网络,32 x 32 输入

两者的结构如下所示。

7be9da02-4f14-11ef-b8af-92fbcf53809c.png7bf11434-4f14-11ef-b8af-92fbcf53809c.png

测试安装

安装 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-y
wgethttps://bootstrap.pypa.io/get-pip.py&&pythonget-pip.py--user
pipinstall--usergit+https://github.com/Theano/Theano.git@rel-0.9.0beta1
pipinstall--userhttps://github.com/Lasagne/Lasagne/archive/master.zip
pipinstall--usernumpy==1.11.0
gitclonehttps://github.com/lisa-lab/pylearn2$cdpylearn2
pythonsetup.pydevelop--user

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

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

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

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

pythonfashion-mnist.py
7c40d438-4f14-11ef-b8af-92fbcf53809c.png7c4f5bde-4f14-11ef-b8af-92fbcf53809c.png7c5cb716-4f14-11ef-b8af-92fbcf53809c.png

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

7c692f0a-4f14-11ef-b8af-92fbcf53809c.png

使用 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 目录中。不过,只需要在第一次运行此脚本时执行此操作。

7c8a7a48-4f14-11ef-b8af-92fbcf53809c.png

一旦将参数加载到 params 目录中后,我们就要检查它们是否可以通过 LFC 网络的 available_params 函数访问。

如果安装正确,还应显示 fashion-mnist-lfc 以及最初的两个网络。

最后阶段是使用参数运行推理。为此,我们需要加载图像,将其转换为 mnist 图像格式并将其应用到网络。

然后我们可以输出推理的结果并显示图像以查看预测是否正确。

image.png

正如所看到的,它从图像输入中正确地识别出了一条裤子。

为了了解网络的总体准确度,我们可以下载并运行 10K 张标记图像。

7ca2968c-4f14-11ef-b8af-92fbcf53809c.png

然后我们可以批量处理图像并计算网络的整体准确度。

7cb0b726-4f14-11ef-b8af-92fbcf53809c.png

这相当于准确率略低于 85%,在线搜索时准确率为 84.87%,与其他fashion-MNIST 准确率相比,这略低于其他的,其他实现的准确率在 88-92% 范围内,具体取决于网络。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602968
  • 机器学习
    +关注

    关注

    66

    文章

    8406

    浏览量

    132557
  • BNN
    BNN
    +关注

    关注

    0

    文章

    3

    浏览量

    2647
  • PYNQ
    +关注

    关注

    4

    文章

    62

    浏览量

    2898

原文标题:使用 PYNQ 训练和实现 BNN

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于DPU-PYNQ实现石头剪刀布的手势识别

    简介 本案例主要基于DPU-PYNQ实现一个常见的手势识别--石头剪刀布,目的是让大家了解如何使用DPU开发深度学习应用的整个流程。本案例分为三个部分:分别是PC模型训练、VitisAI模型编译
    的头像 发表于 09-29 11:00 4899次阅读

    PYNQ项目——Pynq开发板启动实验

    作者:Mculover666 今天刚刚到手一块PYNQ-Z2,确认过眼神,是我想要的板子,话不多说,开干。     PYNQ项目是一个支持Xilinx Zynq器件的开源软件框架,目的在于借助
    的头像 发表于 12-23 10:58 3751次阅读

    基于PYNQ-Z2开发板的PYNQ开源项目

    PYNQ项目是一个新的开源框架,使嵌入式编程人员在无需设计可编程逻辑电路的情况下充分发挥Xilinx Zynq All Programmable SoC(APSoC)的功能。 与常规方式
    的头像 发表于 01-02 09:02 6473次阅读
    基于<b class='flag-5'>PYNQ</b>-Z2开发板的<b class='flag-5'>PYNQ</b>开源项目

    PYNQ-Z2申请】基于PYNQ的神经网络自动驾驶小车

    作品简介这次试用PYNQ-Z2作品“基于PYNQ平台的神经网络自动驾驶小车”,在PYNQ平台上对车载摄像头图像高速采集、预处理,并在FPGA上搭建神经网络,使用图像输入生成小车运动的控制信号,
    发表于 12-19 11:36

    PYNQ-Z2申请】基于PYNQ的卷积神经网络加速

    项目名称:基于PYNQ的卷积神经网络加速试用计划:申请理由:本人研究生在读,想要利用PYNQ深入探索卷积神经网络的硬件加速,在PYNQ实现图像的快速处理项目计划:1、在PC端
    发表于 12-19 11:37

    PYNQ-Z2申请】基于pynq的语音识别和新闻报道系统

    项目名称:基于pynq的语音识别和新闻报道系统试用计划:申请理由本人在Zynq如那件无线电方向有三年多的学习和开发经验,曾设计过基于ZYNQ 7020的频谱监测和室内定位平台,对DMA高速接口
    发表于 12-19 11:38

    PYNQ-Z2试用体验】玩转PYNQ系列:一、板卡简介与资源整理

    /video_20170828_jxus4q5wb5tsm.rar?attname=PYNQ-Z1中文入门指导手册及示例程序.rar)社区资源整理:1.「机器学习:如何在PYNQ-Z1上搭建开源二值神经网络BNN」(http
    发表于 12-31 10:53

    PYNQ-Z2申请】基于PYNQ-Z2的神经网络图形识别

    对神经网络的学习,讲解其工作原理。4.基于PYNQ-Z2,用python实现一个神经网络。5.训练和测试神经网络,完成神经网络最经典的入门实验--手写数字识别。6.如时间充足,会利用板子上
    发表于 01-09 14:48

    PYNQ-Z2试用体验】玩转PYNQ系列:三、PYNQ数字图像处理之图像采集

    PL中,修改原框架布局,在HDMI数据流中插入自定义视频处理IP。 由于在实现难度上第一种方式相对简单,我们由浅入深,先学习使用Python调用PYNQ的HDMI图像接口的操作。PYNQ官方系统中,为
    发表于 01-28 22:50

    PYNQ-Z2试用体验】基于PYNQ的神经网络自动驾驶小车 - 项目规划

    的数篇帖子里,我会围绕“基于PYNQ的神经网络自动驾驶小车”项目,对整个项目的实现进行详解,相信有电子设计基础的网友们也可以很容易进行复现,制作并训练一辆属于自己的自动驾驶小车。 一、作品背景如今
    发表于 03-02 23:10

    什么是PYNQ

    什么是PYNQPYNQ就是通过Python语言直接对FPGA进行编程吗?PYNQPYNQ-Z2是一回事吗?PYNQ-Z2是否支持传统开发
    发表于 02-24 07:02

    PYNQ开源方案

    板卡购买:Digilent(迪芝伦)PYNQ目录微信公众号:PYNQ开源社区百度/CSDN博客BilibiliGitHub/ Gitee(开源项目)Xilinx官方代码库PYNQ官网中国
    发表于 08-04 08:29

    PYNQ的常见问题

    PYNQ框架的设计初衷是通过高层次的封装,将底层硬件FPGA实现细节与上层应用层的使用脱耦,对软件开发者来说,PYNQ框架已经提供了完整的访问FPGA资源的library,让上层应用开发者通过
    发表于 01-29 06:31 8次下载
    <b class='flag-5'>PYNQ</b>的常见问题

    基于Pynq的汽车仪表板

    电子发烧友网站提供《基于Pynq的汽车仪表板.zip》资料免费下载
    发表于 12-20 09:25 0次下载
    基于<b class='flag-5'>Pynq</b>的汽车仪表板

    使用Tensil和PYNQPYNQ Z1 FPGA板上运行机器学习

    电子发烧友网站提供《使用Tensil和PYNQPYNQ Z1 FPGA板上运行机器学习.zip》资料免费下载
    发表于 06-14 11:44 0次下载
    使用Tensil和<b class='flag-5'>PYNQ</b>在<b class='flag-5'>PYNQ</b> Z1 FPGA板上运行机器学习