0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用PYNQ訓(xùn)練和實(shí)現(xiàn)BNN

OpenFPGA ? 來源:OpenFPGA ? 2024-08-05 17:15 ? 次閱讀

使用 PYNQ 可以輕松在 FPGA 上實(shí)現(xiàn)加速 AI/ML,而無需編寫一行 HDL!讓我們看看如何做到這一點(diǎn)...

image.png

介紹

機(jī)器學(xué)習(xí)是近幾年的熱門話題,有許多用例和應(yīng)用。Zynq 和 Zynq MPSoC 等異構(gòu) SoC 則更具顯著優(yōu)勢(shì),因?yàn)樗鼈冊(cè)试S在可編程邏輯內(nèi)實(shí)現(xiàn)推理網(wǎng)絡(luò)

在 PL 中實(shí)現(xiàn)推理網(wǎng)絡(luò)可顯著提高性能。當(dāng)然,對(duì)于那些不熟悉機(jī)器學(xué)習(xí)的人來說,很難知道從哪里開始,尤其是如果想使用可編程邏輯來加速性能。

這就是 Pynq 框架的作用所在,它允許我們使用 Python 等更高級(jí)的語言,“訪問”可編程邏輯來執(zhí)行 ML 加速。

對(duì)于今天項(xiàng)目,我們將使用適用于 Pynq Z2、Z1 和 Ultra96 的Quantized / Binary Neural Network(BNN)。

該項(xiàng)目的重點(diǎn)是新參數(shù)的訓(xùn)練和應(yīng)用。

在 PYNQ 上配置 BNN

Pynq 映像啟動(dòng)后,使用 Web 瀏覽器通過地址http://pynq:9090連接到 Pynq(如果要求輸入密碼,請(qǐng)輸入“xilinx”)

要安裝 BNN,需要使用終端窗口,可以在瀏覽器中通過選擇新建 -> 終端打開一個(gè)新的終端

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

我們將使用來自 NTNU 的 Xilinx BNN 存儲(chǔ)庫的 Fork,此 Fork 可以很好地展示如何訓(xùn)練新網(wǎng)絡(luò)。

下載和安裝需要幾秒鐘。

完成后,將看到一個(gè)新的 BNN 文件夾,其中有幾個(gè)新的notebook。

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

LFC - 全連接網(wǎng)絡(luò),專為 28 x 28 灰色圖像輸入而設(shè)計(jì)

CNV - 專為 RGB 運(yùn)算設(shè)計(jì)的卷積網(wǎng)絡(luò),32 x 32 輸入

兩者的結(jié)構(gòu)如下所示。

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

測(cè)試安裝

安裝 BNN 后,下一步是運(yùn)行一個(gè)(或多個(gè))示例以確保安裝可以正常運(yùn)行。

對(duì)于這個(gè)例子,決定運(yùn)行 Road-Signs-Batch。這個(gè)notebook使用卷積網(wǎng)絡(luò)對(duì)路標(biāo)進(jìn)行分類。

此notebook僅針對(duì)由一個(gè)標(biāo)志組成的小圖像進(jìn)行測(cè)試,之后的測(cè)試將使用包含一個(gè)標(biāo)志和其他圖像的大圖像。在這種情況下,算法會(huì)檢測(cè)標(biāo)志并對(duì)其進(jìn)行分類。

該算法的第一遍測(cè)試會(huì)產(chǎn)生幾個(gè)潛在的符號(hào)候選者,如下所示。

對(duì)該初始圖像應(yīng)用閾值后可正確識(shí)別最終的標(biāo)志上。

當(dāng)然,我們可以在應(yīng)用程序中使用我們自己提供的網(wǎng)絡(luò)。

訓(xùn)練自己的網(wǎng)絡(luò)

要?jiǎng)?chuàng)建我們自己的網(wǎng)絡(luò),我們需要幾樣?xùn)|西,其中首先需要的是一組正確標(biāo)記的訓(xùn)練數(shù)據(jù)。在這個(gè)例子中,我們將使用 fashion mnist 數(shù)據(jù)集訓(xùn)練神經(jīng)網(wǎng)絡(luò),使其能夠識(shí)別服裝。

當(dāng)我們?yōu)楦采w層構(gòu)建新網(wǎng)絡(luò)時(shí),最重要的是確保我們訓(xùn)練的網(wǎng)絡(luò)與我們希望使用的覆蓋層上的網(wǎng)絡(luò)相同。

Xilinx BNN GitHub 提供了一個(gè)訓(xùn)練目錄,其中包含許多可用于創(chuàng)建新網(wǎng)絡(luò)的 Python 腳本,許多腳本可以充當(dāng)模板。

在 BNN github 的 BNN->SRC->Training 目錄下,會(huì)發(fā)現(xiàn)許多可以幫助訓(xùn)練新網(wǎng)絡(luò)的腳本

其中包括

lfc.py - 描述 LFC 網(wǎng)絡(luò)結(jié)構(gòu)

cnv.py - 描述 CNV 網(wǎng)絡(luò)結(jié)構(gòu)

binary_net.py-包含許多有助于訓(xùn)練的函數(shù)

finnthesizer.py-執(zhí)行二進(jìn)制格式的轉(zhuǎn)換

mnist.py - 訓(xùn)練 LFC 網(wǎng)絡(luò)進(jìn)行 mnist 字符識(shí)別 - LFC 網(wǎng)絡(luò)的良好模板

cifar10.py - 為 cifar 圖像表征網(wǎng)絡(luò)訓(xùn)練 CNV 網(wǎng)絡(luò) - CNV 網(wǎng)絡(luò)的良好模板

在這個(gè)例子中,將使用 fashion-mnist.py,它是 mnist.py 的改編版,用于訓(xùn)練 LFC 網(wǎng)絡(luò)來檢測(cè)和分類服裝。

為了進(jìn)行此訓(xùn)練們需要以下東東:

AWS 或高端 GPU

耐心

一旦決定了訓(xùn)練環(huán)境,需要做的第一件事是設(shè)置 SW 環(huán)境,確保安裝了以下內(nèi)容。

Python - 包括 NumPy 和 SciPy

Theano - 用于處理多維數(shù)組的 Python 庫

PyLearn2——機(jī)器學(xué)習(xí)的 Python 庫

Lasange - 用于構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)的 Python 庫

在包含 GPU 的宿主機(jī)上使用以下命令:

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

安裝軟件環(huán)境后,下一步就是下載訓(xùn)練圖像和標(biāo)簽

可以使用以下命令下載這些。

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

這樣我們就可以開始訓(xùn)練了。

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

訓(xùn)練完成后,我們將擁有經(jīng)過訓(xùn)練的網(wǎng)絡(luò) npz 文件。

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

使用 WinSCP 將 npz 文件傳輸?shù)?Pynq。

同時(shí)將 binary_net、fashino-mnist-gen-binary-weights 和 finnthesizer python 腳本一并上傳。

在 PYNQ 上實(shí)現(xiàn)

在 Pynq 上運(yùn)行新網(wǎng)絡(luò)之前,需要將權(quán)重轉(zhuǎn)換為二進(jìn)制格式。

通過運(yùn)行下面的 Python 腳本來實(shí)現(xiàn)這一點(diǎn)

pythonfashion-mnist-gen-binary-weights.py

這將創(chuàng)建一個(gè)包含所有權(quán)重的新目錄。

完成后我們就可以開始創(chuàng)建我們自己的notebook。

在 BNN 區(qū)域下創(chuàng)建notebook,執(zhí)行以下操作:

設(shè)置根目錄和parameter目錄 - 在parameter目錄中,將找到不同訓(xùn)練網(wǎng)絡(luò)的所有網(wǎng)絡(luò)參數(shù)。

將 fashion-mnist 生成的權(quán)重傳輸?shù)?param 目錄中。不過,只需要在第一次運(yùn)行此腳本時(shí)執(zhí)行此操作。

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

一旦將參數(shù)加載到 params 目錄中后,我們就要檢查它們是否可以通過 LFC 網(wǎng)絡(luò)的 available_params 函數(shù)訪問。

如果安裝正確,還應(yīng)顯示 fashion-mnist-lfc 以及最初的兩個(gè)網(wǎng)絡(luò)。

最后階段是使用參數(shù)運(yùn)行推理。為此,我們需要加載圖像,將其轉(zhuǎn)換為 mnist 圖像格式并將其應(yīng)用到網(wǎng)絡(luò)。

然后我們可以輸出推理的結(jié)果并顯示圖像以查看預(yù)測(cè)是否正確。

image.png

正如所看到的,它從圖像輸入中正確地識(shí)別出了一條褲子。

為了了解網(wǎng)絡(luò)的總體準(zhǔn)確度,我們可以下載并運(yùn)行 10K 張標(biāo)記圖像。

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

然后我們可以批量處理圖像并計(jì)算網(wǎng)絡(luò)的整體準(zhǔn)確度。

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

這相當(dāng)于準(zhǔn)確率略低于 85%,在線搜索時(shí)準(zhǔn)確率為 84.87%,與其他fashion-MNIST 準(zhǔn)確率相比,這略低于其他的,其他實(shí)現(xiàn)的準(zhǔn)確率在 88-92% 范圍內(nèi),具體取決于網(wǎng)絡(luò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21538

    瀏覽量

    600454
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8320

    瀏覽量

    132164
  • BNN
    BNN
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    2637
  • PYNQ
    +關(guān)注

    關(guān)注

    3

    文章

    61

    瀏覽量

    2876

原文標(biāo)題:使用 PYNQ 訓(xùn)練和實(shí)現(xiàn) BNN

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于DPU-PYNQ實(shí)現(xiàn)石頭剪刀布的手勢(shì)識(shí)別

    簡(jiǎn)介 本案例主要基于DPU-PYNQ實(shí)現(xiàn)一個(gè)常見的手勢(shì)識(shí)別--石頭剪刀布,目的是讓大家了解如何使用DPU開發(fā)深度學(xué)習(xí)應(yīng)用的整個(gè)流程。本案例分為三個(gè)部分:分別是PC模型訓(xùn)練、VitisAI模型編譯
    的頭像 發(fā)表于 09-29 11:00 ?4806次閱讀

    PYNQ項(xiàng)目——Pynq開發(fā)板啟動(dòng)實(shí)驗(yàn)

    作者:Mculover666 今天剛剛到手一塊PYNQ-Z2,確認(rèn)過眼神,是我想要的板子,話不多說,開干。 ? ? PYNQ項(xiàng)目是一個(gè)支持Xilinx Zynq器件的開源軟件框架,目的在于借助
    的頭像 發(fā)表于 12-23 10:58 ?3667次閱讀

    基于PYNQ-Z2開發(fā)板的PYNQ開源項(xiàng)目

    PYNQ項(xiàng)目是一個(gè)新的開源框架,使嵌入式編程人員在無需設(shè)計(jì)可編程邏輯電路的情況下充分發(fā)揮Xilinx Zynq All Programmable SoC(APSoC)的功能。 與常規(guī)方式
    的頭像 發(fā)表于 01-02 09:02 ?6302次閱讀
    基于<b class='flag-5'>PYNQ</b>-Z2開發(fā)板的<b class='flag-5'>PYNQ</b>開源項(xiàng)目

    PYNQ-Z2申請(qǐng)】基于PYNQ的神經(jīng)網(wǎng)絡(luò)自動(dòng)駕駛小車

    作品簡(jiǎn)介這次試用PYNQ-Z2作品“基于PYNQ平臺(tái)的神經(jīng)網(wǎng)絡(luò)自動(dòng)駕駛小車”,在PYNQ平臺(tái)上對(duì)車載攝像頭圖像高速采集、預(yù)處理,并在FPGA上搭建神經(jīng)網(wǎng)絡(luò),使用圖像輸入生成小車運(yùn)動(dòng)的控制信號(hào),
    發(fā)表于 12-19 11:36

    PYNQ-Z2申請(qǐng)】基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速

    項(xiàng)目名稱:基于PYNQ的卷積神經(jīng)網(wǎng)絡(luò)加速試用計(jì)劃:申請(qǐng)理由:本人研究生在讀,想要利用PYNQ深入探索卷積神經(jīng)網(wǎng)絡(luò)的硬件加速,在PYNQ實(shí)現(xiàn)圖像的快速處理項(xiàng)目計(jì)劃:1、在PC端
    發(fā)表于 12-19 11:37

    PYNQ-Z2申請(qǐng)】基于pynq的語音識(shí)別和新聞報(bào)道系統(tǒng)

    項(xiàng)目名稱:基于pynq的語音識(shí)別和新聞報(bào)道系統(tǒng)試用計(jì)劃:申請(qǐng)理由本人在Zynq如那件無線電方向有三年多的學(xué)習(xí)和開發(fā)經(jīng)驗(yàn),曾設(shè)計(jì)過基于ZYNQ 7020的頻譜監(jiān)測(cè)和室內(nèi)定位平臺(tái),對(duì)DMA高速接口
    發(fā)表于 12-19 11:38

    PYNQ-Z2試用體驗(yàn)】玩轉(zhuǎn)PYNQ系列:一、板卡簡(jiǎn)介與資源整理

    /video_20170828_jxus4q5wb5tsm.rar?attname=PYNQ-Z1中文入門指導(dǎo)手冊(cè)及示例程序.rar)社區(qū)資源整理:1.「機(jī)器學(xué)習(xí):如何在PYNQ-Z1上搭建開源二值神經(jīng)網(wǎng)絡(luò)BNN」(http
    發(fā)表于 12-31 10:53

    PYNQ-Z2申請(qǐng)】基于PYNQ-Z2的神經(jīng)網(wǎng)絡(luò)圖形識(shí)別

    對(duì)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),講解其工作原理。4.基于PYNQ-Z2,用python實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)。5.訓(xùn)練和測(cè)試神經(jīng)網(wǎng)絡(luò),完成神經(jīng)網(wǎng)絡(luò)最經(jīng)典的入門實(shí)驗(yàn)--手寫數(shù)字識(shí)別。6.如時(shí)間充足,會(huì)利用板子上
    發(fā)表于 01-09 14:48

    PYNQ-Z2試用體驗(yàn)】玩轉(zhuǎn)PYNQ系列:三、PYNQ數(shù)字圖像處理之圖像采集

    PL中,修改原框架布局,在HDMI數(shù)據(jù)流中插入自定義視頻處理IP。 由于在實(shí)現(xiàn)難度上第一種方式相對(duì)簡(jiǎn)單,我們由淺入深,先學(xué)習(xí)使用Python調(diào)用PYNQ的HDMI圖像接口的操作。PYNQ官方系統(tǒng)中,為
    發(fā)表于 01-28 22:50

    PYNQ-Z2試用體驗(yàn)】基于PYNQ的神經(jīng)網(wǎng)絡(luò)自動(dòng)駕駛小車 - 項(xiàng)目規(guī)劃

    的數(shù)篇帖子里,我會(huì)圍繞“基于PYNQ的神經(jīng)網(wǎng)絡(luò)自動(dòng)駕駛小車”項(xiàng)目,對(duì)整個(gè)項(xiàng)目的實(shí)現(xiàn)進(jìn)行詳解,相信有電子設(shè)計(jì)基礎(chǔ)的網(wǎng)友們也可以很容易進(jìn)行復(fù)現(xiàn),制作并訓(xùn)練一輛屬于自己的自動(dòng)駕駛小車。 一、作品背景如今
    發(fā)表于 03-02 23:10

    什么是PYNQ

    什么是PYNQ?PYNQ就是通過Python語言直接對(duì)FPGA進(jìn)行編程嗎?PYNQPYNQ-Z2是一回事嗎?PYNQ-Z2是否支持傳統(tǒng)開發(fā)
    發(fā)表于 02-24 07:02

    PYNQ開源方案

    板卡購買:Digilent(迪芝倫)PYNQ目錄微信公眾號(hào):PYNQ開源社區(qū)百度/CSDN博客BilibiliGitHub/ Gitee(開源項(xiàng)目)Xilinx官方代碼庫PYNQ官網(wǎng)中國
    發(fā)表于 08-04 08:29

    PYNQ的常見問題

    PYNQ框架的設(shè)計(jì)初衷是通過高層次的封裝,將底層硬件FPGA實(shí)現(xiàn)細(xì)節(jié)與上層應(yīng)用層的使用脫耦,對(duì)軟件開發(fā)者來說,PYNQ框架已經(jīng)提供了完整的訪問FPGA資源的library,讓上層應(yīng)用開發(fā)者通過
    發(fā)表于 01-29 06:31 ?8次下載
    <b class='flag-5'>PYNQ</b>的常見問題

    基于Pynq的汽車儀表板

    電子發(fā)燒友網(wǎng)站提供《基于Pynq的汽車儀表板.zip》資料免費(fèi)下載
    發(fā)表于 12-20 09:25 ?0次下載
    基于<b class='flag-5'>Pynq</b>的汽車儀表板

    使用Tensil和PYNQPYNQ Z1 FPGA板上運(yùn)行機(jī)器學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《使用Tensil和PYNQPYNQ Z1 FPGA板上運(yùn)行機(jī)器學(xué)習(xí).zip》資料免費(fèi)下載
    發(fā)表于 06-14 11:44 ?0次下載
    使用Tensil和<b class='flag-5'>PYNQ</b>在<b class='flag-5'>PYNQ</b> Z1 FPGA板上運(yùn)行機(jī)器學(xué)習(xí)