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的。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 差距并不大。
fqj
評論
查看更多