当前位置: 首页 > 编程日记 > 正文

移动应用AI化成新战场?详解苹果最新Core ML模型构建基于机器学习的智能应用...

Google刚刚息鼓,苹果又燃战火!这一战,来自移动应用的AI化之争。

近日,苹果发布专为移动端优化的Core ML后,移动开发者对此的需求到底有多强烈?去年大获成功的AI应用Prisma又能告诉我们什么?苹果的新武器Core ML具体该怎么用?野心勃勃的苹果在移动端机器学习上的布局到底有着怎样的心机?苹果真能撼动Google、Facebook的优势地位吗?未来AI的走向会不会就此改变?此中答案,本文将娓娓道来。

作者 | 胡永波


本届WWDC,Core ML是苹果送给移动开发者的一份大礼。使用它,开发者可以把训练好的机器学习模型导入iOS应用,同时在系统层面加速应用内的人工智能计算。Core ML API支持的具体任务包括图像识别、文本处理、人脸检测与追踪,等等。

苹果这一举措,正应了Gartner去年10月份预测的移动应用AI化趋势:科技行业的主战场很快会变成能够主动学习和适应、可自主做出反馈的智能系统之间的竞争。到2018年,全球最大的200家公司中,绝大部分都会推出智能应用,同时会使用完整的大数据分析工具来重新定义并提升用户的体验。

而Gartner的说法,则又来自业已拥有机器学习能力的那些移动应用的市场表现。归根结底是SnapChat在青少年人群中的流行,是Prisma在去年的异常火爆,是在国内一直被人刷屏的各类美颜照片应用……只要找对场景,有AI加持的移动应用总能脱颖而出。

以Prisma为代表的移动应用AI化

重新回顾一下Prisma的故事,我们总是能找出一些蛛丝马迹。

作为战斗民族的90后,技术发烧友Alexey Moiseenkov在2016年初偶然读到两篇关于图像的机器学习论文:《艺术风格的神经算法(A Neural Algorithm of Artistic Style)》和《利用神经卷积网络进行纹理合成(Texture Synthesis Using Convolutional Neural Networks)》。

艺术风格的神经算法:提取画作的艺术风格

论文的作者Gatys等人基于论文中的研究成果,在2015年做出一个收费网站 DeepArt,自动y以大师的绘画风格来为用户作画,其步骤如下:

  1. 识别用户上传的照片;

  1. 学习照片中的艺术风格信息;

  2. 输出一幅重新绘制出来的作品。

利用神经卷积网络进行纹理合成:对照片纹理进行重绘和渲染

这与人类学习作画过程类似:

  1. 看到一幅作品,对绘画有个初步的概念;

  2. 学习作品中的绘画风格与笔法;

  3. 临摹上述风格和笔法,重新绘画。

提取不同名画的风格,就能渲染出不同效果的照片

但只出现在网页端的DeepArt服务耗时过长,渲染出一张新照片至少需要20分钟,并且收费不菲。Gatys等人没能看到移动市场的机会,这让年轻的Alexey一下子抓住了灵感,让他坚信移动端的“AI+图像处理”必定大有可为。

Alexey清楚,在移动端成功的关键,是能够显著降低图像处理过程的耗时,也就是大幅度提升神经网络的运行效率。为此,他对Gatys等人的算法研究了两个月,在不影响移动端图像效果的前提下,尽可能简化神经网络所需要处理的细节。此处的优化,使得Prisma的耗时仅需几秒钟,处理速度相比DeepArt提升了1000倍。

随后的开发过程,仅用了一个半月。6月11日,Prisma在苹果应用商店上线。两周时间,下载量就超过160万次;三个月后,全球下载量突破7000万;到年底,Prisma一举拿下Google和苹果两大平台的“年度最佳应用”。

Prisma的迭代升级一直是围绕“提速”来进行的,关键就是不断改进图像处理的算法。

最初,Prisma的3个神经网络都部署在云端。用户选取照片效果后,手机上的Prisma应用便将照片上传至服务器,云端的卷积神经网络在解读照片后,会根据用户选择的效果重新渲染出一张新照片,并下载到用户的手机上。

随着Prisma开始海外扩张,海外用户与Prisma位于莫斯科的服务器通讯问题,成为Prisma加载缓慢的主因。为此,Alexey不得不考虑解决办法,也就要设法在手机上完成照片渲染的过程。2016年8月,直接使用iPhone处理器,Prisma成为第一个能够离线运行风格转换神经网络的手机应用。一张1080×1080分辨率的照片,半秒就能转换成全新的风格。

可以看出,在手机上部署机器学习算法的需求是极强的。

毕竟,采用AI来编辑或制作照片的不止Prisma一家。2016年3月,SnapChat的动态相机效果Lenses一经发布便大受欢迎,这项技术是SnapChat从它2015年9月收购的那家乌克兰公司Looksery身上买来的。Facebook紧随其后,于8月份开始,先后在Instagram、Messenger、WhatsApp上推出能跟SnapChat竞争的滤镜效果。Facebook的技术则来自它在2016年3月份买下的白俄罗斯公司Masquerad。

于是,从今年开始,Facebook和Google相继把它们的机器学习框架转向移动端,在手机应用上直接运行AI算法的趋势几乎不可逆转。紧接着,便有了我们今天的主角Core ML横空出世。

用于移动端的Core ML模型

与Google TensorFlow、Facebook Caffe2不同,苹果的Core ML它专门为iOS移动端的机器学习进行过优化,最大限度减少内存的占用和功耗。而且,即便是网络连接丢失,它还能保证应用的正常工作与响应。

Core ML为iOS Vision API提供图像处理支持,为iOS Foundation API提供自然语言处理上的支持,并支持对iOS GameplayKit的学习决策树 (learned decision tree) 进行分析。苹果为开发者准备好的是四个用于图像识别的模型:Places205-GoogLeNet、ResNet50、Inception v3和VGG16,模型格式为Core ML的 .mlmodel 扩展名。

如何制作Core ML模型

借助于Core ML,开发者还能把训练好的机器学习模型,导入至自己的应用内直接使用。它所支持的机器学习模型包括神经网络 (Neural Network)、组合树 (Tree Ensemble)、支持向量机 (Support Vector Machine) 与广义线性模型 (Generalized Linear Model)。

苹果提供的Core ML Tools Python工具包,可以把第三方机器学习工具所创建的已训练模型转换成Core ML模型格式。Core ML所支持机器学习框架包括Keras、Caffe、scikit-learn、XGBoost与LIBSVM。

以Caffe模型 (.caffemodel) 为例,通过调用转换器,你可以将其传递给 coremltools.converters.caffe.convert 方法:

import coremltools coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')

然后,将结果保存为Core ML模型格式:

coreml_model.save('my_model.mlmodel')

对于Core ML所不支持的格式,比如TensorFlow模型,你只能自己来创建转换工具,将模型的输入、输出和架构表示转换为Core ML格式。这需要仔细参考Core ML Tools所提供的转换工具,它们具体演示了如何通过每一层模型架构、层与层之间的连接关系进行定义,来把各种第三方模型转换成Core ML格式。

如何在应用中添加并使用Core ML模型?

以用来预测火星殖民地价格的已训练模型 MarsHabitatPricer.mlmodel 为例:

首先需要把模型添加到 Xcode 项目中:

也就是将模型拖进项目导航器 (project navigator)

对于 MarsHabitatPricer.mlmodel 而言,Xcode 会生成相应的接口,来分别表示模型本身(MarsHabitatPricer)、模型输入 (MarsHabitatPricerInput) 以及模型输出 (MarsHabitatPricerOutput)。

使用所生成的 MarsHabitatPricer 类的构造器,便可以创建这个模型:

let model = MarsHabitatPricer()

获取输入值并传递给模型:

示例应用使用了 UIPickerView,以便从用户那里获取模型的输入值。

func selectedRow(for feature: Feature) -> Int {

return pickerView.selectedRow(inComponent: feature.rawValue)

}

let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)

let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)

let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)

使用模型来进行预测:

guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size) else {

fatalError("Unexpected runtime error.")

}

通过读取 marsHabitatPricerOutput 的 price 属性,就可以获取所预测的价格,然后在应用的 UI 内就可以对该结果进行展示。

let price = marsHabitatPricerOutput.pricepriceLabel.text = priceFormatter.string(for: price)

注:此处所生成的 prediction(solarPanels:greenhouses:size:) 方法会返回错误提示,因为示例应用所预期的输入类型为 Double。

使用Core ML所遇到的常见错误,是传递给方法的输入数据类型与模型预期的输入类型不同匹配:比如用错误格式表示的图片类型。

构建并运行 Core ML 应用

Xcode 会将 Core ML 模型编译到资源中,以进行优化并在设备上运行。优化过的模型表征会包含在您的应用程序包内,当应用在设备上运行时,便可用以进行预测。

苹果表示,iPhone上经过优化的图像识别,速度能比Google Pixel快6倍。

Core ML可能会有什么样的影响

WWDC还没开完,Keynote引起大家关注后,大会日程中还要讲的Core ML有5项:

  • Introducing Core ML

  • Vision Framework: Building on Core ML

  • Core ML in depth

  • Core ML and Natural Language Processing Lab

  • Core ML & Natural Language Processing Lab

重点是偏向应用的视觉框架和自然语言处理,苹果的经验和支持肯定会让很多开发者跃跃欲试:只要找对场景,新的像Prisma这样的现象级AI应用就还会出现。

而随着iOS应用内机器学习使用门槛的降低,关注AI具体应用的各类工程师也越来越多;随着iOS开发者的涌入,机器学习领域将不再只是算法工程师的天下。

那么,移动开发的另一头,Google为Android端准备的TensorFlow Lite在今年正式发布时会如何发力,就更值得关注了。

毕竟,Google不做移动芯片,如何在硬件层面为手机上的AI应用做优化,就成了它绕不过去的问题:是跟高通的Neural Processing Engine合作?还是把自家的TPU小型化?

至于Caffe2,Facebook将如何在系统层面为AI应用做优化,则是一个非常有趣的问题。

诚如Gartner所言,当AI变成科技行业的主战场时,这里的事情就有意思多了。

参考内容:

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

https://developer.apple.com/wwdc/schedule/

http://www.gartner.com/smarterwithgartner/gartners-top-10-technology-trends-2017/

https://backchannel.com/an-exclusive-look-at-how-ai-and-machine-learning-work-at-apple-8dbfb131932b#.cg37ae5f0

https://zhuanlan.zhihu.com/p/26746283

https://developer.apple.com/videos/play/wwdc2017/703/


相关文章:

mysql5.1 与mysql5.5 字符集设置区别

在mysql5.1版本中设置字符集[mysqld]default-character-setutf8在mysql-5.5中设置字符集[mysqld]character_set_serverutf8转载于:https://blog.51cto.com/enable/1247132

@所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬

活动简介那些积极探索技术边界并持续对社区做出贡献的开发者是真正的技术英雄,是开发者的学习榜样,也是各个技术社区发展的生命力!2021年伊始,CSDN 为所有技术社区特别准备了一份年终福利!CSDN 向所有技术社区&#xf…

Gridview][UpdateCommand的写法要点]

在ASP.NET2.0中的GridView为我们浏览更新数据提供了一个方便的途径。我们只需要添加一个sqldatasouce控件和一个GridView,再为sqldatasource写上正确的UpdateCommand语句就可以达到自动更新数据的目的。基本上无需手写更新代码:但在写UpdateCommand语句时&#xff0…

BZOJ 1040 ZJOI2008 骑士 树形DP

题目大意&#xff1a;给定一个基环树林&#xff0c;每一个点上有权值&#xff0c;要求选择一个权值和最大的点集&#xff0c;要求点集中的随意两个点之间不能直接相连 最大点独立集……考虑到n<100W&#xff0c;网络流铁定跑不了&#xff0c;于是我们考虑树形DP 对于每棵基环…

在GridView内访问特定控件

本文我将为你演示如何访问GridView中的特定控件。我们会看到怎样去访问TextBox控件&#xff0c;DropDownList控件以及ListBox控件。 添加控件到GridView&#xff1a; 你可以简单地使用 <ItemTemplate>选项在GridView控件中增加不同的控件。 填充列表框和下拉框控件 第…

解决 apache 2.4.1 无法解析shtml中的expr指令问题

2019独角兽企业重金招聘Python工程师标准>>> apache 2.4.1上运行内嵌<!--#if expr${mobile}-->的shtml格式文件&#xff0c;在页面上提示一下错误&#xff1a; [an error occurred while processing this directive] SSI对shtml格式的配置是正常的&#xff0c…

新华三发布H3C Workspace数字工作空间:只需一张屏,程序员也能随时随地在云上写代码

随着数字时代的不断发展&#xff0c;工作模式经历了面对面的“纸笔”模式、办公室场景下的“PC电脑”模式、以及远程办公场景下的“手机协同软件”模式&#xff0c;如今&#xff0c;尤其伴随2020年的疫情催生&#xff0c;更迎来以“云屏”架构为核心的未来工作模式。 “云屏”…

centos 安装 NTFS支持

2019独角兽企业重金招聘Python工程师标准>>> 参考的原文网址&#xff1a; centos安装完之后&#xff0c;默认是不支持NTFS磁盘格式的&#xff0c;解决的方法之一就是安装NTFS-3G模块&#xff0c;但是默认的软件源是没有这个依赖库的&#xff0c;我们需要额外的阿里云…

linux基本命令详解の第一季

linux常用命令一&#xff1a;文件名命名规则1&#xff09;除了/之外&#xff0c;所有的字符都合法。 2)有些字符最好不用&#xff0c;如&#xff0c;空格、制表符、退格符和字符#&#xffe5;%&#xff08;&#xff09;-等。 3)避免使用.作为普通文件名的第一个字符,在linux系统…

asp.net 2.0中一次性更新所有GRIDVIEW的记录

在asp.net 2.0中&#xff0c;gridview控件是十分不错的控件。有的时候&#xff0c;可能一个GRIDVIEW控件中 的各行都是文本框&#xff0c;如何一次性更新所有修改过的记录呢&#xff1f;有两种方法&#xff0c;一种是使用sqldatasource来更新 所有记录&#xff0c;但这个方法比…

清华 CVer 对自监督学习的一些思考

来源 | Jack Cui责编 | 晋兆雨头图 | CSDN 下载自视觉中国众所周知&#xff0c;机器学习大致可分为有监督学习和无监督学习。自监督学习作为无监督学习的一个特例&#xff0c;可以理解它是一种没有人工标注标签的监督学习&#xff0c;即没有人类参与的监督学习。但标签仍然存在…

使用 HTML5 时如何改进移动 Web 应用开发

因为 HTML 有易于维护&#xff0c;更好的互动性&#xff0c;更快的开发等优点&#xff0c;被越来越多的应用在移动 Web 应用程序的开发中。HTML5 是一种标记语言&#xff0c;与 Javascript 和 CSS 一起&#xff0c;构成了每个开发者的核心技术&#xff0c;HTML5 拥有自己的 API…

hibernate.cfg.xml详细配置

<!--标准的XML文件的起始行&#xff0c;version1.0表明XML的版本&#xff0c;encodinggb2312表明XML文件的编码方式--> <?xml version1.0 encodinggb2312?> <!--表明解析本XML文件的DTD文档位置&#xff0c;DTD是Document Type Definition 的…

ASP.NET2.0中用Gridview控件操作数据

在ASP.NET 2.0中&#xff0c;加入了许多新的功能和控件&#xff0c;相比asp.net 1.0/1.1&#xff0c;在各方面都有了很大的提高。其中&#xff0c;在数据控件方面&#xff0c;增加了不少控件&#xff0c;其中的Gridview控件功能十分强大。在本文中&#xff0c;将探讨Gridview控…

人工智能在消费领域,都做了哪些事?

来源 | 人民数字FINTECH责编 | 晋兆雨头图 | CSDN 下载自视觉中国#AI正在融入生活的方方面面近日&#xff0c;北京一购物中心开业&#xff0c;在开业当天迎宾的并不是“人”而是“机器人”。在这里你可以体验到高科技高颜值的机器人“迎宾团”给你带来的贵宾级的服务&#xff0…

poj 1681 Painter#39;s Problem(高斯消元)

http://poj.org/problem?id1681 求最少经过的步数使得输入的矩阵全变为y。 思路&#xff1a;高斯消元求出自由变元。然后枚举自由变元&#xff0c;求出最优值。注意依据自由变元求其它解及求最优值的方法。 #include <stdio.h> #include <algorithm> #include <…

ASP.NET 2.0中GRIDVIEW排序

在 headertemplate中加一张UP.GIF和DOWN.GIF(就是升序&#xff0c;倒序的示意图&#xff09; % Page Language"C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html…

基础篇9-python基本数据结构-列表

基础篇9-python基本数据结构-列表一.列表&#xff1a;1.有序的集合2.通过偏移来索引&#xff0c;从而读取数据3.支持内嵌a [[1,2,3],[4,5,6]]4.可变类型a[0][1] 7二.切片a [1,2,3,4,5,6,7]a[0:3:1]0 索引开始3 索引结束1 间隔(默认1)正向索引 它是从左往右索引假如要取出1234…

用AI打造科技公益新模式,腾讯发起公益创新挑战赛,聚焦三大社会问题

近日&#xff0c;由腾讯基金会、企鹅伴成长、腾讯优图实验室、腾讯云AI、腾讯云开发联合发起的腾讯Light公益创新挑战赛在三亚宣布正式启动。本次比赛以“AI&#xff0c;让美好现在发生”为主题&#xff0c;与联合国儿童基金会、深圳市信息无障碍研究会、桃花源生态保护基金会三…

一个查看全部用户的磁盘空间使用情况的脚本

一个查看全部用户的磁盘空间使用情况的脚本 脚本程序例如以下&#xff1a; #!/bin/sh for user in ls /home dodu -hs "/home/"$user done脚本运行结果&#xff1a; [rootsyy ~]# . homeusage.sh 32K /home/saleli 9.2G /home/syy 500K /home/wph太简单了…

Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理

Asp.net 2.0中新增的gridview控件&#xff0c;是十分强大的数据展示控件&#xff0c;在前面的系列文章里&#xff0c;分别展示了其中很多的基本用法和技巧&#xff08;详见&#xff1c; ASP.NET 2.0中Gridview控件高级技巧&#xff1e;)。在本文中&#xff0c;将继续探讨有关的…

对标Oculus Quest2,爱奇艺奇遇VR打的什么牌?

出品 | AI科技大本营 作者 | 阿司匹林 1月6日&#xff0c;爱奇艺奇遇VR在京召开主题为“谁与争锋”的VR技术发布会&#xff0c;正式发布国内首个CV&#xff08;计算机视觉技术&#xff09;头手6DoF VR交互技术——追光&#xff0c;并面向全球VR游戏开发者启动“哥伦布计划”。 …

DVWA默认用户名密码

有些东西不好找啊&#xff0c;自己动手丰衣足食&#xff5e;&#xff5e; DVWA默认的用户有5个&#xff0c;用户名密码如下&#xff08;一个足以&#xff09;&#xff1a; admin/password gordonb/abc123 1337/charley pablo/letmein smithy/password转载于:https://www.cnblog…

idea 基本设置

1. 打开首先设置 maven,添加配置文件 2.自动导入 搜索 auto import ,勾选 Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包3.快捷键 切换成 eclipse 版本&#xff0c;智能提示快捷键 …

ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

学习整理了一下(一).功能用HttpHandler实现图片验证码(二).代码如下1. 处理程序文件 ValidateImageHandler.ashx代码如下1 <% WebHandler Language"C#"Class"ValidateImageHandler"%>2 3 usingSystem;4 usingSystem.Web;5 usingSystem.Web.SessionSt…

linux下配置ip地址的方法

&#xff08;1&#xff09;Ifconfig命令第一种使用ifconfig命令配置网卡的ip地址。此命令通常用来零时的测试用&#xff0c;计算机启动后ip地址的配置将自动失效。具体用法如下。Ipconfig ethx ipadd netmask x.x.x.x。其中ethx中的x代表第几快以太网卡&#xff0c;…

百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队

1月7日&#xff0c;2020年小米百万美金技术大奖揭晓&#xff0c;经过小米集团技术委员会多轮评选&#xff0c;手机部小米秒充团队、软件与体验部的MIUI隐私保护团队&#xff0c;双双赢得了价值100万美元的技术大奖&#xff08;小米受限股&#xff09;。 120W有线秒充&#xff…

在 Android 应用程序中使用 SQLite 数据库以及怎么用

part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库。它支持 SQL 语言&#xff0c;而且仅仅利用非常少的内存就有非常好的性能。此外它还是开源的&#xff0c;不论什么人都能够使用它。很多开源项目&#xff08;(Mozilla, PHP, Python&#xf…

asp.net 2.0 权限树的控制

做权限的时候,主要实现如下功能1、该节点可以访问&#xff0c;则他的父节点也必能访问&#xff1b;2、该节点可以访问&#xff0c;则他的子节点也都能访问&#xff1b;3、该节点不可访问&#xff0c;则他的子节点也不能访问。使用带CheckBox的数型结构能得到很好的用户体验,可是…

腾讯首位17级杰出科学家诞生:腾讯AI Lab负责人张正友

2021年1月8日腾讯宣布&#xff0c;腾讯Robotics X实验室及腾讯AI Lab负责人张正友博士成为腾讯首位17级研究员/杰出科学家&#xff0c;17级是腾讯历史上最高的专业职级。 腾讯AI Lab及腾讯Robotics X实验室负责人张正友博士荣获这一殊荣的张正友博士&#xff0c;领导创建了世界…