深度神經(jīng)網(wǎng)絡(luò) (DNN) 是實(shí)現(xiàn)強(qiáng)大的計(jì)算機(jī)視覺(jué)和人工智能應(yīng)用程序的強(qiáng)大方法。今天發(fā)布的NVIDIA Jetpack 2.3使用 NVIDIA TensorRT (以前稱為 GPU 推理引擎或 GIE)將嵌入式應(yīng)用程序中 DNN 的運(yùn)行時(shí)性能提高了兩倍以上。NVIDIA 的 1 TFLOP/s 嵌入式Jetson TX1模塊在推理工作負(fù)載期間的能效比 Intel i7 CPU 高 20 倍,可部署在無(wú)人機(jī)和智能機(jī)器上。Jetson 和深度學(xué)習(xí)為自主和數(shù)據(jù)分析的最新進(jìn)展提供動(dòng)力,例如超高性能的藍(lán)綠色無(wú)人機(jī)如圖 1 所示。JetPack 包含全面的工具和 SDK,可簡(jiǎn)化為主機(jī)和嵌入式目標(biāo)平臺(tái)部署核心軟件組件和深度學(xué)習(xí)框架的過(guò)程。
JetPack 2.3 具有新的 API,可通過(guò) Jetson TX1 實(shí)現(xiàn)高效的低級(jí)攝像頭和多媒體流,同時(shí)更新 Linux For Tegra (L4T) R24.2 和 Ubuntu 16.04 aarch64 和 Linux 內(nèi)核 3.10.96。JetPack 2.3 還包括 CUDA Toolkit 8.0 和cuDNN 5.1,具有對(duì)卷積神經(jīng)網(wǎng)絡(luò) (CNN)和 RNN和LSTM等高級(jí)網(wǎng)絡(luò)的 GPU 加速支持。為了有效地將數(shù)據(jù)流進(jìn)出算法管道,JetPack 2.3 添加了新的 Jetson Multimedia API 包以支持低級(jí)硬件 V4L2 編解碼器和基于 Khronos OpenKCam的每幀相機(jī)/ISP API 。
JetPack 中包含的這些工具為部署實(shí)時(shí)深度學(xué)習(xí)應(yīng)用程序及其他應(yīng)用程序奠定了基礎(chǔ)。有關(guān)包含的軟件的完整列表,請(qǐng)參見下文。為了幫助您入門,JetPack 還包含有關(guān)訓(xùn)練和部署 DNN 的深度學(xué)習(xí)示例和端到端教程。
JetPack 2.3 組件
張量RT
現(xiàn)在可通過(guò) JetPack 2.3 用于 Linux 和 64 位 ARM,NVIDIA TensorRT 可最大限度地提高神經(jīng)網(wǎng)絡(luò)的運(yùn)行時(shí)性能,以便在 Jetson TX1 或云中進(jìn)行生產(chǎn)部署。在通過(guò)可訪問(wèn)的 C++ 接口提供神經(jīng)網(wǎng)絡(luò)原型和訓(xùn)練模型權(quán)重后,TensorRT 執(zhí)行流水線優(yōu)化,包括內(nèi)核融合、層自動(dòng)調(diào)整和半精度 (FP16) 張量布局,從而提高性能并提高系統(tǒng)效率。有關(guān)TensorRT及其圖形優(yōu)化背后的概念,請(qǐng)參閱這篇Parallel Forall 帖子。圖 2 中的基準(zhǔn)測(cè)試結(jié)果比較了 GPU 加速的 Caffe 和 TensorRT 之間的 GoogleNet 圖像識(shí)別網(wǎng)絡(luò)的推理性能,兩者都啟用了 FP16 擴(kuò)展,并且在一系列批量大小上。(與 FP32 相比,F(xiàn)P16 模式不會(huì)導(dǎo)致分類精度損失。)
圖 2:在 Jetson TX1 上以 FP16 模式和批量大小為 2 運(yùn)行 GoogleNet 時(shí),TensorRT 的性能提高了一倍以上。
性能是通過(guò)使用 TensorRT 或 Caffe 的優(yōu)化nvcaffe/fp16分支使用 GoogleNet 處理的每秒圖像來(lái)衡量的。測(cè)試使用平面 BGR 224×224 圖像,GPU 核心時(shí)鐘頻率調(diào)節(jié)器最高為 998MHz。批量大小表示網(wǎng)絡(luò)一次處理多少?gòu)垐D像。
圖 2 中的基準(zhǔn)測(cè)試結(jié)果顯示,在批量大小為 2 時(shí),TensorRT 和 Caffe 之間的推理性能提高了 2 倍以上,單張圖像提高了 30% 以上。盡管使用批量大小 1 可在單個(gè)流上提供最低的瞬時(shí)延遲,但同時(shí)處理多個(gè)數(shù)據(jù)流或傳感器的應(yīng)用程序,或者執(zhí)行窗口或感興趣區(qū)域 (ROI) 二次采樣的應(yīng)用程序,可能會(huì)在批量大小下實(shí)現(xiàn)雙倍的吞吐量增益2. 可以支持更大批量(例如 8、64 或 128)的應(yīng)用程序(例如數(shù)據(jù)中心分析)實(shí)現(xiàn)更大的整體吞吐量。
比較功耗顯示了 GPU 加速的另一個(gè)優(yōu)勢(shì)。如圖 3 所示,與運(yùn)行 Caffe 和 MKL 2017 的英特爾 i7-6700K Skylake CPU 相比,使用 TensorRT 的 Jetson TX1 使用 GoogleNet 進(jìn)行深度學(xué)習(xí)推理的效率高出 18 倍。
圖 3:Jetson TX1 在深度學(xué)習(xí)推理方面的能效比 CPU 高 20 倍。
圖 3 的結(jié)果是通過(guò)將測(cè)量的每秒處理的 GoogleNet 圖像除以基準(zhǔn)測(cè)試期間處理器的功耗來(lái)確定的。這些結(jié)果使用批量大小 2,盡管批量大小為 64 Jetson TX1 能夠達(dá)到 21.5 GoogleNet 圖像/秒/瓦特。TensorRT 從網(wǎng)絡(luò)層規(guī)范(prototxt)開始,在網(wǎng)絡(luò)層及以上進(jìn)行優(yōu)化;例如,融合內(nèi)核并每次處理更多層,從而節(jié)省系統(tǒng)資源和內(nèi)存帶寬。
通過(guò)將 TensorRT 連接到攝像頭和其他傳感器,可以使用實(shí)時(shí)數(shù)據(jù)實(shí)時(shí)評(píng)估深度學(xué)習(xí)網(wǎng)絡(luò)。對(duì)于實(shí)現(xiàn)導(dǎo)航、運(yùn)動(dòng)控制和其他自主功能很有用,深度學(xué)習(xí)大大減少了實(shí)現(xiàn)復(fù)雜智能機(jī)器所需的硬編碼軟件的數(shù)量。有關(guān)使用 TensorRT 通過(guò) Jetson TX1 的板載攝像頭快速識(shí)別物體以及在視頻源中定位行人坐標(biāo)的教程,請(qǐng)參閱此 GitHub存儲(chǔ)庫(kù)。
除了快速評(píng)估神經(jīng)網(wǎng)絡(luò)之外,TensorRT 還可以與 NVIDIA 的 DIGITS 工作流程一起有效地用于交互式 GPU 加速網(wǎng)絡(luò)訓(xùn)練(參見圖 4)。DIGITS 可以在云端或本地桌面上運(yùn)行,并通過(guò) Caffe 或 Torch 提供網(wǎng)絡(luò)訓(xùn)練的簡(jiǎn)單配置和交互式可視化。有多個(gè) DIGITS 演練示例可讓您開始使用自己的數(shù)據(jù)集訓(xùn)練網(wǎng)絡(luò)。DIGITS 在每個(gè)訓(xùn)練時(shí)期保存一個(gè)模型快照(通過(guò)訓(xùn)練數(shù)據(jù))。所需的模型快照或 .caffemodel 以及網(wǎng)絡(luò) prototxt 規(guī)范被復(fù)制到 Jetson TX1,TensorRT 在其中加載和解析網(wǎng)絡(luò)文件并構(gòu)建優(yōu)化的執(zhí)行計(jì)劃。
圖 4:用于在離散 GPU 上訓(xùn)練網(wǎng)絡(luò)并在 Jetson TX1 上使用 TensorRT 部署的 DIGITS 工作流程。
使用 DIGITS 和DGX-1 超級(jí)計(jì)算機(jī)進(jìn)行訓(xùn)練,并在 Jetson 上使用 TensorRT,NVIDIA 的完整計(jì)算平臺(tái)使世界各地的開發(fā)人員能夠使用端到端深度學(xué)習(xí)解決方案來(lái)部署高級(jí)人工智能和科學(xué)研究。
CUDA 工具包 8.0 和 cuDNN 5.1
CUDA Toolkit 8.0包括針對(duì) Jetson TX1 的集成 NVIDIA GPU 的 CUDA 的最新更新。主機(jī)編譯器支持已更新,包括 GCC 5.x,NVCC CUDA 編譯器已優(yōu)化,編譯速度最高可提高 2 倍。CUDA 8 包括 nvGRAPH,這是一個(gè)新的 GPU 加速圖形算法庫(kù),例如 PageRank 和單源最短路徑。CUDA 8 還包括用于在 CUDA 內(nèi)核以及 cuBLAS 和 cuFFT 等庫(kù)中使用半精度浮點(diǎn)計(jì)算 (FP16) 的新 API。CUDA 深度神經(jīng)網(wǎng)絡(luò)庫(kù) cuDNN 5.1 版支持最新的高級(jí)網(wǎng)絡(luò)模型,如LSTM(長(zhǎng)短期記憶)和RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))。看到這個(gè)平行的Forall發(fā)布關(guān)于 cuDNN 現(xiàn)在支持的 RNN 模式的帖子,包括ReLU、門控循環(huán)單元 (GRU) 和 LSTM。
cuDNN 已集成到所有最流行的深度學(xué)習(xí)框架中,包括 Caffe、Torch、CNTK、TensorFlow等。使用通過(guò)綁定到 cuDNN 編譯的 Torch,最近可用的網(wǎng)絡(luò)(如 LSTM)啟用了深度強(qiáng)化學(xué)習(xí)等領(lǐng)域的功能,其中 AI 代理根據(jù)傳感器狀態(tài)和來(lái)自獎(jiǎng)勵(lì)功能的反饋學(xué)習(xí)在現(xiàn)實(shí)世界或虛擬環(huán)境中在線操作。通過(guò)釋放深度強(qiáng)化學(xué)習(xí)者來(lái)探索他們的環(huán)境并適應(yīng)不斷變化的條件,人工智能代理可以理解并采用復(fù)雜的預(yù)測(cè)性和直觀的類人行為。OpenAI健身房該項(xiàng)目有許多用于訓(xùn)練 AI 代理的虛擬環(huán)境示例。在具有非常復(fù)雜的狀態(tài)空間的環(huán)境中(例如在許多現(xiàn)實(shí)世界場(chǎng)景中發(fā)現(xiàn)的環(huán)境),強(qiáng)化學(xué)習(xí)器使用深度神經(jīng)網(wǎng)絡(luò)通過(guò)估計(jì)未來(lái)來(lái)選擇下一步行動(dòng)基于感官輸入的潛在獎(jiǎng)勵(lì)(通常稱為 Q-Learning 和 Deep Q-learning Networks:DQNs)。由于 DQN 通常非常大,以便將傳感器狀態(tài)(如高分辨率相機(jī)和 LIDAR 數(shù)據(jù))映射到代理可以執(zhí)行的每個(gè)潛在動(dòng)作的輸出,因此 cuDNN 對(duì)于加速?gòu)?qiáng)化學(xué)習(xí)網(wǎng)絡(luò)至關(guān)重要,因此 AI 代理保持交互性并且可以實(shí)時(shí)學(xué)習(xí)。圖 5 顯示了我為在 Jetson TX1 上實(shí)時(shí)學(xué)習(xí)而編寫的 DQN 的輸出。這個(gè)例子的代碼,在 GitHub 上可用,在 Torch 中使用 cuDNN 綁定實(shí)現(xiàn),并具有用于集成到機(jī)器人平臺(tái)(如機(jī)器人操作系統(tǒng) (ROS))的 C++ 庫(kù) API。
圖 5:深度強(qiáng)化 Q 學(xué)習(xí)網(wǎng)絡(luò) (DQN) 在玩游戲和模擬時(shí)學(xué)習(xí),在 Jetson TX1 上運(yùn)行。
在許多現(xiàn)實(shí)世界的機(jī)器人應(yīng)用和傳感器配置中,完全可觀察的狀態(tài)空間可能不可用,因此網(wǎng)絡(luò)無(wú)法保持對(duì)整個(gè)環(huán)境狀態(tài)的瞬時(shí)感官訪問(wèn)。來(lái)自 cuDNN 的 GPU 加速 LSTM 在解決部分可觀察性問(wèn)題方面特別有效,它依靠從 LSTM 編碼的內(nèi)存來(lái)記住先前的經(jīng)驗(yàn)并將觀察結(jié)果鏈接在一起。LSTM 在具有語(yǔ)法結(jié)構(gòu)的自然語(yǔ)言處理 (NLP) 應(yīng)用程序中也很有用。
Jetson 多媒體 SDK
JetPack 2.3 還包含新的 Jetson Multimedia API 包,為開發(fā)人員提供較低級(jí)別的 API 訪問(wèn)權(quán)限,以便在使用 Tegra X1 硬件編解碼器、MIPI CSI 視頻攝取 (VI) 和圖像信號(hào)處理器 (ISP) 時(shí)進(jìn)行靈活的應(yīng)用程序開發(fā)。這是對(duì)先前版本中可用的 GStreamer 媒體框架的補(bǔ)充。Jetson Multimedia API 包括攝像頭攝取和 ISP 控制,以及用于編碼、解碼、縮放和其他功能的 Video4Linux2 (V4L2)。這些較低級(jí)別的 API 可以更好地控制底層硬件塊。
V4L2 支持提供對(duì)視頻編碼和解碼設(shè)備、格式轉(zhuǎn)換和縮放功能的訪問(wèn),包括對(duì)EGL和高效內(nèi)存流的支持。用于編碼的 V4L2 開放了許多功能,例如比特率控制、質(zhì)量預(yù)設(shè)、低延遲編碼、時(shí)間權(quán)衡、提供運(yùn)動(dòng)矢量地圖以及更多用于靈活和豐富的應(yīng)用程序開發(fā)。通過(guò)添加強(qiáng)大的錯(cuò)誤和信息報(bào)告、跳幀支持、EGL 圖像輸出等功能,解碼器能力得到顯著增強(qiáng)。VL42 展示了 Jetson TX1 強(qiáng)大的視頻硬件功能,用于圖像格式轉(zhuǎn)換、縮放、裁剪、旋轉(zhuǎn)、過(guò)濾和多個(gè)同步流編碼。
為了幫助開發(fā)人員快速將深度學(xué)習(xí)應(yīng)用程序與數(shù)據(jù)流源集成,Jetson Multimedia API 包含了使用 V4L2 編解碼器和 TensorRT 的強(qiáng)大示例。多媒體 API 包中包含圖 6 中的對(duì)象檢測(cè)網(wǎng)絡(luò)示例,該示例源自 GoogleNet,并通過(guò) V4L2 解碼器和 TensorRT 流式傳輸預(yù)編碼的 H.264 視頻數(shù)據(jù)。
。
與核心圖像識(shí)別相比,目標(biāo)檢測(cè)除了提供分類外,還提供圖像內(nèi)的邊界位置,使其可用于跟蹤和避障。多媒體 API 示例網(wǎng)絡(luò)源自 GoogleNet,帶有用于提取邊界框的附加層。在 960×540 半高清輸入分辨率下,目標(biāo)檢測(cè)網(wǎng)絡(luò)以比原始 GoogleNet 更高的分辨率捕獲,同時(shí)使用 TensorRT 在 Jetson TX1 上保持實(shí)時(shí)性能。
Jetson Multimedia API 包中的其他功能包括 ROI 編碼,它允許在一幀中定義多達(dá) 6 個(gè)感興趣的區(qū)域。這通過(guò)允許僅為感興趣的區(qū)域分配更高的比特率來(lái)實(shí)現(xiàn)傳輸和存儲(chǔ)帶寬優(yōu)化。為了通過(guò) EGLStreams 進(jìn)一步促進(jìn) CUDA 和 OpenGL 等 API 之間的高效流式傳輸,多媒體 API 中公開了 NV dma_buf 結(jié)構(gòu)。
相機(jī) ISP API
基于 Khronos OpenKCam,低級(jí)相機(jī)/ISP API 庫(kù)提供對(duì)相機(jī)參數(shù)和 EGL 流輸出的精細(xì)每幀控制,從而允許與 GStreamer 和 V4L2 管道進(jìn)行高效互操作。攝像頭 API 為開發(fā)人員提供了對(duì) MIPI CSI 攝像頭視頻攝取和 ISP 引擎配置的較低級(jí)別的訪問(wèn)權(quán)限。還包括示例 C++ 代碼和 API 參考。以下示例代碼片段搜索可用的攝像頭、初始化攝像頭流并捕獲視頻幀。
參考。以下示例代碼片段搜索可用的攝像頭、初始化攝像頭流并捕獲視頻幀。
#include<阿格斯/阿格斯.h> #include #include #包括#包括 使用命名空間阿格斯;使用 // 枚舉相機(jī)設(shè)備并創(chuàng)建 Argus 會(huì)話// 枚舉相機(jī)設(shè)備并創(chuàng)建 Argus 會(huì)話 UniqueObj cameraProvider(CameraProvider::create());UniqueObj cameraProvider ( CameraProvider :: create ()); CameraProvider* iCameraProvider = interface_cast(cameraProvider);CameraProvider * iCameraProvider = interface_cast ( cameraProvider ); std::vector 相機(jī); ::矢量< CameraDevice *>相機(jī); 狀態(tài)狀態(tài) = iCameraProvider->getCameraDevices(&cameras);狀態(tài)狀態(tài)= iCameraProvider -> getCameraDevices (& camera ); UniqueObj captureSession(iCameraProvider->createCaptureSession(cameras[0],UniqueObj captureSession ( iCameraProvider -> createCaptureSession (相機(jī)[ 0 ], &地位));&狀態(tài))); ICaptureSession *iSession = interface_cast(captureSession);ICaptureSession // 配置攝像頭輸出流參數(shù)// 配置攝像頭輸出流參數(shù) UniqueObj streamSettings(iSession->createOutputStreamSettings());UniqueObj streamSettings ( iSession -> createOutputStreamSettings ()); IOutputStreamSettings *iStreamSettings = interface_cast(streamSettings);IOutputStreamSettings iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888);->設(shè)置像素PIXEL_FMT_YCbCr_420_888 ); iStreamSettings->setResolution(Size(640, 480));-> setResolution (大小( 640 , // 將相機(jī)輸出連接到 EGLStream// 將相機(jī)輸出連接到 EGLStream UniqueObj 流(iSession->createOutputStream(streamSettings.get()));UniqueObj流( iSession -> createOutputStream ( streamSettings . get ())); UniqueObj 消費(fèi)者(EGLStream::FrameConsumer::create(stream.get()));UniqueObj消費(fèi)者(EGLStream :: FrameConsumer :: create ( stream.get ; EGLStream::IFrameConsumer *iFrameConsumer = interface_cast(consumer);EGLStream :: IFrameConsumer // 從 EGLStream 獲取幀// 從 EGLStream 獲取幀 常量 uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000;常量 UniqueObj 幀(iFrameConsumer->acquireFrame(FIVE_SECONDS_IN_NANOSECONDS,UniqueObj框架( iFrameConsumer -> acquireFrame ( FIVE_SECONDS_IN_NANOSECONDS , &地位));&狀態(tài))); EGLStream::IFrame *iFrame = interface_cast(frame);EGLStream :: IFrame EGLStream::Image *image = iFrame->getImage();EGLStream :: Image
Jetson TX1 開發(fā)人員套件包括一個(gè)帶有 Omnivision OV5693 RAW 圖像傳感器的 5MP 相機(jī)模塊?,F(xiàn)在可以通過(guò)相機(jī) API 或 GS??treamer 插件啟用對(duì)該模塊的 ISP 支持。此版本還可以通過(guò)相機(jī)/ISP API 完全支持 Leopard Imaging 的 IMX185 的 2.1MP 相機(jī)(請(qǐng)參閱 Leopard Imaging 的Jetson 相機(jī)套件)。通過(guò)首選合作伙伴服務(wù)啟用 ISP 對(duì)其他傳感器的支持。此外,USB 攝像頭、集成 ISP 的 CSI 攝像頭和 ISP-bypass 模式下的 RAW 輸出 CSI 攝像頭可以與 V4L2 API 一起使用。
展望未來(lái),所有相機(jī)設(shè)備驅(qū)動(dòng)程序都應(yīng)使用 V4L2 媒體控制器傳感器內(nèi)核驅(qū)動(dòng)程序API——有關(guān)詳細(xì)信息和基于開發(fā)人員套件相機(jī)模塊的完整示例,請(qǐng)參閱V4L2 傳感器驅(qū)動(dòng)程序編程指南。
智能機(jī)器無(wú)處不在
JetPack 2.3 包含使用 NVIDIA Jetson TX1 和 GPU 技術(shù)部署生產(chǎn)級(jí)高性能嵌入式系統(tǒng)的所有最新工具和組件。NVIDIA GPU 為深度學(xué)習(xí)和人工智能領(lǐng)域的最新突破提供支持,用于解決每天面臨的重要挑戰(zhàn)。使用 GPU 和 JetPack 2.3 中的工具,任何人都可以開始設(shè)計(jì)高級(jí) AI 來(lái)解決現(xiàn)實(shí)世界的問(wèn)題。訪問(wèn) NVIDIA 的深度學(xué)習(xí)學(xué)院,獲取實(shí)踐培訓(xùn)課程和這些 Jetson wiki 資源,了解深度學(xué)習(xí)。NVIDIA 的 Jetson TX1 DevTalk 論壇也可用于技術(shù)支持并與社區(qū)中的開發(fā)人員進(jìn)行討論。立即下載 JetPack并為 Jetson 和 PC 安裝最新的 NVIDIA 工具。
關(guān)于作者
Dustin 是 NVIDIA Jetson 團(tuán)隊(duì)的一名開發(fā)人員推廣員。Dustin 擁有機(jī)器人技術(shù)和嵌入式系統(tǒng)方面的背景,喜歡在社區(qū)中提供幫助并與 Jetson 合作開展項(xiàng)目。您可以在NVIDIA 開發(fā)者論壇或GitHub 上找到他。
審核編輯:郭婷
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28103瀏覽量
205852 -
API
+關(guān)注
關(guān)注
2文章
1472瀏覽量
61749 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5463瀏覽量
120891
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論