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

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

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

如何在FPGA上加速 AI 火災偵查

OpenFPGA ? 來源:OpenFPGA ? 2023-05-29 09:11 ? 次閱讀

部署在 FPGA 上加速的 AI 火災偵查。助力消防人員快速應對火災事故~

緒論

問題:近年來,不斷增加的城市人口、更復雜的人口密集建筑以及與大流行病相關(guān)的問題增加了火災偵查的難度。因此,為了增強消防人員對火災事件的快速反應,安裝視頻分析系統(tǒng),可以及早發(fā)現(xiàn)火災爆發(fā)。

目標:解決方案包括建立一個分布式計算機視覺系統(tǒng),增加建筑物火災的早期檢測。該系統(tǒng)的分布式和模塊化特性可以輕松部署,而無需增加更多基礎(chǔ)設(shè)施。在不增加人力規(guī)模的情況下,可以明顯增強消防能力。系統(tǒng)通過使用 Xilinx FPGA實現(xiàn)邊緣 AI 加速圖像處理功能來實現(xiàn)。

開發(fā)流程介紹

使用的硬件是 Xilinx Kria KV260,用于加速計算機視覺處理和以太網(wǎng)連接的相機套件。嵌入式軟件使用 Vitis AI。在 PC 上,使用現(xiàn)有的火災探測數(shù)據(jù)集對自定義 Yolo-V4 模型進行訓練。之后,對Xilinx YoloV4 模型進行量化、裁剪和編譯 DPU ,最后部署在FPGA上。

系統(tǒng)框圖

88f7c5fa-fdb8-11ed-90ce-dac502259ad0.png

PC:設(shè)置 SD 卡鏡像

首先我們需要為 FPGA Vision AI Starter Kit 準備 SD 卡(至少 32GB)。

這次將使用 Ubuntu 20.04.3 LTS 作為系統(tǒng)??梢詮南旅婢W(wǎng)站下載鏡像。

?

https://ubuntu.com/download/xilinx

?

895ae3ba-fdb8-11ed-90ce-dac502259ad0.png

在 PC 上,下載 Balena Etcher 將其寫入 SD 卡。

?

https://www.balena.io/etcher/

?

或者,可以使用下面命令行(警告:請確保系統(tǒng)下/dev/sdb必須是 SD 卡)進行操作:

xzcat~/Downloads/iot-kria-classic-desktop-2004-x03-20211110-98.img.xz|sudoddof=/dev/sdbbs=32M
899b37f8-fdb8-11ed-90ce-dac502259ad0.png

完成后, SD 卡就準備好了,將其插入 開發(fā)板上。

設(shè)置 Xilinx Ubuntu

USB 鍵盤、USB 鼠標、USB 攝像頭、HDMI/DisplayPort 和以太網(wǎng)連接到開發(fā)板。

89d264f8-fdb8-11ed-90ce-dac502259ad0.png

連接電源,將看到 Ubuntu 登錄屏幕。

默認用戶名:ubuntu密碼:ubuntu

啟動時,系統(tǒng)ui可能會非常慢,可以運行下面這些命令來禁用一些組件以加快速度。

gsettingssetorg.gnome.desktop.interfaceenable-animationsfalse
gsettingssetorg.gnome.shell.extensions.dash-to-dockanimate-show-appsfalse

接下來,調(diào)用下面命令將系統(tǒng)更新到最新版

sudoaptupgrade

早期版本的 Vitis-AI 不支持 Python,詳見:

?

https://support.xilinx.com/s/question/0D52E00006o96PISAY/how-to-install-vart-for-vitis-ai-python-scripts?language=en_US

?

安裝用于系統(tǒng)管理的 xlnx-config snap 并對其進行配置(https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2037317633/Getting+Started+with+Certified+Ubuntu+20.04+LTS+for+Xilinx+Devices):

sudosnapinstallxlnx-config--classic
xlnx-config.sysinit

接下來檢查設(shè)備配置是否工作正常。

sudoxlnx-config--xmutilboardid-bsom

安裝帶有示例的 Smart Vision 應用程序和 Vitis AI 庫。(智能視覺應用程序包含我們將重復使用的 DPU 的比特流,庫樣本稍后也將用于測試我們訓練的模型)

sudoxlnx-config--snap--installxlnx-nlp-smartvision
sudosnapinstallxlnx-vai-lib-samples

檢查已安裝的示例和應用程序

xlnx-vai-lib-samples.info
sudoxlnx-config--xmutillistapps

運行上述命令后,就會注意到 DPU 需要 Model Zoo 樣本。

8a54f9d6-fdb8-11ed-90ce-dac502259ad0.png

接下倆運行其中一個示例。在運行示例之前,需要將 USB 攝像頭連接到開發(fā)板并確保系統(tǒng)驅(qū)動能檢測到視頻設(shè)備。這次使用的是 Logitech C170,它被掛載到/dev/video1

v4l2-ctl--list-devices
8ab9b4fc-fdb8-11ed-90ce-dac502259ad0.png

加載并啟動智能視覺應用程序。

sudoxlnx-config--xmutilloadappnlp-smartvision
xlnx-nlp-smartvision.nlp-smartvision-u

在運行任何加速器應用程序之前,我們需要先加載 DPU。我們可以簡單地調(diào)用 smartvision 應用程序,它會為我們加載比特流。或者,可以打包自己的應用程序(https://www.hackster.io/AlbertaBeef/creating-a-custom-kria-app-091625)。

注意:加速器比特流位于/lib/firmware/xilinx/nlp-smartvision/.

由于我們計劃是使用YOLOv4框架,所以讓我們測試一個模型的例子。有“ yolov4_leaky_spp_m”預訓練模型。

sudoxlnx-config--xmutilloadappnlp-smartvision

#thenumber1isbecausemywebcamisonvideo1
xlnx-vai-lib-samples.test-videoyolov4yolov4_leaky_spp_m1

上面的命令將在第一次運行時下載模型。模型將被安裝到 ~/snap/xlnx-vai-lib-samples/current/models 目錄中。

8af5d8f6-fdb8-11ed-90ce-dac502259ad0.png

上面測試良好,接下來就可以訓練我們自己的模型。

PC:運行 YOLOv4 模型訓練

要訓練模型,請遵循Xilinx 提供的07-yolov4-tutorial文檔。它是為 Vitis v1.3 編寫的,但步驟與當前的 Vitis v2.0 完全相同。

?

https://xilinx.github.io/Vitis-Tutorials/2020-2/docs/Machine_Learning/Design_Tutorials/07-yolov4-tutorial/README.html

?

我們的應用程序用于檢測火災事件,因此請在下面鏈接中下載火災圖像開源數(shù)據(jù)集:

?

https://github.com/gengyanlei/fire-smoke-detect-yolov4/blob/master/readmes/README_EN.md

?

fire-smoke (2059's images, include labels)-GoogleDrive

?

https://drive.google.com/file/d/1ydVpGphAJzVPCkUTcJxJhsnp_baGrZa7/view?usp=sharing

?

請參考.cfg此處的火災數(shù)據(jù)集文件。

?

https://raw.githubusercontent.com/gengyanlei/fire-smoke-detect-yolov4/master/yolov4/cfg/yolov4-fire.cfg

?

我們必須修改此.cfg配置文件以與 Xilinx Zynq Ultrascale+ DPU 兼容:

Xilinx 建議文件輸入大小為 512x512(或 416x416 以加快推理速度)

8b5c1116-fdb8-11ed-90ce-dac502259ad0.png

DPU 不支持 MISH 激活層,因此將它們?nèi)刻鎿Q為 Leaky 激活層

8b9c3d68-fdb8-11ed-90ce-dac502259ad0.png

DPU 僅支持最大 SPP maxpool 內(nèi)核大小為 8。默認設(shè)置為 5、9、13。但決定將其更改為 5、6、8。

8bd8fbea-fdb8-11ed-90ce-dac502259ad0.png

在 Google Colab 上對其進行了訓練。遵循了 YOLOv4 的標準訓練過程,沒有做太多修改。

在 github 頁面中找到帶有分步說明的 Jupyter notebook。

?

https://github.com/zst123/xilinx_kria_firai

?

下圖是損失的進展圖。運行了大約 1000 次迭代我覺得這個原型的準確性已經(jīng)足夠好了,但如果可以的話,建議進行幾千次迭代訓練。

8c123cfc-fdb8-11ed-90ce-dac502259ad0.png

下載最佳權(quán)重文件 ( yolov4-fire-xilinx_1000.weights)。在本地運行了 yolov4 推理,一張圖像大約需要 20 秒!稍后我們將看到使用 FPGA 可以將其加速到接近實時的速度。

./darknetdetectortest../cfg/fire.data../yolov4-fire.cfg
../yolov4-fire_1000.weightsimage.jpg-thresh0.1
8cc3f5e6-fdb8-11ed-90ce-dac502259ad0.png

現(xiàn)在有了經(jīng)過訓練的模型,接下來就是將其轉(zhuǎn)換和部署在 FPGA 上。

PC:轉(zhuǎn)換TF模型

下一步是將darknet model轉(zhuǎn)換為frozen tensorflow流圖。keras-YOLOv3-model-set 存儲庫為此提供了一些有用的腳本。我們將運行 Vitis AI 存儲庫中的一些腳本。

首先安裝docker,使用這個命令:

sudoaptinstalldocker.io
sudoservicedockerstart
sudochmod666/var/run/docker.sock#Updateyourgroupmembership

拉取 docker 鏡像。使用以下命令下載最新的 Vitis AI Docker。請注意,此容器是 CPU 版本。(確保運行Docker的磁盤分區(qū)至少有100GB的磁盤空間)

$dockerpullxilinx/vitis-ai-cpu:latest
8d2f5ff2-fdb8-11ed-90ce-dac502259ad0.png

clone Vitis-AI 文件夾

gitclone--recurse-submoduleshttps://github.com/Xilinx/Vitis-AI
cdVitis-AI
8e0d191e-fdb8-11ed-90ce-dac502259ad0.png

啟動 Docker

bash-x./docker_run.shxilinx/vitis-ai-cpu:latest
8e40770a-fdb8-11ed-90ce-dac502259ad0.png

進入 docker shell 后,clone教程文件。

>gitclonehttps://github.com/Xilinx/Vitis-AI-Tutorials.git
>cd./Vitis-AI-Tutorials/
>gitreset--harde53cd4e6565cb56fdce2f88ed38942a569849fbd#Tutorialv1.3

現(xiàn)在我們可以從這些目錄訪問 YOLOv4 教程:

從主機目錄:~/Documents/Vitis-AI/Vitis-AI-Tutorials/Design_Tutorials/07-yolov4-tutorial

從 docker 中:/workspace/Vitis-AI-Tutorials/07-yolov4-tutorial

進入教程文件夾,創(chuàng)建一個名為“ my_models ”的新文件夾并復制這些文件:

訓練好的模型權(quán)重:yolov4-fire-xilinx_last.weights
訓練配置文件:yolov4-fire-xilinx.cfg
8ea7de4a-fdb8-11ed-90ce-dac502259ad0.png

在 scripts 文件夾下,找到convert_yolov4腳本。編輯文件指向我們自己的模型(cfg 和權(quán)重文件):

../my_models/yolov4-fire-xilinx.cfg
../my_models/yolov4-fire-xilinx_last.weights
8ef32fe4-fdb8-11ed-90ce-dac502259ad0.png

現(xiàn)在回到終端并輸入 docker。激活tensorflow環(huán)境。我們將開始轉(zhuǎn)換yolo模型的過程

>condaactivatevitis-ai-tensorflow
>cd/workspace/Vitis-AI-Tutorials/Design_Tutorials/07-yolov4-tutorial/scripts/
>bashconvert_yolov4.sh

轉(zhuǎn)換后,現(xiàn)在可以在“keras_model”文件夾中看到 Keras 模型(.h5)。以及“tf_model”文件夾下的frozen model(.pb)。

8f60934a-fdb8-11ed-90ce-dac502259ad0.png

PC:量化模型

我們需要將部分訓練圖像復制到文件夾“ yolov4_images ”。這些圖像將用于量化期間的校準。

創(chuàng)建一個名為“ my_calibration_images ”的文件夾,并將訓練圖像的一些隨機文件粘貼到那里。然后我們可以列出所有圖像的名稱到 txt 文件中。

>ls./my_calibration_images/>tf_calib.txt
8f9c2518-fdb8-11ed-90ce-dac502259ad0.png

然后編輯yolov4_graph_input_keras_fn.py ,指向這些文件位置。

9026f31e-fdb8-11ed-90ce-dac502259ad0.png

運行./quantize_yolov4.sh。將在yolov4_quantized目錄中生成一個量化圖。

9062ab0c-fdb8-11ed-90ce-dac502259ad0.png

接下來在“yolov4_quantized”文件夾中看到量化的frozen model。

90ddb252-fdb8-11ed-90ce-dac502259ad0.png

PC:編譯 xmodel 和 prototxt

創(chuàng)建用于編譯 xmodel 的arch.json ,并將其保存到同一個“ my_models ”文件夾中。

請注意使用我們之前在 FPGA 上看到的相同 DPU。在這種情況下,以下是 FPGA 配置 (Vitis AI 1.3/1.4/2.0)

{
"fingerprint":"0x1000020F6014406"
}
91203352-fdb8-11ed-90ce-dac502259ad0.png

修改compile_yolov4.sh指向我們自己的文件

NET_NAME=dpu_yolov4
ARCH=/workspace/Vitis-AI-Tutorials/Design_Tutorials/07-yolov4-tutorial/my_models/arch.json
vai_c_tensorflow--frozen_pb../yolov4_quantized/quantize_eval_model.pb
--arch${ARCH}
--output_dir../yolov4_compiled/
--net_name${NET_NAME}
--options"{'mode':'normal','save_kernel':'','input_shape':'1,512,512,3'}"

運行編譯

>bash-xcompile_yolov4.sh
916014ae-fdb8-11ed-90ce-dac502259ad0.png

在“yolov4_compiled”文件夾中,將看到 meta.json 和 dpu_yolov4.xmodel。這兩個文件構(gòu)成了可部署模型。將這些文件復制到 FPGA。

91d9a670-fdb8-11ed-90ce-dac502259ad0.png

請注意,如果使用官方較舊的指南,能會看到正在使用 *.elf 文件。新指南替換為 *.xmodel 文件

從 Vitis-AI v1.3 開始,該工具不再生成 *.elf 文件,而是 *.xmodel 并且將用于在邊緣設(shè)備上部署模型。

對于某些應用程序,需要*.prototxt文件和*.xmodel文件。要創(chuàng)建prototxt,我們可以復制示例并進行修改。

?

https://github.com/Xilinx/Vitis-AI-Tutorials/blob/1.3/Design_Tutorials/07-yolov4-tutorial/dpu_yolov4/dpu_yolov4.prototxt

?

根據(jù)你的YOLO配置需要遵循的事項:

“biases”:必須與yolo.cfg文件中的“anchors”相同
“num_classes”:必須與 yolo.cfg 文件中的“classes”相同
“l(fā)ayer_name”:必須與 xmodel 文件中的輸出相同
92206362-fdb8-11ed-90ce-dac502259ad0.png

對于 layer_name,可以轉(zhuǎn)到 Netron ( https://netron.app/ ) 并打開 .xmodel 文件。由于 YOLO 模型有 3 個輸出,還會看到 3 個結(jié)束節(jié)點。

對于這些節(jié)點中的每一個 (fix2float),都可以從名稱中找到編號。

92778a84-fdb8-11ed-90ce-dac502259ad0.png

如果在運行模型時可能遇到分段錯誤,很可能是由于.prototxt文件配置錯誤。如果是這樣,請重新運行這一章節(jié)的操作并驗證是否正確。

FPGA:在 FPGA Ubuntu 上測試部署

創(chuàng)建一個名為“dpu_yolov4”的文件夾并復制所有模型文件。該應用程序需要這 3 個文件:

meta.json

dpu_yolov4.xmodel

dpu_yolov4.prototxt

9288a288-fdb8-11ed-90ce-dac502259ad0.png

我們可以通過直接從 snap bin 文件夾調(diào)用test_video_yolov4可執(zhí)行文件來測試模型。

>sudoxlnx-config--xmutilloadappnlp-smartvision#LoadtheDPUbitstream

>cd~/Documents/
>/snap/xlnx-vai-lib-samples/current/bin/test_video_yolov4dpu_yolov40

就會看到它檢測到所有的火。在這種情況下,有多個重疊的框。我們在創(chuàng)建 python 應用程序時會考慮到這一點。

FPGA:Python 應用程序?qū)崿F(xiàn)

在 Github 頁面中,將找到完整應用程序?qū)崿F(xiàn)。它考慮了重疊框并執(zhí)行非最大抑制 (NMS) 邊界框算法。它還打印邊界框的置信度。此外,每個坐標記錄在幀中。在現(xiàn)實系統(tǒng)中,這些信息將被發(fā)送到服務器并提醒負責人員。

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

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601239
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7360

    瀏覽量

    87633
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29806

    瀏覽量

    268106
收藏 人收藏

    評論

    相關(guān)推薦

    基于FPGAAI火災偵查定位解決方案

    解決方案包括建立一個分布式計算機視覺系統(tǒng),增加建筑物火災的早期檢測。該系統(tǒng)的分布式和模塊化特性可以輕松部署,而無需增加更多基礎(chǔ)設(shè)施。在
    發(fā)表于 05-29 09:09 ?537次閱讀
    基于<b class='flag-5'>FPGA</b> 的<b class='flag-5'>AI</b><b class='flag-5'>火災</b><b class='flag-5'>偵查</b>定位解決方案

    何在RZ/V2L評估板套件使用AI SDK

    本文章介紹如何在RZ/V2L評估板套件使用AI SDK。
    的頭像 發(fā)表于 10-27 15:53 ?908次閱讀
    如<b class='flag-5'>何在</b>RZ/V2L評估板套件<b class='flag-5'>上</b>使用<b class='flag-5'>AI</b> SDK

    【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗】(原創(chuàng))5.FPGAAI加速源代碼

    FPGA架構(gòu)的優(yōu)化。以下是我寫的一個簡化版的代碼,用來展示FPGA如何加速AI計算中的某個簡單操作(比如矩陣乘法)。 // Verilog代碼,用于
    發(fā)表于 02-12 16:18

    【案例分享】FPGA+AI,領(lǐng)你走進新科技時代

    巨大的優(yōu)勢。首先,FPGA池化打破了CPU和FPGA的界限。在傳統(tǒng)的FPGA使用模型中,FPGA往往作為硬件加速單元,用于卸載和
    發(fā)表于 08-11 04:00

    AI遇上FPGA會產(chǎn)生怎樣的反應

    從網(wǎng)絡到板卡處理,無需經(jīng)過CPU,減低了傳輸延時。 而在算法,浪潮FPGA深度學習加速解決方案針對CNN卷積神經(jīng)網(wǎng)絡的相關(guān)算法進行優(yōu)化和固化??蛻粼诓捎么私鉀Q方案后,只需要將目前深度學習的算法
    發(fā)表于 09-17 17:08

    FPGA加速過winograd嗎

    FPGA加速過winograd嗎,有沒有和arm端做過加速結(jié)果比較
    發(fā)表于 09-21 11:28

    基于紫光同創(chuàng)FPGA的多路視頻采集與AI輕量化加速的實時目標檢測系統(tǒng)

    基于紫光同創(chuàng)FPGA的多路視頻采集與AI輕量化加速的實時目標檢測系統(tǒng)#2023集創(chuàng)賽#紫光同創(chuàng)#小眼睛科技助力紫光同創(chuàng)高校生態(tài)建設(shè)@小眼睛科技 獲獎作品展示:華南理工大學+CR8_Pro隊
    發(fā)表于 11-02 17:51

    基于紫光同創(chuàng)FPGA的圖像采集及AI加速(盤古50K開發(fā)板)

    基于紫光同創(chuàng)FPGA的圖像采集及AI加速(盤古50K開發(fā)板)
    發(fā)表于 11-03 11:02

    基于FPGA異構(gòu)加速的OCR識別技術(shù)解析

    ,2017年初,我們在騰訊云首發(fā)了國內(nèi)第一臺FPGA公有云服務器,我們將會逐步把基礎(chǔ)AI加速能力推出到公有云。AI異構(gòu)
    發(fā)表于 12-14 05:32 ?2931次閱讀
    基于<b class='flag-5'>FPGA</b>異構(gòu)<b class='flag-5'>加速</b>的OCR識別技術(shù)解析

    何在AWS云中加速Xilinx FPGA

    亞馬遜網(wǎng)絡服務公司的Gadi Hutt于2018年1月9日在法蘭克福舉行了Xilinx開發(fā)者論壇的開幕主題演講.Gadi解釋了Amazon EC2 F1實例的基礎(chǔ)知識,如何在AWS云中加速Xilinx FPGA
    的頭像 發(fā)表于 11-23 06:15 ?2765次閱讀

    FPGAAI的智能加速

    通常提到FPGA,首先想到的是一款可編程的硬件產(chǎn)品,無論是用在嵌入式設(shè)備,還是用在網(wǎng)絡傳輸加速方面,與軟件似乎都沒有太多的直接聯(lián)系。
    發(fā)表于 06-24 17:45 ?2036次閱讀
    <b class='flag-5'>FPGA</b>是<b class='flag-5'>AI</b>的智能<b class='flag-5'>加速</b>器

    何在OCI Ampere A1啟動計算密集AI應用程序

    本文將向您展示如何在 OCI Ampere A1 準備和啟動計算密集的 AI 應用程序。
    的頭像 發(fā)表于 05-01 09:05 ?1880次閱讀
    如<b class='flag-5'>何在</b>OCI Ampere A1<b class='flag-5'>上</b>啟動計算密集<b class='flag-5'>AI</b>應用程序

    FPGA 實施 AI/ML 的選項

    FPGA 實施 AI/ML 的選項
    的頭像 發(fā)表于 12-28 09:51 ?791次閱讀

    如何使用HLS加速FPGA的FIR濾波器

    電子發(fā)燒友網(wǎng)站提供《如何使用HLS加速FPGA的FIR濾波器.zip》資料免費下載
    發(fā)表于 06-14 15:28 ?3次下載
    如何使用HLS<b class='flag-5'>加速</b><b class='flag-5'>FPGA</b><b class='flag-5'>上</b>的FIR濾波器

    何在KV260快速體驗Vitsi AI圖像分類示例程序

    本文首先將會對Vitis統(tǒng)一軟件平臺和Vitsi AI進行簡單介紹,然后介紹如何在KV260上部署DPU鏡像,最后在KV260 DPU鏡像運行Vitis AI自帶的圖像分類示例。通過
    的頭像 發(fā)表于 09-12 10:02 ?1422次閱讀
    如<b class='flag-5'>何在</b>KV260<b class='flag-5'>上</b>快速體驗Vitsi <b class='flag-5'>AI</b>圖像分類示例程序