在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

使用Vitis AI在Zynq MP上實現手勢識別

FPGA技術江湖 ? 來源:XILINX開發者社區 ? 2023-06-25 10:52 ? 次閱讀

本文作者:賽靈思工程師 Chao Zhang

FPGA得益于其高可編程性以及低延遲,低功耗的特點,在機器學習的推理領域已獲得了廣泛的關注。在過去,FPGA對于軟件開發人員來說有較高的開發門檻,把一部分開發者擋在了門外。如今越來越完善的高階工具以及軟件堆棧使得開發者可以充分利用FPGA優點對關鍵應用進行加速,同時不需花費時間去了解FPGA的底層實現。

Xilinx Vitis AI 是用于 Xilinx 硬件平臺上的 AI 推理的開發堆棧。它由優化的 IP(DPU)、工具、庫、模型和示例設計組成,使用Xilinx ZynqMP SOC或者Versal ACAP器件并借助強大的Vitis AI堆棧,已大大降低了FPGA上部署機器學習應用的門檻。

本文將使用Tensorflow 2.0從零搭建并訓練一個簡單的CNN模型來進行數字手勢識別,并部署運行在ZynqMP開發板上,來熟悉Vitis AI的工作流程。

我們首先用Tensorflow 2.0創建模型并針對目標數據集進行訓練,然后使用Vitis AI 工具對模型進行量化/編譯等處理,獲得運行DPU所需要的xmodel文件。最后需要編寫調用Vitis AI runtime的主機應用,該應用運行在CPU上,進行必要的預處理/后處理以及對DPU進行調度。

1d6dece2-1078-11ee-962d-dac502259ad0.png

1Vitis AI環境配置

Vitis AI支持業界通用的Pytorch/Tensorflow/Caffe訓練框架。模型創建和訓練工作完全在通用框架下進行開發。開始工作之前需要先在Host機器上配置好Vitis-AI Docker環境,這部分完全參考https://github.com/Xilinx/Vitis-AI Guide即可。以下所有在Host機器上完成的步驟(訓練/量化/編譯)都是在Vitis AI docker 及vitis-ai-tensorflow2 conda env環境下完成。

2數據集

本實例使用的數字手勢數據集:

https://github.com/ardamavi/Sign-Language-Digits-Dataset (感謝開源數據集作者Arda Mavi )

3源碼說明

本項目的工程文件保存在 Github目錄:

https://github.com/lobster1989/Handsign-digits-classification-on-KV260

有4個主要文件夾:

1. code:

此處包含所有源代碼,包括用于訓練/量化/編譯任務的腳本,以及在 ARM 內核上運行的主機應用程序。

2. output:

生成的模型文件。

3. Sign-Language-Digits-Dataset:

數據集應該下載并放在這里。

4. target_zcu102_zcu104_kv260:

準備復制到目標板運行的文件。

4創建/訓練模型

Host機器上運行 "train.py" 腳本,train.py腳本中包含了模型的創建和訓練過程。模型的創建主要代碼如下,使用Keras的function式 API(注意sequential 式API目前Vitis AI不支持)。創建的模型包含4個連續的Conv2D+Maxpolling層,然后跟隨一個flatten layer,一個dropout layer,以及兩個全連接層。

這個模型僅僅作為示例,各位也可以嘗試使用其它的CNN模型或進行優化。

# Function: create a custom CNN model

def customcnn():

inputs = keras.Input(shape=image_shape)

x = layers.Conv2D(32, (3,3), activation='relu', input_shape=image_shape)(inputs)

x = layers.MaxPooling2D((2,2))(x)

x = layers.Conv2D(64, (3,3), activation='relu')(x)

x = layers.MaxPooling2D((2,2))(x)

x = layers.Conv2D(128, (3,3), activation='relu')(x)

x = layers.MaxPooling2D((2,2))(x)

x = layers.Conv2D(128, (3,3), activation='relu')(x)

x = layers.MaxPooling2D((2,2))(x)

x = layers.Flatten()(x)

x = layers.Dropout(0.5)(x)

x = layers.Dense(512, activation='relu')(x)

outputs = layers.Dense(10, activation='softmax')(x)

model = keras.Model(inputs=inputs, outputs=outputs, name='customcnn_model')

model.summary()

# Compile the model

model.compile(optimizer="rmsprop",

loss="categorical_crossentropy",

metrics=['acc']

)

return model

該模型在第 10 個epoch在驗證數據集上獲得了 0.7682 的精確度。

1d8800e6-1078-11ee-962d-dac502259ad0.png

5模型量化

訓練完Tensorflow2.0模型后,下一步是使用Vitis AI quantizer工具對模型進行量化。量化過程將 32 位浮點權重轉換為 8 位整型 (INT8),定點模型需要更少的內存帶寬,從而提供更快的速度和更高的運行效率。如果需要進一步優化計算量級,還可以使用Vitis AI提供的剪枝(pruning)工具。

1d8f33e8-1078-11ee-962d-dac502259ad0.png

運行quantize.py腳本進行量化,運行結束后將生成量化后的模型''quantized_model.h5''。

進行quantize的代碼部分如下,調用VitisQuantizer,需要提供的輸入包括上個步驟生成的float模型,以及一部分圖片(推薦為100~1000張)作為calibration的輸入。Calibration操作使用提供的圖片進行正向運算,不需要提供label

# Run quantization

quantizer = vitis_quantize.VitisQuantizer(float_model)

quantized_model = quantizer.quantize_model(

calib_dataset=train_generator

)

6評估量化后模型

我們可以測試評估下量化后的模型是否有精度的損失。量化模型的評估可以直接在 python 腳本中利用TensorFlow框架完成。讀入模型,重新compile, 然后調用evaluation相關 API對模型進行評估。主要代碼部分如下

# Load the quantized model

path = os.path.join(MODEL_DIR, QAUNT_MODEL)

with vitis_quantize.quantize_scope():

model = models.load_model(path)

# Compile the model

model.compile(optimizer="rmsprop",

loss="categorical_crossentropy",

metrics=['accuracy']

)

# Evaluate model with test data

loss, acc = model.evaluate(val_generator) # returns loss and metrics

運行“eval_quantize.py”腳本即可完成評估。通過評估發現,量化后的模型沒有發生精度損失。當然實際并不總是如此,有時候量化后的模型會有些許精度損失,這和不同的模型有關系。這時候我們可以使用Vitis AI提供finetuning來精調模型 。

7編譯模型

模型的編譯需要用到Vitis AI compiler(VAI_C)。這個步驟實際上是把量化后的模型轉化為可以在DPU上運行的指令序列。VAI_C 框架的簡化流程如下圖所示,包含模型解析,優化和代碼生成三個階段。模型解析步驟對模型的拓撲進行解析,生成用Xilinx的中間表示層(Intermediate Representation)表示的計算圖(computation graph)。然后是執行一些優化操作,例如計算節點融合或者提高數據重用。最后的步驟是生成DPU架構上運行的指令序列。

1da9d0f4-1078-11ee-962d-dac502259ad0.png

運行compile.sh腳本即可完成編譯過程。主要代碼如下,使用vai_c_tensorflow2命令。注意需要提供目標DPU配置的arch.json文件作為輸入(--arch選項)。編譯步驟完成后會生成DPU推理用的xmodel文件。

compile() {

vai_c_tensorflow2

--model $MODEL

--arch $ARCH

--output_dir $OUTDIR

--net_name $NET_NAME

}

8主機程序

DPU作為神經網絡加速引擎,還需要CPU主機對其進行控制和調度,提供給DPU數據輸入/輸出。另外還需要對這部分運行在ARM或Host CPU上的應用而言, Vitis AI提供了Vitis AI Runtime (VART) 以及Vitis AI Library來方便應用開發。VART比較底層,提供更大的自由度。Vitis AI library屬于高層次API,構建于 VART 之上,通過封裝許多高效、高質量的神經網絡,提供更易于使用的統一接口

VART具有C++和Python兩套API。多數機器學習開發者習慣用Python來開發和訓練模型,在部署階段甚至可以不用切換語言。本例子中提供了使用Python接口的host程序app_mt.py。使用Python API的簡化流程如下。

# Preprocess

dpu_runner = runner.Runner(subgraph,"run")

# Populate input/out tensors

jid = dpu_runner.execute_async(fpgaInput, fpgaOutput)

dpu_runner.wait(jid)

# Post process

9開發板上運行

如果使用的是 Xilinx zcu102/zcu104/KV260 官方 Vitis AI 啟動文件,則3 塊板上的 DPU 配置都相同。可以在 3 個平臺上運行相同的xmodel文件,主機上的所有步驟完成后,將以下文件復制到目標板上。共需要xmodel文件,主機程序,以及一些用來測試的圖片。

1db758a0-1078-11ee-962d-dac502259ad0.png

啟動開發板并運行 app_mt.py ,用 -d指定圖片路徑,-m指定xmodel文件,-t 指定CPU上運行的線程數。

很幸運,10張測試圖片的推理結果都是正確的。

root@xilinx-zcu102-2021_1:/home/petalinux/Target_zcu102_HandSignDigit#python3 app_mt.py -d Examples/ -m customcnn.xmodel

Pre-processing 10 images...

Starting 1 threads...

Throughput=1111.96 fps, total frames = 10, time=0.0090 seconds

Correct:10, Wrong:0, Accuracy:1.0000

審核編輯:湯梓紅

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

    關注

    1630

    文章

    21769

    瀏覽量

    604628
  • 手勢識別
    +關注

    關注

    8

    文章

    225

    瀏覽量

    47809
  • AI
    AI
    +關注

    關注

    87

    文章

    31259

    瀏覽量

    269615
  • Zynq
    +關注

    關注

    10

    文章

    610

    瀏覽量

    47222
  • Vitis
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7464

原文標題:使用Vitis AI 在Zynq MP上實現手勢識別

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何用10行代碼輕松ZYNQ MP實現圖像識別

    Vitis-AI工具,如何僅僅使用10行代碼,就能在ZYNQ MP器件上部署深度學習模型實現圖像分類。 簡介 Xilinx Vitis-AI
    的頭像 發表于 10-09 10:47 ?4682次閱讀
    如何用10行代碼輕松<b class='flag-5'>在</b><b class='flag-5'>ZYNQ</b> <b class='flag-5'>MP</b><b class='flag-5'>上</b><b class='flag-5'>實現</b>圖像<b class='flag-5'>識別</b>

    閑談Vitis AI|DPUUltraScale平臺下的軟硬件流程(1)

    本篇中,我想跳過一些細枝末節, 先簡單介紹 AMD Xilinx Vitis AI Zynq 這個硬件加速平臺下軟硬件開發的基本思路和流程,把各個開發流程和工具分開,幫助剛剛接觸
    的頭像 發表于 12-21 10:15 ?2045次閱讀

    labview 實現手勢識別 !!!????

    新人小白想知道怎么用labview實現簡單的手勢識別識別上下左右就行。哪位大神能給講講
    發表于 11-02 23:36

    使用Vitis EBAZ4205(ZYNQ)礦機上實現"Hello World!"

    立即學習—60天FPGA工程師入門就業項目實戰特訓營(3月16日開班)Vitis是 Xilinx 最新推出的開發平臺,雖然Vitis 早就在電腦安裝好了,但一直沒怎么使用。現在用低成本的ZY
    發表于 03-06 22:59

    【創龍TLZ7x-EasyEVM評估板試用連載】基于ZYNQ的動態手勢識別系統

    項目名稱:基于ZYNQ的動態手勢識別系統試用計劃:申請理由:申請人為研究生,本科期間參加過多個國家級省市級競賽并獲得多項榮譽,擁有豐富的Xilinx嵌入式系統的開發經驗。已對zynq
    發表于 04-23 10:33

    【KV260視覺入門套件試用體驗】Vitis AI 初次體驗

    一、基礎環境 硬件:KV260視覺入門套件 攝像頭:海康720P USB攝像頭(因為部署Vitis AI之后懶得poweroff插MIPI camera了,直接USB) 軟件:Ubuntu
    發表于 09-10 13:15

    【KV260視覺入門套件試用體驗】五、VITis AI (人臉檢測和人體檢測)

    一、DPU 鏡像環境配置 官方鏡像已經安裝好了可以安裝相關配置,示例來源Vitis AI Library用戶指南3.0版本,首先需要安裝DPU鏡像。 1.1、克隆Vitis
    發表于 09-26 16:22

    【KV260視覺入門套件試用體驗】六、VITis AI車牌檢測&amp;車牌識別

    視覺技術實現的自動識別車輛牌照號碼的過程。該技術通過圖像采集、車牌檢測、字符分割和字符識別等步驟,實現對車牌號碼的自動獲取與識別。車牌
    發表于 09-26 16:28

    【KV260視覺入門套件試用體驗】基于Vitis AI的ADAS目標識別

    /vitis_ai_library/models -r 四、ADAS目標識別體驗 (一)目標識別 接上HDMI顯示器、鍵盤&鼠標,KV260
    發表于 09-27 23:21

    【KV260視覺入門套件試用體驗】Vitis AI 構建開發環境,并使用inspector檢查模型

    推斷開發平臺,它可以幫助開發者賽靈思的 FPGA 和自適應 SoC 實現高效的 AI 應用部署。它是一個強大而靈活的 AI 開發平臺,
    發表于 10-14 15:34

    【KV260視覺入門套件試用體驗】Vitis AI Library體驗之OCR識別

    的接口。由此可簡化深度學習神經網絡的使用,對于不具備深度學習或 FPGA 知識的用戶也是如此。Vitis AI Library 使開發者能夠專注于開發自己的應用,而不是底層硬件。 二、實現 相較于
    發表于 10-16 23:25

    10行代碼輕松ZYNQ MP實現圖像識別

    如今各種機器學習框架的普及使得個人搭建和訓練一個機器學習模型越來越容易。然而現實中大量的機器學習模型訓練完后需要在邊緣端部署,那么我們看看借助Xilinx Vitis-AI工具,如何僅僅使用10行代碼,就能在ZYNQ MP器件上
    的頭像 發表于 08-02 08:03 ?2236次閱讀
    10行代碼輕松<b class='flag-5'>在</b><b class='flag-5'>ZYNQ</b> <b class='flag-5'>MP</b><b class='flag-5'>上</b><b class='flag-5'>實現</b>圖像<b class='flag-5'>識別</b>

    Zynq使用Vitis的雙ARM Hello World

    電子發燒友網站提供《Zynq使用Vitis的雙ARM Hello World.zip》資料免費下載
    發表于 12-14 10:15 ?3次下載
    <b class='flag-5'>Zynq</b><b class='flag-5'>上</b>使用<b class='flag-5'>Vitis</b>的雙ARM Hello World

    使用Vitis-AI進行車牌識別

    電子發燒友網站提供《使用Vitis-AI進行車牌識別.zip》資料免費下載
    發表于 06-27 09:49 ?2次下載
    使用<b class='flag-5'>Vitis-AI</b>進行車牌<b class='flag-5'>識別</b>

    10行代碼輕松ZYNQ MP實現圖像識別的步驟

    Xilinx Vitis-AI 是用于 Xilinx 硬件平臺上的 AI 推理的開發堆棧。它由優化的 IP、工具、庫、模型和示例設計組成。
    的頭像 發表于 07-04 09:20 ?1540次閱讀
    10行代碼輕松<b class='flag-5'>在</b><b class='flag-5'>ZYNQ</b> <b class='flag-5'>MP</b><b class='flag-5'>上</b><b class='flag-5'>實現</b>圖像<b class='flag-5'>識別</b>的步驟
    主站蜘蛛池模板: 99成人在线观看| 4hc44四虎www视频| 日本三级电影在线观看| 亚洲综合激情| 午夜精品视频在线观看美女| 午夜精品视频在线观看| 天天黄色| 免费福利片2022潦草影视午夜| 国产福利在线观看你懂的| 国产玖玖| 午夜影院普通| 免费观看在线永久免费xx视频| 动漫精品成人免费网站| 天堂网在线.www天堂在线资源| 变态重口极致另类在线| 激情五月婷婷丁香| 国产日韩精品一区二区三区| av成人在线播放| 色一情一乱一乱91av| 天天在线干| 毛片在线不卡| 欧美最猛黑人xxxxwww| 久久久久亚洲香蕉网| 影院在线观看免费| 国产成人悠悠影院| 69xxxx日本hd4k| 3p高h文| 色天天综合久久久久综合片| 老汉色视频| 加勒比视频网站| 永久看片| 午夜影院免费观看视频| 国产在线精品香蕉综合网一区| 欧美人与zoxxxx| 中文在线最新版天堂bt| 日韩免费一级毛片| 国产成人精品日本| 黄色综合| 最近的中文字幕免费动漫视频| 日本黄色大片免费看| free性欧美video|