Optimizing Deep-Learning Inference for Embedded Devices

1.简介
如何解决与在嵌入式设备上部署(推断)人工神经网络(ANNs)相关的不同挑战。

1.1ANNs
Optimizing Deep-Learning Inference for Embedded Devices_第1张图片
1.2训练的挑战
在训练过程中,需要解决网络架构的选择、优化算法、成本函数、数据采集/预处理等问题。由于ANNs有许多形式和变体,所以架构超参数是开发人员修改和提高给定问题的准确性的最简单方法。由于缺乏理论基础和工具,用户通常必须手动探索ANN设计空间,并使用经验标准选择最佳架构(网络深度、层类型、层布局、层大小等)。

一般来说,当不能应用迁移学习(或类似的技术)时,训练深度学习模型是一项耗时且数据密集的任务,通常需要数周(有时数月)的时间

1.3推断的挑战
通过迭代大量的训练数据,ann能够学习输入数据和目标标签之间的复杂映射。它们的学习能力与网络的参数数量和深度(层数)有关。根据任务的不同,更大/更深的网络通常表现得更好。这进而导致了较高的计算需求,以及对训练和部署(推理)的高性能计算系统的需求。

开发深度学习软件框架,使最终用户能够方便地构建和训练网络模型。

由于它们在感知任务(通常发生在边缘上)方面的优越性能,深度学习应用程序在嵌入式应用程序中使用得更频繁。因此,这些场景中的嵌入式平台承载的计算负载与以前由桌面/数据中心系统承载的相同。此外,它们还必须处理其他约束,如低延迟执行和功耗。由于架构的巨大可变性和编程工具链的多样性,用于嵌入式设备的特殊计算库已经缺失,或者至少是不成熟的。现有的库是为训练而优化的,而不是为推理而优化的。当处理单个数据(例如图像)的推断时,这是一个重要的问题,因为硬件可能没有得到充分利用。

将深度学习应用程序移植到边缘应用程序的挑战源于有限的资源和缺乏优化的库或软件工具。

  1. 材料和方法
    在这一部分中,介绍了单镜头目标检测(SSD)神经网络、目标平台以及本文所使用的深度学习框架。此外,详细解释了特定于ann的优化。

2.1单镜头目标检测(Single-Shot Object Detection, SSD
目标检测是计算机视觉中最具挑战性和计算难度的任务之一。在过去,一个可变大小的滑动窗口被用来单独评估一个可配置的图像块数量。然后使用一个训练在这些图像块上的分类器(如支持向量机)为每个块分配类别。但是这种方法有局限性,因为需要评估大量的图像块才能准确地检测目标。此外,用于对这些图像块进行分类的特征通常很浅显(例如梯度直方图等),因此不足以有效地描述对象外观的可变性。
Optimizing Deep-Learning Inference for Embedded Devices_第2张图片
2.2嵌入式平台
Jetson 2和Drive PX2 AutoChauffeur

2.3网络优化
在嵌入式设备上提高人工神经网络性能而又不损失精度的方法之一是去除人工神经网络
(删除)网络中的冗余操作/层/信息。大多数减少方法是通过离线、训练后的方法来实现的。为此,主要的方法是核剪枝和权重量化。

在系数/内核剪枝中,那些对网络响应没有显著影响(对于大多数输入)的系数/内核将完全从网络中删除。例如,这可以在数据驱动的方法中实现,其中对大型数据集[6]评估神经元的输出。基于未标记的数据,可以估计模型的结构,从而在模型的复杂性和保真度[7]之间取得平衡。

结构稀疏学习可以用来调节滤波器的数量(及其形状)、通道的数量和网络[8]的深度。首先对网络进行训练,以了解哪些连接是重要的,然后删除不重要的连接,对网络进行再培训,可以永久删除连接,而不会影响[9]的准确性

在这些方法中,大部分都是在训练后对神经网络的系数进行分析,有些根据系数的大小进行归零,使得稀疏矩阵可以被稀疏算法软件利用。而在其他情况下,
人工神经网络被训练成包含尽可能多的无关系数(以便在不影响准确性的情况下删除连接)。

对于权重量化,网络的浮点系数被定点表示所代替,输入数据和输出响应被映射到定点表示。

剪枝和权重量化可以单独或联合使用,通常会提高推理速度和降低功耗。

2.3.1精简推理剪枝
本文采用Irida实验室提出的精简推理剪枝方法(Parsimonious Inference pruning),对所研究网络的推理性能进行优化。该方法支持静态(永久)和动态(推理期间)内核修剪。与其他修剪方法相比,生成的模型可以在数小时内进行训练,并在嵌入式设备上运行得更快,而不会牺牲准确性。

内核剪枝基于所谓的学习内核激活映射(Learning kernel Activation Map, LKAM)模块,这些模块被放置在卷积层周围(参见图2)。在训练阶段之后,可以对大多数输入确定为冗余的筛选器进行永久剪枝,而不会损失准确性(静态剪枝)。

此外,可以根据输入动态停用过滤器。为此,LKAM模块必须永久地集成到ANN中。在这两种情况下,必须执行较少的操作,这通常会提高性能的准确性。
Optimizing Deep-Learning Inference for Embedded Devices_第3张图片
2.3.2动态修剪
接下来,我们将演示VGG-SSD网络的修剪过程。首先,在卷积层周围插入LKAM模块。接下来,对模型进行再培训,以允许LKAM模块学习冗余的过滤内核。图3详细分析了VGG-SSD中不同卷积内核的使用情况。
Optimizing Deep-Learning Inference for Embedded Devices_第4张图片
在评估过程中,相当大比例的卷积内核被永久关闭(例如在层中"Conv3_3"),因此可以安全地从网络中删除。

2.3.3静态(永久)修剪
如图3所示,一定数量的层对结果没有(或几乎没有)影响。这些层可以从网络中永久删除而不影响其准确性。在这里,平均利用率低于5%的内核将被永久修剪。在修剪之后,将剩余的内核与它们的利用率系数相乘,并使用相同的数据集对模型进行微调,以补偿变化带来的差异。从而降低了网络的计算复杂度。在三个SSD实现的后端永久修剪内核的结果可以在表3中看到。虽然这里的重点是后端层的优化,但在某些情况下,SSD网络的前端也可以进行优化。例如,当对前端和后端进行优化时,squeezent - ssd的mac总数减少了42%。

2.4 Caffe深度学习框架
开源的Caffe[4]深度学习框架是专门为计算机视觉应用程序设计的。它是第一个允许用户不写任何代码就能设计网络的深度学习框架。它主要是在c++中实现的,并为许多常见的层类型提供了高效的GPU实现
它可以很容易地通过新层进行扩展(但是这需要创建低级的c++ /CUDA代码)。网络可以作为协议缓冲区(protobuf)文件导入/导出。
与其他深度学习框架类似,Caffe缺乏对嵌入式设备的官方支持(Android仅非正式地受到支持)。对于运行最小的Linux操作系统(或非Linux操作系统)的嵌入式设备,不支持Caffe,因为它有几个库依赖项来防止(或使)端口复杂化。
本文选择Caffe框架,因为它既支持优化的GPU (CUDA/cuDNN)代码,也支持优化的CPU代码(使用OpenBLAS)。它也是实现原始SSD ANN[2]的框架。

  1. 结果
    本节将介绍英伟达Jetson X2和Drive PX2上不同SSD改型的优化结果。此外,还显示了处理实时摄像机输入和输出的不同ssd的实时实现,摄像机流覆盖了检测到的对象。

3.1Caffe定时测量
推理时间是使用内部Caffe计时实用程序测量的。对于测量,Wifi和蓝牙被禁用,Nvidia Jetson 2上启用了最大性能模式。类似地,在Nvidia Drive PX2上启用了最大性能模式。
基于精简推理(PI)的网络优化在所有场景中都提高了CPU和GPU的性能(见表4)。平均而言,PI优化在Nvidia Drive PX2上提高了9.7%,在Nvidia Jetson 2上提高了8.2%。对于这两种平台,性能改进稍微高一些
CPU(在驱动PX2上13%,在Jetson 2上14.3%)比(集成的)GPU(在两个平台上约10%)多。
在网络层面,修剪对于VGG-SSD最为有效,修剪后网络的性能提高了20.7%。在这两个平台上,PVA-SSD的改进最小。这可以由模型架构的复杂性来解释,该架构由超过400个节点组成,这些节点延迟了执行。
一般来说,对于所有网络,GPU性能都比CPU性能好得多(大约一个数量级)。正如所料,驱动PX2上的Tegra X2 (CPU和集成GPU (iGPU))在所有网络上的表现与Jetson 2板上的Tegra X2相似(Jetson 2稍快一些),而离散的PX2驱动器的GPU性能优于所有其他设备。
Optimizing Deep-Learning Inference for Embedded Devices_第5张图片
3.2演示
为了说明和验证这些发现,我们为嵌入的世界贸易博览会准备了一个现场演示2018年纽伦堡。四个罗技C920高清摄像头的图像流由两个英伟达Jetson进行处理2个板(每个摄像头一个)和一个Nvidia Drive PX2(每个子系统一个摄像头),目标是实时检测和分类对象。每个摄像机流都使用不同的网络进行处理。
在这里,除了vggd - ssd、vggd - ssd - pruned和SqueezeNet-SSD之外,还包括Tiny-Yolo-V25以供比较。
这些摄像机被放置在一个4K电视屏幕的顶部(见图4),该屏幕在一个分屏中显示了所有四个摄像机的目标检测的实时结果。在执行时,使用了Caffe的SSD变体(3)和Yolo-V2变体(4、5)。
为了提高演示性能并减少延迟,将处理过程分为两个线程。线程通过一个自由运行的环形缓冲区交换图像帧。一个线程从摄像机中读取帧并将它们写入环形缓冲区,而另一个线程则选择最近的帧,对其进行对象处理,并在屏幕上显示结果。这种方法大大减少了相机输入和屏幕上的图像输出之间的延迟。
为了减少外界影响,Wi-Fi和蓝牙被禁用。此外,平台时钟设置最大使用英伟达提供的脚本。演示的不同部分的性能可以在表5所示。除了帧速率(帧每秒(FPS))之外,还有精度(在mAP中)和权值文件的大小(以MB为单位),以供参考。通过剪枝,VGG-SSD的性能可提高4 FPS(+ 28.6%),且不损失精度。
较小的后端网络对运行在Jetson 2上的SqueezeNet-SSD变体的影响可以看到:尽管Jetson的计算能力明显低于Drive PX2,但网络仍然可以实时运行(25 FPS),精度损失(- 16.7%)还算合理。
Optimizing Deep-Learning Inference for Embedded Devices_第6张图片
4. 结论
本文讨论了将基于深度学习(DL)的应用程序移植到嵌入式平台的挑战。对于一个最先进的单镜头目标探测器(SSD)人工神经网络(ANN),它表明,为嵌入式平台上的推理优化深度学习应用程序需要优化,这超出了典型的嵌入式性能优化
在这方面,它表明(神经)网络级优化可以用来提高推理性能而不影响准确性。例如,使用精简推理(PI)剪枝,VGG-SSD在Nvidia Drive PX2上的一个实时演示中推理性能提高了28.6%,而不影响其准确性。
PI修剪可以根据每个输入动态地使用,也可以静态地(永久地从网络删除连接)使用。通过选择不同的后端网络(SqueezeNet),可以证明SSD ANNs可以在嵌入式平台(Nvidia Jetson 2)上运行,实时功耗小于15 W (25 FPS),精度损失合理(- 16.7%)。
一般来说,需要更多的自动化工具来系统地设计和优化嵌入式平台的ANNs,最好是在耗时的培训阶段之前。

关于Silexica
Silexica提供软件开发解决方案,使科技公司能够将自动驾驶汽车等智能产品从概念发展到应用。SLX编程工具通过深入了解软件在系统上的行为,帮助开发人员实现在嵌入式超级计算机上高效运行的软件
Silexica成立于2014年,已经筹集了2800万美元的资金。总部设在德国,办事处设在德国
在美国和日本,西莱西卡与全球许多快速转型行业的客户建立了合作关系,其中包括汽车、无线和航空航天。更多信息请访问:www.silexica.com

关于Irida实验室
Irida实验室(IL)利用先进的机器学习和深度学习/人工智能技术,为各种嵌入式计算平台开发嵌入式计算机视觉软件。该公司专门从事算法开发,特别是在资源预算方面的严格规范,并在所谓的异构计算上下文中开发利用每一个可用的芯片计算资源的软件。

References
[1] W. Liu et al., “SSD: Single Shot MultiBox Detector,” CoRR, vol. abs/1512.0, 2015.
[2] K. Simonyan and A. Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition,” CoRR, vol.
abs/1409.1556,2014.
[3] K.-H. Kim et al., “PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection,” CoRR, vol.
abs/1608.08021, 2016.
[4] F. N. Iandola et al., “SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size,” CoRR,
vol. abs/1602.07360, 2016.
[5] J. Redmon and A. Farhadi, “YOLO9000: Better, Faster, Stronger,” CoRR, vol. abs/1612.0, 2016.
[6] H. Hu et al., “Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures,”
CoRR, vol. abs/1607.03250, 2016.
[7] J. Feng and T. Darrell, “Learning the Structure of Deep Convolutional Networks,” in 2015 IEEE International
Conference on Computer Vision (ICCV), 2015, pp. 2749–2757.
[8] W. Wen et al., “Learning Structured Sparsity in Deep Neural Networks,” CoRR, vol. abs/1608.0, 2016.
[9] S. Han et al., “Learning both Weights and Connections for Efficient Neural Networks,” CoRR, vol. abs/1506.02626,
2015.
[10] D. D. Lin et al., “Fixed Point Quantization of Deep Convolutional Networks,” CoRR, vol. abs/1511.0, 2015.
[11] I. Theodorakopoulos et al., “Parsimonious Inference on Convolutional Neural Networks: Learning and applying on-line
kernel activation rules,” CoRR, vol. abs/1701.0, 2017.

你可能感兴趣的:(嵌入式神经网络)