快捷搜索:

科学知识

当前位置:betway必威官网手机版 > 科学知识 > 机器学习课程,怎么着在木莓派上轻便完毕深度

机器学习课程,怎么着在木莓派上轻便完毕深度

来源:http://www.abirdfarm.com 作者:betway必威官网手机版 时间:2019-06-23 22:57

原标题:十分钟,我搞定了一个人物检测模型

机器学习是很火的,许多人只是听说过,但知之甚少。这篇iOS机器学习的教程将会介绍CoreML和Vison,这是iOS11中引入的的两个全新的框架。
具体来说,将学习如何使用Places205-GoogLeNet模型将这些新API用于对图像的场景

此文翻译自 Core ML and Vision: Machine Learning in iOS 11 Tutorial

本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning on Raspberry Pi,作者为 Sarthak Jain。

主要是Visualizing and Understanding Convolutional Networks这篇文章的一个笔记。

原作:Supervise.ly

开始

下载启动项目。他已经包含了显示图片的用户界面,并且可是让用户从照片库中选择另一张图片。所以你可以专注于实现应用程序的机器学习和视觉方面。
编译并运行项目,你将看到一个城市的图片和一个按钮:

图片 1

image.png

从相册中选择领一张图片。这个启动项目的Info.plist已经包含了Privacy – Photo Library Usage Description,因此将会提示你允许使用。
在图片和按钮之间还包含一个文本框,它用于显示模型对图片场景的分类。

注意:此教程需要 Xcode 9 Beta1 或更新的版本、Swift 4 以及 iOS 11.

翻译 | 小哥哥 狒狒 校对 | 老赵 整理 | 凡江

Abstract

卷积神经网络再ImageNet的图片分类的表现很不错,但是很多人还是搞不懂为啥CNN会有这么好的效果和怎么提高神经网络的效果,本文将解决这些问题。本文利用反卷积对featuremap进行了可视化。通过可视化展示CNN内部的一些特点,并且分析怎么优化网络结构。

铜灵 编译自 Hackernoon

iOS机器学习

机器学习是一种人工智能,其中计算机“学习”而不被明确编程。机器学习工具不用编码算法,而是通过大量数据中查找模式,使计算器能够开发和优化算法。

机器学习正在肆虐横行。很多人都听说过,但很少有人知道这是什么。

这个现实世界造成了很多挑战,比如数据有限、只有微型的计算机硬件所造成的无法运行复杂深度学习模型等。这篇文章演示了如何使用树莓派来进行目标检测。就像路上行驶的汽车,冰箱里的橘子,文件上的签名和太空中的特斯拉。

Introduction

CNN自发明以来,在手写数字识别人脸检测,等各种视觉分类任务中都取得了不错的成绩。convnet复兴有这几个原因,1 样本多了,训练集大了2 GPU强大了3 一些更好的优化策略,例如Dropout

本文

  • 把featuremap 重构到像素空间中实现可视化,
  • 观察特征在训练时的演变过程,并且从中发现了一些问题,
  • 遮挡图片的一部分,说明图片那部分是对分类器重要的,
  • 研究了模型的泛化能力。

图片 2

深度学习

自20世纪50年代以来,AI研究人员开发了许多机器学习方法。苹果的核心ML框架支持神经网络,树组合,支持向量机,广义线性模型,特征工程和流水线模型。然而,神经网络已经产生了许多最壮观的最近的成功,从2012年谷歌2012年使用YouTube视频来训练其人工智能来识别猫和人。只有五年后,Google正在赞助一个比赛,以确定5000种植物和动物。像Siri和Alexa这样的应用程序也存在于神经网络中。
一个神经网络试图用层次的节点来模拟人类脑部过程,并以不同的方式联系在一起。每个附加层需要大量增加计算能力:Inception v3,一个对象识别模型,有48层和约2000万个参数。但是计算基本上是矩阵乘法,哪些GPU处理非常有效。 GPU的成本下降使得人们能够创建多层深层神经网络,因此是深入学习的术语。

图片 3

image.png

神经网络需要大量的训练数据,理想地代表了全方位的可能性。 用户生成数据的爆炸也促成了机器学习的复兴。
训练模型意味着向神经网络提供训练数据,并使其计算用于组合输入参数以产生输出的公式。 培训发生在离线状态,通常在具有多个GPU的机器上。
要使用这个模型,你给它新的输入,它计算输出:这被称为推论。 推论仍然需要大量的计算,来计算新输入的输出。 由于像Metal这样的框架,现在可以在手持设备上进行这些计算。
如本教程末尾所示,深入学习远非完美。 建立真正有代表性的培训数据真的很困难,过分训练模型太容易了,所以对古怪的特征给予太多的重视。

这篇《iOS 机器学习教程》会为你介绍 Core MLVision,iOS 11 中推出的两个全新框架。

免责声明:我正在建设nanonets.com来帮助使用很少的数据和没有计算机硬件的情况下构建机器学习模型。

Related Work

  • 通过直接观察来分析网络模型的相关特征是一个常用的方法。缺点主要是,只适用于第一层网络的分析,高层的特征不适合人眼观察理解,就不太好用了。
  • Erhan 通过梯度下降法寻找使神经元响应最大的图片,但是这种方法容易受初值影响,而且没有反映出神经网络之中的一些不变性。
  • Leet show how the Hessian of a given unit may be
    computed numerically around the optimal response,
    giving some insight into invariances. (没看懂。。。)
  • 本文提出的是一种非参数化观察网络的不变性的方法。

人物检测确实是个老生常谈的话题了,自动驾驶中的道路行人检测、无人零售中的行为检测、时尚界的虚拟穿搭、安防界的人员监控、手机应用中的人脸检测……人物检测不易察觉,但已经渗透到生活中的方方面面。

苹果提供了什么?

苹果在iOS5中引入了NSLinguisticTagger来分析自然语言。Metal出现在iOS8中,提供对设备GPU的低级访问。
去年,苹果公司将基本神经网络子程序(BNNS)添加到其加速框架中,使开发人员可以构建神经网络来进行推理(而不是训练)。
而今年,苹果给出了CoreML和Vision!

  • Core ML 使您更容易在您的应用程序中使用经过训练的模型
  • Vision 让您轻松访问Apple的模型,以检测脸部,面部地标,文字,矩形,条形码和对象。

您还可以在Vision模型中包装任何图像分析Core ML模型,这在本教程中将会如何。 因为这两个框架是基于Metal构建的,所以它们在设备上高效运行,因此您不需要将用户的数据发送到服务器。

具体来说,你会学习如何借助 Places205-GoogLeNet 模型,使用新的 API 对图像的场景进行分类。

如果你很迫切,请直接下拉到这篇文章的底部进入Github的仓库。

Approach

采用 (LeCun et al.,1989) and (Krizhevsky et al., 2012)提出的标准的监督学习卷积网络模型,把输入的二维图像通过一系列神经网络层转换为一个概率向量,每个概率对应C个不同分类。每层包括 1 卷积层,2 relu激活层, 3 [可选]maxpooling池化层。4 [可选] 归一化层。最后几层是全连接层,输出层是一个softmax分类器。图3展示了这个模型。

图片 4

机器学习课程,怎么着在木莓派上轻便完毕深度学习目的质量评定。image.png

用交叉熵损失函数,随机梯度下降进行训练。

作为计算机视觉领域的基础研究,很多初学者表示这件事耗时耗力很难搞定。在这篇文章中,机器学习平台supervise.ly提供了一种方法,据说十分钟搞定不是梦。

将CoreML模型集成到你的App中

本教程使用Places205-GoogLeNet模型,您可以从Apple的“机器学习页面.”页面下载。 向下滚动到Working with Models,并下载第一个。 当您在那里时,请注意其他三个模型,它们都会在图像中检测物体 - 树木,动物,人物等。

机器学习课程,怎么着在木莓派上轻便完毕深度学习目的质量评定。如果您使用受支持的机器学习工具(如Caffe,Keras或scikit-learn)创建的训练模型,将训练模型转换为CoreML可描述如何将其转换为Core ML格式。

图片 5

图片 6在孟买的公路上检测车辆

Visualization with a Deconvnet

图一展示了一层的反卷积可视化流程。

图片 7

image.png

反卷积可以认为是卷积的逆过程,他们具有相同的卷积核和pooling参数。
我们要验证特定的featuremap,把其他的activation全设成0,(我理解是一个卷积核对应一个activation,也就是一个featuremap ,就是把特定的featuremap保留这层其他的featuremap置成0,送到反卷积网络里。或者把其他卷积核置0,只保留一个。)然后送到反卷积网络里,经过一系列的反池化,反激活,反卷积,最后回到像素空间。

  • Unpooling 池化是不可逆的,记录每次最大值的索引,反池化的时候,最大值放回原来的位置,其他地方置0。
  • Rectification 再通过一次relu保证没有负值。(为啥要保证没有负值。。。)
  • Filtering 反卷积使用和卷积一样的权值的转置。(https://www.zhihu.com/question/43609045 高票答案对反卷积解释地挺好)
    unpooling的过程中,只保留了极大值的信息,其它地方填充0,因此重构出来的图片更像是原图的某些碎片。

量子位将文章重点内容翻译整理如下,与大家分享:

添加模型到项目中

下载完GoogLeNetPlaces.mlmodel后,拖到项目的Resources目录中。

图片 8

image.png

选中这个文件,并稍等一下。当Xcode生成模型类时,将会出现一个箭头:

图片 9

image.png

点击箭头就可以看到生成的类:

图片 10

image.png

Xcode已经生成输入输出类,并且主要的类GoogLeNetPlaces有一个model属性和两个prediction方法。
GoogLeNetPlacesInput用一个CVPixelBuffer类型的sceneImage属性。这是什么?不要害怕,不要哭泣,Vision框架将会将我们属性的图像格式装换为正确的输入类型。
Vision框架还将GoogLeNetPlacesOutput属性转换为自己的结果类型,并管理对预测方法的调用,所以在所有生成的代码中,代码将只使用model属性。

下载起始项目。它已包含了用于显示图片的用户界面,并允许用户从照片库中选择另一张图片。这样你就可以专注于实现 App 的机器学习和视觉方面。

树莓派是一款灵活的计算机硬件,它以1500万台的销量已经吸引了一代消费者的心,并且黑客们也在树莓派上构建了很多很酷的项目。考虑到深度学习和树莓派相机的的流行,我们认为如果能在树莓派上使用深度学习来检测任意的物体那就非常棒了。

Training Details

使用ImageNet训练集。先截取图片中心256 * 256像素的位置,然后减去图片的颜色均值,再截10个不同的224 * 224的窗口(水平翻转,滑动)。随机梯度训练。学习率0.01,动量系数0.9,当误差趋于收敛时,手动停止。Dropout系数0.5,所有权值初始值0.01,bias设为0。图6(a)展示了部分卷积核,其中有一部分核数值过大,于是对均方根大于0.1的进行归一化,使其均方根为0.1。

图片 11

image.png

图片 12

在Vision模型中包装Core ML模型

最后,你将需要写些代码!打开ViewController.swift,在import UIKit下面导入两个框架:

import CoreML
import Vision

然后在IBActions扩展末尾添加如下扩展:

// MARK: - Methods
extension ViewController {

  func detectScene(image: CIImage) {
    answerLabel.text = "detecting scene..."

    // Load the ML model through its generated class
    guard let model = try? VNCoreMLModel(for: GoogLeNetPlaces().model) else {
      fatalError("can't load Places ML model")
    }
  }
}

代码意思如下:
首先,您显示一条消息,以便用户知道某些事情正在发生。
GoogLeNetPlaces的指定的初始化程序会引发错误,因此在创建时必须使用try。
VNCoreMLModel只是一个用于Vision请求的Core ML模型的容器。
标准Vision工作流程是创建模型,创建一个或多个请求,然后创建并运行请求处理程序。 您刚刚创建了该模型,因此您的下一步是创建一个请求。

detectScene(image:):末尾添加下面代码:

// Create a Vision request with completion handler
let request = VNCoreMLRequest(model: model) { [weak self] request, error in
  guard let results = request.results as? [VNClassificationObservation],
    let topResult = results.first else {
      fatalError("unexpected result type from VNCoreMLRequest")
  }

  // Update UI on main queue
  let article = (self?.vowels.contains(topResult.identifier.first!))! ? "an" : "a"
  DispatchQueue.main.async { [weak self] in
    self?.answerLabel.text = "(Int(topResult.confidence * 100))% it's (article) (topResult.identifier)"
  }
}

VNCoreMLRequest是使用Core ML模型来完成工作的图像分析请求。它的完成处理程序接收requesterror对象。
您检查该request.results是一组VNClassificationObservation对象,这是当Core ML模型是分类器而不是预测器或图像处理器时,Vision框架返回的。而GoogLeNetPlaces是一个分类器,因为它仅预测了一个特征:图像的场景分类。
VNClassificationObservation有两个属性:identifier - 一个String类型 - 和confidence - 介于0和1之间的数字 - 这是分类正确的概率。当使用对象检测模型时,您可能只会看到那些confidence大于某个阈值的对象,例如30%。
然后,取第一个结果将具有最高的置信度值,并将不定冠词设置为“a”或“an”,具体取决于标识符的第一个字母。最后,您将返回主队列更新标签。你很快会看到分类工作发生在主队列中,因为它可能很慢。
现在,到第三步:创建和运行请求处理程序。
detectScene(image:):末尾添加下面代码:

// Run the Core ML GoogLeNetPlaces classifier on global dispatch queue
let handler = VNImageRequestHandler(ciImage: image)
DispatchQueue.global(qos: .userInteractive).async {
  do {
    try handler.perform([request])
  } catch {
    print(error)
  }
}

VNImageRequestHandler是标准的Vision框架请求处理程序; 它不是核心ML模型的具体。 你给它作为一个参数进入detectScene(image :)的图像。 然后通过调用其perform方法运行处理程序,传递一个请求数组。 在这种情况下,您只有一个请求。
perform方法抛出一个错误,所以你把它包装在一个try-catch。

构建并运行该项目;可以看到一张城市夜景图,以及一个按钮:

现在你可以检测到你的自拍照里的照片炸弹,有人进入到Harambe的笼子里,哪里有辣椒酱或者亚马逊的快递员进入到你的房子里。

Feature Visualization

图片 13

image.png

图2 显示了9个让特定featuremap响应最大的可视化结果。从而展示其中的不变性。一些固定的输入特征刺激神经网络产生固定的输出特征(隐含的),这也解释了图像畸变时候,为什么输出结果保持不变。和重构特征相比,输入图片之间的差异很大,而重构特征只包含哪些具有判别能力的纹理结构。举例说明,第5层第1行第二列,9张图片个不相同,重构出来的特征显示的是背景的草地,没有前景特征。

图片 14

image.png

层2展示了物体的边缘和轮廓,以及颜色的组合。
层3展示了更复杂的特征,相似的纹理。
层4不同组重构的特征有较大差异,狗的脸,鸟的腿。
层5每组图片都展示了存在重大差异的一类物体,如,键盘,狗。

人物检测在现在有多难?

使用模型来分类场景

现在只需要在两个地方调用detectScene(image :)
viewDidLoad()imagePickerController(_:didFinishPickingMediaWithInfo :)的末尾添加以下行:

guard let ciImage = CIImage(image: image) else {
  fatalError("couldn't convert UIImage to CIImage")
}

detectScene(image: ciImage)

编译并运行。很快就可以看到分类:

图片 15

image.png

嗯,是的,图像中有摩天大楼。 还有火车。
点击按钮,并选择照片库中的第一个图像:一些太阳斑点的叶子的特写镜头:

图片 16

image.png

引用:

  • Apple’s Core ML Framework documentation
  • WWDC 2017 Session 703 Introducing Core ML
  • WWDC 2017 Session 710 Core ML in depth
  • Core ML and Vision: Machine Learning in iOS 11 Tutorial

图片 17

图片 18

Feature Evolution during Training

图片 19

image.png

经过一定次数迭代后底层特征先趋于稳定,高层特征则需要更多周期。

五年之前,大家普遍在哈尔特征(Haar-like features)的基础上,基于级联分类器用OpenCV解决问题。这往往需要用大量的时间和精力构建模型,依照如今的标准来看,检测质量也不是很好。

从“照片” App 的照片库中选择另一张图片。此起始项目的 Info.plist 已经有 Privacy – Photo Library Usage Description,所以你会被提示允许使用。

2000万年的进化使得人类的视觉系统有了相当高的进化。人脑有30%的神经元负责处理视觉信息(相对比只有8%处理触觉和3%处理听觉)。与机器相比,人类有两个主要的优势。一是立体视觉,二是训练数据集的供应几乎是无限的(一个五岁的婴儿可以大约在30fps的采样间隔获得2.7B的图像数据)。

Feature Invariance

图片 20

image.png

分别进行了平移和缩放和旋转变换。在第一层,微小的输入对输出特征的影响都比较明显。到高层平移和缩放的影响越来越小。对旋转操作没有明显的不变性,除非实物本身比较对称(就像第五个图entertainment center)。

要知道,深度学习时代来了,小小的人物检测任务也有了突破,将特征工程和简单的分类器结合已经过时,神经网络开始主导这个领域。

图片和按钮之间的空隙有一个 label,将会在此显示模型对图片场景的分类。

图片 21

Architecture Selection

经过可视化发现,(1)第一层是高频和低频内容的混合,中频部分比较缺乏。(2)第二层的可视化效果比较混乱,可能是因为第一层的卷积层步长4太大导致的。于是把第一层的模板从11 * 11改成了 7 * 7,把步长从4改为2。改完提升了性能。

在这篇文章中,我们将用Supervise.ly平台处理人物检测任务,带你用5分钟做出初始方案。这个自称不用写代码、提供众多与训练模型、也无需在各种开发工具中跳来跳去的平台,对新手绝对友好。

机器学习是一种人工智能,计算机会“学习”而不是被明确编程。不用编写算法,机器学习工具通过在大量数据中寻找模式,使计算机能够开发和优化算法。

为了模仿人类水平的表现,科学家将视觉感知任务分解为四个不同的类别。

Occlusion Sensitivity

图片 22

image.png

把灰块覆盖在可视化的区域,识别率明显下降。这也表明可视化出来的东西和特征确实有着对应关系,也就验证了图2和图4。

基本方法

深度学习

自20世纪50年代以来,AI 研究人员开发了许多机器学习方法。苹果的 Core ML 框架支持神经网络、树组合、支持向量机、广义线性模型、特征工程和流水线模型。但是,神经网络最近已经取得了很多极为神奇的成功,开始于 2012 年谷歌使用 YouTube 视频训练 AI 来识别猫和人。仅仅五年后,谷歌正在赞助一场确定 5000 种植物和动物的比赛。像 Siri 和 Alexa 这样的 App 也存在它们自己的神经网络。

神经网络尝试用节点层来模拟人脑流程,并将节点层用不同的方式连接在一起。每增加一层都需要增加大量计算能力:Inception v3,一个对象识别模型,有48层以及大约2000万个参数。但计算基本上都是矩阵乘法,GPU 来处理会非常有效。GPU 成本的下降使我们能够创建多层深度神经网络,此为深度学习

图片 23神经网络,circa 2016

神经网络需要大量的训练数据,这些训练数据理想化地代表了全部可能性。用户生成的数据爆炸性地产生也促成了机器学习的复兴。

训练模型意味着给神经网络提供训练数据,并让它计算公式,此公式组合输入参数以产生输出。训练是离线的,通常在具有多个 GPU 的机器上。

使用这个模型,就给它新的输入,它就会计算输出:这叫做推论。推论仍然需要大量计算,以从新的输入计算输出。因为有了 Metal 这样的框架,现在可以在手持设备上进行这些计算。

在本教程的结尾你会发现,深度学习远非完美。真的很难建立具有代表性的训练数据,很容易就会过度训练模型,以至于它会过度重视一些古怪的特征。

1.分类,为图像指定一个标签。

Correspondence Analysis

深度神经网络没有一套有效的理论分析特定物体的部件之间的关系,但是可能是隐式计算了这些特征。

图片 24

image.png

想要处理这个任务有两种方法:一是直接使用预训练模型,二是训练自己的人物检测模型。在Supervise.ly里这两种方法都可以,但我们重点来看预训练模型版。

苹果提供了什么?

苹果在 iOS 5 里引入了 NSLinguisticTagger 来分析自然语言。iOS 8 出了 Metal,提供了对设备 GPU 的底层访问。

去年,苹果在 Accelerate 框架添加了 Basic Neural Network Subroutines ,使开发者可以构建用于推理的神经网络。

今年,苹果给了我们 Core ML 和 Vision!

  • Core ML 让我们更容易在 App 中使用训练过的模型。
  • Vision 让我们轻松访问苹果的模型,用于面部检测、面部特征点、文字、矩形、条形码和物体。

你还可以在 Vision 模型中包装任意的图像分析 Core ML 模型,我们在这篇教程中就干这个。由于这两个框架是基于 Metal 构建的,它们能在设备上高效运行,所以不需要把用户的数据发送到服务器。

本教程使用 Places205-GoogLeNet 模型,可以从苹果的“机器学习”页面下载。往下滑找到 Working with Models,下载第一个。还在这个页面,注意一下其它三个模型,它们都用于在图片中检测物体——树、动物、人等等。

注意:如果你有一个训练过的模型,并且是使用受支持的机器学习工具训练的,例如 Caffe、Keras 或 scikit-learn,Converting Trained Models to Core ML 介绍了如何将其转换为 Core ML 格式。

下载 GoogLeNetPlaces.mlmodel 后,把它从 Finder 拖到项目导航器的 Resources 组里:

图片 25

选择该文件,然后等一会儿。Xcode 生成了模型类后会显示一个箭头:

图片 26

点击箭头,查看生成的类:

图片 27

Xcode 已生成了输入和输出类以及主类 GoogLeNetPlaces,主类有一个 model 属性和两个 prediction 方法。

GoogLeNetPlacesInput 有一个 CVPixelBuffer 类型的 sceneImage 属性。哭了,这些都是什么鬼?!不要害怕,Vision 框架会负责把我们熟悉的图片格式转换成正确的输入类型。:]

Vision 框架还会把 GoogLeNetPlacesOutput 属性转换为自己的 results 类型,并管理对 prediction 方法的调用,所以在所有生成的代码中,我们只会使用 model 属性。

2.定位,对特定的标签指定一个边框。

ImageNet 2012 Varying ImageNet Model Sizes

图片 28

image.png

调整神经元的数量,或者完全删除他们。去除6,7,error只长了一点,去除中间两个卷积层影响也较小,这四层都去掉性能骤降。改变全连接的大小,影响不大,增加卷积核的个数可以提高性能,增加卷积核同时增加全连接个数,似乎有点过拟合。

我们将用基于Faster R-CNN的NASNet模型处理,此模型已经用COCO数据集预训练过了。

在 Vision Model 中包装 Core ML Model

终于,要开始写代码了!打开 ViewController.swift,并在 import UIKit 下面 import 两个框架:

import CoreMLimport Vision

下一步,在 IBActions 扩展下方添加如下扩展:

// MARK: - Methodsextension ViewController { func detectScene(image: CIImage) { answerLabel.text = "detecting scene..." // 从生成的类中加载 ML 模型 guard let model = try? VNCoreMLModel(for: GoogLeNetPlaces else { fatalError("can't load Places ML model") } }}

我们上面的代码做了这些事:

首先,给用户显示一条消息,让他们知道正在发生什么事情。

GoogLeNetPlaces 的指定初始化方法会抛出一个 error,所以创建时必须用 try

VNCoreMLModel 只是用于 Vision 请求的 Core ML 模型的容器。

标准的 Vision 工作流程是创建模型,创建一或多个请求,然后创建并运行请求处理程序。我们刚刚已经创建了模型,所以下一步是创建请求。

detectScene 的末尾添加如下几行:

// 创建一个带有 completion handler 的 Vision 请求let request = VNCoreMLRequest(model: model) { [weak self] request, error in guard let results = request.results as? [VNClassificationObservation], let topResult = results.first else { fatalError("unexpected result type from VNCoreMLRequest") } // 在主线程上更新 UI let article = (self?.vowels.contains(topResult.identifier.first!))! ? "an" : "a" DispatchQueue.main.async { [weak self] in self?.answerLabel.text = "(Int(topResult.confidence * 100))% it's  (topResult.identifier)" }}

VNCoreMLRequest 是一个图像分析请求,它使用 Core ML 模型来完成工作。它的 completion handler 接收 requesterror 对象。

检查 request.results 是否是 VNClassificationObservation 对象数组,当 Core ML 模型是分类器,而不是预测器或图像处理器时,Vision 框架就会返回这个。而 GoogLeNetPlaces 是一个分类器,因为它仅预测一个特征:图像的场景分类。

VNClassificationObservation 有两个属性:identifier - 一个 String,以及 confidence - 介于0和1之间的数字,这个数字是是分类正确的概率。使用对象检测模型时,你可能只会看到那些 confidence 大于某个阈值的对象,例如 30% 的阈值。

然后取第一个结果,它会具有最高的 confidence 值,然后根据 identifier 的首字母把不定冠词设置为“a”或“an”。最后,dispatch 回到主线程来更新 label。你很快会明白分类工作为什么不在主线程,因为它会很慢。

现在,做第三步:创建并运行请求处理程序。

把下面几行添加到 detectScene 的末尾:

// 在主线程上运行 Core ML GoogLeNetPlaces 分类器let handler = VNImageRequestHandler(ciImage: image)DispatchQueue.global(qos: .userInteractive).async { do { try handler.perform([request]) } catch { print }}�

VNImageRequestHandler 是标准的 Vision 框架请求处理程序;不特定于 Core ML 模型。给它 image 作为 detectScene 的参数。然后调用它的 perform 方法来运行处理程序,传入请求数组。在这个例子里,我们只有一个请求。

perform 方法会抛出 error,所以用 try-catch 将其包住。

3.物体检测,在图像中绘制多个边框。

Feature Generalization

保持卷积层不变,仅训练softmax分类器,测试了其他数据集。表现,基于imagenet库训练的特征似乎更有效。

TensorFlow detection model zoo地址:

使用模型来分类场景

哇,刚刚写了好多代码!但现在只需要在两个地方调用 detectScene 就好了。

把下面几行添加到 viewDidLoad() 的末端和 imagePickerController(_:didFinishPickingMediaWithInfo:) 的末端:

guard let ciImage = CIImage(image: image) else { fatalError("couldn't convert UIImage to CIImage")}detectScene(image: ciImage)

现在构建并运行。不需要多久就可以看见分类:

图片 29

哈哈,是的,图片里有 skyscrapers。还有一列火车。

点击按钮,选择照片库里的第一张图片:一些树叶上太阳光斑的特写:

图片 3075%这是一个水族池

啊哈哈哈哈哈,眯起眼睛,也许可以想象尼莫或多莉正在里面游泳?但至少你知道应该用 “a” 还是 “an”。;]

本教程的项目和 WWDC 2017 Session 506 Vision Framework: Building on Core ML 的示例项目很相似。Vision ML Example App 使用 MNIST 分类器,可以识别手写数字——对邮政分类自动化非常有帮助。它还使用原生 Vision 框架方法 VNDetectRectanglesRequest,还包括 Core Image 的代码来矫正矩形检测的透视。

还可以从 Core ML 文档页面下载另一个示例项目。MarsHabitatPricePredictor 模型的输入只是数字,因此代码直接使用生成的 MarsHabitatPricer 方法和属性,而不是将模型包装在 Vision 模型中。每次都改一下参数,很容易看出模型只是一个线性回归:

137 * solarPanels   653.50 * greenHouses   5854 * acres

可以从这里下载教程的完整项目。如果模型显示为缺失,将其替换为你下载的那个。

你现在已经有能力将现有的模型整合到你的 App 中。这里有一些资源可以更详细地介绍:

  • 苹果的 Core ML Framework 文档
  • WWDC 2017 Session 703 介绍 Core ML
  • WWDC 2017 Session 710 Core ML in depth

2016 年的:

  • WWDC 2016 Session 605 What’s New in Metal, Part 2: demos show how fast the app does the Inception model classification calculations, thanks to Metal.
  • 苹果的 Basic Neural Network Subroutines 文档

想构建自己的模型?恐怕这超出了本教程的范围。但这些资源可能会帮你上手:

  • RWDevCon 2017 Session 3 Machine Learning in iOS: Alexis Gallagher 做了一项绝对精彩的工作,指导你一系列流程,为神经网络收集训练数据(你微笑或皱眉的视频),训练,然后检查它是否有效。他的结论:“不需要是数学家或大公司也可以建立有效的模型。”
  • Quartz article on Apple’s AI research paper: Dave Gershgorn’s 有关 AI 的文章都很清晰和翔实。此文做了一项杰出的工作,总结了苹果的第一篇 AI 研究论文:研究人员使用基于真实图像训练的神经网络来优化图像合成,从而有效地产生了大量高质量的新训练数据,而没有个人数据隐私问题。

最后,我从 Andreessen Horowitz 的 Frank Chen 那里真的学习了很多 AI 的简史:AI and Deep Learning a16z podcast。

希望本教程对你有所帮助。随意在下方加入讨论!

4.图像分割,得到物体在图像中的精确位置区域。

Feature Analysis

图片 31

image.png

模型学习到的特征同样适用于svm分类。保留层越多,分类性能越好。说明,深度增加了,网络学到的特征更好。

物体检测对于很多应用已经足够好(图像分割是更精确的结果,它受到了创建训练数据复杂性的影响。相比于画边框它通常花费人类标注者12倍的时间去分割图像。)此外,在检测物体之后,可以将物体在边框中单独分割出来。

Get主要方法后,打开Supervise.ly,我们开始进入正式构建步骤了。

使用物体检测:

Step 1:设置人物检测模型

目标检测具有重要的现实意义,已经在各行各业得到了广泛应用。下面列举了一些例子:

设置检测模型很简单,只需将你的GPU连接到Supervise.ly,然后选择其中一个预训练模型即可。

图片 32

进入Cluster页面,点击“Connect your first node”。

物体检测可以用于解决各种各样的问题。这些是一个概括的分类:

图片 33

1.物体是不是出现在我的图像中?比如在我的房子有一个入侵者。

你将能看到下面这个窗口,将指令复制到你的电脑里,Python Agent软件将自动在你的电脑里完成安装。

2.在图像中的一个物体在哪个位置?比如一个汽车试图在世界各地导航时,知道物体的位置就很重要。

图片 34

3.图像中有多少个物体?物体检测是计算物体数目最有效的方法之一。比如仓库的货架上有多少个盒子。

点击“Neural networks”进入“Model Zoo”页面后,你能看到一系列为语义分割和物体检测创建的预训练模型。将鼠标放到“FasterRCNN NasNet”那里,选择增加一个新模型,你将看到这个预训练模型出现在了“我的模型”列表中。

4.图像中有哪些不同类型的物体?比如动物园的哪些区域有哪些动物?

图片 35

5. 物体的尺寸有多大?特别是使用静态的相机,很容易计算出物体的大小。比如芒果的大小是多少。

Step 2:检测人物,判断质量

6.物体之间是如何相互作用的?比如在足球场上的队形是如何影响比赛结果的?

在你将模型部署为API之前,想弄清楚它是否符合要求可以先将神经网络预测可视化:将图片拖拽到的相关区域,运行推理过程。

7.物体在不同时间的位置?比如跟踪一个像火车一样的物体并且计算它的速度。

图片 36

图片 37YOLO算法的可视化

在这个案例中,我们将项目命名为“text_images”,随后点击开始“start import”,用创建的图片检查项目。

有多种用于物体检测的模型或结构。每一个都在速度、尺寸和精确度之间权衡。我们选择了最流行的一个:YOLO(You only look once),并且展示它如何以20行代码进行工作。

随后,我们用这张图片测试人物检测模型的效果如何。在我的模型页面点击“Test”按钮,选择上面已经命名的“testimages”项目,将要存储检测结果的项目命名为“inf_test_images”。

注意:这是伪代码,不是一个可直接工作的实例。它有一个非常标准的CNN构成的黑箱,如下图所示:

现在,在“inference_full_image”列表中选择推理模式,将“save_classes”: “__all”替换成“save_classes”: [“person”]。

你可以阅读全文:

图片 38

图片 39

然后进入推理过程,模型看起来还算符合要求,我们进入下一步。

YOLO中使用卷积神经网络的体系结构代码小于20行,如下:

图片 40

图片 41

Step 3:将模型部署到应用

深度学习的工作流程有6个基本步骤,分为了三个部分:

部署主要遵循通过调用API在自定义环境中使用模型的基本准则,部署前,需要先前往我的模型页面中创建新任务,将API请求发送到人物检测模型中。

  1. 收集训练集

  2. 训练模型

  3. 预测新图像

图片 42

图片 43

随后,我们需要混获取token和URL信息。在“Cluster->Tasks”页面点击Deploy API info,就可以通过调用API满足检测模型所需的信息了。

步骤1. 收集图像(每个对象至少100张)

运行以下命令:

对于这个任务,你或许需要为每个对象收集100张图像。尽量捕捉与将用于决策的数据关联性更强的图像。

图片 44

图片 45

可视化之后,我们发现输入的图片,已经得到了一张人物检测结果:

步骤2. 注释(手动在图像上绘制边框)

图片 46

在图像上绘制边界框。 您可以使用 labelImg 之类的工具。 你通常需要一些人来为你的图像注释。 这是一项相当耗时的任务。

模型不仅识别出“深度学习三巨头”和吴恩达老师,连远处不仔细看绝对发现不了的人像也被检测到了。

图片 47

最后,附原文链接,想要了解更多的同学可自取:

步骤3. 为迁移学习找到一个预训练好的模型:

关于这些你可以阅读更多内容medium.com/nanonets/nanonets-how-to-use-deep-learning-when-you-have-limited-data-f68c0b512cab。为了减少训练所需的数据量,你需要一个预训练好的模型。如果没有它,你可能多需要10万张图像来训练模型。

—返回搜狐,查看更多

你可以点击这里(

责任编辑:

步骤4. 在GPU上进行训练(像AWS/GCP之类的云服务或者你自己的具有GPU机器):

图片 48

Docker Image

训练模型的过程是很难进行简化的,我们创建了docker image来使模型更容易训练。

你可以运行以下代码开始训练模型:

图片 49

有关如何使用的详细信息,请参阅此链接:

docker image具有一个run.sh脚本,可以用以下参数来调用它:

图片 50

你可以在以下网站找到更多详细信息:

图片 51

寻找正确的超参数

“深度学习”的技巧就是计算出使模型最准确时最好的参数。与此相关的在一定程度上像是黑魔法,但是还有一些理论。这是找到正确参数很好的资源。

量化模型(使模型更小以适应于像树莓派和手机这样的小设备)

像手机和树莓派这样的小设备有很小的内存和计算能力。

通过对权重的很多微调来完成神经网络的训练,而且这项工作需要这些小的增量通常要达到浮点精度(尽管这里也在努力研究使用量化模型表示)。

采用一个预训练好的模型和运行推理是非常不同的。深度的神经网络一个非常神奇的优点就是往往能够更好的处理输入中的高噪声。

为什么要量化?

神经网络模型会占用磁盘的大量空间,例如最初的AlexNet模型以浮点格式超过200MB,占用的空间大小几乎都是由连接神经元的权重决定的,因为在一个简单模型中通常有超过数百万个权重。

神经网络的节点和权重最初是存储为32位的浮点数。量化模型最简单的一个做法就是通过存储每一层最小和最大的值来压缩文件的大小,接着压缩每一个浮点数为8位整型。这样文件的大小就减少了75%。

图片 52

量化模型的代码:

图片 53

注意:我们的 docker image 内置量化。

步骤5:通过相机捕捉新图像

你需要树莓派的相机开启和工作,接着捕获一张新图像。

图片 54

关于怎样安装的说明请点击这里

图片 55

捕获新图像的代码

步骤6:预测一张新图像

下载模型

一旦你完成了模型的训练,你就可以把它下载到你的树莓派上了。导入模型运行以下代码:

图片 56

接着将模型下载到树莓派上。

根据设备的不同,你可能需要更改一些安装方式。

图片 57图片 58

树莓派受限于内存和计算力(与树莓派GPU兼容的TensorFlow版本仍然不可用)。因此,衡量每个模型在对新图片进行预测花费的时间很重要。

在树莓派上运行的不同的物体检测模型的基准

图片 59图片 60

我们对于NanoNets的一个目标就是使我们的工作能够很容易的与深度学习结合。物体检测是我们重点关注的一个领域,并且我们制定了一个工作流程可以解决一些实现深度学习模型的挑战。

1. 不需要注释

我们已经删除了注释图像的需要,我们有专业的注释员可以为你注释图像。

2. 自动进行最优模型和超参数的选择

我们为你自动的训练最好的模型,通过运行一连串具有不同参数的模型然后为你的数据挑选最好的那个。

3. 不需要昂贵的硬件和GPUs

NanoNets完全在云端运行,不需要占用你的任何硬件。这样就会更容易去使用。

4. 对于像树莓派这样的移动设备非常棒

因为像树莓派和手机这样的设备不适用于运行复杂的计算任务,所以可以将你的工作负载外包给我们的云,然后为你完成所有的计算。

这里是一个简单的片段使用NanoNets API进行图像的预测

图片 61

使用NanoNets进行图像预测的代码

图片 62

1. 使用一个GUI:

2.使用我们的API:

步骤1:克隆这个仓库

图片 63

步骤2:获取你免费的API钥匙

从这里得到你免费的API钥匙

步骤3:设置API钥匙作为一个环境变量

图片 64

步骤4:创建一个新模型

图片 65

注意:这里生成你下一步需要的MODEL_ID

步骤5:增加模型ID为环境变量

图片 66

步骤6:上传训练数据

收集你需要检测的物体的图像。你可以通过我们的网站UI(http://app.nanonets.com/ObjectAnnontation/?appld=YOUR_MODEL_ID),标注它们任何一个或者使用像 labelImg 这样的开源工具。一旦你在文件夹准备好数据,images和annotations

,开始上传数据集

图片 67

步骤7:训练模型

一旦图像上传完成就开始训练模型

图片 68

步骤8:获取模型状态

这个模型大约要花2个小时进行训练,一旦模型开始训练,你将收到一封电子邮件,同时可以查看模型的状态。

图片 69

步骤9:做预测

一旦模型训练完毕,你就可以使用模型进行预测

图片 70

训练模型的GitHub仓库:

Tensorflow Code for model Training and Quantization:

NanoNets Code for model Training:

使用树莓派进行预测的GitHub仓库:

Tensorflow Code for making Predictions on the Raspberry Pi:

NanoNets Code for making Predictions on the Raspberry Pi:

带标注的数据集:

Cars on Indian Roads sees, dataset for extracting vehicles from Images of Indian Roads:

Coco Dataset:

点击网址: 阅读更多精彩内容

针对 3D 计算机视觉的简介

十大预训练模型助你学习深度学习 —— 计算机视觉篇

在树莓派上实现人脸识别

用深度学习技术,让你的眼睛可以控制电脑

斯坦福CS231n李飞飞计算机视觉经典课程(中英双语字幕 作业讲解 实战分享)

等你来译:

用OpenCV实现神经网络画风迁移

在容器生态中运行 GPU

医学图像文本注释的实例

图片 71

本文由betway必威官网手机版发布于科学知识,转载请注明出处:机器学习课程,怎么着在木莓派上轻便完毕深度

关键词:

上一篇:没有了

下一篇:没有了