友善之臂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

由于安裝過程中沒有進(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)指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末响谓,一起剝皮案震驚了整個(gè)濱河市损合,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娘纷,老刑警劉巖嫁审,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赖晶,居然都是意外死亡律适,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門遏插,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捂贿,“玉大人,你說我怎么就攤上這事胳嘲〕” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵了牛,是天一觀的道長颜屠。 經(jīng)常有香客問我,道長白魂,這世上最難降的妖魔是什么汽纤? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮福荸,結(jié)果婚禮上蕴坪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好背传,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布呆瞻。 她就那樣靜靜地躺著,像睡著了一般径玖。 火紅的嫁衣襯著肌膚如雪痴脾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天梳星,我揣著相機(jī)與錄音赞赖,去河邊找鬼。 笑死冤灾,一個(gè)胖子當(dāng)著我的面吹牛前域,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播韵吨,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼匿垄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了归粉?” 一聲冷哼從身側(cè)響起椿疗,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糠悼,沒想到半個(gè)月后届榄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绢掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年痒蓬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滴劲。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攻晒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出班挖,到底是詐尸還是另有隱情鲁捏,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布萧芙,位于F島的核電站给梅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏双揪。R本人自食惡果不足惜动羽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渔期。 院中可真熱鬧运吓,春花似錦渴邦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倦青,卻和暖如春瓮床,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背产镐。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工隘庄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磷账。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓峭沦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逃糟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 介紹 首先讓我們來看看TensorFlow蓬豁! 但是在我們開始之前绰咽,我們先來看看Python API中的Ten...
    JasonJe閱讀 11,725評(píng)論 1 32
  • 網(wǎng)址 下載與安裝 你可以使用我們提供的 Pip, Docker, Virtualenv, Anaconda 或 源...
    九七學(xué)姐閱讀 4,740評(píng)論 3 11
  • 在 Ubuntu 上安裝 TensorFlow 本指南將介紹如何在 Ubuntu 上安裝 TensorFlow。雖...
    高山居士閱讀 4,590評(píng)論 0 6
  • 零地粪、環(huán)境準(zhǔn)備 git下載:https://git-for-windows.github.io/ MINGW下載:h...
    董春磊閱讀 820評(píng)論 0 1
  • 黃蓉集天地靈氣而于一身取募,艷絕天下、冰雪聰明蟆技、玲瓏剔透玩敏,多才多藝、博古通今质礼,精通琴棋書畫旺聚、廚藝了得。 湖邊:只見船尾...
    傅悅天閱讀 402評(píng)論 0 3