【飛凌嵌入式 基于NXP i.MX8MMini 的OKMX8MM-C 開發板試用體驗】運行tengine

原創 2020-09-30 14:45:00 i.MX8MMini

作者:mameng

Tengine 是 OPEN AI LAB 一款輕量級神經網絡推理引擎,它針對 Arm 嵌入式平臺進行了專門優化,對 Android、Linux 系統都提供了很好的支持。

而且更加難能可貴的是 Tengine 并不依賴于專用 AI 芯片(即 Tengine 可以利用 GPU、NPU 這些具有專門 AI 加速功能的模塊進行 AI 運算,也可以利用通用的 CPU 進行 AI 運算),很多 Arm 平臺都可以通過 Tengine 框架對算力進行深度挖掘,從而高效的運行一些 AI 應用。


本文就是想描述如何在OKMX8MM-C這一 Arm64 平臺上搭建 Tengine AI 推理框架,并運行圖像識別相關應用。首先在OKMX8MM-C上面移植了基于 Armbian 的 Debian 10 系統,運行的 u-boot 和 linux kernel 都是mainline的。


編譯 Tengine

OPEN AI LAB 在 Github 上提供了開源的 Tengine 版本,并提供了比較詳細的參考文檔,所以可以直接下載源碼,根據文檔進行編譯。

得益于 i.MX8MMini 強大的性能,我們可以直接在 i.MX8MMini 上下載代碼,進行編譯,免去交叉編譯的諸多不便。


1. 下載源碼

git clone --recurse-submodules https://github.com/OAID/tengine/

注意 clone 的時候一定要帶 --recurse-submodules 這個參數,否則會下載不完整。


2. 安裝依賴

apt install libprotobuf-dev protobuf-compiler libopencv-dev  pkg-config


3. 修改配置文件

在源碼的 default_config 目錄下提供了基于 arm32、arm64、x86 這三個平臺的配置文件。

RK3399 是 Arm64, 所以對應的配置文件為:arm64_linux_native.config。

這里要做的修改是,在配置文件中打開 BUILD_SERIALIZER=y 這個選項,否則后面運行的時候可能會遇到Shared library not found: libcaffe-serializer.so: cannot open shared object file: No such file or directory 這個錯誤。

4. 編譯

在源碼根目錄執行如下命令進行編譯:

./linux_build.sh default_config/arm64_linux_native.config


5. 下載 model 文件

運行這些 AI 應用的時候,需要加載對應的 model 文件,這些文件可以從 OPEN AI LAB 提供的網盤里下載:

https://pan.baidu.com/s/1Ar9334MPeIV1eq4pM1eI-Q , 提取碼為 hhgc 。

下載完后需要把這些 model 文件放在 Tengine 源碼根目錄下的 models 文件夾,所有的 model 文件加在一起比較大,我只上傳了后面測試需要用到的部分:

6. 運行 benchmark

編譯完成后默認會在 build/benchmark/bin/ 目錄下生成兩個供測試用的 benchmark 文件,可以直接執行這兩個文件,用來簡單的測試,確實是否真正編譯成功。

./build/benchmark/bin/bench_sqz ./build/benchmark/bin/bench_mobilenet


編譯并運行測試 Demo

Tengine 開放的源碼里面還帶了幾個不錯的 圖像識別相關的測試 Demo,用來測試和進行 AI 相關的基礎學習都很不錯。

這些 Demo 的源碼在 examples 目錄下,在編譯之前我們需要修改一個編譯腳本 linux_build.sh, 即根據實際情況,正確設置 Tengine 的所在路徑,比如我下載編譯的 Tengine 代碼在 /root/rockdev/tengine 目錄下:

然后在 examples 目錄下執行如下命令:

mkdir buildcd build/../linux_build.sh make

編譯完成,主要有 faster_rcnn 、lighten_cnn、 mobilenet_ssd、 mtcnn 、ssd、 yolov2、 YuFaceDetectNet 這幾個測試 Demo。

faster_rcnn

Faster rcnn 是大神 Ross B. Girshick 在 RCNN 和 Fast RCNN 的基礎上于 2016 年提出的新模型,綜合性能更高,檢測速度更快。

Tengine 版本的 Demo 對下面的圖片進行識別:

運行 faster_rcnn 可執行程序,會生成一張對檢測到的物體進行標注后的圖像:

可以看到識別到了 Dog、bicycle、car 三個物體。

YOLO v2

YOLO 全稱 You look only once,是 2016 年 CVPR 上發表的一篇目標檢測論文。

YOLOV v2 發表于 2017 年的 CVPR 上,論文名稱為《YOLO9000: Better, Faster, Stronger》,獲得了 CVPR 2017 Best ** Honorable Mention 大獎。

這里用這個模型來檢測和 RCNN 同樣的圖片:

從這張圖片看,準確性和 RCNN 相當,但是檢測速度卻快了 將近 6 倍。

SSD

SSD 全稱 Single Shot MultiBox Detector, 是一種 one-stage 的通用物體檢測算法,作者 Wei Liu,提出于 2016年。

這里用如下圖片做檢測:

運行結果如下:

有點可惜的是把狗狗給識別錯了。

mobilenet_ssd

這個是 mobilenet 和 ssd 的結合,對移動設備更友好。

使用和 SSD 同樣的圖片進行檢測:

可以看到狗狗檢測對了,但是遠處有個人漏檢了。但是檢測速度比 SSD 快了很多。

YuFaceDetectNet

這個是深圳大學于仕琪老師開源的 libfacedetection 的 Tengine 實現版本,libfacedetection 號稱最快的人臉檢測庫。

測試原圖如下:


測試結果:


MTCNN

MTCNN 是另外一種人臉檢測方案,提出于 2016 年。

這里我們采用和 YuFaceDetectNet 同樣的圖片進行測試:

五張臉全部檢測到了,而且時間和 YuFaceDetectNet 差距并不大。


相關產品 >

  • FETMX8MM-C核心板

    NXP i.MX8系列分為iMX8I、i.MX8M、i.MX8Mini、iMX8M Nano、iMX 8X等,提供基于Cortex-A72 + Cortex-A53、Cortex-A35核心,搭配實時任務處理的Cortex-M4和Cortex M7的解決方案,適用于從消費家庭音頻到工業樓宇自動化及移動計算機等。飛凌嵌入式近期推出的iMX8系列i.MX8Mmini核心板基于四核Cortex-A53、單核Cortex-M4架構的i.MX 8Mmini 處理器設計,現已全面上市,更多i.MX8M核心板產品、解決方案詳情,歡迎致電飛凌嵌入式了解。

    了解詳情
    FETMX8MM-C核心板
  • OKMX8MM-C開發板

    多數字音頻接口,多核異構A53+M4,10年+生命周期|NXP公司 i.MX8系列應用處理器根據不同配置有i.MX8I、iMX8M、i.MX8Mini、iMX8M Mini、iMX8M Nano、iMX 8X ,提供基于Cortex-A72 + Cortex-A53、Cortex-A35核心,此外還提供實時任務處理的Cortex-M核心(Cortex-M4和Cortex M7)的解決方案,因此,NXP i.MX8系列應用處理器在高級圖形、高級成像、高級機器視覺、高端音頻、高端語音、高端視頻和高安全的嵌入式應用等跨領域的多種應用場景非常適用。飛凌嵌入式i.MX8M Mini開發板基于NXP 公司的i.MX8M Mini 四核64位處理器設計,主頻最高1.8GHz,ARM Cortex-A53架構。IMX8開發板是一款高性能,低功耗產品,歡迎選購。更多IMX8芯片介紹,IMX8系列軟硬件資料,i.MX8M mini方案定制,請聯系飛凌嵌入式

    了解詳情
    OKMX8MM-C開發板

推薦閱讀 換一批 換一批