色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA上部署深度學習的算法模型的方法以及平臺

FPGA之家 ? 來源:阿chai帶你學AI ? 作者:阿chai ? 2021-06-10 17:32 ? 次閱讀

今天給大家介紹一下FPGA上部署深度學習算法模型的方法以及平臺。希望通過介紹,算法工程師在FPGA的落地上能“稍微”緩和一些,小白不再那么迷茫。阿chai最近在肝一個開源的項目,等忙完了會給大家出幾期FPGA上從零部署的教程,包括一些底層的開發、模型的量化推理等等,因為涉及的東西太多了,所以得分開寫。

FPGA與“迷宮”

深度學習這里就不多介紹了,我們接下來介紹一下FPGA是什么。FPGA是現場可編程邏輯門陣列,靈活性非常高,現場編程真的香。說到這里小伙伴們可能還是不太明白,那么我們和ARM對比一下,ARM可以理解為比如這有一個迷宮,迷宮有很多進口也有對應的出口,道路中間有很多“暗門”可以走,對ARM芯片做編程就是觸發當中一條通路,路是死的,我們不好改變。

FPGA是如果我們想要一個迷宮,FPGA給提供了一個大的“盒子”,里面有很多的“隔板”,我們自己搭建一條就可以了,你想要什么樣的路就什么樣子,類似玩我的世界,只不過“礦”是各種邏輯門。那就意味著,FPGA可以設計外圍電路也可以設計CPU,是不是很爽。

當然,爽的背后開發難度也是相當的大的,這種“特定屬性”非常時候做人工智能的算法加速。由于制作特殊電路,FPGA之前經常用做信號處理中,配合DSP或者ARM使用,后來也有用FPGA或者CPLD搭建“礦機”當“礦老板”(祝愿”挖礦“的天天礦難)。

小白入門A:PYNQ

PYNQ是Python + ZYNQ,用Python進行FPGA開發,首先強調一點,Python近幾年非常火,雖然很強大,但是他開發硬件不是真的就做硬件,希望大家不要迷。教程:https://github.com/xupsh/Advanced-Embedded-System-Design-Flow-on-Zynq我們類比一下很火的MicroPython,使用Python開發硬件是得有特定的電路設計的,除非自己是大佬修改底層的固件,但是都修改底層了,是不是可以自己開發就好了。

當然這個是面向小白的,對應的開發板如下圖。這個板子類似我們之前玩MicroPython,也是各種調包。實際上ZYNQ是一個雙核ARM Cortex-A9處理器和一個FPGA,使用Python的話可以通過Jupyter進行開發,是不是很香,所以這個非常適合小白。FPGA上跑BNN(二值神經網絡)是非常不錯的。

“PYNQ-Z1不同的機器學習數據集(dataset)的測試結果顯示:對于MNIST數據集PYNQ-Z1能實現每秒168000張圖片的分類,延遲102微妙,準確率達98.4%;對于CIFAR-10、SVHN、GTSRB數據集PYN1-Z1能實現每秒1700張圖片的分類,延遲2.2毫秒,準確率分別為80.1%、96.69%和97.66%,系統功耗均保持在2.5W左右。”這個到底有多方便,我們看一段代碼,首先我們調用模型:

import bnn hw_classifier = bnn.CnvClassifier(bnn.NETWORK_CNVW1A1,‘cifar10’,bnn.RUNTIME_HW) sw_classifier = bnn.CnvClassifier(bnn.NETWORK_CNVW1A1,‘cifar10’,bnn.RUNTIME_SW)進行測試:

from IPython.display import display im = Image.open(‘car.png’) im.thumbnail((64, 64), Image.ANTIALIAS) display(im) car_class = hw_classifier.classify_image_details(im) print(“{: 》10}{: 》13}”.format(“[CLASS]”,“[RANKING]”)) for i in range(len(car_class)): print(“{: 》10}{: 》10}”.format(hw_classifier.classes[i],car_class[i]))同樣支持matplotlib進行數據可視化:

%matplotlib inline import matplotlib.pyplot as plt x_pos = np.arange(len(car_class)) fig, ax = plt.subplots() ax.bar(x_pos - 0.25, (car_class/100.0), 0.25) ax.set_xticklabels(hw_classifier.classes, rotation=‘vertical’) ax.set_xticks(x_pos) ax.set plt.show()這不就是Python嘛,真的是非常的方便,而且圖像處理也兼容使用Pillow。文件中給出了一些圖像識別的例子,大家可以去看看。改天阿chai給大家出一個從零搭建PYNQ的教程,包括模型的量化推理等等。

小白入門B:DPU

DPU是一個用于卷積神經網絡的可編程引擎。該單元包含寄存器配置模塊、數據控制器模塊和卷積計算模塊。當然,強大的PYNQ也是支持使用DPU的,如果用這個直接看Python的API就可以了,開發板可以使用ZCU104。大神很多直接用ZYNQ開整的,但是那個難度真的不適合初學者去看,等忙完了項目阿chai給小伙伴們整個這個的教程。我們首先clone下來項目并且編譯:

git clone https://github.com/Xilinx/DPU-PYNQ.git cd DPU-PYNQ/upgrade make安裝pynq-dpu:

pip install pynq-dpu啟動jupyter-notebook:

pynq get-notebooks pynq-dpu -p 。模型庫在如下鏈接中。模型庫:https://github.com/Xilinx/Vitis-AI/tree/v1.3對于DPU的設計,我們需要在自己的電腦上進行,在添加模塊后,我們使用如下命令進行編譯:

make BOARD=《Board》對于ZYNQ+DPU的開發過程阿chai會單獨出一期,因為涉及的東西太多了。。。

支持國產框架:Paddle-Lite

既然python都可以,那肯定Paddle-Lite這種推理框架也是可行的,百度也有專門的部署開發套件 EdgeBoard。EdgeBoard是基于Xilinx Zynq UltraScale+ MPSoC系列芯片打造的計算卡,芯片內部集成ARM處理器+GPU+FPGA的架構,既具有多核處理能力、也有視頻流硬解碼處理能力,還具有FPGA的可編程的特點。其實部署的思路小伙伴們應該有一些眉目了,就是將自己訓練的深度學習模型轉換成Paddle Lite模型,然后移植到EdgeBoard開發板上進行測試。接下來我們簡單看看是怎樣操作的。EdgeBoard中模型的測試由json文件做管理:

{ “model”:“測試的模型”, “combined_model”:true, “input_width”:224, “input_height”:224, “image”:“測試的路徑”, “mean”:[104,117,124], “scale”:1, “format”:“BGR” “threshold”:0.5 }詳細的操作請前往Paddle Lite的GitHub,這里只做簡單的流程介紹。GitHub: https://github.com/PaddlePaddle/Paddle-Lite如果不想編譯,直接在如下網址中下載編譯好的文件即可。編譯后的文件:https://ai.baidu.com/ai-doc/HWCE/Yk3b95s8o

1.安裝測試

我們首先在有在開發板上編譯Paddle Lite,編譯的時候需要設置cmake的參數,設置LITE_WITH_FPGA=ON和LITE_WITH_ARM=ON,問就是我們都用到。對應的FPGA的編譯腳本是lite/tools/build_FPGA.sh,我們執行即可。

sh 。/lite/tools/build_fpga.sh make publish_inference -j2接下來我們編譯示例demo,demo也在剛才的下載鏈接中。板子的使用過程請參考百度官方的文檔,文檔介紹的非常的清楚,阿chai這里就不花時間去講解使用過程了。然后進入demo中進行編譯:

# classification cd /home/root/workspace/sample/classification/ mkdir build cd build cmake 。。 makebuild目錄下會出現image_classify和video_classify兩個可執行文件,圖片預測運行image_classify文件。使用FPGA 進行resnet50進行測試:

。/image_classify_fpga_preprocess 。。/configs/resnet50/drink.json 可以看到對應的輸出結果,同樣detection的模型測試方式也這樣操作。

2.可調用的接口

C++

C++的主要包括預處理以及預測庫的接口。

預處理接口主要是使用FPGA完成圖片的縮放、顏色空間轉換和mean/std操作。

預測庫接口主要完成模型的初始化、輸入參數構造、預測和結果獲取。

預處理接口示例:

/** * 判斷輸入圖像是否是wc 16對齊 * width 輸入圖像寬度 * channel 輸入圖像高度 **/ bool img_is_align(int width, int channel); /** * 對齊后的大小 * width 輸入圖像寬度 * channel 輸入圖像高度 **/ int align_size(int width, int channel); /** * 分配存放圖片的內存,析構函數會自動釋放 (目前支持BGR-》RGB RGB-》BGR YUV422-》BGR YUV-》RGB) 圖像最大分辨率支持1080p * height 輸入圖像的框 * width 輸入圖像寬度 * in_format 輸入圖像格式 參考image_format * return uint8_t* opencv Mat CV_8UC3 **/ uint8_t* mem_alloc(int img_height, int img_width, image_format in_format);預測庫使用步驟1、模型初始化,構建預測對象

std::unique_ptr《paddle_mobile::PaddlePredictor》 g_predictor; PaddleMobileConfig config; std::string model_dir = j[“model”]; config.precision = PaddleMobileConfig::FP32; config.device = PaddleMobileConfig::kFPGA; config.prog_file = model_dir + “/model”; config.param_file = model_dir + “/params”; config.thread_num = 4; g_predictor = CreatePaddlePredictor《PaddleMobileConfig, PaddleEngineKind::kPaddleMobile》(config);2、輸入輸出參數

std::vector《PaddleTensor》 paddle_tensor_feeds; PaddleTensor tensor; tensor.shape = std::vector《int》({1, 3, input_height, input_width}); tensor.data = PaddleBuf(input, sizeof(input)); tensor.dtype = PaddleDType::FLOAT32; paddle_tensor_feeds.push_back(tensor); PaddleTensor tensor_imageshape; tensor_imageshape.shape = std::vector《int》({1, 2}); tensor_imageshape.data = PaddleBuf(image_shape, 1 * 2 * sizeof(float)); tensor_imageshape.dtype = PaddleDType::FLOAT32; paddle_tensor_feeds.push_back(tensor_imageshape); PaddleTensor tensor_out; tensor_out.shape = std::vector《int》({}); tensor_out.data = PaddleBuf(); tensor_out.dtype = PaddleDType::FLOAT32; std::vector《PaddleTensor》 outputs(1, tensor_out);3、預測

g_predictor-》Run(paddle_tensor_feeds, &outputs);4、獲取結果

float *data = static_cast《float *》(outputs[0].data.data()); int size = outputs[0].shape[0];

Python

EdgeBoard系統已經安裝了python環境,用戶可直接使用即可,同時python接口為用戶提供了paddlemobile的python安裝包以及示例工程。文件名稱說明

paddlemobile-0.0.1.linux-aarch64-py2.tar.gzpaddlemobile的python2安裝包

edgeboard.py基于python的模型預測示例

api.pyedgeboard.py的api示例

configs.classification分類模型的配置文件目錄,同C++示例的配置文件

configs.detection檢測模型的配置文件目錄,同C++示例的配置文件

models.classification分類模型的模型文件目錄,同C++示例的模型文件

models.detection檢測模型的模型文件目錄,同C++示例的模型文件

安裝paddlemobile-python SDK,在根目錄中解壓

tar -xzvf home/root/workspace/paddlemobile-0.0.1.linux-aarch64-py2.tar.gz例如使用分類模型的測試如下:

python api.py -j 你測試的json文件詳細的使用說明請關注Paddle-Lite的GitHub。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21761

    瀏覽量

    604441
  • 編程
    +關注

    關注

    88

    文章

    3628

    瀏覽量

    93824
  • ARM芯片
    +關注

    關注

    1

    文章

    126

    瀏覽量

    21501
  • 數據集
    +關注

    關注

    4

    文章

    1208

    瀏覽量

    24743
  • 深度學習
    +關注

    關注

    73

    文章

    5508

    瀏覽量

    121306

原文標題:深度學習模型在FPGA上的部署

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI模型部署邊緣設備的奇妙之旅:目標檢測模型

    并非易事,它涉及到從選擇合適的算法架構到針對特定硬件平臺進行優化等一系列復雜的工作。 接下來,我們將詳細介紹如何在資源受限的邊緣設備上成功部署目標檢測模型,探索其背后的原理和技術,并討
    發表于 12-19 14:33

    FPGA加速深度學習模型的案例

    FPGA(現場可編程門陣列)加速深度學習模型是當前硬件加速領域的一個熱門研究方向。以下是一些FPGA加速
    的頭像 發表于 10-25 09:22 ?273次閱讀

    AI大模型深度學習的關系

    AI大模型深度學習之間存在著密不可分的關系,它們互為促進,相輔相成。以下是對兩者關系的介紹: 一、深度學習是AI大
    的頭像 發表于 10-23 15:25 ?948次閱讀

    FPGA深度學習能走多遠?

    FPGA 也需要不斷適應和改進。研究人員和開發者將致力于針對 FPGA 的特點對深度學習算法進行優化,例如探索更高效的
    發表于 09-27 20:53

    深度學習模型量化方法

    深度學習模型量化是一種重要的模型輕量化技術,旨在通過減少網絡參數的比特寬度來減小模型大小和加速推理過程,同時盡量保持
    的頭像 發表于 07-15 11:01 ?509次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學習</b><b class='flag-5'>模型</b>量化<b class='flag-5'>方法</b>

    深度學習算法在嵌入式平臺上的部署

    隨著人工智能技術的飛速發展,深度學習算法在各個領域的應用日益廣泛。然而,將深度學習算法部署到資源
    的頭像 發表于 07-15 10:03 ?1524次閱讀

    利用Matlab函數實現深度學習算法

    在Matlab中實現深度學習算法是一個復雜但強大的過程,可以應用于各種領域,如圖像識別、自然語言處理、時間序列預測等。這里,我將概述一個基本的流程,包括環境設置、數據準備、模型設計、訓
    的頭像 發表于 07-14 14:21 ?2324次閱讀

    基于Python的深度學習人臉識別方法

    基于Python的深度學習人臉識別方法是一個涉及多個技術領域的復雜話題,包括計算機視覺、深度學習以及
    的頭像 發表于 07-14 11:52 ?1286次閱讀

    深度學習中的時間序列分類方法

    的發展,基于深度學習的TSC方法逐漸展現出其強大的自動特征提取和分類能力。本文將從多個角度對深度學習在時間序列分類中的應用進行綜述,探討常用
    的頭像 發表于 07-09 15:54 ?1044次閱讀

    深度學習中的無監督學習方法綜述

    應用中往往難以實現。因此,無監督學習深度學習中扮演著越來越重要的角色。本文旨在綜述深度學習中的無監督
    的頭像 發表于 07-09 10:50 ?831次閱讀

    深度學習中的模型權重

    深度學習這一充滿無限可能性的領域中,模型權重(Weights)作為其核心組成部分,扮演著至關重要的角色。它們不僅是模型學習的基石,更是
    的頭像 發表于 07-04 11:49 ?1500次閱讀

    深度學習模型訓練過程詳解

    詳細介紹深度學習模型訓練的全過程,包括數據預處理、模型構建、損失函數定義、優化算法選擇、訓練過程以及
    的頭像 發表于 07-01 16:13 ?1376次閱讀

    深度學習模型優化與調試方法

    深度學習模型在訓練過程中,往往會遇到各種問題和挑戰,如過擬合、欠擬合、梯度消失或爆炸等。因此,對深度學習
    的頭像 發表于 07-01 11:41 ?876次閱讀

    基于stm32h743IIK在cubeai上部署keras模型模型輸出結果都是同一組概率數組,為什么?

    基于stm32h743IIK,在cubeai上部署keras模型模型輸出結果都是同一組概率數組,一點也搞不明白,看社區也有相同的問題,但沒有解決方案
    發表于 05-20 08:18

    FPGA深度學習應用中或將取代GPU

    ,這使得它比一般處理器更高效。但是,很難對 FPGA 進行編程,Larzul 希望通過自己公司開發的新平臺解決這個問題。 專業的人工智能硬件已經成為了一個獨立的產業,但對于什么是深度學習
    發表于 03-21 15:19
    主站蜘蛛池模板: 亚洲精品国产拍在线观看| 四川少妇大战4黑人| 国产免费福利在线视频| 成人网18免费韩国| WWW国产精品内射熟女| 99久久免热在线观看| 浴室里强摁做开腿呻吟的漫画男男 | 亚洲AV无码国产精品色在线看| 睡觉被偷偷进入magnet| 色迷迷电影| 天堂岛www天堂资源在线| 四虎永久在线精品国产免费| 少妇精油按摩| 天天爽夜夜爽8888视频精品| 我半夜摸妺妺的奶C了她软件| 世界上第一个得抑郁症的人是谁| 丝袜美女自摸| 性西欧俄罗斯极品| 亚洲精品国产高清嫩草影院| 亚洲中字幕永久在线观看| 永久免费看bbb| 97精品国产亚洲AV高清| av亚洲2017色天堂| YIN荡的老师系列第6部分视频| 凹凸精品视频分类视频| 东北女人一级毛片| 国产精品久久久久久52AVAV| 国产内射AV徐夜夜| 果冻传媒2021在线观看| 久久精品国产在热亚洲完整版| 久久这里只精品国产99re66| 男女交性视频无遮挡全过程| 青青草狠狠干| 天美传媒色情原创精品| 亚洲AV精品乱码专区| 一本道久在线综合色姐| 99国产这里只有精品视频| 插曲的痛30分钟视频最新章节| 国产成人a v在线影院| 国产在线精品亚洲观看不卡欧美| 久久成人免费大片|