TensorFlow 到 Core ML

在机器学习领域,�有之前火爆网络的 TensorFlow ,我还一直以为 apple 在机器学习领域就要那么埋没下去了的,结果万万没有想到今年 WWDC 憋了大招:Core ML,现场几乎每天关于 Core ML 的 session 都是爆满, 排队排的我都觉得每次站的脚痛。回国之后抽空体验了二者在 ios 上性能表现,今天跟大家一起来聊一聊。

二者直接拿来对比是一个误区

看上图,Core ML� 是把已经训练好的数据模型(比如利用 Caffe训练的模型), 通过 coremltools 转换成 Core ML� 格式的模型, 最后提供了一系列的API, 快速的集成到�App中。所以并不包含训练过程。

再来看看具体 X�code 中 Model 的展示信息:

Core ML� 的数据格式包括三大部分:名称,输入以及输出。X�code 会自动生成 swift 或者 OC 的包装类,APP 可以通过 Core ML� 提供的API 方便的使用该训练�好的数据模型。

所以综上所述,Core ML� 本身的API只是借助已经训练好的数据模型,最后生成对应的包装类,接收输入,�输出结果值。

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 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 支持 Python 和 C++ 两种编程语言,再复杂的多层神经网络模型都可以用Python来实现。

所以综上所述,TensorFlow 更偏向的是数据训练层,如果要对比,那么他应该是和 Caffe 等框架在一个层面上,而不是和 Core ML� 使用层去对比。当然 TensorFlow 也可以和 Core ML� 一样 ,在移动设备上运行的。

TensorFlowCore ML� 在 ios 上性能表现

既然都可以在 ios 上运行,那么同样的数据集,在�同一台设备上表现的如何呢?昨晚花了一点时间,把自己已经上架的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)

在识别速度上几乎无差别,但在运算损耗上后者更高,意味着手机很快就会发烫。这就是我为什么把APP转换成 Core ML� 实现了的。

TensorFlowCore ML� 在 ios Api使用难易程度对比

Core ML� 以官网Api Doc 来讲,TensorFlow 以官方Demo 为例。

Core ML� API:

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

训练数据方面:

训练部分不属于Core ML� ,你只需要把你训练好的数据model, 通过 coremltools 转换成 Core ML� 格式的模型即可。当然官方已经提供了一些转换好的供大家使用,比如demo中使用的Resnet50.mlmodel,下载地址:https://developer.apple.com/machine-learning/

�API使用:

Core ML� 的API非常简单,当你导入转换好的模型到 Xcode中后,Xcode会自动生成对应的包装类。拿上面性能对比的例子来讲,当我们往Xcode中导入已经转换好的�训练模型Resnet50.mlmodel,会自动在Tcamera.build/DerivedSources/CoreMLGenerated/Resnet50目录下面生成一个Resnet50.swift文件。

  1. Resnet50 核心入口类,真正代码打交道的主入口类
  1. Resnet50Input 输入类, 负责输入�要求的数据,比如60*60大小的图片
  1. Resnet50Output 输出类, 负责输出预测结果值,比如输出预测的图片对应的类别

上面部分属于Xcode自动帮我们生成的,对于我们使用的时候:

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

是不是很简单呢?所以再次证明 Core ML� “降低了机器学习的门槛”,而让我们去专注数据训练部分。

TensorFlow API:

如何在ios上运行可以参考这里:https://petewarden.com/2016/09/27/tensorflow-for-mobile-poets/,这里不展开来讲了的。

训练数据方面:

需要自己根据TensorFlow Python API编写自己的训练算法,当然TensorFlow已经提供了一些常用的图片分类算法等。最终生成的数据包括两个文件:imagenet_comp_graph_label_strings.txt 以及 tensorflow_inception_graph.pb (也可以自行下载训练好的数据: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. 初始化训练数据

    加载pb部分:

    加载label部分:

    2.识别图片:runCNNOnFrame,首先根据拿到的图片创建一个image_tensor,然后配合tf_session进行预测拿到结果值。

所以看下来 TensorFlow 在ios上运行的时候,都是要依赖c++混编的,封装的还很差,门槛相对于上面的Core ML�还是要高很多了的。

对二者的一点点思考

Google 一直的感觉是拥抱开源, Apple以前则是相反,所以导致后者基本上设计的东西都没有跨平台的说法,那么 Core ML� 自然�也仅限ios,但却可以发挥设备本身最大的性能。 目前而言 Core ML� 让我觉得头疼的是,从上面的介绍中也提到了的,数据集是跟随APP版本一起发布出去了的,他并不支持对数据再次训练,导致我们无法优化我们的数据集,而且加上通常情况下训练的数据体检都很大,比如我demo中100M+,这样无形中就导致了APP体积过大。而 TensorFlow 则可以更新数据集。

Core ML� 仅仅是个开始,但我深信 Apple 不会就此停下�前进的步伐。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容