Core ML

其实在早在iOS 11之前,Apple就用上了Machine Learning:照片的人脸识别、输入预测,甚至Apple Watch上的手写识别。但现在,开发者终于能在自己的App上使用ML了。

如果之前有大数据计算的iOS开发者可能知道,Apple提供的只有底层的基于CPU实现的 Accelerate(插一句刚刚发现这个framework开始支持watchOS 4了)和GPU实现的MPS,各种C指针的函数,功能少还很难用。所以,支持四大平台iOS、macOS、tvOS和watchOS的Core ML终于补全了这方面的功能。

0 这可不是热狗

当然这并不意味着你可以在一颗小小的A10芯片上炼丹。总的来说,Core ML主要是通过训练好的模型来给出结果。它不需要你手写一个几百行的神经网络,也不需要你去考虑性能和节能,并且从WWDC上的Session来看,似乎表现还不错,至少它不只会像硅谷中的Jian Yang一样告诉你这是不是个热狗。 ScreenShot1

1 ML Frameworks

下面这张图简洁地展示了整个架构。

ScreenShot2

最底层的是Accelerate和MPS,这次Apple又把它们封装了一层Core ML,再上面是用于图像处理例如物体追踪、人脸检测的Vision和用于自然语言处理的NLP(Natural Language Processing)。这些可以一起使用,实时使用,并且不用担心用户隐私、流量消耗和服务器的负担,甚至它可以在没有网络的情况下保持工作。

2 Core ML的使用

作为一个2017年的机器学习框架,它当然包含:前馈神经网络(Feed Forward Neural Networks)、卷积神经网络(Convolutional Neural Networks)、循环神经网络(Recurrent Neural Networks)、支持向量机(Support Vector Machines)、广义线性模型(Generalized Linear Models)、组合树(Tree Ensembles)这些常用又有用的模型。

然后你就应该会问怎么用了,别急,当然简单无脑。

Apple预先提供了一些 models供你使用,当然你也可以自己训练以后把它转换成MLMODEL——Apple推出了开源的Core ML Tools,目前支持Caffe、Keras、XGBoost、Scikit Learn、turi、LIBSVM(扎心了,TensorFlow)。

ScreenShot5

有了MLMODEL之后就方便多了,你可以把它像文件一样导入到你的项目中, 也可以作为一个Bundle使用,

甚至都不用import。

ScreenShot3

let model = FlowerClassifier()
if let prediction = try? model.prediction(image: image) {
  return prediction.flowerType
}

几行代码就可以完成——就是把它当个类嘛😂

3 来个Workflow吧?

这里我们以Caffe为例,来展示一下整个工作流程。

先安装这个tools(我不得不吐槽它竟然不支持Python3)

pip install coremltools

然后在Python里导出mlmodel

import coremltools

caffe_model = ('flowers.caffemodel', 'flowers.prototxt')
model = coremltools.converters.caffe.convert(
  caffe_model,
  image_input_names = 'data',
  class_label = 'labels.txt')
model.save('FlowerClassifier.mlmodel')

然后把它拖进Xcode的navigator

ScreenShot4

这里包含了这个model的基本信息,包括类名、输出与输出等。

再加上2中讲到的Core ML的使用,你就能做出一个微软识花咯。

4 参考资料

https://developer.apple.com/videos/play/wwdc2017/703/ WWDC 关于 Core ML 的 Session

https://developer.apple.com/machine-learning/ Developer官网上关于ML的介绍

https://pypi.python.org/pypi/coremltools coremltools Package网页

Yang Li
Yang Li
@zjzsliyang