TensorFlow 到 Core ML

在機器學習領域迹炼,?有之前火爆網(wǎng)絡的 TensorFlow ,我還一直以為 apple 在機器學習領域就要那么埋沒下去了的颠毙,結果萬萬沒有想到今年 WWDC 憋了大招:Core ML斯入,現(xiàn)場幾乎每天關于 Core ML 的 session 都是爆滿, 排隊排的我都覺得每次站的腳痛蛀蜜】塘剑回國之后抽空體驗了二者在 ios 上性能表現(xiàn),今天跟大家一起來聊一聊滴某。

二者直接拿來對比是一個誤區(qū)

看上圖磅摹,Core ML? 是把已經(jīng)訓練好的數(shù)據(jù)模型(比如利用 Caffe訓練的模型)滋迈, 通過 coremltools 轉換成 Core ML? 格式的模型, 最后提供了一系列的API, 快速的集成到?App中户誓。所以并不包含訓練過程饼灿。

再來看看具體 X?code 中 Model 的展示信息:

Core ML? 的數(shù)據(jù)格式包括三大部分:名稱,輸入以及輸出帝美。X?code 會自動生成 swift 或者 OC 的包裝類碍彭,APP 可以通過 Core ML? 提供的API 方便的使用該訓練?好的數(shù)據(jù)模型。

所以綜上所述证舟,Core ML? 本身的API只是借助已經(jīng)訓練好的數(shù)據(jù)模型硕旗,最后生成對應的包裝類窗骑,接收輸入女责,?輸出結果值。

TensorFlow 又是什么呢创译?

TensorFlow? is an open source software library for numerical computation using data flow graphs. Nodes in the graph represent mathematical operations, while the graph edges represent the multidimensional data arrays (tensors) communicated between them. The flexible architecture allows you to deploy computation to one or more CPUs or GPUs in a desktop, server, or mobile device with a single API. TensorFlow was originally developed by researchers and engineers working on the Google Brain Team within Google's Machine Intelligence research organization for the purposes of conducting machine learning and deep neural networks research, but the system is general enough to be applicable in a wide variety of other domains as well.

TensorFlow 是一個采用數(shù)據(jù)流圖(data flow graphs)抵知,用于數(shù)值計算的開源軟件庫。TensorFlow 支持 Python 和 C++ 兩種編程語言软族,再復雜的多層神經(jīng)網(wǎng)絡模型都可以用Python來實現(xiàn)刷喜。

所以綜上所述,TensorFlow 更偏向的是數(shù)據(jù)訓練層立砸,如果要對比掖疮,那么他應該是和 Caffe 等框架在一個層面上,而不是和 Core ML? 使用層去對比颗祝。當然 TensorFlow 也可以和 Core ML? 一樣 浊闪,在移動設備上運行的。

TensorFlowCore ML? 在 ios 上性能表現(xiàn)

既然都可以在 ios 上運行螺戳,那么同樣的數(shù)據(jù)集搁宾,在?同一臺設備上表現(xiàn)的如何呢?昨晚花了一點時間倔幼,把自己已經(jīng)上架的APP從 TensorFlow 轉向了 Core ML?盖腿,成本并不高,因為只需要換運算部分损同,當然也意味著我的APP僅?能運行在 ios 11+ 的設備上

Core ML?:

(工程地址: https://github.com/liufsd/TestCoreMl)

TensorFlow:

(工程地址: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/ios/camera)

在識別速度上幾乎無差別翩腐,但在運算損耗上后者更高,意味著手機很快就會發(fā)燙膏燃。這就是我為什么把APP轉換成 Core ML? 實現(xiàn)了的茂卦。

TensorFlowCore ML? 在 ios Api使用難易程度對比

Core ML? 以官網(wǎng)Api Doc 來講,TensorFlow 以官方Demo 為例蹄梢。

Core ML? API:

Doc: https://developer.apple.com/documentation/coreml/core_ml_api

訓練數(shù)據(jù)方面:

訓練部分不屬于Core ML? 疙筹,你只需要把你訓練好的數(shù)據(jù)model富俄, 通過 coremltools 轉換成 Core ML? 格式的模型即可。當然官方已經(jīng)提供了一些轉換好的供大家使用而咆,比如demo中使用的Resnet50.mlmodel霍比,下載地址:https://developer.apple.com/machine-learning/

?API使用:

Core ML? 的API非常簡單,當你導入轉換好的模型到 Xcode中后暴备,Xcode會自動生成對應的包裝類悠瞬。拿上面性能對比的例子來講,當我們往Xcode中導入已經(jīng)轉換好的?訓練模型Resnet50.mlmodel,會自動在Tcamera.build/DerivedSources/CoreMLGenerated/Resnet50目錄下面生成一個Resnet50.swift文件涯捻。

  1. Resnet50 核心入口類浅妆,真正代碼打交道的主入口類
  1. Resnet50Input 輸入類, 負責輸入?要求的數(shù)據(jù)障癌,比如60*60大小的圖片
  1. Resnet50Output 輸出類凌外, 負責輸出預測結果值,比如輸出預測的圖片對應的類別

上面部分屬于Xcode自動幫我們生成的涛浙,對于我們使用的時候:

  let prediction = try? Resnet50().prediction(image: pixelBuffer) 

是不是很簡單呢康辑?所以再次證明 Core ML? “降低了機器學習的門檻”,而讓我們去專注數(shù)據(jù)訓練部分轿亮。

TensorFlow API:

如何在ios上運行可以參考這里:https://petewarden.com/2016/09/27/tensorflow-for-mobile-poets/疮薇,這里不展開來講了的。

訓練數(shù)據(jù)方面:

需要自己根據(jù)TensorFlow Python API編寫自己的訓練算法我注,當然TensorFlow已經(jīng)提供了一些常用的圖片分類算法等按咒。最終生成的數(shù)據(jù)包括兩個文件:imagenet_comp_graph_label_strings.txt 以及 tensorflow_inception_graph.pb (也可以自行下載訓練好的數(shù)據(jù):https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip

?API使用:

以官方的camera demo為例:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/ios/camera

  1. 需要自行編譯libtensorflow-core.a

  2. 圖片識別的核心方法:runCNNOnFrame

    1. 初始化訓練數(shù)據(jù)

    加載pb部分:

    加載label部分:

    2.識別圖片:runCNNOnFrame,首先根據(jù)拿到的圖片創(chuàng)建一個image_tensor但骨,然后配合tf_session進行預測拿到結果值励七。

所以看下來 TensorFlow 在ios上運行的時候,都是要依賴c++混編的嗽冒,封裝的還很差呀伙,門檻相對于上面的Core ML?還是要高很多了的。

對二者的一點點思考

Google 一直的感覺是擁抱開源添坊, Apple以前則是相反剿另,所以導致后者基本上設計的東西都沒有跨平臺的說法,那么 Core ML? 自然?也僅限ios贬蛙,但卻可以發(fā)揮設備本身最大的性能雨女。 目前而言 Core ML? 讓我覺得頭疼的是,從上面的介紹中也提到了的阳准,數(shù)據(jù)集是跟隨APP版本一起發(fā)布出去了的氛堕,他并不支持對數(shù)據(jù)再次訓練,導致我們無法優(yōu)化我們的數(shù)據(jù)集野蝇,而且加上通常情況下訓練的數(shù)據(jù)體檢都很大讼稚,比如我demo中100M+括儒,這樣無形中就導致了APP體積過大。而 TensorFlow 則可以更新數(shù)據(jù)集锐想。

Core ML? 僅僅是個開始帮寻,但我深信 Apple 不會就此停下?前進的步伐。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赠摇,一起剝皮案震驚了整個濱河市固逗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藕帜,老刑警劉巖烫罩,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洽故,居然都是意外死亡贝攒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門收津,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饿这,“玉大人浊伙,你說我怎么就攤上這事撞秋。” “怎么了嚣鄙?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵吻贿,是天一觀的道長。 經(jīng)常有香客問我哑子,道長舅列,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任卧蜓,我火速辦了婚禮帐要,結果婚禮上,老公的妹妹穿的比我還像新娘弥奸。我一直安慰自己榨惠,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布盛霎。 她就那樣靜靜地躺著赠橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愤炸。 梳的紋絲不亂的頭發(fā)上期揪,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音规个,去河邊找鬼凤薛。 笑死姓建,一個胖子當著我的面吹牛,可吹牛的內容都是我干的缤苫。 我是一名探鬼主播引瀑,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨馁!你這毒婦竟也來了憨栽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翼虫,失蹤者是張志新(化名)和其女友劉穎屑柔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珍剑,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡掸宛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了招拙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唧瘾。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖别凤,靈堂內的尸體忽然破棺而出饰序,到底是詐尸還是另有隱情,我是刑警寧澤规哪,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布求豫,位于F島的核電站,受9級特大地震影響诉稍,放射性物質發(fā)生泄漏蝠嘉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一杯巨、第九天 我趴在偏房一處隱蔽的房頂上張望蚤告。 院中可真熱鬧,春花似錦服爷、人聲如沸杜恰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箫章。三九已至,卻和暖如春镜会,著一層夾襖步出監(jiān)牢的瞬間檬寂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工戳表, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶至,地道東北人昼伴。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像镣屹,于是被迫代替她去往敵國和親圃郊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容