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