版本记录
版本号 | 时间 |
---|---|
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 ML
和Vision
框架为您的应用添加机器学习(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页面的图表中显示您的应用程序的持续学习:
这越来越接近Siri
和FaceID
所做的事情:在您的应用程序中不断学习用户数据!
这真的是开创性的吗? 现在,如果在用户安装应用程序后Core ML模型发生变化,您的应用程序可以download and compile a new model。 该应用程序需要某种通知,以了解该模型的更新。 一个更大的问题是:为什么模型会改变? 也许通过使用更好的训练算法,但真正的改进通常来自更多的数据。 更好的是,如果实际用户提供新数据。
即使您设法收集用户数据,重新训练模型的工作流程也远非无缝。 这可能会有利于Watson服务的平衡:轻松 - 或至少,更容易 - 集成数据收集,再训练和部署的承诺。 我稍后会告诉你更多相关信息。
1. Turi vs. Watson
你应该用哪个?
-
Turi
和Watson
都允许您扩展视觉和语言的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 Simple
和Core ML Vision Custom
。 Simple应用程序使用Core ML模型对常见的DIY工具或工厂进行分类。 Custom应用程序使用从Watson Services
下载的Core ML模型。这是你将在本教程中构建的模型!
向下滚动到自述文件部分Running Core ML Vision Custom:Setting 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) 将模型的
classifierId
和apiKey
复制到示例应用程序中的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 tool
和watson_vision_combined-dsx
服务。 “dsx”
代表Data Science Experience
,Watson 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
代码,可以下载,编译和使用您的新模型。 您所要做的就是编辑apiKey
和classifierId
属性,以便应用程序从您的模型中创建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
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
之前,我没有看到为什么必须添加apiKey
和classifierId
的任何明显原因,所以我尝试了其他的方法。 我下载了示例代码的新副本,并在其Core ML Vision Custom
目录中运行了carthage
命令:该命令的输出与上面相同,并且Carthage文件夹内容看起来相同。 然后我将apiKey
和classifierId
添加到应用程序,并构建并运行它:应用程序没有下载模型。viewDidLoad()
或viewWillAppear(_ :)
中的断点不会触发! 该应用程序加载,您添加一个雷电电缆的照片,并将其分类为锄头手柄或开盖器 - 它使用基本的视觉识别模型。
Show Me the Code!
所以示例应用程序工作。 现在您需要在您的应用中包含哪些代码才能使用您的模型?
实际上,IBM在他们的Watson Swift SDK GitHub
存储库README
的 Visual 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
以查找其链接。
资源
- 1) watson github from Apple’s page:本教程中使用的示例项目。
- 2) watson swift-sdk github repo: using core ml:一个略有不同版本的示例视觉识别应用程序;此存储库包含所有Watson服务的示例代码。
- 3) Swift@IBM
- 4) Swift@IBM Slack:加入这个Slack来提问并游说你最喜欢的Watson服务是否支持Core-ML。
- 5) IBM Watson Visual Recognition API
- 6) IBM Cloud Docs: Guidelines for Training Classifiers:向下滚动到
Guidelines for good training
,以查看有关图像大小和深度以及图像数量的建议。
进一步阅读
- 1) IBM Watson Services for Core ML:Apple的页面
- 2)IBM Think Blog announcement:IBM的公告。
- 3) IBM Cloud Blog: Best practices for custom classifiers in Watson Visual Recognition
后记
本篇主要讲述了人工智能和IBM Watson Services,感兴趣的给个赞或者关注~~~