树莓派是国内比较流行的一款卡片式计算机,但是受限于其硬件配置,用树莓派玩深度学习似乎有些艰难。最近OPENAI为嵌入式设备推出了一款AI框架Tengine,其对于配置的要求相比传统框架降低了很多,我尝试着在树莓派上进行了搭建并成功运行了Mobilenet-SSD。

Tengine简介

OAID/Tengine|github

  • Tengine 是OPEN AI LAB 为嵌入式设备开发的一个轻量级、高性能并且模块化的引擎。
  • Tengine在嵌入式设备上支持CPU,GPU,DLA/NPU,DSP异构计算的计算框架,实现异构计算的调度器,基于ARM平台的高效的计算库实现,针对特定硬件平台的性能优化,动态规划计算图的内存使用,提供对于网络远端AI计算能力的访问支持,支持多级别并行,整个系统模块可拆卸,基于事件驱动的计算模型,吸取已有AI计算框架的优点,设计全新的计算图表示。

编译安装开源版Tengine

安装相关工具

sudo apt-get install git cmake

安装支持库

sudo apt-get install libprotobuf-dev protobuf-compiler libboost-all-dev libgoogle-glog-dev libopencv-dev libopenblas-dev
  • protobuf 是一种轻便高效的数据存储格式,这是caffe各种配置文件所使用的数据格式
  • boost 是一个c++的扩展程序库,稍后Tengine的编译依赖于该库
  • google-glog 是一个google提供的日志系统的程序库
  • opencv 是一个开源的计算机视觉库
  • openblas 是一个开源的基础线性代数子程序库

下载&编译

以下的所有步骤建议在pi用户下完成(而非root),不然可能报错。

1.从github上下载最新的开源版Tengine源码

git clone https://github.com/OAID/Tengine.git

2.切换工作目录到Tengine

cd Tengine

3.准备好配置文件
Tengine目录下提供了配置模板 makefile.config.example 文件

cp makefile.config.example makefile.config

4.修改配置文件 makefile.config
由于开源版的Tengine不支持针对armv7的优化,所以需要用openblas替代实现;
将 CONFIG_ARCH_ARM64=y 这一行注释掉(行首加井号 #)以关闭ARM64架构的优化实现;
解除 CONFIG_ARCH_ARM32=y 这一行解除注释(删除行首的井号 #)以开启BLAS计算库的实现方式
CONFIG_ARCH_BLAS=y 这一行不需要解除注释

5.编译并安装

make -j4
make install

这里的 -j4 表示开启四个线程进行编译

测试

1.下载mobilenet-ssd模型并放置在 Tengine/models 目录下

两个文件:MobileNetSSD_deploy.caffemodel 和 MobileNetSSD_deploy.prototxt
下载链接(提取码为57vb):https://pan.baidu.com/s/1LXZ8vOdyOo50IXS0CUPp8g

如果是测试YOLOv2则下载 

yolo-voc.prototxt 
yolo-voc.caffemodel

2.将工作目录切换到mobilenet-ssd示例程序的目录下

cd ~/Tengine/examples/mobilenet_ssd

3.编译示例程序

cmake -DTENGINE_DIR=/home/pi/Tengine .
make

这里 -DTENGINE_DIR用于为cmake指定环境变量TENGINE_DIR,该变量可以在CMakeLists.txt文件中找到

4.运行示例程序

./MSSD

指定参数:

./MSSD -p mssd.prototxt -m mssd.caffemodel -i img.jpg

等待良久后,出现例程的运行结果:

利用Tengine在树莓派上跑深度学习网络

 

利用Tengine在树莓派上跑深度学习网络 

可以看到例程运行耗时2分钟,考虑到例程仅识别了一张图片一次,算法运行速度很不理想。

对比在RK3399上的表现,除了树莓派的硬件配置较低外(我用的树莓派3B),所使用的计算库的不同也是重要的原因,BLAS的库计算性能要差于Tengine提供的官方库。

 

 

 

参考链接:

1. https://blog.csdn.net/qq_33287871/article/details/99686969

2. https://songrbb.github.io/2018/08/17/利用Tengine在树莓派上跑深度学习网络/?tdsourcetag=s_pctim_aiomsg

3. https://github.com/OAID/Tengine/tree/master/examples/mobilenet_ssd