【飛凌嵌入式 基于NXP i.MX8MMini 的OKMX8MM-C 開發(fā)板試用體驗(yàn)】運(yùn)行tengine

原創(chuàng) 2020-09-30 14:45:00 i.MX8MMini

作者:mameng

Tengine 是 OPEN AI LAB 一款輕量級(jí)神經(jīng)網(wǎng)絡(luò)推理引擎,它針對(duì) Arm 嵌入式平臺(tái)進(jìn)行了專門優(yōu)化,對(duì) Android、Linux 系統(tǒng)都提供了很好的支持。

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



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


編譯 Tengine

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

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


1. 下載源碼

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

注意 clone 的時(shí)候一定要帶 --recurse-submodules 這個(gè)參數(shù),否則會(huì)下載不完整。


2. 安裝依賴

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


3. 修改配置文件

在源碼的 default_config 目錄下提供了基于 arm32、arm64、x86 這三個(gè)平臺(tái)的配置文件。

RK3399 是 Arm64, 所以對(duì)應(yīng)的配置文件為:arm64_linux_native.config。

這里要做的修改是,在配置文件中打開 BUILD_SERIALIZER=y 這個(gè)選項(xiàng),否則后面運(yùn)行的時(shí)候可能會(huì)遇到Shared library not found: libcaffe-serializer.so: cannot open shared object file: No such file or directory 這個(gè)錯(cuò)誤。


4. 編譯

在源碼根目錄執(zhí)行如下命令進(jìn)行編譯:

./linux_build.sh default_config/arm64_linux_native.config



5. 下載 model 文件

運(yùn)行這些 AI 應(yīng)用的時(shí)候,需要加載對(duì)應(yīng)的 model 文件,這些文件可以從 OPEN AI LAB 提供的網(wǎng)盤里下載:

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

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


6. 運(yùn)行 benchmark

編譯完成后默認(rèn)會(huì)在 build/benchmark/bin/ 目錄下生成兩個(gè)供測(cè)試用的 benchmark 文件,可以直接執(zhí)行這兩個(gè)文件,用來(lái)簡(jiǎn)單的測(cè)試,確實(shí)是否真正編譯成功。

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



編譯并運(yùn)行測(cè)試 Demo

Tengine 開放的源碼里面還帶了幾個(gè)不錯(cuò)的 圖像識(shí)別相關(guān)的測(cè)試 Demo,用來(lái)測(cè)試和進(jìn)行 AI 相關(guān)的基礎(chǔ)學(xué)習(xí)都很不錯(cuò)。

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

然后在 examples 目錄下執(zhí)行如下命令:

mkdir buildcd build/../linux_build.sh make


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

faster_rcnn

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

Tengine 版本的 Demo 對(duì)下面的圖片進(jìn)行識(shí)別:


運(yùn)行 faster_rcnn 可執(zhí)行程序,會(huì)生成一張對(duì)檢測(cè)到的物體進(jìn)行標(biāo)注后的圖像:


可以看到識(shí)別到了 Dog、bicycle、car 三個(gè)物體。

YOLO v2

YOLO 全稱 You look only once,是 2016 年 CVPR 上發(fā)表的一篇目標(biāo)檢測(cè)論文。

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

這里用這個(gè)模型來(lái)檢測(cè)和 RCNN 同樣的圖片:


從這張圖片看,準(zhǔn)確性和 RCNN 相當(dāng),但是檢測(cè)速度卻快了 將近 6 倍。

SSD

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

這里用如下圖片做檢測(cè):


運(yùn)行結(jié)果如下:


有點(diǎn)可惜的是把狗狗給識(shí)別錯(cuò)了。

mobilenet_ssd

這個(gè)是 mobilenet 和 ssd 的結(jié)合,對(duì)移動(dòng)設(shè)備更友好。

使用和 SSD 同樣的圖片進(jìn)行檢測(cè):


可以看到狗狗檢測(cè)對(duì)了,但是遠(yuǎn)處有個(gè)人漏檢了。但是檢測(cè)速度比 SSD 快了很多。

YuFaceDetectNet

這個(gè)是深圳大學(xué)于仕琪老師開源的 libfacedetection 的 Tengine 實(shí)現(xiàn)版本,libfacedetection 號(hào)稱最快的人臉檢測(cè)庫(kù)。

測(cè)試原圖如下:



測(cè)試結(jié)果:



MTCNN

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

這里我們采用和 YuFaceDetectNet 同樣的圖片進(jìn)行測(cè)試:


五張臉全部檢測(cè)到了,而且時(shí)間和 YuFaceDetectNet 差距并不大。


相關(guān)產(chǎn)品 >

  • FETMX8MM-C核心板

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

    了解詳情
    FETMX8MM-C核心板
  • OKMX8MM-C開發(fā)板

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

    了解詳情
    OKMX8MM-C開發(fā)板

推薦閱讀 換一批 換一批