
欢迎将TalkingData设为星标
每日精彩文章等着你~
机器学习不仅是目前最火的技术,同时也是人工智能最核心的内容。机器学习是一种能让计算机无需不断被显示编程,而自我学习的人工智能技术。不通过某个具体的编程算法,而是在大量的数据样本中找到一个合适的模式或者规律,从而让计算机能够不断的自我发展和完善自我的算法。
一般情况下,机器学习模型都是庞大且复杂的,截止到目前,能够直接进行模型训练的方式和架构还暂未出现,当前的方法是将训练好的模型文件应用在移动设备上,使用预制的框架加载与使用模型,或者通过API 的方式联网远程预测等。
相对来说,通过远程预测的方式可以保证安全性,但却严重依赖网络环境,为了避免不确定的网络环境所带来的预测失败或无法预测等异常情况,可以将模型文件直接应用在移动设备上,这样不仅能够保证时效性,也无需再依赖网络环境,这种方法对于推理预测来说有了保证。
自 iOS 11 开始,苹果在 iOS 系统中引入了一种全新的,直接依附于硬件平台的机器学习框架——Core ML,该框架使机器学习模型在 iOS 系统平台下预测推理可以快速并易于实现。借助 Core ML,可以将已训练好的机器学习模型,集成到自己的应用当中,以实现智能化的应用程序,提升用户体验等。

已训练模型 (trained model),指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果。举个例子,通过移动设备上附带的传感器数据来训练一个能够识别用户行为类型(走、跑、乘车等)的模型,将该模型应用于应用程序中后,该模型即可以对用户使用移动设备时所做出的行为进行预测(该模型目前已在 TalkingData SDK 中实现并应用)。
在iOS体系中,Core ML 是领域特定 (domain-specific) 框架和功能的基础所在。Core ML 为 Vision 提供了图像处理的支持,为 Foundation 提供了自然语言处理的支持(例如 NSLinguisticTagger 类),为 GameplayKit 提供了对学习决策树 (learned decision tree) 进行分析的支持。Core ML 本身是基于底层基本类型而建立的,包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。

Core ML 针对设备的性能进行了优化,最大限度地减少了内存占用和功耗。因其在设备上运行有着严格要求,这不仅保护了用户数据隐私,而且当网络连接丢失时,还能够保证应用能正常工作和响应。
Core ML本身是非常优秀的,它使得将机器学习甚至深度学习模型移植到移动设备上变为了可能。但是不得不说的是,Core ML 也有一定的局限性:
Core ML 目前仅能进行预测,无法进行模型的训练。训练模型只能在 PC 上或者云上训练,之后再转为 Core ML 支持的格式才可使用;
Core ML 目前所支持的深度学习隐藏层运算函数有限;
Core ML 目前的方式不利于模型的更新。当模型集成进应用程序后,如果要更新模型或模型发生了异常,只能通过线下更新模型,并且之后还需要重新提交应用,进行审核;
Core ML 目前的模型接口函数的调用,缺少统一性的 API 管理,大多数的模型在移植进 iOS 应用程序后,所产生的 API 大同小异,但 Xcode 都会产生一整套重复的接口文件等。
鉴于以上问题,经过调研和不断的试验,最终找到了一个较为合适,但不敢说是完美的方案。
在 iOS11 中,所有的预训练模型 .model文 件,在 App 中的存在格式都是经过 Xcode 自动转换过的 .mlmodelc 文件,该文件是 Core ML 框架加载和使用的参数文件,本项目也正是借助此特性,在线下载已经训练好的预训练模型,然后使用 Core ML 提供的 API 来进行文件转换,之后进行加载使用。
这样避免了应用程序最初就带有预训练模型,避免了初始应用程序包过大,给用户造成下载应用程序的忧患。根据上述调研结果,设想该框架的整体架构如下:

通过 URL 请求,下载经过压缩的预训练模型,在压缩之前,模型已经是完整的符合 Core ML 要求的 .model 格式。下载完成后,进行文件解压缩,同时使用 Core ML 提供的模型编译 API ,完成对 .model 模型文件的编译,产生 Core ML 直接可以使用的 .mlmodelc文件并存储在本地磁盘,等待随时的加载使用。
当开发者调用该框架启动 API 后,该框架使用 Core ML 提供的模型加载 API 预加载模型到内存,开发者根据自己的需求在适当的时机将符合格式的数据传递给模型预测 API,模型进行预测推理后给出结果,开发者根据结果实现自我业务逻辑等。
经过试验后,整理出了一套可以直接在应用程序中使用的开发框架,开发者不需要过多的设定,仅仅需要在应用程序中配置好所需要使用的模型下载地址,之后在合适的时机调用框架的启动接口即可。当一个机器学习任务来临的时候,调用该框架的预测接口,传入数据(例如图像)即可获得预测结果,直接使用。

以 MobileNet 图像识别模型为例,使用Swift进行相关代码编写。




示例结果:

通过该框架,可以减轻开发者繁重的机器学习模型集成压力,开发者只需要关注模型所需数据的格式即可快速开发有关机器学习任务。
目前该框架可用于大多数的图像分类模型,基本用法同上述示例,接下来我们将进一步的扩展和优化该框架,使其能够适应更多的模型,让移动端的机器学习应用开发更加的得心应手。
相关阅读:
▶ 备受瞩目的智能营销到底带来了什么?营销人才会被替代吗?
▶ 咨询专栏丨三张PPT讲清如何搭建App数据管理体系
▶ 必须收藏丨万字长文,带你了解跨平台移动应用开发工具
