Core ML框架详细解析(十六) —— 人工智能和IBM Watson Services(一)

版本记录

版本号 时间
V1.0 2018.10.17 星期三

前言

目前世界上科技界的所有大佬一致认为人工智能是下一代科技革命,苹果作为科技界的巨头,当然也会紧跟新的科技革命的步伐,其中ios API 就新出了一个框架Core ML。ML是Machine Learning的缩写,也就是机器学习,这正是现在很火的一个技术,它也是人工智能最核心的内容。感兴趣的可以看我写的下面几篇。
1. Core ML框架详细解析(一) —— Core ML基本概览
2. Core ML框架详细解析(二) —— 获取模型并集成到APP中
3. Core ML框架详细解析(三) —— 利用Vision和Core ML对图像进行分类
4. Core ML框架详细解析(四) —— 将训练模型转化为Core ML
5. Core ML框架详细解析(五) —— 一个Core ML简单示例(一)
6. Core ML框架详细解析(六) —— 一个Core ML简单示例(二)
7. Core ML框架详细解析(七) —— 减少Core ML应用程序的大小(一)
8. Core ML框架详细解析(八) —— 在用户设备上下载和编译模型(一)
9. Core ML框架详细解析(九) —— 用一系列输入进行预测(一)
10. Core ML框架详细解析(十) —— 集成自定义图层(一)
11. Core ML框架详细解析(十一) —— 创建自定义图层(一)
12. Core ML框架详细解析(十二) —— 用scikit-learn开始机器学习(一)
13. Core ML框架详细解析(十三) —— 使用Keras和Core ML开始机器学习(一)
14. Core ML框架详细解析(十四) —— 使用Keras和Core ML开始机器学习(二)
15. Core ML框架详细解析(十五) —— 机器学习:分类(一)

开始

首先看一下写作环境

Swift 4, iOS 11, Xcode 9

您是否一直在探索使用Apple的Core MLVision框架为您的应用添加机器学习(ML)的令人兴奋的可能性? 也许您已经使用自己的数据来扩展Apple的Turi Create模型之一。 欢迎来到该领域的最新玩家: IBM Watson Services, now with Core ML

注意:Core ML模型最初仅用于视觉识别,但希望其他服务也将成为支持Core ML的。

在本教程中,您将设置IBM Watson帐户,训练自定义视觉识别Watson服务模型,并设置iOS应用程序以使用导出的Core ML模型。


Watson Services

您将在本教程中使用Watson Studio。 它为您的数据训练ML模型提供了一个简单,无代码的环境。

list of Watson services涵盖了一系列数据,知识,视觉,语音,语言ML模型。 一旦你登录Watson Studio,你就会仔细看看这些。

真正令人兴奋的可能性是在Apple的IBM Watson Services for Core ML页面的图表中显示您的应用程序的持续学习:

这越来越接近SiriFaceID所做的事情:在您的应用程序中不断学习用户数据!

这真的是开创性的吗? 现在,如果在用户安装应用程序后Core ML模型发生变化,您的应用程序可以download and compile a new model。 该应用程序需要某种通知,以了解该模型的更新。 一个更大的问题是:为什么模型会改变? 也许通过使用更好的训练算法,但真正的改进通常来自更多的数据。 更好的是,如果实际用户提供新数据。

即使您设法收集用户数据,重新训练模型的工作流程也远非无缝。 这可能会有利于Watson服务的平衡:轻松 - 或至少,更容易 - 集成数据收集,再训练和部署的承诺。 我稍后会告诉你更多相关信息。

1. Turi vs. Watson

你应该用哪个?

  • TuriWatson都允许您扩展视觉和语言的ML模型,但Watson仅为视觉识别模型导出Core ML。
  • Turi有一个activity classifier,Watson没有。 Watson拥有Discovery,听起来比Turi更复杂。
  • 您需要编写并运行Python才能使用Turi来训练模型。 Watson只需要您的数据来训练模型。

2. Um Er … User Privacy?

关于Core ML的重要一点是模型在iOS设备上运行,可以离线使用并保护用户的数据。 用户的数据永远不会离开设备。

但是,当用户提供有关Watson模型预测准确性的反馈时,您的应用程序会将用户的照片发送到IBM的服务器! 嗯,IBM拥有最先进的云端隐私政策(privacy-on-the-cloud policy)。 毫无疑问,Apple将添加新的privacy key要求,让用户选择向您的模型提供数据。


进入正题

1. Carthage

最终,您需要Carthage依赖管理器来构建Watson Swift SDK,其中包含所有Watson Services框架。

通过从Carthage releases下载最新的Carthage.pkg并运行它来安装Carthage。

或者,如果您更喜欢使用Homebrew来安装Carthage,请按照Carthage readme中的说明进行操作。

2. IBM’s Sample Apps - IBM的示例应用程序

从这里开始,路线图可能会变得有点混乱。我会提供直接链接,但也可以在多个页面上告诉您链接的位置,以便在您以后返回时帮助您找到解决方法。

从Apple的页面开始:IBM Watson Services for Core ML。向下滚动到Getting Started,然后按住Command键并单击Begin with Watson Starters下的Start on GitHub。按住Command键单击可在新选项卡中打开GitHub:您希望打开Apple页面,以便更轻松地返回GitHub页面,以便更轻松地返回Watson Studio登录页面 - 相信我!

下载zip文件,然后打开工作区QuickstartWorkspace.xcworkspace。此工作区包含两个应用程序:Core ML Vision SimpleCore ML Vision Custom。 Simple应用程序使用Core ML模型对常见的DIY工具或工厂进行分类。 Custom应用程序使用从Watson Services下载的Core ML模型。这是你将在本教程中构建的模型!

向下滚动到自述文件部分Running Core ML Vision CustomSetting up的第一步是登录Watson Studio。继续,然后单击链接。

3. Signing Up & Logging In - 注册和登录

进入Watson之后,您可以跳到右下角,然后登录。假设这是您的第一次,您需要创建一个帐户。

注意:如果您已拥有IBM Cloud帐户,请继续sign up for IBM Watson步骤。

单击确定,键入电子邮件地址,选中复选框,然后单击Next。 你会看到一个表格:

填写。 为避免麻烦,请知道密码要求是:

密码必须包含8-31个字符,至少包含一个大写字母,一个小写字母,一个数字和一个特殊字符( - _。@)

右侧带眼球的图标显示密码,因此您可以对其进行编辑以包含必要的奇怪信息。

选中或取消选中该复选框,然后单击Create Account。 您将收到一个页面,告诉您检查您的邮箱,这样做,打开电子邮件,并确认您的地址。

请勿点击确认页面中的任何链接! 他们往往会引导你离开你想去的地方。 返回Watson Studio的登录页面,然后单击链接以sign up for IBM Watson

注意:如果Watson认为您已经登录,它将跳过下一步并继续执行下一步。

IBMid??? 放心,您的IBM Cloud登录将帮助您进入! 输入您使用的电子邮件地址,然后单击Continue。 在下一页上,输入您的密码,然后Sign in

有趣。 我创建这个帐户的时候在Vancouver,而不是在美国南部。 但每个Watson服务仅在某些地区提供,而US South则允许您访问所有这些服务。 所以保留那个_us-south附属物,或者添加它,如果不存在的话。

注意:这是关键步骤! 如果您的组织中没有美国南部地区,您将无法访问任何Watson服务。 如果您没有看到这个_us-south附属项,那么您可能正在使用旧的IBM帐户。 尝试使用其他电子邮件地址创建新帐户。

单击Continue,等待一小段时间,同时显示几条不同的消息,然后您就完成了!

单击Get Started将运行更多消息,并在此消息上旋转一段时间:

现在你已经登录进来了

请记住:将来,您可以直接进入右下方链接,然后登录Watson。

您已登录到Services / Watson Services / watson_vision_combined-dsx。 这是因为您单击了GitHub页面上的登录链接,并指定了target = watson_vision_combined。 稍后您将探索Watson Services,但是现在,您将在Watson的对象分类器之上构建自定义对象分类模型。 IBM的示例使用了四种类型的cables,但您可以使用自己的训练图像。 当我们到达那一步时,我会给出详细的说明。

注意:这是一个重要且有用的页面,但在您浏览Watson站点时很容易丢失它。 要返回它,请单击左上角的IBM Watson主页按钮,然后向下滚动到Watson Services以查找其链接。


Creating a Custom Object Classifier - 创建自定义对象分类器

回到GitHub page: Training the model。您将会或多或少地遵循这些说明,我会向您展示您应该看到的内容,帮助您找到所有内容,并提供您正在做的事情的高级摘要。

这是第一个高级摘要。将自定义Watson对象分类器集成到IBM的示例应用程序中的步骤如下:

  • 1) 创建一个新项目。
  • 2) 上传训练数据并将其添加到项目中。
  • 3) 训练模型。
  • 4) 将模型的classifierIdapiKey复制到示例应用程序中的String属性。
  • 5) 在Core ML Vision Custom目录中,使用Carthage下载并构建Watson Swift SDK
  • 6) 选择Core ML Vision Custom方案,构建,运行和测试。

1. Creating a New Watson Project - 创建一个新的Watson项目

像大多数IDE一样,您首先要创建一个项目。这个使用Visual Recognition toolwatson_vision_combined-dsx服务。 “dsx”代表Data Science ExperienceWatson Studio的旧名称。像NS的NextStep一样。

单击Create Mode,然后等待很短的时间以加载New project页面。为Name输入Custom Core ML,然后单击Create

注意:不时有各种Watson人出现。 我不认为他们真的在那里,但如果你和他们中的任何一个实际聊天,请告诉我。

过了一会儿,你会看到这个:

2. Adding Training Data - 添加训练数据

Watson视觉识别模型经过预先训练,可识别工具和植物。 您可以上传自己的训练数据,以创建一个模型,对您的应用程序中的重要对象进行分类。 IBM的示例项目使用电缆照片训练模型,将新图像分类为HDMI,Thunderbolt,VGA或USB

注意:要上传您自己的训练图像而不是线缆图像,请将图像整理到文件夹中:图像的名称无关紧要,但每个文件夹的名称应该是其中图像所代表的类的标签。 在本教程结尾的Resources部分中,可以找到IBM的图像数据指南。 如果您希望模型识别不同光照或不同角度的物体,则提供每种变化的几个样本。 然后压缩文件夹,并上传它们而不是示例zipfile

单击二进制数据图标以打开侧边栏,您可以在其中添加训练图像的zip文件:

单击Browse,然后导航到从GitHub下载的visual-recognition-coreml-master文件夹中的Training Images文件夹:

选择所有四个zip文件,然后单击Choose,然后等待上载文件。

选中所有四个复选框,然后单击汉堡菜单图标以查看Add selected to mode选项。

选择该项,然后观察并等待图像添加到模型中。

注意:当您上传自己的训练图像时,您还可以将图像上传到negative class:这些图像与您希望模型识别的任何类都不匹配。 理想情况下,它们具有与您的positive classes相同的功能,例如,当您训练模型识别iPod时,可以使用iTunes卡。

3. Training the Model - 训练模型

无论何时添加数据,模型都可以进行训练。 训练使用创建基本工具和植物分类器的相同机器学习模型,但将新类添加到它能够识别的内容中。 在Mac上训练这种尺寸的模型需要很长时间。

关闭侧栏,然后单击Train Model

去喝一杯,也许是点心 - 这可能需要至少5分钟,也许10分钟:

成功结果如下:

4. Adding the Model to Your App - 将模型添加到您的应用程序

示例应用程序已经具有所有VisionRecognition代码,可以下载,编译和使用您的新模型。 您所要做的就是编辑apiKeyclassifierId属性,以便应用程序从您的模型中创建VisionRecognition对象。 查找这些值需要多次点击。

注意:对于此步骤和下一步,我认为如果您只是按照我的说明操作,并且不查看GitHub页面会更容易。

单击here链接以查看GitHub页面调用the custom model overview page

单击Associated Service链接(GitHub页面将其称为your Visual Recognition instance name):您将返回Services / Watson Services / watson_vision_combined-dsx! 但向下滚动到底部:

这就是你刚训练的模型!

注意:GitHub页面将其称为the Visual Recognition instance overview page in Watson Studio

回到Xcode - 还记得Xcode吗? - 打开Core ML Vision Custom / ImageClassificationViewController.swift,并在outlets下方找到classifierID属性。

在Watson页面上,单击Copy model ID链接,然后将此值粘贴在classifierID引号之间,如下所示,但您的值将不同:

let classifierId = "DefaultCustomModel_1752360114"

向上滚动到Watson页面的顶部,然后选择Credentials选项卡:

api_key值复制并粘贴到classifierId上方的apiKey属性中:

let apiKey = "85e5c50b26b16d1e4ba6e5e3930c328ce0ad90cb"

你的值会有所不同。

这两个值将您的应用程序连接到刚刚训练过的Watson模型。 示例应用程序包含用户点击重新加载按钮时更新模型的代码。

最后一次编辑:以YYYY-MM-DD格式将version更改为今天的日期:

let version = "2018-03-28"

GitHub页面没有提到这一点,但Watson Swift SDK GitHub repository README推荐它。

5. Building the Watson Swift SDK - 构建Watson Swift SDK

最后的魔术通过在应用程序目录中构建Watson Swift SDK来实现。 这为所有Watson Services创建了框架。

打开Terminal并导航到Core ML Vision Custom目录,该目录包含Cartfile。 列出文件,只是为了确保:

cd <drag folder from finder>
ls

你应该看到这样的东西:

Audreys-MacBook-Pro-4:Core ML Vision Custom amt1$ ls
Cartfile            Core ML Vision Custom.xcodeproj
Core ML Vision Custom

在Project导航器中打开Core ML Vision Custom项目:

VisualRecognitionV3.framework是红色的,这意味着它不存在。 你即将解决这个问题!

还记得在本教程开始时你是如何安装Carthage的吗? 现在您可以运行此命令:

carthage bootstrap --platform iOS

这大约需要五分钟。 Cloning swift-sdk需要一段时间,然后downloading swift-sdk.framework需要另外一段时间。 它应该看起来像这样:

$ carthage bootstrap --platform iOS
*** No Cartfile.resolved found, updating dependencies
*** Fetching swift-sdk
*** Fetching Starscream
*** Fetching common-crypto-spm
*** Fetching zlib-spm
*** Checking out zlib-spm at "1.1.0"
*** Checking out Starscream at "3.0.4"
*** Checking out swift-sdk at "v0.23.1"
*** Checking out common-crypto-spm at "1.1.0"
*** xcodebuild output can be found in /var/folders/5k/0l8zvgnj6095_s00jpv6gxj80000gq/T/carthage-xcodebuild.lkW2sE.log
*** Downloading swift-sdk.framework binary at "v0.23.1"
*** Skipped building common-crypto-spm due to the error:
Dependency "common-crypto-spm" has no shared framework schemes for any of the platforms: iOS

If you believe this to be an error, please file an issue with the maintainers at https://github.com/daltoniam/common-crypto-spm/issues/new
*** Skipped building zlib-spm due to the error:
Dependency "zlib-spm" has no shared framework schemes for any of the platforms: iOS

If you believe this to be an error, please file an issue with the maintainers at https://github.com/daltoniam/zlib-spm/issues/new
*** Building scheme "Starscream" in Starscream.xcodeproj

看一下Finder看新加了什么

一个充满框架的文件夹! 每个Watson Service一个,包括以前缺少的VisualRecognitionV3.framework。 当然,它在Project导航器中:

注意:IBM建议您定期下载SDK的更新,以便与此项目的任何更新保持同步。

6. Build, Run, Test - 构建,运行,测试

真相的时刻!

选择Core ML Vision Custom方案,然后在iOS设备上构建并运行(如果可能)。 您需要拍摄电缆照片以测试模型,如果它在同一设备上运行,则可以更轻松地将它们提供给应用程序。

注意:要在您的设备上运行该应用程序,请打开目标,然后在Bundle Identifier中将com.ibm.watson.developer-cloud替换为您独有的内容。 然后在Signing部分中,选择一个Team

该应用程序首先编译模型,这需要一点时间:

然后它会告诉你当前模型的ID:

注意:如果收到有关模型的错误消息,请点击重新加载按钮再试一次。

点按camera图标以添加测试照片。 然后,应用程序显示模型的图像分类:

模型并不总是正确的:它一直坚持我的Thunderbolt电缆是USB,无论我拍摄照片的角度如何。

注意:在构建Watson Swift SDK之前,我没有看到为什么必须添加apiKeyclassifierId的任何明显原因,所以我尝试了其他的方法。 我下载了示例代码的新副本,并在其Core ML Vision Custom目录中运行了carthage命令:该命令的输出与上面相同,并且Carthage文件夹内容看起来相同。 然后我将apiKeyclassifierId添加到应用程序,并构建并运行它:应用程序没有下载模型。 viewDidLoad()viewWillAppear(_ :)中的断点不会触发! 该应用程序加载,您添加一个雷电电缆的照片,并将其分类为锄头手柄或开盖器 - 它使用基本的视觉识别模型。


Show Me the Code!

所以示例应用程序工作。 现在您需要在您的应用中包含哪些代码才能使用您的模型?

实际上,IBM在他们的Watson Swift SDK GitHub存储库READMEVisual Recognition部分中非常清楚地呈现了所有代码。 没有Core ML代码! Vision Recognition框架包含了封装Watson视觉识别模型的Core ML模型!

我要添加的唯一内容就是这个说明:

注意:要自动下载最新模型,请通过在viewDidLoad()viewDidAppear(_ :)中调用VisualRecognition方法updateLocalModel(classifierID:failure:success)来检查模型的更新。 它不会从Watson下载模型,除非该模型是本地模型的较新版本。


Updating the Model - 更新模型

我想在本节中做的是向您展示如何在您的应用中实现持续学习。 它没有在GitHub示例中介绍,我也没有得到我的问题的确切答案。 我会尽可能多地告诉你,或者已经猜到了。

1. Directly From the App

您可以使用此VisualRecognition方法直接从您的应用程序向您的Watson项目发送正面和负面示例的新数据集:

public func updateClassifier(classifierID: String, positiveExamples: [VisualRecognitionV3.PositiveExample]? = default, negativeExamples: URL? = default, failure: ((Error) -> Swift.Void)? = default, success: @escaping (VisualRecognitionV3.Classifier) -> Swift.Void)

非Swift版本的documentation描述了这些参数。

重要提示:您无法使用Lite计划的API密钥更新自定义分类器。 要在Lite计划上更新自定义分类器,请在标准计划上创建另一个服务实例,然后重新创建自定义分类器。

要使用标准计划,您必须交出信用卡,并为每次标记,检测或训练活动支付0.002美元至0.10美元。

2. Using Moderated User Feedback - 使用审核用户反馈

但是,除非您确定数据的正确性,否则不应将数据直接从应用程序发送到模型。 机器学习的最佳实践是预处理训练数据,“修复或删除不正确,不完整,格式不正确或重复的数据” - 你知道:垃圾输入,垃圾输出! 因此,将未经检查的数据输入模型的想法是令人厌恶的。

相反,您应该在项目的Settings页面的Tools部分中启用Data Preparation工具:

然后,您的应用应将正面和负面示例发送到存储位置,您可以将其作为数据源连接到项目。 回到Watson,您(或您的ML专家)使用Data Refinery工具清理新数据,然后再使用它来训练您的模型。

此信息来自IBM WatsonRefine data文档。


Watson Services

想知道Watson Services还有哪些其他产品? 让我们来看看!

找到您的Visual Recognition : watson_vision_combined-dsx页面:

Command-click Watson Services打开新的标签页

单击Add Service看下面列表

单击服务的Add链接以查看可用的内容和数量,但在此早期阶段,Watson仅为Visual Recognition生成Core ML模型。 对于其他服务,您的应用必须向Watson服务器上运行的模型发送请求。 Watson Swift SDK GitHub repository README包含执行此操作的示例代码。

注意:请记住,您可以通过单击左上角的IBM Watson主页按钮返回到项目页面,然后向下滚动到Watson Services以查找其链接。

资源

进一步阅读

后记

本篇主要讲述了人工智能和IBM Watson Services,感兴趣的给个赞或者关注~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容