在機器學習領域迹炼,?有之前火爆網(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?
一樣 浊闪,在移動設備上運行的。
TensorFlow
和 Core 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)了的茂卦。
TensorFlow
和 Core 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
文件涯捻。
- Resnet50 核心入口類浅妆,真正代碼打交道的主入口類
- Resnet50Input 輸入類, 負責輸入?要求的數(shù)據(jù)障癌,比如60*60大小的圖片
- 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
需要自行編譯libtensorflow-core.a
-
圖片識別的核心方法:
runCNNOnFrame
- 初始化訓練數(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
不會就此停下?前進的步伐。