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


    树莓派是国内比较流行的一款卡片式计算机,但是受限于其硬件配置,用树莓派玩深度学习似乎有些艰难。最近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

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

     

    可以看到例程运行耗时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

  • 相关阅读:
    Android View体系(七)从源码解析View的measure流程
    Android View体系(六)从源码解析Activity的构成
    Android View体系(五)从源码解析View的事件分发机制
    Android View体系(四)从源码解析Scroller
    Android常用学习网站
    Android View体系(三)属性动画
    购物车
    模块与包
    s5_day9作业
    s5_day11作业
  • 原文地址:https://www.cnblogs.com/lfri/p/11789277.html
Copyright © 2020-2023  润新知