带有TensorRT的JetPack 2.3加倍Jetson TX1深度学习推理

描述

深度神经网络(DNN)是实现强大的计算机视觉和人工智能应用的强大方法。今天发布的NVIDIA Jetpack 2.3使用NVIDIA TensorRT  (以前称为GPU推理引擎或GIE)将嵌入式应用中的DNN的运行性能提高了两倍以上NVIDIA推出的1 TFLOP / s嵌入式Jetson TX1模块可以部署在无人机和智能机器上,与推理工作负载相比,功耗高出Intel i7 CPU 20倍Jetson和深度学习力量 - 自主性和数据分析方面的最新进展,如超高性能Teal无人机 如图1所示。JetPack包含全面的工具和SDK,可简化为主机和嵌入式目标平台部署核心软件组件和深度学习框架的过程。

图1:能够飞行85英里每小时,轻量级Teal无人机采用NVIDIA Jetson TX1和即时深入学习。

JetPack 2.3具有新的API,可用于使用Jetson TX1进行高效的低级相机和多媒体流式传输,以及Linux For Tegra(L4T)R24.2与Ubuntu 16.04 aarch64和Linux内核3.10.96的更新。JetPack 2.3还包括CUDA Toolkit 8.0和cuDNN 5.1,它们为卷积神经网络(CNN)和高级网络(如RNN和LSTM)提供GPU加速支持为了高效地将数据流入和流出算法流水线,JetPack 2.3添加了新的Jetson Multimedia API包,以支持基于Khronos OpenKCam的低级硬件V4L2编解码器和每帧相机/ ISP API 

JetPack中包含的这些工具为部署实时深度学习应用程序及其后续工作奠定了基础。请参阅下面的完整软件列表。为了让您入门,JetPack还包含深度学习示例和关于培训和部署DNN的端到端教程。

JetPack 2.3组件

Linux4Tegra R24.2TensorRT 1.0.2 RCVisionWorks 1.5.2.14Ubuntu 16.04 64位LTSCUDA工具包8.0.34OpenCV4Tegra 2.4.13-17Jetson Multimedia API R24.2cuDNN 5.1.5GStreamer 1.8.1Tegra系统分析器3.1.2Tegra图形调试器2.3.16OpenGL 4.5.0

TensorRT

现在通过JetPack 2.3可用于Linux和64位ARM,NVIDIA TensorRT可最大限度地提高神经网络在Jetson TX1或云中的生产部署的运行性能。通过可访问的C ++接口提供神经网络prototext和训练好的模型权重后,TensorRT执行流水线优化,包括内核融合,层自动调整和半精度(FP16)张量布局,从而提高性能并提高系统效率。关于TensorRT  及其图形优化背后的概念,请参阅此并行Forall文章图2中的基准测试结果比较了GPU加速的Caffe和TensorRT之间的谷歌网络图像识别网络的推理性能,这两种网络都支持FP16扩展,并且在一系列的批量大小上进行了比较。与FP32相比,FP16模式不会导致分类精度损失。)

深度神经网络图2:使用FP16模式和批量大小为2的Jetson TX1上运行GoogleNet时,TensorRT将Caffe的性能提高了一倍以上。

性能的衡量标准是使用TensorRT或Caffe 优化的nvcaffe / fp16分支,使用GoogleNet处理的每秒图像数测试使用平面BGR 224×224图像,GPU内核时钟频率调节器最高为998MHz。批量大小表示网络一次处理了多少个图像。

图2的基准结果显示,TensorRT和Caffe之间的推断性能在批量大小为2时提高了2倍以上,并且单幅图像的改进大于30%。尽管使用批量大小1可以在单个数据流上提供最低的瞬时延迟,但同时处理多个数据流或传感器的应用程序,或执行窗口化或感兴趣区域(ROI)子采样的应用程序,可能会使批量大小2.可支持更高批量(例如8,64或128)的应用程序(例如数据中心分析)可实现更高的整体吞吐量。

比较功耗显示GPU加速的另一个优点。如图3所示,带有TensorRT的Jetson TX1在运行Caffe和MKL 2017的英特尔i7-6700K Skylake CPU上进行深度学习推理的效率是其18倍。

深度神经网络图3:在深度学习推理中,Jetson TX1的功率效率比CPU高20倍。

图3的结果是通过将测量的每秒处理的GoogleNet图像除以基准期间处理器的功耗来确定的。这些结果使用批量大小2,尽管批量大小64 Jetson TX1能够以21.5 GoogleNet图像/秒/瓦的速度。从网络层规范(原型文件)开始,TensorRT在网络层和更高层执行优化; 例如,融合内核并每次处理更多层,节省系统资源和内存带宽。

通过将TensorRT连接到摄像头和其他传感器,可以实时评估深度学习网络的实时数据。对于实现导航,运动控制和其他自治功能很有用,深度学***减少了实现复杂智能机器所需的硬编码软件数量。请参阅此GitHub回购,以获取使用TensorRT快速识别Jetson TX1车载摄像头的对象以及定位视频输入中行人坐标的教程。

除了快速评估神经网络之外,TensorRT还可以与NVIDIA的DIGITS工作流程一起有效地用于交互式GPU加速网络培训(见图4)。DIGITS可以在云中运行,也可以在桌面本地运行,并且可以使用Caffe或Torch提供简单的配置和网络培训的交互式可视化。有多个DIGITS演练示例可用于开始使用您自己的数据集来培训网络。DIGITS在每个训练时期保存模型快照(通过训练数据)。所需的模型快照或.caffemodel以及网络原型文件规范被复制到Jetson TX1,TensorRT加载并解析网络文件并构建优化的执行计划。

深度神经网络图4:用于在独立GPU上训练网络并在Jetson TX1上部署TensorRT的DIGITS工作流程。

使用DIGITS与DGX-1超级计算机进行培训,以及Jetson上的TensorRT,NVIDIA的完整计算平台使各地的开发人员能够利用端到端的深度学习解决方案部署先进的人工智能和科学研究。

CUDA工具包8.0和cuDNN 5.1

CUDA Toolkit 8.0包含针对Jetson TX1的集成NVIDIA GPU的CUDA的最新更新。主机编译器支持已更新为包含GCC 5.x,NVCC CUDA编译器已进行了优化,编译速度提高了2倍。CUDA 8包含nvGRAPH,这是GPU加速图形算法的新库,如PageRank和单源最短路径。CUDA 8还包含新的API,用于在CUDA内核以及cuBLAS和cuFFT等库中使用半精度浮点运算(FP16)。cuDNN,CUDA深度神经网络库5.1版支持最新的高级网络模型,如LSTM(长期短期记忆)和RNN(循环神经网络)。看到这个并行Forall 现在支持cuDNN的RNN模式,包括ReLU,门控循环单元(GRU)和LSTM。

cuDNN已被纳入所有最流行的深度学习框架,包括Caffe,Torch,CNTK,TensorFlow 使用与cuDNN绑定编译的Torch,最近可用的网络(如LSTM)支持深层强化学习等领域的功能,其中人工智能代理学习如何基于传感器状态和来自奖励功能的反馈在现实世界或虚拟环境中联机运行。通过释放深度强化学习者来探索他们的环境并适应不断变化的条件,人工智能代理开发理解并采用复杂的预测和直观的类人行为。OpenAI健身房项目中有许多虚拟环境用于训练AI代理的例子。在具有非常复杂的状态空间的环境中(如许多真实世界场景中的情景),深度神经网络被强化学习者用来通过估计未来来选择下一个动作基于感官输入的潜在奖励(通常称为Q学习和深度Q学习网络:DQN)。由于为了将传感器状态(如高分辨率摄像机和LIDAR数据)映射为代理可以执行的每个潜在动作的输出,DQN通常非常大,因此cuDNN对于加速强化学习网络至关重要,因此AI代理保持交互性并且可以实时学习。图5显示了我为在Jetson TX1上实时学习而编写的DQN的输出。这个例子的代码,可在GitHub上获得,使用cuDNN绑定在Torch中实现,并具有用于集成到机器人操作系统(ROS)等机器人平台的C ++库API。

图5:深层强化Q-learning Network(DQN)在Jetson TX1上运行游戏和模拟时学习。

在许多现实世界的机器人应用和传感器配置中,完全可观察的状态空间可能无法使用,因此网络无法保持对整个环境状态的即时感知访问。来自cuDNN的GPU加速LSTM在解决部分可观测性问题方面特别有效,依赖于LSTM编码的存储器来记忆先前的经验并将观测连锁在一起。LSTM在具有语法结构的自然语言处理(NLP)应用程序中也很有用。

Jetson多媒体SDK

JetPack 2.3还包含新的Jetson Multimedia API软件包,为开发人员提供低级API访问,以便在使用Tegra X1硬件编解码器,MIPI CSI Video Ingest(VI)和图像信号处理器(ISP)时灵活地开发应用程序。这是以前版本中提供的GStreamer媒体框架的补充。Jetson多媒体API包括摄像头摄取和ISP控制,以及Video4Linux2(V4L2),用于编码,解码,缩放等功能。这些较低级别的API可以更好地控制底层硬件块。

V4L2支持可访问视频编码和解码设备,格式转换和缩放功能,包括支持EGL和高效内存流。用于编码的V4L2打开了许多功能,如比特率控制,质量预设,低延迟编码,时间折衷,提供运动矢量地图等等,以实现灵活而丰富的应用程序开发。通过添加强大的错误和信息报告,跳帧支持,EGL图像输出等,解码器功能得到显着增强。VL42公开了Jetson TX1强大的视频硬件功能,用于图像格式转换,缩放,裁剪,旋转,滤波和多个同步流编码。

为了帮助开发人员将深度学习应用程序与数据流源快速集成,Jetson Multimedia API包含了与TensorRT一起使用V4L2编解码器的强大实例。多媒体API包中包含图6中的对象检测网络示例,该示例源自GoogleNet,并通过V4L2解码器和TensorRT传输预编码的H.264视频数据。

图6:Jetson Multimedia SDK附带的修改后的GoogleNet网络以全动态视频检测汽车边框。

与核心图像识别相比,除了分类以外物体检测还提供了图像内的边界位置,使其对追踪和避障有用。多媒体API示例网络源自GoogleNet,具有用于提取边界框的附加图层。在960×540半高清输入分辨率下,物体检测网络捕获的分辨率高于原始GoogleNet,同时使用TensorRT在Jetson TX1上保留实时性能。

Jetson Multimedia API包中的其他功能包括ROI编码,它允许定义一个帧中最多6个感兴趣的区域。这通过允许仅为感兴趣的区域分配较高的比特率来实现传输和存储带宽优化。为了进一步促进CUDA和OpenGL之类的API与EGLStreams之间的高效流式传输,NV dma_buf结构在Multimedia API中公开。

相机ISP API

基于Khronos OpenKCam,低级摄像机/ ISP API libargus提供针对摄像机参数和EGL流输出的细粒度的每帧控制,以实现与GStreamer和V4L2流水线的有效互操作。相机API为开发人员提供了对MIPI CSI相机视频摄取和ISP引擎配置的低级访问。样本C ++代码和API参考也包含在内。以下示例代码片段搜索可用摄像头,初始化摄像头流并捕获视频帧。

#包括 <阿格斯/ Argus.h>#include #include  #包括 #包括 使用名称空间Argus;使用名称空间Argus ;  //列举相机设备并创建Argus会话//列举相机设备并创建Argus会话UniqueObj cameraProvider(CameraProvider :: create());UniqueObj cameraProvider (CameraProvider :: create ());CameraProvider * iCameraProvider = interface_cast(cameraProvider);CameraProvider * iCameraProvider = interface_cast (cameraProvider );std :: vector 相机;:: vector < CameraDevice *> 相机;状态状态= iCameraProvider-> getCameraDevices(&cameras);状态状态= iCameraProvider - > getCameraDevices (&cameras );UniqueObj captureSession(iCameraProvider-> createCaptureSession(cameras [0],UniqueObj captureSession (iCameraProvider - > createCaptureSession (cameras [ 0 ],
                                                               &状态));&status ));ICaptureSession * iSession = interface_cast(captureSession);ICaptureSession * iSession = interface_cast (captureSession ); //配置摄像机输出流参数//配置摄像机输出流参数UniqueObj streamSettings(iSession-> createOutputStreamSettings());UniqueObj streamSettings (iSession - > createOutputStreamSettings ());IOutputStreamSettings * iStreamSettings = interface_cast(streamSettings);IOutputStreamSettings * iStreamSettings = interface_cast (streamSettings ); 
    iStreamSettings-> setPixelFormat(PIXEL_FMT_YCbCr_420_888);- > setPixelFormat (PIXEL_FMT_YCbCr_420_888 );iStreamSettings-> setResolution(Size(640,480));- > setResolution (大小(640 ,480 )); //将相机输出连接到EGLStream//将相机输出连接到EGLStreamUniqueObj流(iSession-> createOutputStream(streamSettings.get()));UniqueObj 流(的Isession - > createOutputStream (streamSettings 。获得()));UniqueObj使用者(EGLStream :: FrameConsumer :: create(stream.get()));UniqueObj 消费者(EGLStream :: FrameConsumer :: 创建(流。获得()));EGLStream :: IFrameConsumer * iFrameConsumer = interface_cast(consumer);EGLStream :: IFrameConsumer * iFrameConsumer = interface_cast (consumer ); //从EGLStream获取一帧//从EGLStream获取一帧const uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000;const uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000 ;  UniqueObj框架(iFrameConsumer-> acquireFrame(FIVE_SECONDS_IN_NANOSECONDS,UniqueObj 框架(iFrameConsumer - > acquireFrame (FIVE_SECONDS_IN_NANOSECONDS ,
                                             &状态));&status ));EGLStream :: IFrame * iFrame = interface_cast(frame);EGLStream :: IFrame * iFrame = interface_cast (frame ); EGLStream :: Image * image = iFrame-> getImage();EGLStream :: Image * image = iFrame - > getImage ();

所述杰特森TX1开发工具包包括与所述豪威OV5693 RAW图像传感器的5MP相机模块。现在通过相机API或GStreamer插件启用对该模块的ISP支持。Leopard Imaging公司的IMX185可以通过相机/ ISP API(见Leopard Imaging的Jetson相机套件完全支持来自Leopard Imaging的IMX185的2.1MP 相机ISP通过首选合作伙伴服务支持额外的传感器此外,USB摄像头,集成了ISP的CSI摄像头和ISP旁路模式下的RAW输出CSI摄像头可用于V4L2 API。

展望未来,所有相机设备驱动程序都应该使用V4L2介质控制器传感器内核驱动程序API - 请参阅V4L2传感器驱动程序编程指南了解详细信息以及基于Developer Kit相机模块的完整示例。

智能机器无处不在

JetPack 2.3包含用于部署使用NVIDIA Jetson TX1和GPU技术的生产级高性能嵌入式系统的所有最新工具和组件。NVIDIA GPU借助深度学习和人工智能的最新突破,用于解决日常面临的重大挑战。使用JetPack 2.3中的GPU和工具,任何人都可以开始设计高级AI来解决实际问题。访问NVIDIA的深度学习研究院,获取实践培训课程以及这些Jetson wiki资源的深度学习资源NVIDIA的Jetson TX1 DevTalk论坛也可用于与社区开发人员进行技术支持和讨论。下载JetPack今天 并为Jetson和PC安装最新的NVIDIA工具。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分