Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

谢仁杰作者

基于数据流计算图的卷积神经网络的理论和设计

摘要: 近年来在许多信号处理应用领域中,深度卷积神经网络引起了学术界和工业界很大的关注,其中基于数据流图的深度学习网络Tensorflow框架得到了很多人的青睐。但在一些商业落地的研究和调查中发现,部分机构涉及一些自开发的计算单元,而它不被大型网络框架所支持,又出于技术的保密性往往需要自行修改工业界的深度学习框架,这就造成了以下情况, 其一是工业级大型代码框架极其复杂,各大库之间的调用很深且一般没有注释,不容易读懂和修改,其二是对某一个单一应用来说工业界绝大多数的代码都是有冗的,这就使得代码整体比较臃肿(厚), 性能会受点影响。基于这种受限的情况下,本文提出了一种基于信号处理数据流计算图模型的方法, 在多个平台多核下实现车辆分类。该方法在整个使用过程中,展现了灵活地设计实现优化转换能力,多平台的兼容可实施性,可在有限的资源内根据自己的算法需求,分离式的量身定制。在硬件电路加速或芯片的设计中,数据流所得到的高输出率低延时特点是各厂家在写RTL硬件设计语言时着重提出的特点,其次基于数据流的软硬件设计便易于算法代码之间的转换,实现,移植,调试,分析,综合,集成,优化和验证。

关键词: 深度学习, 数据流, 计算图, 多核运算,信号系统, 车辆分类,神经网咯, C语言

1 简介

随着国家进入人工智能时代,深度学习在嵌入式和计算机应用领域无处不在,例如汽车嵌入式系统和物联网,从而激发了在资源受限的边缘端做深度卷积神经网络的设计方法和研究。本文中以车辆分类作为具体研究案例,设计一种基于信号处理的数据流计算图的模型框架和实现优化方法,迭代式的实现,实验及优化,并在不同的平台及有限的计算资源下实现针对四种相近车辆的分类。本文以数据流计算图原理出发,介绍不同数据流技术建模的原理和形式,后举一个从零开始基于车辆分类的例子,从训练某个应用的网络,选取网络参数神经元权重开始,进行Matlab的仿真代码实现,并以此为参考代码进行基于数据流计算图C代码实现,随后对整个计算图进行深度优化,最后单核和多核在不同平台下的性能进行了一一对比。数据流计算图的简洁,跨平台,可扩展的完全自主的特性,可用于任何特定领域,特别适合量身定制的的嵌入图像和视频信号的操作。

2 数据流模型 (Dataflow Modeling)

2.1 数据流模型原理

在数据流建模模型中,数据流图可表示为有向图,由一系列Actors(顶点)和edges(前进先出,FIFO)组成,其中actor表示任意复杂程度的计算单元(可以是高节点的actor封装了一些计算图),edge表示连接各actors的连线,从而构成一组计算图代表一个函数功能系统,数据类型则封装在token在一个actor通过 edge输出至另一个actor输入端。数据流边缘可以表示e =(v1; v2)表示数据从v1到v2。这里src(e)表示的v1称为源actor和sink(e)表示的v2称为接收器。在一个数据流计算图中,一个actor在其接受的数据足以计算该单元actor的算法时可以启动和调用该actor通过其enable和invoke函数, 每个actor需要明确定义其输入口消耗和输出口产生的 token的数量。整个数据流计算图运行是一个离散的操作。在图2.1中,Actor: FS1,FS2是2个源的参与者;Actor: Adder是加法操作; Actor: FK是接收器。整个图表产生每个actor触发(消耗)一个token到每个actor输出(输入)端口上。
图 2.1 数据流图的简单示例

2.2 数据流模型概述

Core Functional Dataflow(CFDF)是一种可编程的模型,常用于设计,分析及实现信号处理系统,尤其是一种确定消耗产出比和有着动态数据流比例的的信号处理单元的系统开发;Synchronous Dataflow(SDF)是最简单最流行的数据流模型,它有个限制,即一个actor在每个传出边缘上产生的数据值是个数字常量,同时actor从进入边缘消耗的数据值的数量也需要是常量;Cyclo - Static Dataflow (CSDF) 是一种类型的SDF,在一个 actor产生和消耗的token比是可变的只要这个变值是一个固定的周期性的模式;Parameterized Dataflow (PDF) 是一种结合动态参数与运行参数化的数据流计算图,尤其是那些有很明确的图迭代概念的图形;Boolean Dataflow (BDF) 是SDF的扩展,其中一个actor产生和消耗的吞吐率取决于控制的二值函数token,它源自于动态数据流actor中的一个指定控制端口;Enable - Invoke Dataflow (EIDF)是另一种动态数据流建模技术。它将actors分成一系列模式,每个模式都有一个固定的消耗和生成的token 的数量,代表一个分支可以在运行时切换多种模式。

2.3 数据流模型环境: Lightweight Dataflow Environment – C (LIDE-C)

LIDE-C(轻量级数据流环境C)是一个灵活设计的C语言的编程环境,允许设计人员挖掘基于数据流的技术信号处理系统的设计实现和优化,专注于基本的应用程序编程接口(API)功能。在整个框架提供广泛的实现信号处理系统功能的组件,以及跨平台操作,包括可编程门阵列(FPGA),图形处理单元(GPU),可编程数字信号处理器(DSP)和服务器工作站。 LIDE-C软件包拥有许多数据流图元素(actor和edge)实现库,基于这些基本要素可以自由设计自己的数据流图并定义元素,开发特定的应用程序(例如,控制,参数化和仪器相关的模块), 和触发整个数据流图的调度程序,详解可参考文章 [1]。在LIDE-C数据流计算图种

actor和edge是关键2元素,其中Actor设计包括四个接口函数:构造,启动,调用和种植函数(图 2.2)

图2.2 Actor接口函数(1)构造函数:创建actor的实例并连接端口,通过函数参数列表进行算法处理后传递给相连的一组边。

(2)启用功能:在运行时检查该actor是否有足够的输入数据和空的缓冲区空间来支持下一次调用。

(3)调用函数:为actor执行单次调用。

(4)终止功能:关闭此actor在计算图的作用,包括释放相关的存储对象及其所占用的资源。

LIDE-C中的FIFO设计构成的数据流图与其actors本身相互独立实现和优化,开发者可专注于Actor的设计(如算法的实现和优化),然后通过明确定义的接口和fifos集成这些actors, 从而进行数据流图的调度优化(并行,优先级), 这些可通过相互沟通实现整个性能的表现。FIFO操作由C中的接口函数封装。函数指针是指向这些接口功能,以不同形式实现不同的接口。 LIDE-C中的标准FIFO有以下执行操作:

(1)创建具有特定容量的新FIFO。

(2)从/向一个fifo读取和写入token。

(3)检查FIFO的容量。

(4)检查FIFO中当前的token数。

(5)使用FIFO完成后,用FIFO解除存储。

在一个数据流计算图应用程序中创建所有actors和fifos之后,逐步连接并逐步触发检查图形下一个关键actor从而验证检查调试整个系统的当前使用情况。

3 基于图像的车辆识别的网络架构

本文以基于图像的车辆识别网络系统,从零开始一步一步得到相应的网络,实现参考的Matlab推理网络代码,从而进一步实现优化基于数据流计算图的C代码实现,此方法具体一定的普适性和扩展性且根据不同的需求可量身定制其它的应用需求。案例中的CNN实现四种车辆之间的分类 - 公共汽车,卡车,面包车和汽车,此源数据和工作基于之前的车辆分类工作[3],提取了相关的有用信息,使用Caffe +Python 随机搜索来最优的超参数。在使用50组随机生成的超参数(图3.1)进行一系列搜索迭代之后,针对精确率和参数大小及性能的特征平衡推导出一套可实施的优化过的超参数车辆分类系统,等到训练模型稳定后,提取相关的模型权重图3.2(注:本文目的是演示实现优化数据流计算图的方法,所选取的类型为double型,读者可根据深度学习相关知识,可相应的调整网络,比如说用全卷积网络或半精度数据类型或者8比特的整数类型)

图3.1 神经网络的超参数选择及网络搭建

图3.2 神经网络权重样式

图3.3 基于图像识别的神经网络拓扑图训练好后得到的超参数所形成的CNN架构(见图3.3)由五层组成 - 两个卷积层,两个全连接层,最后是分类器层。第一层包括三个通道 (红绿蓝RGB通道),每个输入图像96 x 96的三通道经过过滤后分解成32个特征图,然后最大值池化为48×48。在第二层中,有32组特征图再次卷积,然后下采样最大值池化到24×24。第三层和第四层是两层全连接层,每个节点有100个节点。分类器层执行从100个元素到4个元素并通过softmax运算符得到4个等级可能概率值。在层于层相邻之间,应用整流线性单元非线性激活函数(ReLU)。

4 基于数据流的网络架构计算图设计

在得到整个网络拓扑图(图3.3)并提取出网络各个神经元权重(图3.2)后,先在MATLAB环境中实现其CNN推理的图像分类代码,其主要目的其一是确保此参数模型的最后效果,性能和准确性,其二是有一个参考代码并可收集每一层运算后的数值,便于后续数据流计算图C代码的实现,比较,调试和优化,这种逐层式至最后庞大系统的检测有易于整体代码实现的鲁棒性,并将可能的测试失败的原因显示化在具体的某一层某个actor或fifo,进行更好更快速的实现代码设计优化和迭代。图4.1 Matlab实现图 图4.2 Matlab Profiling在开发了基于MATLAB的CNN车辆分类系统的仿真参考模型后(图 4.1和图4.2),我们继续开发基于数据流计算图LIDE-C的设计以及实现,并在多平台多核上进行性能测试,通过迭代式优化数据流计算图及actor算法来提高整体性能。

图4.3 CNN网络框图作为数据流模型的第一步,把CNN网络拓图转换了网络框图(图4.3),每个框图都可以看成带参数的高阶actor, 高阶actor可以封装一个或多个带参数subgraph系统子图,而其中可能存在成千上万的actor互连,其形式类似于硬件模块的实现,所以可以进行很好的软硬件结合,此网络包含了共10种不同类型的actor:读通道actor, 写通道actor, 卷积actor,池化actor, 非线性激活函数actor,分类器actor, 聚合actor, 广播actor, 乘加 actor, 矩阵乘法actor。针对这些actors,按照不同的图结构进行封装设计,形成三种不同的数据流计算图。(图4.4, 图4.5, 图4.6)

图4.4数据流计算图设计1

图4.5数据流计算图设计2

图4.6数据流计算图设计3

设计一的优点是整个架构与框图最接近,且非常的清晰,理解,实现,验证和检查整个数据流计算图很直接方便。缺点是当子图已经确定且封装为一个大的actor后,难以进一步深层次的优化,若子图来自于第三方机构,当整个程序有错误时,很难进行调试;设计二相对简洁,在卷积层用到了循环展开(loop unrolling)和流水线(pipeline)技术进行优化,增加延迟但提高输出量。此方法很适合用于网络训练图结构但需要一些技巧,总体来说,整个计算图仍旧可以理解;设计三的优点是整个数据流计算图可以任意的在某一步,某一个actor或fifo或缓冲区里跟踪,控制,管理,验证,检测数据,除此之外,设计三的颗粒度更细,可以更深层次进行优化,自行控制的选择余地比较多,相反的,缺点是不易于理解,构成,实现,优化这颗粒度细且庞大复杂的数据流计算图。

5 作者介绍

谢仁杰:硕士,2009年担任诺基亚上海贝尔高级工程师负责TD-LTE和SR7750产品的部署配置和测试。2013年开始在芬兰坦佩雷理工大学攻读普适计算专业并获得硕士学位,随后一年担任普适计算部门助研一职,参与芬兰政府Tekes项目及芬意美联合项目 - 基于数据流计算图的深度神经网络的软硬件实现及优化,在欧美发表数篇会议文章和期刊。2017年回国后分别参与肇观电子(NEXTVPU)SoC芯片里IP CNN模块研发和百度深度学习推理框架Anakin的X86部分算子实现和优化,现任英特尔战略合作和创新业务部技术经理兼职计算机深度学习实践和强化学习两课程助教及讲师。人工智能开放创新平台联合学者。

参考文献:

1.C. Shen, W. Plishker, H. Wu, and S. S. Bhattacharyya, “A lightweight dataflow approach for design and implementation of SDR systems,” in Proceedings of the Wireless Innovation Conference and Product Exposition, Washington DC, USA, November 2010, pp. 640–645.

2.S. S. Bhattacharyya, W. Plishker, C. Shen, N. Sane, and G. Zaki, “The DSPCAD integrative command line environment: Introduction to DICE version 1.1,” Institute for Advanced Computer Studies, University of Maryland at College Park, Tech. Rep. UMIACS-TR-2011-10, 2011

3.H. Huttunen, F. Yancheshmeh, and K. Chen, “Car type recognition with deep neural networks,” ArXiv e-prints, February 2016, submitted to IEEE Intelligent Vehicles Symposium 2016.

4.Boutellier, J., & Lunnikivi, H. (2018). Design Flow for Portable Dataflow Programming of Heterogeneous Platforms. 2018 Conference on Design and Architectures for Signal and Image Processing (DASIP), 106-111.

https://ece.umd.edu/DSPCAD/projects/toplevel/projects.htm

中国人工智能开放创新平台
中国人工智能开放创新平台

平台由贵阳市政府、英特尔及中国产业创新联盟共同打造,致力于深化AI产业结构发展,扶持AI初创企业,打造AI生态圈,集合众多海内外高校导师及行业大牛,撰稿深度分析专业技术及应用,为 智能+注入源源不断的活力。

理论深度学习数据流计算图神经网络
3
相关数据
英特尔机构

英特尔(NASDAQ: INTC)是全球半导体行业的引领者,以计算和通信技术奠定全球创新基石,塑造以数据为中心的未来。我们通过精尖制造的专长,帮助保护、驱动和连接数十亿设备以及智能互联世界的基础设施 —— 从云、网络到边缘设备以及它们之间的一切,并帮助解决世界上最艰巨的问题和挑战。

http://www.intel.cn/
相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

全卷积网络技术

全卷积网络最开始在论文 Fully Convolutional Networks for Semantic Segmentation(2015)中提出,它将传统卷积神经网络最后几个全连接层替换为卷积层。引入全卷积的意义在于它能实现密集型的预测,即在二维卷积下对图像实现像素级的分类,在一维卷积下对序列实现元素级的预测。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数字信号处理技术

数字信号处理(digital signal processing),简称DSP,是指用数学和数字计算来解决问题。 大学里,数字信号处理常指用数字表示和解决问题的理论和技巧;而DSP也是数字信号处理器(digital signal processor)的简称,是一种可编程计算机芯片,常指用数字表示和解决问题的技术和芯片。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

普适计算技术

普适计算是一个强调和环境融为一体的计算概念,而计算机本身则从人们的视线里消失。在普适计算的模式下,人们能够在任何时间、任何地点、以任何方式进行信息的获取与处理。普适计算是一个涉及研究范围很广的课题,包括分布式计算、移动计算、人机交互、人工智能、嵌入式系统、感知网络以及信息融合等多方面技术的融合。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

信号处理技术

信号处理涉及到信号的分析、合成和修改。信号被宽泛地定义为传递“关于某种现象的行为或属性的信息(如声音、图像和生物测量)”的函数。例如,信号处理技术用于提高信号传输的保真度、存储效率和主观质量,并在测量信号中强调或检测感兴趣的组件。我们熟悉的语音、图像都可以看做是一种信号形式。因此,对于语音、图像的增强、降噪、识别等等操作本质上都是信号处理。

随机搜索技术

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

嵌入式系统技术

嵌入式系统,是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
肇观电子机构

“肇观”即“开启视觉”的含义。肇观电子致力于计算机视觉处理器芯片和人工智能应用产品的创新和研发,为机器人、无人机、无人车、安防监控等专业领域提供专业解决方案,同时自主研发了世界首款辅助视障人士感知世界和出行的天使眼智能眼镜,用户覆盖世界各地。截至目前,肇观电子与众多世界五百强建立深度合作,公司业务覆盖中国、美国、英国、德国、日本等全球各大国家及地区。

http://www.nextvpu.com/
推理网络技术

推理网络是一种执行复杂推理任务的方法, 它通常基于从各种来源中获得的大量的以及不同形式的证据。推理网络被广泛的应用在法律,医学,以及情报分析,人工智能等众多领域。这些任务的复杂性通常可以通过现在被称为推理网络的图形结构来获取和表示。

流计算技术

Spark Streaming是Spark Core API的一种扩展,它可以用于进行大规模、高吞吐量、容错的实时数据流的处理。它支持从很多种数据源中读取数据,比如Kafka、Flume、Twitter、ZeroMQ、Kinesis或者是TCP Socket。并且能够使用类似高阶函数的复杂算法来进行数据处理,比如map、reduce、join和window。

推荐文章
暂无评论
暂无评论~