一、Core ML简介
1、Core ML框架
iOS11推出了Core ML框架,极大地降低了开发者在iphone上使用机器学习的门槛。
苹果文档给出了如下的描述:
Core ML is the foundation for domain-specific frameworks and functionality. Core ML supports Vision for image analysis, Foundation for natural language processing (for example, the NSLinguisticTagger class), and GameplayKit for evaluating learned decision trees. Core ML itself builds on top of low-level primitives like Accelerate and BNNS, as well as Metal Performance Shaders.
简单而言,Core ML使得模型能在设备上高效地运行,主要有以下几个优点:
1)较低的内存占用
2)较低的电池消耗
3)更快的计算速度
4)本地计算,不需要网络的支持
2、Core ML Model说明
经过机器学习算法训练的模型将作为运用的结果。这个模型的预测基于新的输入数据。比如,根据一个区域的房价历史数据,结合卧室和浴室数量来预测房子的价格。
Core ML 是特定领域和功能的基础。Core ML 支持视觉图像分析,基础的自然语言处理(比如 NSLinguisticTagger 类)和GamepayKit ,评估和学习决策树,Core ML 本身构建在底层处理之上,像Accelerate (进行大规模的数学计算和图像计算,对高性能进行优化。)和 BNNS(使用之前获得的训练数据来实现和运行神经网络。)
Core ML 充分利用一台设备的性能,使用最少的内存和电量,严格地在设备上运行可以确保用户数据的隐私,并保证当网络连接不可用时,您的应用程序仍然具有功能性和响应性。
构建更多智能机器学习的应用
model | 说明 |
---|---|
MobileNet | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
SqueezeNet | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。虽然只有5 MB的内存空间,但是,压缩zenet与alex net的精度相同,但其参数却少了50倍。 |
Places205-GoogLeNet | 侦测到一个来自205个类别的图像的场景,如机场终端、卧室、森林、海岸等。 |
ResNet50 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
Inception v3 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等 |
VGG16 | 从一组1000个类别中检测出图像中的占主导地位的物体,如树、动物、食物、车辆、人等等。 |
3、获取 Core ML 模型
Core ML 支持多样化的机器学习模型,包括神经网络,集合树,支持向量机 和广泛的线性模型,Core ML 要求Core Model 模型格式(.mlmodel 文件扩展名).mlmodel 是通过第三方python来生成的,你可以通过python来制定你属于你自己业务模型
。
Apple 早已提供几个受欢迎,开源的Model格式化模型。你能在你的APP里下载并开始使用它们,此外,多方面的研究调查组和大学发布它们训练的模型,这可能不是核心的ML模型格式。如果你需要转换它们,你可以阅读以下:
Converting Trained Models to Core ML.
二、Core ML Tools介绍
1、安装coremltools
coremltools是一个python工具包,可以通过如下命令进行安装:
pip install -U coremltools
如果提示six相关错误,可以尝试加上命令选项“--ignore-installed six”。原因:Apple预安装的这个six库出于安全原因而被设置为sudo也不可以执行操作,依赖于高版本的库就需要更新six,但是没有six的权限,因而就报错了。
coremltools需要依赖numpy (1.12.1+)、protobuf (3.1.0+)两个库。
如果需要查看系统已经安装的numpy、protobuf的版本信息,可以使用如下命令:
pip show numpy protobuf
若需要转化其他模型(如SVM),还需要其他依赖库,可以在这里查看
这里有个demo可以验证下环境是否搭建成功。 Demo
2、模型转化
本文以caffe训练得到的模型为例作为介绍。整个转化过程非常简单,只需两行代码,涉及两个接口调用:convert和save。
coreml_model = coremltools.converters.caffe.convert(('bvlc_alexnet.caffemodel', 'deploy.prototxt'), predicted_feature_name= 'class_labels.txt')
coreml_model.save('BVLCObjectClassifier.mlmodel’)
这个转化是很基本的,没有涉及过多的参数。但是别的模型下,比如Resnet-50,它要求输入mean image,此时需要指定参数image_input_names=[]。
convert接口完整的参数如下:
coremltools.converters.caffe.convert(model, image_input_names=[], is_bgr=False, red_bias=0.0, blue_bias=0.0, green_bias=0.0, gray_bias=0.0, image_scale=1.0, class_labels=None, predicted_feature_name=None)
3、苹果在这里给出了coremltools完整的使用文档。
结束语
到这里就结束了,如若不懂的话可以👇留言,也可以加入群讨论
喜欢的话 记得关注、收藏、点赞哟