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