本篇文章将是本系列文章的最后一篇。本专题将iOS中有关Machine Learning的相关内容做了整体梳理。下面是专题中的其他文章地址,希望如果你有需要,本专题可以帮助到你。
专题中,从iOS中Machine Learning相关的API开始介绍,后续扩展到如何使用模型进行预测,如何自定义的训练模型。其实CoreML框架只是Machine Learning领域内的一个框架而已,市面上还有许多流行的用来训练模型的框架。如TensorFlow,PyTorch,LibSVM等。在iOS平台中直接使用这些框架训练完成的模型是比较困难的,但是Core ML Tools提供了一些工具可以方便的将这些模型转换成CoreML模型进行使用,大大降低了模型的训练成本。
此工具官网:
https://coremltools.readme.io/docs
首先需要有安装Python运行环境,从Core ML Tools4.1版本开始将不再支持Python2,因此建议直接使用Python3。安装Python会默认安装pip工具,使用如下命令来安装Core ML Tools:
pip install coremltools
coremltools模块并不包含三方库(如TensorFlow),因此安装会比加快。
要使用三方的模型,需要做如下几步操作:
其中最核心的是模型的转换和元数据的写入。
以TensorFlow的MobileNetV2模型为例,我们下面尝试将其转换成CoreML模型。要转换TensorFlow格式的模型,首先需要安装对应的框架,使用pip来安装如下依赖:
pip install tensorflow h5py pillow
第一步,下载三方模型,使用tensorflow框架提供的API可以将模型加载的到内存中去,代码如下:
import tensorflow as tf
keras_model = tf.keras.applications.MobileNetV2(
weights="imagenet",
input_shape=(224, 224, 3,),
classes=1000,
)
其中applications.MobileNetV2是tensorflow框架中提供好的API,在此文档中可以查看这个API的更多用法:
https://www.tensorflow.org/api_docs/python/tf/keras/applications/mobilenet_v2/MobileNetV2
同时我们还需要下载一个索引文件,此文件定义了模型所能预测的标签数据,Python代码如下:
import urllib
# 模型对应的索引文件地址
label_url = 'https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt'
class_labels = urllib.request.urlopen(label_url).read().splitlines()
class_labels = class_labels[1:]
assert len(class_labels) == 1000
for i, label in enumerate(class_labels):
if isinstance(label, bytes):
class_labels[i] = label.decode("utf8")
下面进行模型的转换,直接使用coremltools模块提供的API即可,如下:
import coremltools as ct
# 定义输入
image_input = ct.ImageType(shape=(1, 224, 224, 3,),
bias=[-1,-1,-1], scale=1/127)
# 设置可预测的标签
classifier_config = ct.ClassifierConfig(class_labels)
# 进行模型转换
model = ct.convert(
keras_model,
inputs=[image_input],
classifier_config=classifier_config,
)
这一步做完成,实际上已经完整了核心的转换部分,我们还需要为model实例追加一些元数据,你应该还记得,将CoreML模型引入Xcode工程后,可以在Xcode中看到模型的简介和使用方法等信息,这些信息就是通过追加元数据写入的。上面实例代码中,默认将其转换成neuralnetwork(神经网络)模式的模型,转换模型时我们也可以选择了添加conver_to参数为mlprogram,这表示将模型转换成CoreML程序模式的。
写入元数据实例代码如下:
# 写入元数据
model.input_description["input_1"] = "输入要分类的图片"
model.output_description["classLabel"] = "最可靠的结果"
# 模型作者
model.author = "TensorFlow转换"
# 许可
model.license = "Please see https://github.com/tensorflow/tensorflow for license information, and https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet for the original source of the model."
# 描述
model.short_description = "图片识别模型"
# 版本号
model.version = "1.0"
最后,就可以进行模型的导出了,代码如下:
# 存储模型
model.save("MobileNetV2.mlmodel")
需要注意,此时导出的模型格式,与前面转换成设置的模型类型有关,转换为mlprogram模式的模型需要导出mlpackage格式的,转换为neuralnetwork的模型需要导出为mlmodel格式的。
完整的Python文件代码如下:
import tensorflow as tf
# 加载模型
keras_model = tf.keras.applications.MobileNetV2(
weights="imagenet",
input_shape=(224, 224, 3,),
classes=1000,
)
import urllib
# 模型对应的索引文件地址
label_url = 'https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt'
class_labels = urllib.request.urlopen(label_url).read().splitlines()
class_labels = class_labels[1:]
assert len(class_labels) == 1000
for i, label in enumerate(class_labels):
if isinstance(label, bytes):
class_labels[i] = label.decode("utf8")
import coremltools as ct
# 定义输入
image_input = ct.ImageType(shape=(1, 224, 224, 3,),
bias=[-1,-1,-1], scale=1/127)
# 设置可预测的标签
classifier_config = ct.ClassifierConfig(class_labels)
# 进行模型转换
model = ct.convert(
keras_model,
inputs=[image_input],
classifier_config=classifier_config,
)
# 写入元数据
model.input_description["input_1"] = "输入要分类的图片"
model.output_description["classLabel"] = "最可靠的结果"
# 模型作者
model.author = "TensorFlow转换"
# 许可
model.license = "Please see https://github.com/tensorflow/tensorflow for license information, and https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet for the original source of the model."
# 描述
model.short_description = "图片识别模型"
# 版本号
model.version = "1.0"
# 存储模型
model.save("XMobileNetV2.mlmodel")
运行此Python脚本,如果没有报错,则会在当前脚本的同级目录下生成模型文件,下面我们可以将此模型文件引入到Xcode中,如下:
下面可以尝试下此模型的预测效果,如下:
可以看到,将三方模型转成成CoreML模型非常简单,同理对于PyTroch,LibSVM等模型也类似,安装对应的三方模块,读取模型后进行转换即可。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有