友善之臂T4 ubuntu18.04编译安装arm nn和tensorflow C++

参考链接:https://developer.arm.com/solutions/machine-learning-on-arm/developer-material/how-to-guides/configuring-the-arm-nn-sdk-build-environment-for-tensorflow

https://blog.csdn.net/coinv2014/article/details/83582747

由于安装过程中没有进行记录,所以本文是在安装成功之后根据回忆和参考文档进行复盘之后总结出来的,一些细节可能缺失,不过整体难度不大,借助google应该可以完成安装,不过编译时间可能较长,建议使用电脑进行交叉编译或者电脑和开发板对互相没有依赖的模块同时进行编译。此外如果使用开发板进行编译,要预留足够多的空间(源码加上中间产物十分庞大,估计有10G+),建议开发板外接移动硬盘或者其他存储介质。

一.准备工作

    1.    准备硬件平台,这里用的是友善之臂T4,SoC是RK3399,操作系统是ubuntu18.04

    2.    安装编译所需工具,sudo apt-get install autoconf automake libtool curl make g++ unzip

    3.    如果采用交叉编译,需要在PC上安装平台对应的gcc

    4.    这里用到的各种依赖的版本如下

        aarch64-linux-gnu-gcc 7.3.0    

        scons 3.0.1

        cmake 3.10.2

        boost 1.64.0

        protobuf 3.5.0

二.下载源码

    1.    下载ARM NN

          git clone https://github.com/Arm-software/armnn

    2.    下载compute library

          git clone https://github.com/ARM-software/ComputeLibrary

    3.    下载tensorflow源码

        git clone https://github.com/tensorflow/tensorflow.git

三.解决掉arm nn和compute library所需的依赖

    1.    编译并安装boost,此处使用1.64.0

        参考链接:https://www.boost.org/doc/libs/1_64_0/more/getting_started/unix-variants.html

        ①    https://www.boost.org/users/history/version_1_64_0.html 下载boost源码,并解压

        ②    切换当前目录到boost源码目录

        ③    运行 ./bootstrap.sh link=static cxxflags=-fPIC --with-filesystem --with-test --with-log --with-program_options --prefix=path/to/installation/prefix    加粗部分为boost的安装目录,默认安装在/usr/local 下,如果是交叉编译,目录需要手动指定

        ④    如果是交叉编译,需要修改project-config.jam文件

                将其中的using gcc; 那一行改成  using gcc : aarch64 : aarch64-linux-gnu-g++ ; (注意冒号前后和最后分号前面的空格)

        ⑤    ./b2 install ,使用默认目录需要sudo权限,也可以只运行 ./bjam编译,得到的lib放在stage文件夹中

    2.    编译并安装protobuf,此处使用3.5.0(ubuntu 18.04 直接apt-get 安装的protobuf版本是3.0.0)

        参考链接:https://github.com/protocolbuffers/protobuf/blob/master/src/README.md

        ①    老规矩,先解决掉依赖。。。。sudo apt-get install autoconf automake libtool curl make g++ unzip

        ②    git clone https://github.com/protocolbuffers/protobuf.git

                cd protobuf

                git submodule update --init --recursive

                ./autogen.sh

                ./configure -prefix=<你想安装的目录,默认在/usr>

                make

                make check

                sudo make install(如果是交叉编译,不用做这步,直接拷贝生成的库文件到开发板中)

                sudo ldconfig # 刷新动态库缓存

四.构建ARM NN的开发环境(这部分还没有尝试交叉编译,如果要交叉编译,要注意工具链是否正确)

    1.    使用SCONS编译compute library

        切换到compute library目录

        scons arch=arm64-v8a extra_cxx_flags="-fPIC" benchmark_tests=0 validation_tests=0 for ARMv8-A opencl=1 embed_kernels=1 neon=1

        上面一行最后加粗的三个flag,前两个是对mali GPU和opencl的支持,最后一个是对neon的支持

    2.    使用protobuf生成tensorflow的C++源文件和头文件(这一步很快,瞬间完成)

        切换到tensorflow目录(官方参考文档使用pushd和popd命令,也可以直接cd)

        执行 ${ARMNN_DIR}/armnn/scripts/generate_tensorflow_protobuf.sh<directory where the generated files will be placed> <the   protobuf install directory>    

        上面一行加粗部分分别为arm nn的下载目录,生成C++源文件和头文件的目标目录 以及 protobuf的安装目录。

    3.    使用CMake配置arm nn 并编译

        ①    进入armnn,编辑CMakeList.txt,在首行添加(参考自https://blog.csdn.net/coinv2014/article/details/83582747

        set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -pthread”)

SET(BOOST_ROOT 你的boost目录)

        ②    然后用cmake配置

        cmake .. -DARMCOMPUTE_ROOT=<the location of your Compute Library source files directory> -DARMCOMPUTE_BUILD_DIR=<the location of your Compute Library source files directory> -DBOOST_ROOT=<directory used with the prefix flag> -DTF_GENERATED_SOURCES=<the output directory from step 3> -DBUILD_TF_PARSER=1 -DPROTOBUF_ROOT=<the location of your protobuf install directory> -DARMCOMPUTENEON=1 -DARMCOMPUTECL=1

        配置选项中加粗部分分别是

            I    compute library源文件目录(include)

            II    编译生成的compute library链接库的目录(library)

            III    生成的链接库的目标目录

            IV    之前用protobuf生成的tensorflow的C++源文件和头文件的目录

            V    protobuf的安装目录,不知道在哪里的话,可以 whereis protoc查看(注意版本要和之前使用的版本一致)

            VI    最后加粗斜体的两个选项分别对应neon和opencl支持

        ③    配置完成输入make编译

五.移植到开发板上

    1.    将上一步编译生成的以libarmnn为前缀的库都拷贝到开发板 /lib/中

    2.    如果是在开发板上进行的编译,可以直接sudo make install安装

六.测试

    1.        运行arm nn build目录下的UnitTests测试编译是否正常

    2.        sudo make install 安装arm nn

    3.        也可以用官方提供的armnn-mnist来测试

        git clone https://github.com/ARM-software/ML-examples.git

        修改Makefile文件,加入 -lprotobuf的连接选项(参考自CSDN,不过这里不加也可以通过)

        进入目录,执行make mnist_tf

        运行生成的可执行文件,测试结果是否正常,正常结果输出两行,一行是预测值,另一行是实际值



新手第一次写简书,如存在错误还请指正

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容