前 言
本文主要介紹基于創龍科技TL3562-EVM評估板的NPU開發案例,適用開發環境如下。
Windows開發環境:Windows 7 64bit、Windows 10 64bit
虛擬機:VMware16.2.5
開發環境:Ubuntu20.04.6 64bit
U-Boot:U-Boot-2017.09
Kernel:Linux-5.10.209
LinuxSDK:rk3562-buildroot-2021.11-sdk-[版本號](基于rk3562_linux_release_v1.2.0_20240620)
無特殊說明情況下,本文默認使用USB TO UART0作為調試串口,使用Linux系統啟動卡(Micro SD方式)啟動系統,通過路由器與PC機進行網絡連接,請確保PC機、Ubuntu系統可正常訪問互聯網。
NPU(Neural network Processing Unit),即神經網絡處理器。RK3562內部已集成高能效神經網絡處理器NPU,支持神經網絡推理硬件加速,能夠流暢運行AI算法。主要參數如下:
(1)支持INT4/INT8/INT16/FP16等;
(2)支持多種框架,如TensorFlow、MXNet、PyTorch、Caffe等;
(3)1TOPS算力。
備注:更多詳細信息請查看“6-開發資料數據手冊核心板元器件CPU”目錄下的文檔。
NPU開發流程如下:
(1)模型訓練:用戶根據需求自行訓練模型或使用官方提供的模型;
(2)模型轉換:使用RKNN-Toolkit2將預訓練模型轉換為RK3562 NPU可使用的RKNN模型;
(3)應用開發:基于RKNN API開發應用程序。
圖 1 NPU開發流程圖
我司提供的NPU開發案例位于產品資料“4-軟件資料Demoplatform-demos”。其中,yolov5_object_detect案例為靜態演示案例(通過單張圖片進行目標識別),v4l2_yolov5_detect案例為動態演示案例(通過攝像頭連續獲取圖像進行目標識別),具體說明如下。
表 1
關于RKNN-Toolkit2環境搭建、模型轉換使用說明、混合量化、精度問題排查的詳細介紹,可查看yolov5_object_detect案例"toolrknn-toolkit2doc"目錄下的"02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf"文檔。
關于RKNN-Toolkit2模型轉換API接口說明,可查看yolov5_object_detect案例"toolrknn-toolkit2doc"目錄下的"02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf"文檔。
關于RKNN API的詳細使用說明,可查看yolov5_object_detect案例"toolrknn-toolkit2doc"目錄下的"04_Rockchip_RKNPU_API_Reference_RKNNRT_V2.0.0beta0_CN.pdf"文檔。
1yolov5_object_detect案例
案例說明
本案例基于RKNN API實現對圖片中目標對象的識別,并將識別結果以加水印的方式添加至圖像,并保存成圖片文件。案例循環測試10次,統計出推理的平均處理耗時。
備注:本案例基于瑞芯微官方例程實現,進行了目錄的重構及編譯的簡化,功能邏輯未進行修改。官方例程位于LinuxSDK源碼"/external/rknpu2/examples/rknn_yolov5_demo/"目錄下。
圖 2
程序處理流程圖如下:
圖 3
案例測試
請通過網線將評估板千兆網口ETH0 RGMII連接至路由器。
圖 4
請將案例bin目錄下的所有文件拷貝至評估板文件系統任意目錄下。
圖 5
在可執行文件所在目錄,執行如下命令,對圖片目標對象進行模型推理。
備注:模型運行的時間會有抖動。
Target# ./yolov5_object_detect yolov5s-640-640_rk3562.rknn car.jpg
圖 6
從輸出信息可知,本案例程序識別出測試圖片包含person、car、bus、truck等對象,運行1次模型耗時為73.843000ms;循環運行10次模型平均耗時為47.365303ms。
案例程序對測試圖片的目標對象標記成功后將輸出名稱為out.jpg的標記圖片至當前目錄,請將out.jpg文件拷貝至Windows下,并使用PC端相關軟件對比查看car.jpg與out.jpg,測試結果如下所示。
圖 7
圖 8 car.jpg
圖 9 out.jpg
從out.jpg圖片可知,案例程序能正確框選出人物、汽車等物體,同時顯示person、car文字標簽和置信度,標記對象的數量及信息等與程序打印信息一致。
本程序能夠支持識別的目標數據集類型說明位于bin目錄下的coco_80_labels_list.txt文件,用戶可根據相關目標類型進行測試驗證。
圖 10
案例編譯
將案例src源碼目錄拷貝至Ubuntu工作目錄下,進入源碼目錄,執行如下命令配置環境變量,并修改CMake配置文件CMakeLists.txt,請根據實際情況修改為LinuxSDK源碼路徑。
Host# source /home/tronlong/RK3562/rk3562-buildroot-2021.11-sdk-v1.0/buildroot/output/rockchip_rk3562/host/environment-setup
Host# vim CMakeLists.txt
圖 11
圖 12
新建一個build目錄,用于存放編譯過程產生的相關文件。
Host# mkdir -p build
圖 13
進入build目錄,執行如下命令進行案例編譯,編譯完成將會在build目錄下生成編譯過程產生的相關文件,并在src目錄下生成install目錄,該目錄下存放案例相關文件。
Host# cd build
Host# cmake -DCMAKE_C_COMPILER=aarch64-buildroot-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-buildroot-linux-gnu-g++ ../
Host# make -j8
Host# make install
圖 14
圖 15
build目錄存放編譯過程產生的相關文件,install目錄存放案例相關文件,包括測試圖片car.jpg、類別數據集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rk3562.rknn和可執行程序yolov5_object_detect等文件,如下圖所示。
圖 16
關鍵代碼
(1)加載圖片RGB數據。
圖 17
(2)加載模型并初始化RKNN。
圖 18
(3)前處理,對圖像進行縮放和裁剪以適配模型輸入。
圖 19
(4)設置模型運行輸入輸出參數,NPU運行模型,獲取模型輸出,統計運行耗時。
圖 20
(5)進行后處理,得到目標識別結果。
圖 21
(6)使用目標識別結果給圖片添加水印,并保存為圖片文件。
圖 22
(7)重復運行10次模型并統計平均耗時。
圖 23
由于篇幅過長等原因,部分內容均不逐一展示,如需獲取完整版詳細資料,請關注創龍科技微信公眾號或官網,或者評論區留言,感謝您的支持!
審核編輯 黃宇
-
嵌入式
+關注
關注
5152文章
19670瀏覽量
317509 -
NPU
+關注
關注
2文章
330瀏覽量
19750
發布評論請先 登錄
評論