https://blog.csdn.net/coinv2014/article/details/83582747
由于安裝過程中沒有進(jìn)行記錄幔翰,所以本文是在安裝成功之后根據(jù)回憶和參考文檔進(jìn)行復(fù)盤之后總結(jié)出來的虚茶,一些細(xì)節(jié)可能缺失冈止,不過整體難度不大畔乙,借助google應(yīng)該可以完成安裝,不過編譯時(shí)間可能較長,建議使用電腦進(jìn)行交叉編譯或者電腦和開發(fā)板對(duì)互相沒有依賴的模塊同時(shí)進(jìn)行編譯。此外如果使用開發(fā)板進(jìn)行編譯阿弃,要預(yù)留足夠多的空間(源碼加上中間產(chǎn)物十分龐大,估計(jì)有10G+)羞延,建議開發(fā)板外接移動(dòng)硬盤或者其他存儲(chǔ)介質(zhì)渣淳。
一.準(zhǔn)備工作
? ? 1.? ? 準(zhǔn)備硬件平臺(tái),這里用的是友善之臂T4伴箩,SoC是RK3399入愧,操作系統(tǒng)是ubuntu18.04
????2.????安裝編譯所需工具,sudo apt-get install autoconf automake libtool curl make g++ unzip
? ? 3.????如果采用交叉編譯赛蔫,需要在PC上安裝平臺(tái)對(duì)應(yīng)的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源碼,并解壓
? ? ? ? ②? ? 切換當(dāng)前目錄到boost源碼目錄
? ? ? ? ③? ? 運(yùn)行 ./bootstrap.sh link=static cxxflags=-fPIC --with-filesystem --with-test --with-log --with-program_options --prefix=path/to/installation/prefix? ??加粗部分為boost的安裝目錄呵恢,默認(rèn)安裝在/usr/local 下鞠值,如果是交叉編譯,目錄需要手動(dòng)指定
? ? ? ? ④? ? 如果是交叉編譯渗钉,需要修改project-config.jam文件
? ? ? ? ? ? ? ? 將其中的using gcc; 那一行改成??using gcc : aarch64 : aarch64-linux-gnu-g++ ; (注意冒號(hào)前后和最后分號(hào)前面的空格)
? ? ? ? ⑤? ? ./b2 install ,使用默認(rèn)目錄需要sudo權(quán)限彤恶,也可以只運(yùn)行 ./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
? ? ? ? ①? ? 老規(guī)矩声离,先解決掉依賴。瘫怜。术徊。。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=<你想安裝的目錄鲸湃,默認(rèn)在/usr>
? ? ? ? ? ? ? ? make
? ? ? ? ? ? ? ? make check
? ? ? ? ? ? ? ? sudo make install(如果是交叉編譯诫咱,不用做這步蜕企,直接拷貝生成的庫文件到開發(fā)板中)
? ? ? ? ? ? ? ? sudo ldconfig # 刷新動(dòng)態(tài)庫緩存
四.構(gòu)建ARM NN的開發(fā)環(huán)境(這部分還沒有嘗試交叉編譯滑废,如果要交叉編譯踏兜,要注意工具鏈?zhǔn)欠裾_)
????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
? ? ? ? 上面一行最后加粗的三個(gè)flag,前兩個(gè)是對(duì)mali GPU和opencl的支持炸裆,最后一個(gè)是對(duì)neon的支持
? ? 2.? ? 使用protobuf生成tensorflow的C++源文件和頭文件(這一步很快垃它,瞬間完成)
? ? ? ? 切換到tensorflow目錄(官方參考文檔使用pushd和popd命令,也可以直接cd)
? ? ? ? 執(zhí)行?${ARMNN_DIR}/armnn/scripts/generate_tensorflow_protobuf.sh<directory where the generated files will be placed> <the? ?protobuf install directory>? ??
? ? ? ? 上面一行加粗部分分別為arm nn的下載目錄,生成C++源文件和頭文件的目標(biāo)目錄 以及 protobuf的安裝目錄国拇。
? ? 3.? ? 使用CMake配置arm nn 并編譯
? ? ? ? ①????進(jìn)入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
? ? ? ? 配置選項(xiàng)中加粗部分分別是
? ? ? ? ? ? I? ? compute library源文件目錄(include)
? ? ? ? ? ? II? ? 編譯生成的compute library鏈接庫的目錄(library)
? ? ? ? ? ? III? ? 生成的鏈接庫的目標(biāo)目錄
? ? ? ? ? ? IV? ? 之前用protobuf生成的tensorflow的C++源文件和頭文件的目錄
? ? ? ? ? ? V? ? protobuf的安裝目錄贝奇,不知道在哪里的話虹菲,可以 whereis protoc查看(注意版本要和之前使用的版本一致)
? ? ? ? ? ? VI? ? 最后加粗斜體的兩個(gè)選項(xiàng)分別對(duì)應(yīng)neon和opencl支持
? ? ? ? ③????配置完成輸入make編譯
五.移植到開發(fā)板上
? ? 1.? ? 將上一步編譯生成的以libarmnn為前綴的庫都拷貝到開發(fā)板 /lib/中
? ? 2.? ? 如果是在開發(fā)板上進(jìn)行的編譯,可以直接sudo make install安裝
六.測試
????1.? ? ? ? 運(yùn)行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的連接選項(xiàng)(參考自CSDN,不過這里不加也可以通過)
? ? ? ? 進(jìn)入目錄浪漠,執(zhí)行make mnist_tf
? ? ? ? 運(yùn)行生成的可執(zhí)行文件陕习,測試結(jié)果是否正常,正常結(jié)果輸出兩行址愿,一行是預(yù)測值该镣,另一行是實(shí)際值
新手第一次寫簡書,如存在錯(cuò)誤還請(qǐng)指正