webooru icon indicating copy to clipboard operation
webooru copied to clipboard

边缘计算笔记(一): Jetson TX2上从TensorFlow 到TensorRT - 云+社区 - 腾讯云

Open madobet opened this issue 4 years ago • 0 comments

NVIDIA 去年发布了一个线上讲座,题目是《 AI at the Edge TensorFlow to TensorRT on Jetson 》。

我们将视频翻译并用笔记的方式分享给大家。

完整内容主要介绍使用 TensorFlow 开发的深度神经网络如何部署在 NVIDIA Jetson 上,并利用 TensorRT 加速到 5 倍。

您将了解到:

1.TensorFlow 性能如何与使用流行模型(如 Inception 和 MobileNet)的 TensorRT 进行比较

2 在 Jetson 上运行 TensorFlow 和 TensorRT 的系统设置

3 如何检查 TensorFlow graph 以获得 TensorRT 兼容性

  1. 将 TensorFlow 图像分类模型转换为 TensorRT 的工作流程

  2. 如何在 Jetson TX2 上执行 TensorRT 图像分类模型

由于这是一个大约 1 个小时的视频,篇幅有限,所以我们将利用三天的时间重现整个笔记内容。

注意今天是第一部分。

今天,我主要讨论如何在 jetson 嵌入式深度学习平台上部署 tensorflow 模型。在开始之前,我将简要介绍深度学习在许多高级人工智能应用程序中的作用,以及 Nvidia Jetson 最适合解决的一类应用程序,然后,我将讨论各种使开发人员使用的深度学习的软件框架,重点讨论由谷歌发布的流行开源框架 tensorflow。

我还将介绍用于深度学习模型的推理加速器 tensorRT,您将了解将模型从 tensorflow 转换为 tensorRT 以部署在 Judson TX2 上所获得的性能优势。然后,我将提出一个使用 tensorRT 预训练的 tensorflow 模型进行图像分类的项目,这个项目可以在 github 上查看。

我们还会讲解使用 Jetpack 3.2 运行代码示例,最后,我将讨论将 tensorflow 模型转换为 tensorRT 的工作流。并非 tensorRT 开发人员指南中记录的所有工作流都支持 jetson,因此了解应用于 jetson 的流程非常重要。

在我们开始讨论如何将 tensorflow 模型转换为 tensorRT 之前,我想介绍一下深度学习。

深度学习是机器学习的一个分支, 其特点是使用几个, 有时上百个功能层。深度学习已经从能够进行线性分类的感知器发展到添加多层来近似更复杂的函数。加上卷积层使得小图像的处理性能有了提升,可以识别一些手写数字。现在,随着大型图像数据集的可用性和高性能并行计算卷积网络正在大规模图像上得到应用,从而实现了以前不实用的广泛应用。

在这里, 我们看到一些实际应用的深度学习是如何被使用的。

深度学习擅长的一个领域是图像分类和目标检测,可以用于机器人和自动车辆以及其他一些应用程序。对于机器人来说,目标检测是很重要的, 因为它使机器人智能地使用视觉信息与环境交互。深度学习也用于人脸识别,可以通过视觉来验证个人的身份信息,常见于智能手机。但深度学习不仅仅是图像处理,还可以用来做自然语言处理,比如智能音箱和语音辅助搜索。其他应用还包括医学图像、解释地震图像判读和内容推荐系统。

很多应用可以利用云端强大的性能,但有些应用就不能,比如一些应用程序需要低延迟,如机器人或自动汽车,响应时间和可靠性是至关重要的。还有应用程序需要高带宽,比如视频分析,我们不断地流数据从几个摄像机传输给远程服务器是不实际的。还有些应用比如医疗成像,涉及到病人数据的隐私。另外对于无人飞机,也无法使用云。对于这些应用我们需要在传感器本身或者附近,就近处理,这就是为什么 NVIDIA Jetson 平台是一个很好的边缘计算平台。

典型的 Jetson 平台的工作流程是在GPU服务器或者工作站上进行训练, 然后将训练的数据模型在 Jetson 上做边缘推理。Nvidia 通过为所有主要的深度学习软件框架集成 CUDA 加速,使得训练模型变得容易。这些软件框架简化了开发和部署深度学习应用程序的过程。

这些框架大多有细微的差别,但每个框架通常都提供了构建神经网络的方法和训练神经网络的算法。虽然有许多不同的框架,每个框架都有自己的好处,但本次讲座我们将把 tensorflow 作为讨论的主题

TensorFlow 是种流行的深度学习框架,由谷歌公司开源。在 TensorFlow 里,神经网络被定义成一系列相关的操作构成的图,这些操作可能是卷积,也可能是矩阵乘法,还可能是其它的任意对每层的元素进行变换的操作。虽然在训练的过程中,网络层中的参数会发生变化,但网络结构不会。

在典型的工作流程中,开发人员通过在 Python 中进行 tensorflow API 调用来定义计算图形,Python 调用创建一个图形数据结构,完全定义神经网络,然后开发人员可以使用明确定义的图形结构来编写训练或推理过程。

例如,在一个称为监督学习的过程中,开发人员通过输入数千甚至数百万个要学习的数据样本来训练网络,在该图中,网络被训练以对猫和狗进行分类,图像通过网络向前馈送 ,使用可用于 Tensorflow 的训练算法,缩小到只有两个节点,其输出值对应于每个类标签的得分,我们调整网络的参数,使预测的输出更好地匹配所需的输出。监督学习还可用于其他任务,如对象检测和图像分割。

除了定义新的神经网络之外,很容易重新使用已经由其他开发人员或研究人员定义和训练的现有网络,这些所谓的预训练网络可以按原样使用重新用于新任务,叫迁移学习。 在迁移学习的情况下,开发人员将从已保存的文件中加载预先训练的参数,然后使用新数据集运行训练过程,这种技术通常会导致更高的准确度,因为训练样本少于从头开始训练网络。

一旦网络完成,就可以直接部署模型。然而,如果模型使用 tensorRT 进行优化,那么通常会有显着的性能优势。TensorRT 是由 nvidia 提供的,是一种优化神经网络推理的加速器,与 tensorflow 和其他框架不同,tensorRT 不用于训练深度学习模型,而是在你完成训练时 使用 tensorRT 优化模型以进行部署,转换过程重新构建模型以利用高度优化的 GPU 操作,从而降低延迟并提高吞吐量。

通过使用 tensorRT 优化 Tensorflow 模型并在 Jetson tx2 上进行部署,在相同配置下测试的每个模型在使用张量 RT 进行优化时执行的速度超过两倍,从而实现了性能改进.

作为我们在 github 上发布的开源项目的一部分,这个 github 项目是在 Jetson tx2 上使用 TensorRT 优化 Tensorflow 模型的有价值的参考,除了基准测试脚本之外,我们还包括一个使用示例程序对图像进行分类 预先训练的模型和在 Jetson tx2 上安装 tensorflow 和 tensorRT 的说明,强烈建议大家上去看看以获取任何细节.

所以让我们开始讨论如何使用 tensorRT 优化 Tensorflow 模型,如前所述,tensorRT 是一个深度学习推理加速器,我们使用 Tensorflow 或其他框架定义和训练神经网络,然后使用 tensorRT 优化模型以产生我们称之为的引擎这个优化过程可能需要一些时间,特别是在 Jetson TX 2 上,但是一旦优化完成,引擎可以保存到磁盘并稍后加载以进行推理。 一旦我们创建了 tensorRT,引擎执行就相当简单, 但是从 Tensoflow 模型创建引擎可能需要一些努力。

本文分享自微信公众号 - 吉浦迅科技(gpusolution),作者:WhoseAI

原文出处及转载信息见文内详细说明,如有侵权,请联系 [email protected] 删除。

原始发表时间:2019-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

https://cloud.tencent.com/developer/article/1447851

madobet avatar May 23 '20 08:05 madobet