前言:米爾科技的FZ3是與百度緊密合作推出的一款基于Xilinx?Zynq Ultrascale CZU3EG芯片打造的深度學(xué)習(xí)計(jì)算卡,芯片內(nèi)部集成了4核ARM?A53處理器+GPU+FPGA的架構(gòu),具有多核心處理能力、FPGA可編程能能力以及視頻流硬件解碼能力等特點(diǎn)。
同時(shí)內(nèi)置了基于Linux操作系統(tǒng)+百度深度學(xué)習(xí)平臺(tái)-飛槳(Paddle)定制的深度學(xué)習(xí)軟核,深度兼容百度大腦模型資源與工具平臺(tái)(EasyDL/AIStudio),可高效、快速的實(shí)現(xiàn)模型的訓(xùn)練-部署-推理等一系列流程,極大降低了開發(fā)驗(yàn)證、產(chǎn)品集成、科研教學(xué)、項(xiàng)目部署的門檻。
?
軟核簡介
?
FZ3 計(jì)算卡內(nèi)部搭載Linux系統(tǒng),開發(fā)者可以基于Linux系統(tǒng)進(jìn)行應(yīng)用程序進(jìn)行開發(fā)。?
主要調(diào)用流程:?
->1.應(yīng)用程序獲取視頻輸入?
->2.調(diào)用預(yù)測庫加載模型?
->3.調(diào)度模型和底層驅(qū)動(dòng)加速模塊進(jìn)行計(jì)算?
->4.獲得運(yùn)行結(jié)果
?
如何用Paddle模型開發(fā)應(yīng)用?
1.模型獲得
目前Paddle-Mobile僅支持Paddle訓(xùn)練的模型。如果你手中的模型是不同種類的模型,需要進(jìn)行模型轉(zhuǎn)換才可以運(yùn)行。驗(yàn)證過的網(wǎng)絡(luò)包含resnet、Inception、ssd、mobilenet等。
訓(xùn)練模型:
如果您沒有模型,可以使用sample中的模型,或自己訓(xùn)練模型。
1.通過PaddlePaddle開源深度學(xué)習(xí)框架自己訓(xùn)練模型;?
2.通過AI Studio平臺(tái)訓(xùn)練模型;
3.可以在EasyDL等平臺(tái)上傳標(biāo)注數(shù)據(jù),訓(xùn)練模型;
轉(zhuǎn)換模型:
1.如果您已有ca?e模型,我們提供了相應(yīng)的轉(zhuǎn)換工具,幫助轉(zhuǎn)為Paddle模型。??????????????????????????????????????????????????????????????????????????????????????????????????????????????
2.如果您已有Tensor?ow模型,我們提供了相應(yīng)的轉(zhuǎn)換工具,幫助轉(zhuǎn)為Paddle模型。
?
2.連接視頻數(shù)據(jù)源
FZ3提供多種視頻輸入硬件接口,支持多種協(xié)議輸入圖像數(shù)據(jù)作為數(shù)據(jù)源。包括bt1120、usb、mipi、GIGE
等協(xié)議。
1.usb協(xié)議視頻數(shù)據(jù)輸入:
可以選擇uvc usb攝像頭作為視頻源。插入usb攝像頭到FZ3 的usb接口
2.bt1120協(xié)議視頻數(shù)據(jù)輸入:
可以選擇海思具有bt1120視頻數(shù)據(jù)輸出的網(wǎng)絡(luò)攝像頭,通過fpc排線連接FZ3的BT1120接口,具體針腳的定義可參考硬件說明。
3.mipi協(xié)議視頻數(shù)據(jù)輸入:
可以選擇適配好的mipi攝像頭作為視頻源,通過fpc連接FZ3的mipi接口。
4.GIGE協(xié)議視頻數(shù)據(jù)輸入:
可以選擇支持linux系統(tǒng)的GIGE相機(jī),并聯(lián)系我司進(jìn)行相機(jī)官方sdk的適配,硬件連接FZ3的網(wǎng)口。
?
3.加載驅(qū)動(dòng)
使用FZ3的加速功能,預(yù)測庫會(huì)把計(jì)算量大的op通過驅(qū)動(dòng)調(diào)用fpga進(jìn)行運(yùn)算。運(yùn)行自己的應(yīng)用前需要加載驅(qū)動(dòng),編譯好的驅(qū)動(dòng)位于/home/root/workspace/driver目錄,提供無日志輸出和有日志輸出兩個(gè)版本。
加載驅(qū)動(dòng)
insmod?/home/root/workspace/driver/fpgadrv.ko
卸載驅(qū)動(dòng)(正常情況您不需要卸載驅(qū)動(dòng),若需要加載有日志輸出的版本,可以通過如下命令卸載后,再加載該版本)
rmmod?/home/root/workspace/driver/fpgadrv.ko
設(shè)置驅(qū)動(dòng)自動(dòng)加載
?
1.在系統(tǒng)中添加自啟動(dòng)腳本
?
//?打開啟動(dòng)目錄? cd?/etc/init.d/? //?新建啟動(dòng)腳本并編輯,名稱可以自定義? vim?eb.sh? 腳本內(nèi)容? chmod?+x?/home/root/workspace/driver/fpgadrv.ko?insmod?/home/root/workspace/driver/fpgadrv.ko
?
2.建立軟鏈接
?
cd?/etc/rc5.d/? ln?-s?/etc/init.d/eb.sh?S99eb
?
3.更改腳本權(quán)限
?
chmod?+x?/etc/init.d/eb.sh?reboot
四、使用預(yù)測庫
FZ3支持Paddle-Moblie預(yù)測庫,編譯好的預(yù)測庫,位于/home/root/workspace/paddle-mobile。具體使用 把預(yù)測庫的頭文件和動(dòng)態(tài)庫拷貝到自己應(yīng)用中即可。另外可以參考我們提供的sample。Paddle-Moblie源碼可以參考https://github.com/PaddlePaddle/paddle-mobile
五、創(chuàng)建應(yīng)用
1.添加預(yù)測庫
拷貝/home/root/workspace/paddle-mobilie/下面的動(dòng)態(tài)庫和頭文件到您的工程中。在CmakeLists.txt添加paddle- mobile庫的引用
set(PADDLE_LIB_DIR?"${PROJECT_SOURCE_DIR}/lib"?)? set(PADDLE_INCLUDE_DIR?"${PROJECT_SOURCE_DIR}/include/paddle-mobile/"?) include_directories(${PADDLE_INCLUDE_DIR})?LINK_DIRECTORIES(${PADDLE_LIB_DIR})? ...? target_link_libraries(${APP_NAME}?paddle-mobile)
?
2.添加模型
拷貝自己訓(xùn)練的模型到您的工程中
3.添加預(yù)測數(shù)據(jù)源
可以選擇圖片,攝像頭數(shù)據(jù)作為預(yù)測數(shù)據(jù)源,使用攝像頭需要插入相應(yīng)的攝像頭。
USB攝像頭
1)插入攝像頭后,通過ls /dev/video* 查看設(shè)備接入情況。通過會(huì)顯示如下:
/dev/video0?/dev/video1?/dev/video2 /dev/video2為usb攝像頭v4l2輸出yuv數(shù)據(jù),當(dāng)應(yīng)用提示找不到設(shè)備時(shí),可以修改src/video_classify.cpp或者? src/video_detection.cpp。?通過/home/root/workspace/tools下video工具檢測攝像頭聯(lián)通性? //?src/video_classify.cpp?169行config.dev_name?=?"/dev/video2";
?
2)另外可以修改攝像頭分辨率
//?src/video_classify.cpp?170行? config.width?=?1280;? config.height?=?720;
?
3)運(yùn)行video工具
//讀取usb攝像頭,采集一張圖片保存到本地? cd?/home/root/workspace/tools/video? ./v4l2demo?-i?/dev/video2?-j?-n?1? //如有疑問,查看幫助? ./v4l2demo?-h
?
執(zhí)行程序后在build目錄下會(huì)生成jpg文件,可以查看圖片否正確。如果沒有生成圖片,檢測是否識(shí)別到USB設(shè)備。
bt1120 ipc攝像頭
FZ3通過bt1120協(xié)議接收原始數(shù)據(jù)進(jìn)行推理后,可以把結(jié)果通過串口或spi傳回ipc(bt1120、串口、spi
接口定義參考硬件說明)。可以在圖片幀的像素?cái)?shù)據(jù)中攜帶幀編號(hào)。
插入攝像頭后,通過/home/root/workspace/tools下video工具檢測攝像頭聯(lián)通性
1)查看設(shè)備,正常情況下設(shè)備為/dev/vide01
?
ls?/dev/video*? /dev/video0 /dev/video1
2)配置攝像頭參數(shù)
media-ctl?-v?--set-format?'"a0010000.v_tpg":0?[RBG24?1920x1080?field:none]'
?
3)運(yùn)行video工具
//讀取BT1120攝像頭,采集一張圖片保存到本地cd?/home/root/workspace/tools/video? ./v4l2demo?-i?/dev/video1?-j?-n?1? //如有疑問,查看幫助? ./v4l2demo?-h
?
執(zhí)行程序后在build目錄下會(huì)生成jpg文件,可以查看圖片否正確。如果沒有生成圖片,檢測bt1120連接線是否正確。
4.調(diào)用預(yù)測庫加載模型和使用預(yù)測數(shù)據(jù)
初始化模型
Predictor?_predictor_handle?=?new?Predictor();? _predictor_handle->init(model,?{batchNum,?channel,?input_height,?input_width},?output_names);
?
準(zhǔn)備數(shù)據(jù)
1.縮放圖片到指定的大小。如果網(wǎng)絡(luò)只能固定大小輸入,需要縮放到網(wǎng)絡(luò)輸入大小。
2.圖片預(yù)處理(減均值、轉(zhuǎn)浮點(diǎn)、歸一化等).
3.產(chǎn)出數(shù)據(jù),由于FZ3使用的NHWC格式,通常視頻過來的數(shù)據(jù)就是NHWC格式,就不需要NHWC->NCHW轉(zhuǎn)換。預(yù)測數(shù)據(jù)
調(diào)用API的predict接口,傳輸處理好的數(shù)據(jù),獲取預(yù)測結(jié)果
bool?predict(const?float*?inputs,?vector?&outputs,vector ?&output_shapes);
責(zé)任編輯:haq
評(píng)論