14

圈圈虫 · 2020年04月05日

OpenCV 4.3 with Tengine(稳定版)

OpenCV版本迭代时,Tengine作为Arm平台的Backend加入OpenCV DNN Module,提升了OpenCV DNN在Arm平台的运行效率,加快深度学习神经网络的推理速度,增强用户体验
作者:圈圈虫

传送门

背景

OpenCV 4.3.0版本已在 Fri Apr 3 11:45:28 2020(格林威治标准时间)发布。非常幸运的在这次版本迭代中,将Tengine作为Arm平台的Backend加入OpenCV DNN Module,提升了OpenCV DNN在Arm平台的运行效率,加快深度学习神经网络的推理速度,增强用户体验。

Tengine作为可选项,OpenCV默认源码编译时是关闭的。本文将通过简单的步骤,带领大家安全上车。(既然是“稳定版”,那么……按理来讲,应该有圈圈虫私藏的迷之“飙车版”... \(^0^)/ ...233)

如何编译

OpenCV官方编译指导

其实就分为两种方式

  1. 指定已存在的预编译好的Tengine library

略过....

2. Tengine是什么?不想手动下载,不想手动编译,就是懒!

目标平台:android-aarch64

  • 配置好ANDROID\_NDK路径
略....
  • 下载OpenCV
git clone https://github.com/opencv/opencv.git
# 切换到 tag 4.3.0
git checkout 4.3.0
  • 设置编译目录
mkdir build-android-aarch64;cd build-android-aarch64
  • 设置cmake选项
cmake -DOPENCV_ENABLE_NONFREE=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_EXAMPLES=ON -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DWITH_OPENCL=OFF -DBUILD_DOCS=OFF -DWITH_CUDA=OFF -DBUILD_JAVA=ON -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_PROJECTS=OFF -DCMAKE_BUILD_TYPE=release -DENABLE_PROFILING=OFF -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-21 -DWITH_TENGINE=ON ..
  • 配置cmake工程的过程中,会自动从GitHub/Tengine下载相关源码(就是懒!
......
-- Performing Test HAVE_CXX_WNO_ENUM_COMPARE_SWITCH - Success
-- TENGINE:--  Build Tengine from source code.
-- TENGINE: Download: 2f3cd86217f3530c8e4a82f3ed5af14c7a4e3943.zip
-- TENGINE DOWNLOAD success .
-- CMAKE_INSTALL_PREFIX = /home/qtang/github/opencv/build-android-aarch64/install
-- CONFIG_ARCH_ARM64 = ON
-- The ASM-ATT compiler identification is GNU
-- Found assembler: /home/qtang/android-ndk-r18b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-as
-- Found Tengine include: /home/qtang/github/opencv/build-android-aarch64/3rdparty/libtengine/Tengine-2f3cd86217f3530c8e4a82f3ed5af14c7a4e3943/core/include
-- Found Tengine libraries: tengine
......
--
--   Other third-party libraries:
--     Tengine:                     YES (tengine)
--     Custom HAL:                  YES (carotene (ver 0.0.1))
--     Protobuf:                    build (3.5.1)
--
......
  • 编译OpenCV源码
make -j16

OpenCV是一个伟大的项目,因此编译过程有点慢,i9-9900k,16线程大约用时2m20s。编译完成后,在lib目录下会生成libtengine.a的静态库,说明已经自动完成了Tengine编译。

example在哪里?

OpenCV DNN的demo源码在samples/dnn/,编译好的可执行文件在bin目录下,以example\_dnn\_为前缀,例如example\_dnn\_classification。

优化效果?

benchmark.jpg

一些感叹

虽然加入了Tengine,在Arm平台上有了可见的速度提升,但还有较大的速度空间,后续会持续优化、扩展该模块在OpenCV DNN中的作用,助力OpenCV生态发展。本次开源项目的支持,正好发生在今年2月份这个特殊日子,在此感谢参与的小伙伴的坚持和努力。特别是来自湖北籍小哥哥 liqi-copencv/pull/16724)以及OpenCV俄罗斯团队 Vadim 对PR代码的严格把关(OpenCV开源项目能坚持发展20年,是有原因的:OpenCV-CI)。



相关阅读

更多Tengine相关技术干货请关注Tengine-AI开发平台专栏 及知乎账号圈圈虫
推荐阅读
关注数
3393
内容数
68
Tengine是一款轻量级模块化高性能的神经网络推理引擎 ;欢迎体验Tengine,[链接] 《Tengine开发者入门资料包》[链接]
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息