深度学习介绍
Posted chocolate2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习介绍相关的知识,希望对你有一定的参考价值。
深度学习介绍
- 基本概念
深度学习是机器学习的一个分支,其中算法从它处理的数据中学习,但程序员不需要有该领域的专业知识。深度学习模型能够自行选择正确的特性,从而消除了对人类程序员的需求。它依赖于自然学习,通过添加知识层,一个在另一个之上。这种学习算法的革命性进步不仅节省了人类的时间和劳动,而且还将决策错误的可能性降至最低。
由于深度学习算法有自己的大脑,它有以下优点。特征提取不再是时间和劳动密集型的,因为它是自动的算法。由于不需要人为干预来学习数据,因此可以进行超出人类能力范围的高级分析。同样的网络方法可以用来解决许多不同类型的问题。此外,与传统的机器学习算法相比,深度学习算法在数据量较大的情况下,其精度更高。
那么为什么深度学习是有用的呢?它很有用,因为深度学习算法擅长学习模式。它可以进行统计分析和预测分析,以发现模式,并从之前的计算中发现隐藏的见解,而无需编程。模式可以像对象分类那样被静态地识别。
在目标分类和定位中,该算法预测场景中存在的目标的类别以及目标在场景中的位置。通过分类,深度学习能够在图像中的像素和对象的类别之间建立关联。你可以称之为静态预测。静态预测在解决计算机视觉问题中很有用。
目标检测可以用来检测场景中的多个目标,并在空间上定位它们在场景中的位置。当通过将每个像素指定为一个类来创建场景中对象的精确轮廓时,称为像素级语义分割。
当接触到足够的相关数据时,深度学习能够利用时变预测建立当前事件和未来事件之间的相关性。深度学习并不一定关心时间或者事情还没有发生的事实。给定一个时间序列,深度学习算法可以读取一串数据并预测最有可能发生的下一个事件。时变预测非常适合于文本和语音分析、从语音到文本或从一种语言到另一种语言的翻译、生成图像的标题以及预测设备的维护需求。
深度学习模型可以打开任何类型的数据,它可以是视觉图像雷达信号、飞行时间、语音、音频、电流信号、电压信号或仅仅数字。
深度学习算法需要大量的数据才能很好地理解。大规模、高质量的标记数据集的出现将深度学习算法的训练结果提高到可与人类精确度相媲美的水平。神经网络是一堆可以并行完成的浮点运算。使用GPUs并行处理这些数据的计算机体系结构的进步大大提高了在大数据集上训练这些模型的速度。GPU计算的发展使得网络能够更大、更深入、拥有更多的数据,从而显著提高了网络的复杂性。
深度学习试图一层一层地学习大数据的结构化表示,学习在连续的层中进行,每一层都添加前一层的知识。
深度学习试图一层一层地学习大数据的结构化表示,学习在连续的层中进行,每一层都添加前一层的知识。一种可以帮助你想象正在发生的事情的方法是考虑这个过于简化的例子,在这个例子中,一个深度神经网络被输入一张狗的图片,并试图将它分类为两类,狗和狼。
网络的第一层可能着眼于简单的特征,比如识别图像中的边缘和曲线。随后的一层获取这些信息并尝试学习更高层次的特征,比如手、爪子或耳朵。随后的层将采用这些形状并将它们组合成一个完整的结构,并为它认为最适合输入的结构分配一个值。
深度神经网络根据可能性报告输出。在这个特定的例子中,它报告说,90%的可能性是一只狗,10%的可能性是一只狼。网络模型如何自我训练来学习正确分类图像将在这个视频的后面讨论。
那么什么是网络模型呢?网络模型,又称网络体系结构,是一组定义好的网络层及其交互方式。当设计一个神经网络模型时,必须决定使用哪种类型,每一层使用多少神经元,如何安排层等等,以满足准确性和性能目标。
CNN有很多流行的模型,它们可以很好地解决许多标准问题。这些模型经常被用作开发的起点和基准,因为从头设计模型有点复杂。一些流行的对象分类网络是AlexNet, VGGNet, GoogleNet或InceptionNet和ResNet。
AlexNet是第一个推动ImageNet分类精度的深度网络。它是2012年的获奖模型。从那以后,网络变得更加复杂,准确率也更高,但也找到了实现更高效性能的方法。
目前流行的目标检测模型有基于区域的快速卷积网络,你只看一次或YOLO,以及单次探测器或SSD。SegNet是一种用于解决任何分割问题的深度学习体系结构。值得注意的是,这些不是嵌入式友好网络。在考虑嵌入式系统的网络模型时,功率、尺寸和成本往往是设计中的限制因素,因此设计一个计算效率高的网络非常重要,并且可以采用一些技术来提高计算效率,作为精度小幅度降低的一种权衡。
构建一个使用深度学习的解决方案对数据科学家和工程师来说是一个巨大的挑战。框架是简化构建深度学习解决方案的工具。框架提供了一定程度的抽象,并简化了可能比较困难的编程任务。有越来越多的开源框架可用,它们通常是为特定目的而构建的,提供一系列独特的特性。
目前用于开发CNN模型的两个最流行的开源框架是TensorFlow和Caffe。TensorFlow是由Google开发的,是当今最常用的基于GitHub stars和forks以及Stack Overflow活动的深度学习框架。Caffee是由伯克利视觉和学习中心开发的。它因其社区支持、在卷积神经网络建模中的主要应用以及被称为Model Zoo的预训练模型的选择而广受欢迎。对于这些框架,还有一些流行的基于c++或Python的高级包装器,使编程变得更容易。
既然我们已经介绍了构建深度学习网络的基本组件和工具,那么让我们来看看如何训练网络。训练网络的目的是获得网络参数的最佳可能值,从而可靠地解决问题。使用一种称为反向传播的过程可以找到这组最佳参数。也就是说,你从一个随机的参数集合开始,不断改变这些权重,这样对于每一个训练图像,我们都能得到正确的输出。
例如,在尝试建立猫和狗之间的分类器时,我们希望找到这样的参数:输出层给出狗作为一个但至少高于猫的所有狗图像的概率,以及猫作为一个但至少高于狗的所有猫图像的概率。对于这一步,收集了大量猫和狗的训练图像。每个输入都标有所需的输出值。网络用一组随机参数初始化。
接下来,将每个输入图像输入网络。该网络对图像进行处理,并赋予图像一个分类概率。如果图像被错误解密,即报告的概率比其他类别低,则计算概率误差,并通过调整权重反馈。这个过程不断重复,直到训练集中的每一张图像都报告了正确的输出。
这种使用带标签的图像来训练网络的方法叫做监督训练,可能是一个很长的步骤。网络模型可能有几周或几个月的训练时间,这取决于它们的训练数据库规模、网络模型的复杂性、准确性目标,以及它正在接受训练的桌面或云的计算速度。
推理是一个阶段,在这个阶段中,一个训练好的模型被用来推断或预测测试样本,并且包含一个类似于预测值的训练的前向传递。与训练不同,它不包括反向传递来计算错误和更新权重。通常在生产阶段,您需要部署模型来预测真实世界的数据。
在生产设置中,模型可能运行在比训练低得多的计算系统上,模型通常被部署到嵌入式环境中,并且运行的处理器与训练所用的处理器完全不同。运行推理的处理器的选择取决于系统成本、功率、性能和精度目标。进行推理时,网络模型的准确性取决于网络在训练端的训练程度,而不取决于运行推理的处理器的选择。例如,TI AM574x嵌入式处理器可以作为在系统边缘运行深度学习推断的选择,其功率、性能、精度和成本目标满足AM57x SoC功能在这些向量上提供的目标。
综上所述,深度学习发展过程分为两个阶段:训练和推理。训练通常是在桌面或云等高性能机器上完成的。推理可以在云上运行,也可以在低功耗嵌入式处理器或高性能加速器上运行。
以下是深度学习开发流程的整体图形视图。首先,选择一个数据集来训练网络。然后,选择一个框架来开发网络模型。然后设计初始网络。在此之后,迭代网络设计,调整呼吸,深度等,直到性能(例如每秒帧数)适合应用。
接下来,在电脑上离线训练并确定准确度。根据需要定义网络设计。重复步骤4,直到达到性能和精度目标。一旦对网络性能和准确性满意,就转换模型并将其部署到推理上。
现在,让我们看看流行的深度神经网络架构。在深度学习中,有许多不同的神经网络结构。这些不同的体系结构有助于解决不同类型的问题。介绍两种结构,卷积神经网络(CNN)和递归神经网络(RNN)。
CNN是一种前馈深度神经网络。在前馈神经网络中,信息只在一个方向上移动,从输入节点到隐藏节点再到输出节点。网络中没有循环。CNN接收固定大小的输入并生成固定大小的输出。
另一种类型的网络是递归神经网络(RNN)。RNN被称为递归的,因为它们接收输入,根据先前的计算更新隐藏状态,并对序列中的每个元素进行预测。RNN利用扩展到包含反馈连接的前馈连接来形成循环。它是一个有记忆的网络,保存着迄今为止处理过的信息。
CNN结构是一种流行的静态预测结构,是图像和视频处理中目标检测、分类和语义分割的理想选择。前面讨论的用于狗图像的深度学习网络的例子是CNNs。RNN对于表示过去的特征被认为与未来有关的时间序列数据很有用。
很多时候,这两个网络模型被叠加在一起,以解决更复杂的问题,比如为图像生成标题。为了解决这一问题,利用CNN模型对图像中的物体进行分类。然后利用RNN模型的变体生成标题。
让我们进一步了解卷积神经网络和CNN模型中涉及的层类型。这里显示的图像是一个CNN对象分类模型。对象分类的CNN模型处理可以分为两部分,特征提取和特征分类。卷积、校正线性单元(ReLU)和池化层是提取特征所涉及的层类型。完全连接层和softmax层是有助于对对象进行分类的层类型。
卷积是卷积神经网络的核心组成部分。它完成了大部分繁重的计算。卷积层的主要目的是从输入图像中提取特征。它将卷积运算应用于输入,将结果传递给下一层。
ReLU层是一个激活函数层,它将非线性引入到卷积神经网络中。它决定了卷积节点的输出是否以及在多大程度上将进一步通过网络。
池化层是一个向下采样层,它减少了网络中的参数和计算量。池中最常用的方法是最大规则。它将输入图像分割成一组不重叠的矩形,并对每个分段输出最大值。卷积层和池化层的输出代表了输入图像的高级特征。
全连接层利用这些特征,根据训练数据集将输入图像分类为各种类别。它计算班级分数。顾名思义,这一层的每个神经元都与前一层的所有神经元相连。
softmax函数取任意实值得分向量,并将其压缩为介于0和1之间的值向量。它等价于一个分类概率分布,并告诉您任何类为真的概率。
让我们最后看一下深度学习算法的示例用例。用于对象分类和检测的静态预测模型,如CNN模型,可以用于工业自动化中识别对象并指导运动或放置。在工厂自动化中,它可以用来对产品进行好坏分类。在建筑自动化中,它可以用于跟踪、识别和计算人员和对象。
在自动取款机和货币柜台应用中,它可以用来区分有效货币和假币。对于智能电器,它可以用于智能烤箱,以确定食物类型和自动设置温度和烹饪程序。它可以被智能冰箱用来检测里面储存了什么食物。
像素级语义分割可以用于机器人导航。对于一个非常不同的例子,你可以看看农业领域,深度学习可以帮助确定作物的健康状况,开发优化的灌溉和收获。零售业也在研究深度学习,以提高自动结账的速度和准确性,了解购物者的需求和偏好,并提供吸引特定购物者的激励措施。
像RNN这样的时变预测网络模型可以用来处理语音和文本信号,以便进行自然语言翻译,从文本到语音的翻译,反之亦然。它们可以通过处理声音、电流和电压信号来识别设备的磨损和预期寿命,从而用于预测性维护。我提到的应用程序只是CNN和RNN模型的一些例子。有许多更令人兴奋的用例可以使用深度学习算法来解决。
深度学习开发流训练网络
-
选择开发框架
-
选择有标记的类数据集进行网络训练
3.设计初始网络模型
-
训练网络
-
将参数和架构保存在二进制文件中
-
推理
-
AM5749
AM5749处理器有一个视觉处理加速器,称为嵌入式视觉引擎子系统或EVE子系统。EVE子系统,它用于加速深层神经网络层。
TI的深度学习解决方案也称为TIDL。我将介绍AM57x SoC上的TIDL产品、TIDL支持的深度学习框架以及SoC上验证的各种网络模型。我们还将研究TIDL可以应用的示例用例。最后,我将谈谈TIDL上的TI设计。
深度学习最近成为解决人工智能问题的首选方法。由于可靠性、隐私性、网络带宽、延迟和电源问题,边缘深度学习已成为许多应用程序的热门选择。TI通过高度集成的AM57x系列Sitara处理器,解决了在嵌入式应用程序的边缘引入深度学习推理的需要。
AM57x系列配备了高性能的ARM Cortex-A15内核,运行频率高达1.5GHz。AM57x的可扩展系列为加速多媒体和工业通信提供专用硬件、多个捕获和显示接口,以及一组丰富的连接外设。
AM57x系列还配备了单核和双核C66x处理器,能够运行深度学习推理,以及传统的机器视觉算法。为了增加推理性能,AM5749处理器家族的最新成员包括两个嵌入式视觉引擎子系统。
EVE子系统是一个可编程的成像和视觉处理引擎。EVE子系统由32位RISC处理器和512位矢量协处理器组成。它每周期可以运行16次16位MAC操作。MAC代表乘法和累加器,因此包含两个操作。
AM5749设备上有两个EVE内核。每个核心的时钟频率为650MHz。在这样的时钟速度下,双核EVE可以支持每秒20.8点gig MACs,即每秒大约42 giga的操作。
现在,您已经基本了解了AM57x SoC用于深度学习处理的能力,让我们看看它是如何适应深度学习开发流程的。在高层次上,深度学习是一个两阶段的过程——训练和推理。训练是开发深度学习算法的过程。训练完成后,网络被部署到现场进行推理,对数据进行分类以推断结果。
深度学习模型的训练通常是离线进行的,使用服务器或带有外部图形处理单元(gpu)的pc上的大型数据集。在此阶段,实时性能或电源不是问题。然而,在动作推断过程中,实时性能和功耗可能很重要,并且对于许多最终产品来说,其中一个或两个都是一个关键问题。TIDL支持在C66x dsp和EVE子系统上以低功耗运行深度学习的实时推理部分。TIDL是一套开放源码Linux软件包和工具,它支持在AM57x SoC上部署一个经过PC训练的网络模型,以低功耗运行实时推理。
TIDL打包在处理器SDK Linux中,并且是免费的。它在所有AM57x设备上运行,因为所有AM57x处理器至少有一个DSP内核。AM5749是性能最高的TIDL设备。它有两个DSP核心和两个EVE子系统。与DSP内核相比,TIDL在EVE子系统上的运行速度要快1.5到4倍,功耗也更低。
两个EVE子系统在满载时消耗220毫瓦,而双c66核则消耗520毫瓦。处理器SDK Linux 5.0中最初的TIDL发布了卷积神经网络(Convolution Neural Networks,简称CNN)的子部分。处理器SDK Linux的未来版本也将支持RNN、LSTM和GRU层。
EVE子系统和DSP核心采用TIDL api编程。TIDL API由运行在Linux上的c++ API组成。该API为用户提供了一个简单的接口,并在我们的EVE子系统中抽象了将网络卸载到一个或多个DSP核心的机制。它为跨一个或多个EVE子系统和AM57x上的C66x核的用户应用程序提供了一个通用的主机抽象。
对于针对CNN模型的应用,TI为三个不同的应用领域——对象分类、对象检测和像素级语义分割——开发了性能优化的CNN参考模型。对象分类处理的是预测场景中存在的对象的类别。目标检测是对场景中可能存在的多个目标进行预测,并大致了解它们的位置。
在像素级语义分割中,区域中的不同物体被定位为具有更多细节的物体,以创建场景中物体的精确轮廓。在这种情况下,每个像素被分配一个类。由于全帧CNN应用程序的计算需求极高,对于运行在200 - 500毫瓦的典型低功耗嵌入式核心来说是无法达到的,TI采用了高效CNN配置、稀疏性、和定点量化开发示例网络模型,可以在一个或多个DSP核和在AM57x SoC上的EVE子系统上实时运行推理。
使用这些工具会导致计算量和带宽的大幅减少,但精确度会略有下降。例如,在EVE子系统上运行稀疏卷积层时,稀疏性可以导致高达4倍的性能优化。本幻灯片中的表格列出了AM57x SoC上TIDL支持的框架和经过验证的网络模块。
TIDL支持BVLC-Caffe、TensorFlow和Caffe-Jacinto框架。Caffe-Jacinto是TI的一个框架。它来自NVDIA Caffe,而NVDIA Caffe又来自BVLC Caffe。它的修改使得可以在嵌入式平台中使用的复杂模型的训练成为可能。
Caffe-Jacinto框架是社区驱动的、开源的,并且有很好的文档记录。它托管在GitHub上。在流行的可用模型中,TIDL已通过SqueezeNet 1.1、InceptionNet V1和Mobilenet 1.0进行了验证。JacintoNet11、JDetNet和JSegNet21分别是TI开发的、性能优化的、用于对象分类、检测和像素级语义分割的示例参考模型。
Processor SDK Linux 5.0版支持对2D数据(如使用RGB相机、飞行时间或雷达相机等捕获的图像或视频)进行卷积神经网络。客户可以在AM57x SoC上部署自己的CNN训练过的网络模型。或者他们可以使用TI提供的参考模型,在PC或云上的自定义数据集上训练模型,并将训练模型部署在AM57x SoC上运行推理。
列出了TIDL适用的一些示例。例如,对象分类和检测可以在工厂自动化中用于将产品分类为好的或有缺陷的。在楼宇自动化中,它可以用来跟踪、识别和计数人和物体。
在工业自动化中,它可以用来识别物体并引导移动或放置。在自动取款机和货币柜台应用中,它可以用来区分有效货币和假币。像素级语义分割可用于机器人导航。对于智能电器,它可以用于智能烤箱,以确定食物类型和自动设置温度和烹饪程序。它可以被智能冰箱用来检测里面储存了什么食物。
我提到的应用只是CNN模型的一些例子。使用TIDL上的CNN模型可以解决许多更令人兴奋的用例。在未来的版本中,TIDL将增强产品,包括性能优化的RNN、LSTM和GRU层。
这些层将支持语音和音频信号的处理,用于声音检测和分类。这可以在楼宇自动化或安全用例中使用。对RNN层的支持还将使机器数据处理具有声音、电流、电压信号等,以便通过识别设备的实际和预期寿命进行预测性维护。
有一个用于TIDL的TI设计,它引导客户完成实现。这个TIDL参考设计演示了如何在Sitara AM57x SoC上使用TI深度学习解决方案来对嵌入式应用进行深度学习推理。TIDL参考设计提供了TIDL开发流程的演练,从网络模型设计到模型导入,再到模型在AM57x SoC上的部署。
本设计展示了如何在C66x DSP和所有EVE子系统上运行深度学习推理,这些子系统在AM57x SoC上被视为平面盒深度学习加速器。它涵盖了许多流行的网络模型的性能基准测试,包括来自TI的参考模型。此外,还报告了TI参考模型的准确性和功耗基准测试。
以上是关于深度学习介绍的主要内容,如果未能解决你的问题,请参考以下文章