首先就是我們需要一個邊緣智能的開發板 NVIDIA Jetson Nano,雖然是入門級,但是足以應對大部分要求算力不高的場景。Jetson Nano 介紹參考:
https://developer.nvidia.com/embedded/jetson-nano-developer-kit
Jetson Nano Developer Kit SD Card image
因為Jetson Nano的系統是內核是tegra-ubuntu 4.9.140-tegra aarch64架構,所以NVIDIA給了我們一個microSD card的鏡像來燒錄到板子上,但由於推理框架、庫、軟體、驅動等等都要遵循其架構。就導致了如果沒有一個好的工具,構建一個邊緣推理的環境極其複雜。所以就有了JetPack和SDK Manager。鏡像燒錄參考:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
NIVIDA JetPack 可以實現在 Jetson 平臺上快速構建機器學習環境,JetPack 包括系統鏡像、TensorRT、CUDA、各種庫和 API、開發工具、和示例代碼。我們可以利用 SDK Manager 來安裝Jetson的軟體環境,SDK Manager 要需要安裝到一臺 Ubuntu Host 主機上,然後由它來打包和推送環境到 Jetson Nano 上。
在使用 SDK Manager 部署環境之前,我們要確認完成以下工作:
然後部署安裝,部署時間取決於你 Host 主機的配置和網絡情況,燒錄過程中會彈出 Jetson nano 的 root 認證。具體步驟參考:
https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html#install-with-sdkm-jetson
NVIDIA TensorRT 是 NVIDIA 推出的深度學習推理的框架,也可以理解為一個優化器。它能夠以更低延遲、高吞吐率來部署推理模型到嵌入式平臺。這個框架可以將 Caffe,TensorFlow 的網絡模型解析,然後與 TensorRT 中對應的層進行一一映射,把其他框架的模型統一全部轉換到 TensorRT 中,然後在 TensorRT 中可以針對NVIDIA 自家的 GPU 實施優化策略,並進行部署加速。TensorRT 已經能夠支持 TensorFlow、Caffe、Mxnet、Pytorch、Darknet 等深度學習框架,這裡我們用到的正是基於Darknet的Yolo。TensorRT可以直接解析他們的網絡模型;對於caffe2,pytorch,mxnet等框架則是首先要將模型轉為 ONNX 的通用深度學習模型,然後對 ONNX模型做解析。而 Tensorflow 和 MATLAB 已經將 TensorRT 集成到框架中去了。具體參考:
https://developer.nvidia.com/tensorrt
NVIDIA DeepStream SDK 提供了完整的流分析工具包,可用於基於 AI 的視頻和圖像分析。實時分析來自攝像頭或傳感器或物聯網網關的數據。底層基於 GStreamer 實現低延遲和高吞吐量。還可以將消息代理如 Kafka 和 MQTT 將邊緣集成到雲中。在 NVIDIA 平臺上的設備上可以加速 H.264 和 H.265 視頻解碼 ,來構建端到端 AI 驅動的應用程式比如:零售分析,停車管理,物流管理,光學檢查和缺陷檢測等。具體參考:
https://developer.nvidia.com/deepstream-sdk
Jetson Nano 可實時處理多達 8 個高清全運動視頻流,可作為用於網絡錄像機 (NVR)、智能攝像機和 IoT 網關的低功耗邊緣智能視頻分析平臺進行部署。NVIDIA 的 DeepStream SDK 使用 ZeroCopy 和 TensorRT 優化端到端推斷管道,以實現邊緣和本地伺服器的終極性能。下圖就是我跑的示例代碼,顯示 Jetson Nano 在 8 個 1080p 流上執行物體檢測,同時基於 ResNet 的模型以全解析度運行,吞吐量為 500MP/s,解碼率為 500 MP/s (H.264/H.265)和視頻編碼率(250 MP/s)H.264/H.265. 具體請參考連結:
https://devblogs.nvidia.com/jetson-nano-ai-computing/
這一點很重要,我們要先把示例代碼跑通。
當我們通過 SDK Manager 將 DeepStream 成功燒錄系統後,在路徑在opt:/opt/nvidia/deepstream/deepstream-4.0/samples/configs/deepstream-app/ 運行nano.txt 的Demo code,如果運行成功,那麼 Jetson Nano 平臺的推理環境就部署成功了。步驟 5 就是我們通過 DeepStream 的 Demo code 運行成功的截圖。