了解机器学习框架CoreML
CoreML是iOS 11新推出的机器学习框架,是人工智能的核心内容,他可以在训练好的机器学习模型应用到APP中
所谓已训练模型 (trained model)指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果Core ML 是领域特定 (domain-specific) 框架和功能的基础所在。Core ML 为 Vision 提供了图像处理的支持,为 Foundation 提供了自然语言处理的支持(例如 NSLinguisticTagger 类),为 GameplayKit 提供了对学习决策树 (learned decision tree) 进行分析的支持。Core ML 本身是基于底层基本类型而建立的,包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。
获取模型
Core ML 支持多种机器学习模型,其中包括了神经网络 (Neural Network)、组合树 (Tree Ensemble)、支持向量机 (Support Vector Machine) 以及广义线性模型 (Generalized Linear Model)。Core ML 的运行需要使用 Core ML 模型格式(也就是以 .mlmodel 扩展名结尾的模型)。
Apple 提供了一些常见的开源模型供大家使用,这些模型已经使用了 Core ML 模型格式。您可以自行下载这些模型,然后就可以开始在应用中使用它们了。
工程实例
首先因为CoreML和Vision都是iOS 11才有的功能,你要确保Xcode9和iOS 11的设备,当然模拟器也可以。开发语言使用Swift4
将模型添加到Xcode中
创建工程并引入模型文件
单击这个文件就可以看到这个模型的详细信息
下面是这个模型的官方介绍Detects the dominant objects present in an image from a set of 1000 categories such as trees, animals, food, vehicles, people, and more.大意为可以从1000个类别中筛选传树木、动物、食品、汽车、人等等。
模型解读
inputs中写了需要一个image 大小299*299;outputs里会有两个参数classLabelProbs和classLabel
,classLabelProbs是一个[string:Double]的字典数组,数组里每一个字典就是这个输入图片分析得出可能的一个结果string就是对图片类型的描述,而double就是可能性百分比。另一个classLabel就是最有可能的一个一个结果描述Model Class下面有这个类文件点进去可以看到如下三个类
input输入源,可以看到它需要一个CVPixelBuffer格式的图片作为输入
output可以看到输出的两个参数classLabel和classLabelProbs正式我们上面有介绍过的所有可能的结果数组与最有可能的结果描述
inceptionv3调用这个类的Prediction方法来开始进行分析
编写代码
定义一个imageView,一个Label,一个button
点击按钮打开相册选取图片,选取完成执行下面的方法,然后再label显示分析结果
func process(_ image: UIImage) {
imageView.image = image
// 需要CVPixelBuffer格式的输入源
guard let pixelBuffer = image.pixelBuffer(width: 299, height: 299) else {
return
}
//I have `Use of unresolved identifier 'Inceptionv3'` error here when I use New Build System (File > Project Settings) ¯\_(ツ)_/¯
let model = Inceptionv3()
do {
// 调用model的prediction方法进行分析
let output = try model.prediction(image: pixelBuffer)
// 打印输出结果
let probs = output.classLabelProbs.sorted { $0.value > $1.value }
if let prob = probs.first {
Label.text = "\(prob.key) \(prob.value)"
}
}
catch {
self.presentAlertController(withTitle: title,
message: error.localizedDescription)
}
}
运行效果
了解机器学习框架CoreML
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
了解机器学习框架CoreML的更多相关文章
- [Xcode 实际操作]七、文件与数据-(20)CoreML机器学习框架:检测和识别图片中的物体
目录:[Swift]Xcode实际操作 本文将演示机器学习框架的使用,实现对图片中物体的检测和识别. 首先访问苹果开发者网站关于机器学习的网址: https://developer.apple.com ...
- 一个开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...
- 开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- [转] - Weiflow——微博机器学习框架
Weiflow--微博机器学习框架 本文从开发效率(易用性).可扩展性.执行效率三个方面,介绍了微博机器学习框架Weiflow在微博的应用和最佳实践. 在上期<基于Spark的大规模机器学习在微 ...
- Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn
Python开源机器学习框架:Scikit-learn入门指南. Scikit-learn的六大功能 Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预 ...
- TensorFlow机器学习框架-学习笔记-001
# TensorFlow机器学习框架-学习笔记-001 ### 测试TensorFlow环境是否安装完成-----------------------------```import tensorflo ...
- 使用Java语言开发机器学习框架和参数服务器
https://github.com/wudikua/ps 本项目是我自己动手实现的机器学习训练框架,代码简单,有很多不完善,但是也保留了最小可用功能 通过自己编写这个项目,可以帮助自己入门机器学习 ...
- 机器学习框架ML.NET学习笔记【4】多元分类之手写数字识别
一.问题与解决方案 通过多元分类算法进行手写数字识别,手写数字的图片分辨率为8*8的灰度图片.已经预先进行过处理,读取了各像素点的灰度值,并进行了标记. 其中第0列是序号(不参与运算).1-64列是像 ...
随机推荐
- thinkphp5最美跳转页面
声明下:此教程来自TP官网,如果需要看原文,请点击一下链接 http://www.thinkphp.cn/code/3437.html 先给大家看下效果: 直接撸代码: 第一步:为了增加对移动设备 ...
- spark热点互动问答
[Spark亚太研究院 决战云计算大数据时代 100期公益大讲堂 互动问答] Q1:我想问,hdfs的namenode挂了,怎么处理? 使用ZooKeeper: 使用Mesos: 使用Yarn: Q2 ...
- Reference resources
CentOS7 (精简操作指令) http://www.centoscn.com/CentOS/help/2016/0429/7147.html
- Java里的浅复制与深复制
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...
- 解决intellij idea中使用live edit插件不能在chrome即时显示css变化的方法(html可以)
问题源于一次chrome内核的更新 详细请看 http://src.chromium.org/viewvc/blink/trunk/Source/devtools/protocol.json?revi ...
- Codeforces 702 D Road to Post Office
题目描述 Vasiliy has a car and he wants to get from home to the post office. The distance which he needs ...
- linux-统计文件中相同行的数量
cat sorttest | sort | uniq -c sorttest文件内容如下
- hadoop LineRecordReader
/** * * @param job 配置信息 * @param split split * @param recordDelimiter 分列的字符 * @throws IOException */ ...
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Java 和 数据库两种方式进行加锁
java方式: publicstatic synchronized int generate(StringtableName){ Stringsql = "select value from ...