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

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

Tengine简介

OAID/Tengine|github

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

安装Tengine

使用树莓派自带的系统环境,根据Tengine官方文档进行安装和配置。

1.安装git

sudo apt-get install git

2.用git下载源码

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

3.安装支持库

libprotobuf: for load caffemodel

sudo apt install libprotobuf-dev protobuf-compiler libboost-all-dev libgoogle-glog-dev

libopencv: for image preprocessing in test samples

sudo apt install libopencv-dev

由于树莓派自带的系统为armv7,不支持Tengine现有的官方计算库,因此需要使用BLAS库进行运算,安装命令为:

sudo apt-get install libopenblas-dev

如果要使用Caffe库,可以参考 http://caffe.berkeleyvision.org/installation.html 进行配置。

4.配置文件修改

首先进入tengine目录下,复制配置文件

cd ~/tengine
cp makefile.config.example makefile.config

接下来对makefile.config进行编辑(可以使用vi指令或用图形界面直接打开),首先在开头部分注释掉arm64选项,这样就会自动启用默认的arm32。

#Set the target arch
#CONFIG_ARCH_ARM64=n

然后在后面找到BLAS库相关配置,取消掉前面的注释,来启用BLAS库。

#Use BLAS as the operator implementation
#
CONFIG_ARCH_BLAS=y

5.编译

进入tengine目录下,进行编译。

cd ~/tengine
make

测试YOLOv2

1.下载模型

Tengine提供了YOLOv2的训练好的模型,我们可以直接在github上Tengineg关于YOLOv2的文档页中给的链接下载。将以下两个文件下载后存入tengine目录下models文件夹中。

yolo-voc.prototxt
yolo-voc.caffemodel

2.编译例程

根据官方文档进行编译操作出现了头文件无法找到的问题,使用YaHei大佬在《RK3399上Tengine平台搭建》的方法,单独对yolov2进行编译。
首先进入tengine目录下的examples目录下yolov2的子目录,在cmake的配置文件CMakeLists.txt的开头部分增加一个变量的指定,修改为:

cmake_minimum_required (VERSION 2.8)
project(YOLOV2)
set( TENGINE_DIR /home/pi/tengine )
set( INSTALL_DIR ${TENGINE_DIR}/install/)
set( TENGINE_LIBS tengine)
...

接下来仍在该子目录内执行编译指令

cmake . 
make

注:若cmake时提示指令无法识别,可以用以下命令安装cmake

sudo apt-get install cmake

得到如下信息,说明编译成功。

[100%] Linking CXX executable YOLOV2
[100%] Built target YOLOV2

3.运行例程

还是在当前目录下,运行生成的YOLOV2文件

./YOLOV2

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

proto file not specified,using /home/pi/tengine/models/yolo-voc.prototxt by default
model file not specified,using /home/pi/tengine/models/yolo-voc.caffemodel by default
image file not specified,using /home/pi/tengine/tests/images/ssd_dog.jpg by default
tensor: region created by node: region is not consumed
add the node: region into output list
load model done!
num box: 5
num class: 20
car    :84%
BOX:( 446 , 73 ),( 675 , 176 )
dog    :92%
BOX:( 120 , 179 ),( 323 , 545 )
bicycle    :85%
BOX:( 121 , 142 ),( 557 , 441 )
======================================
[DETECTED IMAGE SAVED]:    save.jpg
======================================
--------------------------------------
repeat 1 times, avg time per run is 7754.38 ms
Release Graph Executor for graph graph
Release workspace default resource

可以看到例程运行耗时接近八秒,考虑到例程仅识别了一张图片一次,算法运行速度很不理想。对比在RK3399上的表现,除了树莓派的硬件配置较低外,所使用的计算库的不同也是重要的原因,BLAS的库计算性能要差于Tengine提供的官方库。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2018 Refrigerator All Rights Reserved.

Songrbb hold copyright