Amazon Sagemaker 与 NVIDIA Jetson 平台结合打造智能边缘

      最后更新:2020-06-12 09:52:03 手机定位技术交流文章

      随着物联网和人工智能芯片的发展,未来将有越来越多的数据在边缘处理。许多业务场景都对边缘智能提出了明确的要求。例如,自动驾驶汽车每天产生5TB的数据,而智能工厂每天产生高达1PB的数据,包括视频和传感器数据。如果不能依靠互联网网络将数据传输到云端进行边缘智能技术处理,将会造成网络延迟和拥塞,影响推理结果的实时性,并引发生产事故甚至安全事故。因此,本文将介绍使用亚马逊SageMaker和英伟达Jetson结合云+终端创建边缘推理的方案。总体方案架构如下:

      在正式理解亚马逊萨格梅克和英伟达捷森平台之前,让我们先了解一下什么是目标探测和YOLO。

      目标探测和YOLO(你只看一次)

      目标检测是计算机视觉的一个重要分支,但在边缘设备或移动终端中部署神经网络模型需要大量的计算能力或GPU处理能力。近年来,由于边缘人工智能芯片计算能力的提高和边缘智能更广泛的应用场景,机器学习模型在边缘设备上的有效应用等研究课题越来越热门。

      目前,目标检测领域的深度学习方法主要分为两类:一是两阶段的目标检测算法;二是一级目标检测算法。

      前者首先生成一系列候选帧作为样本,然后通过卷积神经网络对样本进行分类。后一阶段不需要生成候选帧,直接将目标边界定位问题转化为回归问题处理。正是因为这两种方法的不同,它们的性能也不同。前者在检测精度和定位精度上更优越,而后者在算法推理速度上更优越。最近,许多人工智能公司正在做戴口罩的识别,这实际上是基于这两种方法。在目标检测中,准确性和速度通常是零和游戏。我们通过实践来平衡两者,以获得最大的利益。

      YOLO v3是第三代版本的YOLO,一个经典的目标检测模型。由于其目标识别速度快,Yolov3被业界称为目标检测的边光。它是由华盛顿大学的约瑟夫·雷蒙和阿里·法尔哈迪创造的,他们是目标探测领域的经典论文《YOLO》(你只能看一次)的两位作者。2018年9月,YOLO v3正式发布。下图显示,YOLOv3显然比其他具有类似性能的焦散纸检测方法更快。Yolo V3 Tiny是为满足嵌入式应用的需求而发布的,已经成为一种非常流行的目标检测算法,目前正在主流人工智能芯片公司的产品中使用。工业场景中的缺陷检测或大众消费领域中的新零售和智能驾驶已经被广泛推广。关于YOLO的具体介绍和解释,请参考https://pjreddie.com/darknet/yolo/

      为什么是tinyolov3?

      Tiny Yolo v3是Yolo v3的简化版本。Tiny Yolo v3具有网络简单、计算量小的优点,可以在移动端或设备端运行。缺点是准确度也相对较低(候选帧和分类准确度都相对较低)。一般的深度学习网络架构对于许多边缘和移动场景来说过于沉重,因此边缘端需要更轻的重量、更快的推理速度和更简单的网络模型。微小的Yolo v3非常适合实时检测。下图由英伟达官方网站提供。在经过TensorRT的加速后,各种ML框架如Tensorflow、Pytorch、Caffe/Caffe2、Keras、MxNet等。取得了良好的加速效果。

      基于暗网的微小YOLO V3在天梭支持的目标检测模型中表现很好。下图:

      所以下一步是训练tinyolov3模型来实现边缘智能。

      然而,培训模式并不像输入代码那么简单,因为大多数进行机器学习或数据分析的公司几乎将一半精力用于数据准备,另一半用于机器学习培训环境的部署、框架安装、调优和调试。例如,我使用Darknet53来训练我的Yolo模型,但是我们的大部分时间都花在了图形处理器驱动程序、CUDA安装、cuDNN匹配、OpenCV、Python和VisualStudio引入的各种库函数或安装框架(具有一致的版本)上。每一步都是紧密相连的,一步错了,另一步错了。为了防止您再次犯同样的错误,接下来我们将介绍如何使用Amazon Sagemaker来帮助我们简化复杂性并减少不必要的环境部署时间以提高效率。

      亚马逊SageMaker

      Amazon SageMaker是一个完全托管的服务,帮助开发人员和数据科学家快速构建、培训和部署机器学习(ML)模型。SageMaker完全消除了机器学习过程中每一步的繁重工作,使得开发高质量的模型变得更加容易。传统的最大似然法开发是一个复杂、昂贵和迭代的过程,并且没有用于整个机器学习工作流的集成工具,这使得它更加困难。我们需要将工具和工作流拼接在一起,这既耗时又容易出错。SageMaker在一个工具集中提供了机器学习的所有组件,以解决这个难题,因此该模型可以以更少的工作量和更低的成本更快地投入生产。

      这里,我们省略了创建亚马逊SageMaker笔记本实例的步骤,直接使用创建的亚马逊Sagemaker笔记本进行开发。这与在本地使用jupyter笔记本相同,只是我们可以直接调用AWS的底层计算资源,例如P3实例,它可以支持多达8个NVIDIA V100张量核心GPU,并且可以为机器学习应用提供高达100Gbps的网络吞吐量。我们可以轻松启用或禁用可用资源。SageMaker还支持一键式笔记本共享。所有代码依赖项都是自动捕获的,因此您可以轻松地与其他人协作。他们会把相同的笔记本存放在同一个地方。现在我们可以直接将Yolo-tiny的源代码导入到SageMaker笔记本中进行模型开发。源代码参考链接https://github.com/AlexeyAB/darknet.培训最重要的是数据集。应该注意的是,暗网的数据集是以txt格式标注的。我们将根据帕斯卡尔挥发性有机化合物目录结构的图像标签。xml格式通过脚本转换成txt格式标签。结构和注释如下:

      VOCdevkit

      -VOC2018

      图像集#存储数据集列表文件,如主菜单下的train.txt或test.txt等。

      公告#在数据集中存储图片文件。

      ├─JPEGImages #以xml格式存储图片标签

      -voc2yolo3.py #用于生成数据集列表文件。

      理解目录结构的意义在于,当使用Sagemaker时,我们可以用S3数据源来对应目录结构。

      我们想为darknet项目创建一个开发环境和依赖关系。幸运地

      Amazon SageMaker NoteBook实例带有多个安装环境。这些环境包括Jupyter内核和Python包,包括scikit、熊猫、NumPy、TensorFlow和MXNet。您还可以安装自己的环境,其中包含选定的包和内核。通常使用Condoinstall或pip install来实现这一点。然而,基于Darknet的YOLO具有依赖性小、执行效率高的优点。如果没有显示图片,甚至可以省略opencv。我们想要训练标记的数据,当然,我们需要一个具有强大GPU计算能力的服务器。下图是通过亚马逊SageMaker笔记本直接调用AWS底层计算资源的示例。在下图中,我们调用p 3.2大型的图形处理器实例进行模型训练(train _ instance _ type = ' ml . p 3.2大型')。

      培训结束后,我们将得到一个模型文件的权重。下一步是如何将模型文件部署到NVIDIA Jetson Nano,一个边缘智能开发板,并通过NVIDIA的TensorRT和DeepStream加速推理。

      以下部分主要完成设备方面的工作。主要步骤是:

      1.捷森纳米环境部署

      2.将萨格马克培训模式部署到捷森纳米

      3.测试

      事实上,整个实验过程仍然相对较长。由于篇幅的原因,我们不会扩展每一步的实现方法。在这里,我们将首先抛出最终的实现效果图。这是通过云中的Sagemaker服务进行训练,然后通过NVIDIA的TensorRT和DeepStream实现实时目标检测。

      杰森的环境部署

      这里将在NIVIDA中使用的硬件和平台相关组件主要包括:

      1.捷森纳米

      2.捷森纳米开发套件SD卡图像

      3.捷豹SDK

      4.NVIDIA TensorRT

      5.深度流

      6.运行示例代码

      由于博客的长度,让我们先来看看总体情况。详情请参考以下链接。

      1.捷森纳米

      首先,我们需要一个边缘智能开发板。虽然它是一个入门级的主板,但它足以处理大多数需要低计算能力的场景。捷森纳米介绍参考:https://developer . NVIDIA . com/embedded/捷森纳米开发套件

      2.捷森纳米开发套件SD卡图像

      因为捷森纳米的系统是基于TEGRA-Ubuntu 4 . 9 . 140-TEGRA ARCH 64架构,NVIDIA给了我们一个镜像的microSD卡烧到板上,但因为推理框架,库,软件,驱动程序等。必须遵循它的架构。这导致在没有好工具的情况下,边缘推理环境的构造极其复杂。所以有了喷气背包和SDK管理器。镜像刻录参考:https://developer . NVIDIA . com/embedded/learn/get-start-Jetson-nano-devkit # write

      3.捷豹SDK

      NIVIDA JetPack可以在Jetson平台上快速构建一个机器学习环境。JetPack包括系统映像、TensorRT、CUDA、各种库和应用编程接口、开发工具和示例代码。我们可以使用软件开发工具包管理器来安装杰特森的软件环境。SDK管理器需要安装在一个Ubuntu主机上,然后它会打包并把环境推给捷森纳米。

      在使用SDK管理器部署环境之前,我们想确认以下几点:

      捷森纳米必须首先通过MicroSD卡成功进入Ubuntu接口,并使用微型通用串行总线将纳米链接到Ubuntu主机(请注意,如果主机使用虚拟机,则必须添加一个通用串行总线控制器,如果启用了USB2.0,则在链接主机时使用2.0,3.0也是如此)。Nano将网线连接到外部网络,并与Ubuntu主机在局域网中(如果主机使用虚拟机,请使用桥接模式)。)然后进行部署和安装,部署时间取决于您的主机配置和网络情况,Jetson nano的根身份验证将在刻录过程中弹出。有关具体步骤,请参阅:https://docs . NVIDIA . com/SDK-manager/install-with-sdkm-Jetson/index . html # install-with-sdkm-Jetson。

      4.NVIDIA TensorRT

      NVIDIA TensorRT是NVIDIA引入的深度学习推理框架,也可以理解为优化器。它可以将推理模型部署到延迟更低、吞吐量更高的嵌入式平台上。该框架可以分析Caffe和TensorFlow的网络模型,然后将它们逐个映射到tensorfrt中的相应层,并将其他框架的所有模型统一转换为tensorfrt。然后在tensorfrt中,可以为NVIDIA自己的GPU实现优化策略,并加快部署。TensorRT已经能够支持TensorFlow、Caffe、Mxnet、Pytorch、Darknet和其他深入学习框架。我们在这里使用的是基于黑暗网络的Yolo。TensorRT可以直接分析他们的网络模型;对于像caffe2、pytorch、mxnet等框架。首先必须将模型转换成ONNX通用深度学习模型,然后对ONNX模型进行分析。张量流和MATLAB已经将张量集成到框架中。具体参考:https://developer.nvidia.com/tensorrt

      5.深度流

      NVIDIA DeepStream SDK为基于人工智能的视频和图像分析提供了一个完整的流分析工具包。实时分析来自摄像头、传感器或物联网网关的数据。底层基于GStreamer,以实现低延迟和高吞吐量。卡夫卡和MQTT等消息代理也可以将边缘集成到云中。可以在NVIDIA平台上加速H.264和H.265的视频解码,以构建端到端人工智能驱动的应用,如零售分析、停车场管理、物流管理、光学检测和缺陷检测。具体参考:https://developer.nvidia.com/deepstream-sdk

      捷森纳米可实时处理多达8个高清全动态视频流,并可部署为网络录像机(NVR)、智能相机和物联网网关的低功耗边缘智能视频分析平台。NVIDIA的深度流SDK使用零拷贝和TensorRT来优化端到端推理管道,以实现边缘和本地服务器的最终性能。下图是我运行的示例代码,显示了Jetson Nano对8个1080p的流执行对象检测,而基于ResNet的模型以全分辨率运行,吞吐量为500兆/秒,解码速率为500兆/秒(264/265),视频编码速率为250兆/秒(264/265)。详情请参考链接:https://devblogs.nvidia.com/jetson-nano-ai-computing/

      6.运行示例代码

      这非常重要,我们必须首先运行示例代码。

      在我们通过SDK管理器成功地将DeeStream烧录到系统中后,如果路径为OPT:/OPT/NVIDIA/DeeStream/DeeStream-4.0/Samples/CONFIGS/DeeStream-App/Demo代码运行Nano,Jetson Nano平台的推理环境将成功部署。步骤5是我们成功运行DeeStream的演示代码的屏幕截图。

      将萨格马克的训练模型部署到捷森纳米

      首先,找到在Sagemaker上定义的输出路径,并将S3上的模型文件导出到捷森纳米。解压缩的模型文件,如yolovtiny-xxx.weights。

      此时无法直接将模型导入捷森纳米。即使它直接运行,它也没有被TensorRT和DeepStream优化和加速。如果捷森纳米没有使用天梭加速,yolo的推理速度将会大大降低,例如yolo v3 & lt1fps,yolov3 tiny & lt8fps,因此需要以下三个步骤:

      1.yolov 运行在deepstream_reference_apps中的小应用程序

      2.交叉编译

      3.参数修改

      1.yolov 运行在deepstream_reference_apps中的小应用程序

      在正式部署我们的模型之前,我们仍然需要测试使用DeepStream进行目标检测的Yiny YOLO v3的示例应用程序是否可以运行:在NVIDIA的技术网站上可以找到darknet的tinyyolov3 for tensort和DeepStream。主要操作步骤有:配置环境、下载trt-yolo-app代码、修改参数、安装依赖项等。,最后执行小YOLO推理:

      具体参考:https://dev talk . NVIDIA . com/default/topic/1050377/Jetson-nano/deep-learning-impact-Benchmarking-instructions/

      $ CD ~/deep stream _ reference _ apps/yolo $ sudo rt-yolo-app-flag file = config/yolov tiny . txt 2。

      交叉编译的原因是Jetson Nano的系统是基于ARCH 64架构的,而我们正在进行amd64架构的培训,所以我们可以在Jetson Nano上添加在Sagemaker上培训的暗网主(Yolov 自己培训的小)代码和模型权重,并首先执行make clean,然后编译成ARCH 64架构的暗网项目。

      3.参数修改

      我们将项目放在与示例项目相同的路径上:/deep stream _ SDK _ v 4 . 0 . 1 _ JetsonsourcesobjectDetector_Yolo,因为在SourceSobjectDetector _ Yolo文件夹中有许多配置文件,如deepstream、GStreamer、trt(TensorRT)网络。此外,它还包括deepstream对trt的调用。我们只需分析objectDetector_Yolo和深度流应用程序目录中的几个文件:

      (1) sourcesobjectDetector_Yolo:

      配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件配置文件创建引擎、创建网络等的实现。(2)SourceSapSample _ AppsDeepStream-APP:

      Deepstream_app.c ##deepstream操作,如调用TensorRT等。Deepstream _ app _ config _ parser . c # #配置文件的解析灯。管道和图像显示灯。打开NVDSPREVE _ CUSTOM _ IMPL _ YOLO/NVDSPARSEBOX _ YOLO。CPP。修改参数YOLO。我在这里定制的重量是为了识别人和自行车。所以类=2。

      静态常量int NUM _ CLASSES _ YOLO = 2;将示例项目中模型文件的参数替换为新模型文件,例如:

      外部“C”bool NVDSInserParseCustomYolov 3(标准::向量常量& ampoutputLayersInfo,NvDsInferNetworkInfo常量& ampnetworkInfo,NvDsInferParseDetectionParams常量和。detectionParams,STD::vector & amp;对象列表){。。。##来自COCO数据集const std::vector kANCHORS的9个聚类= {10.0,13.0,16.0,30.0,33.0,23.0,30.0,61.0,62.0,45.0,59.0,119.0,116.0,90.0,156.0,198.0,373.0,326.0 };##指定上述9个锚点中的哪一个使用静态常量标准::矢量> 1。kMASKS = { {6,7,8},{3,4,5},{0,1,2 } };}静态bool NVDSInserParseYolov 3(){ # #边界框重叠阈值常量浮点kNMS _ THRESH = 0.5f常量浮点kPROB_THRESH = 0.7f。##预测框常数KnuM _ BBOXES = 3;}具体步骤请参考:https://docs.nvidia.com/metropolis/deepstream/custom _尤洛_模型_在_深流_尤洛_ app.pdf

      (3)测试

      测试我们的程序:

      深度流-app -c <。config>。-GST-调试= & lt调试#>。

      摘要

      随着低功耗、低成本人工智能芯片的普及,越来越多的企业开始关注互联网领域。边缘智能正在推动人工智能和物联网的融合。人工智能和物联网互为补充:没有人工智能,物联网只是一个收集数据的传感器,没有物联网,人工智能就不会应用于边缘。AIoT项目确实比其他简单软件或硬件的研发更复杂。它是多学科或技术堆栈的集成。例如,数据收集、分析和呈现需要与大数据相关的技术,边缘逻辑的推理和判断需要机器学习模型的应用,ETL在数据处理后应与大数据相结合。云逻辑编写、OTA升级、安全设计和设备管理也应与终端集成。此外,如果是视频流交互,还涉及编码和解码、流媒体等技术。

      正是因为它的复杂性,我们在云中训练,在边缘推理。我们不仅使用云计算提供的服务和接口进行快速原型开发,还使用NVIDIA提供的Jetson平台加快边缘推理,提高边缘计算能力的利用率。

      参考链接

      https://pjreddie.com/darknet/yolo/

      https://devblogs.nvidia.com/jetson-nano-ai-computing/

      https://developer . NVIDIA . com/embedded/jetson-nano-developer-kit

      https://docs . NVIDIA . com/metropolis/deep stream/dev-guide/index . html

      大都市/深度流/自定义_ YOLO _模型_在_深度流_ YOLO _应用

      https://docs . NVIDIA . com/SDK-manager/install-with-sdkm-jetson/index . html

      http://docs . NVIDIA . com/jetson/jet pack/install-jet pack/index . html # package-management-tool

      https://docs.nvidia.com/metropolis/deepstream/dev-guide/

      这篇文章的作者

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/7883.html

          热门文章

          文章分类