機(jī)器學(xué)習(xí):初識(shí)TensorFlow在iOS上的編譯

TensorFlow.png

前言:Google 開源的深度學(xué)習(xí)框架 tensorflow 成為2016年最受歡迎的深度學(xué)習(xí)框架之一。tensorflow 除了支持 pc 端外,還較好的支持了 iOS督笆,android 移動(dòng)端平臺(tái)。
下面我們開始學(xué)習(xí)如何編譯 tensorflow 在iOS平臺(tái)上運(yùn)行。

我的運(yùn)行環(huán)境

  1. macOS High Sierra Version: 10.13.3
  2. Xcode Version: 9.2
以下文章為參考 tensorflow 的官方使用文檔 編譯 iOS 平臺(tái)上的 tensorflow 庫天通。
  • tensorflow 的倉庫 repo 位于 Github 上,我們作為開發(fā)者要在其基礎(chǔ)上做開發(fā)熄驼,首先就需要 fork 一份 repo 到自己的 Github 賬戶下像寒。

一、安裝所需工具

工欲善其事必先利其器瓜贾,在開始編譯工作之前诺祸,需要準(zhǔn)備一些編譯所必須的工具:

  1. 安裝 命令行工具 (command-line tools):
xcode-select --install
install the command-line tools.jpg

2、安裝 Homebrew:
Homebrew: Mac os x 上包管理工具祭芦,具體使用方法可參考Doc筷笨。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
install homebrew.jpg

3、然后安裝 automake/libtool

brew install automake
brew install libtool
install automake/libtool.jpg

4实束、另外還要下載模型數(shù)據(jù)包 graphs :

mkdir -p ~/graphs
curl -o ~/graphs/inception.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception.zip -d ~/graphs/inception

二奥秆、克隆 TensorFlow 的源碼

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

三、編譯 TensorFlow 的iOS 靜態(tài)庫

1咸灿、在 TensorFlow 的 tensorflow/contrib/makefile/ 目錄下构订,有很多可使用的編譯腳本,其中build_all_ios.sh腳本專門用來一鍵編譯TensorFlow iOS靜態(tài)庫

tensorflow/contrib/makefile/.jpg

2避矢、執(zhí)行 build_all_ios.sh 腳本進(jìn)行編譯:

tensorflow/contrib/makefile/build_all_ios.sh
  • 這步編譯非常耗時(shí)悼瘾,我花了大概 100分鐘左右才編譯完成囊榜。
    build_all_ios.sh.jpg

3、編譯完成后亥宿,打開文件可以看到 libtensorflow-core.a 所在的路徑和支持的 CPU 架構(gòu) armv7卸勺,armv7s,i386烫扼,x86_64曙求,arm64 如下:
libtensorflow-core.jpg
lib-info.jpg

4、打開 tensorflow/contrib/examples/ios-example 下的 Xcode 工程映企,編譯報(bào)錯(cuò)悟狱,原來是缺少數(shù)據(jù)模型文件和 Cocoapods 未安裝。
1521165594033.jpg

四堰氓、下載工程所需要的數(shù)據(jù)模型

參考TensorFlow iOS Examples 文檔 加載 iOS demo 工程所需要的數(shù)據(jù)模型

在tensorflow文件夾的根目錄下挤渐,下載Inception v1,并將標(biāo)簽和圖形文件提取到數(shù)據(jù)文件夾中双絮,包括簡單的和相機(jī)的例子浴麻,需要操作的命令如下:

mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/examples/ios/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/camera/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/simple/data/

具體操作:先進(jìn)入 tensorflow 的根目錄,然后依次執(zhí)行上面的命令囤攀。
graphs.jpg

四软免、工程中 Cocoapods 的安裝

1、將目錄更改為其中一個(gè)示例抚岗,下載TensorFlow-experimental pod或杠,并打開Xcode工作區(qū)。觀察:安裝pod可以花很長時(shí)間宣蔚,因?yàn)樗艽?~450MB)向抢。例如,如果你想運(yùn)行一個(gè)簡單的示例胚委,那么:

cd tensorflow/examples/ios/simple
pod install
open tf_simple_example.xcworkspace # obs, not the .xcodeproj directory

2挟鸠、但是我在執(zhí)行 pod install 的時(shí)候遇到了問題,TensorFlow-experimental無法被安裝:

Analyzing dependencies
[!] Unable to find a specification for `TensorFlow-experimental`

隨后我在Stackoverflow:The pod TensorFlow-experimental is not found的問題上找到了解決方法亩冬。
然后艘希,我重新安裝和更新了最新版本的CocoaPods,問題解決硅急,如圖:

pod setup.jpg
Cocoapods install.jpg

最后再一次執(zhí)行 pod install覆享,安裝 TensorFlow-experimental成功:

1521185266558.jpg
1521186154203.jpg

五、真機(jī)測試

打開工程 tf_camera_example.xcworkspace 营袜,連上真機(jī)運(yùn)行撒顿,開始通過手機(jī)攝像頭,測試機(jī)器識(shí)別物體的概率:

  • 蘋果識(shí)別率高達(dá)85%荚板,水瓶 83%凤壁,電腦62%吩屹,鍵盤 74%
    IMG_1581.jpg
    IMG_1580.jpg
    IMG_1576.jpg
    IMG_1577.jpg

總結(jié):

  1. 編譯過程:
    還是比較繁瑣的,我嚴(yán)格按照官方文檔的說明拧抖,一步一步進(jìn)行安裝煤搜,避免了一些不必要的坑,安裝過程還是比較流暢的唧席。
  2. 遇到的坑:
    在一些細(xì)節(jié)的安裝路徑上沒有太注意擦盾,寫錯(cuò)路徑導(dǎo)致某些依賴庫安裝失敗。遇到 Cocoapods 無法安裝 TensorFlow-experimental 在這上面花了些時(shí)間袱吆。
  3. 花費(fèi)的時(shí)間:
    除了上面遇到坑所花費(fèi)的時(shí)間厌衙,編譯的過程和下載的過程中距淫,等待的時(shí)間比較多绞绒,因?yàn)橐螺d的依賴庫、文件和工具大部分都是外網(wǎng)榕暇,所以下載速度堪憂蓬衡,建議用VPN下載節(jié)約時(shí)間。
  4. 學(xué)到的知識(shí):
    初步學(xué)習(xí)到了 TensorFlow 在 iOS 上安裝的整個(gè)過程彤枢,了解了 TensorFlow 源碼的主要文件結(jié)構(gòu)狰晚,使用了示例工程進(jìn)行測試。
本文參考資料:

本文作者:Harveyhhw 轉(zhuǎn)載請注明缴啡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壁晒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子业栅,更是在濱河造成了極大的恐慌秒咐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碘裕,死亡現(xiàn)場離奇詭異携取,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帮孔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門雷滋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人文兢,你說我怎么就攤上這事晤斩。” “怎么了姆坚?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵澳泵,是天一觀的道長。 經(jīng)常有香客問我旷偿,道長烹俗,這世上最難降的妖魔是什么爆侣? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮幢妄,結(jié)果婚禮上兔仰,老公的妹妹穿的比我還像新娘。我一直安慰自己蕉鸳,他們只是感情好乎赴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潮尝,像睡著了一般榕吼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勉失,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天羹蚣,我揣著相機(jī)與錄音,去河邊找鬼乱凿。 笑死顽素,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徒蟆。 我是一名探鬼主播胁出,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼段审!你這毒婦竟也來了全蝶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寺枉,失蹤者是張志新(化名)和其女友劉穎抑淫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體型凳,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丈冬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甘畅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埂蕊。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疏唾,靈堂內(nèi)的尸體忽然破棺而出蓄氧,到底是詐尸還是另有隱情,我是刑警寧澤槐脏,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布喉童,位于F島的核電站,受9級特大地震影響顿天,放射性物質(zhì)發(fā)生泄漏堂氯。R本人自食惡果不足惜蔑担,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咽白。 院中可真熱鬧啤握,春花似錦、人聲如沸晶框。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授段。三九已至蹲蒲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侵贵,已是汗流浹背届搁。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留模燥,地道東北人咖祭。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蔫骂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子牺汤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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