NVIDIA Jetson TX2上的對象檢測

2021-02-13 相約機器人

作者 | Quantum

來源 | Data Driven Investor

編輯 | 代碼醫生團隊

近年來,嵌入式系統在AI領域開始普及。因為人工智慧和深度學習革命從軟體領域轉向硬體領域。插件卡上的嵌入式系統,帶有處理器,內存,電源和外部接口。由於嵌入式系統專用於特定任務,因此設計工程師可以對其進行優化,以減小產品的尺寸和成本,並提高可靠性和性能。它們通常用於消費者,烹飪,工業,汽車,醫療,商業和軍事應用中。

 

NVIDIA Jetson TX2

NVIDIA Jetson TX2是該領域最有趣的設備之一。這是第二代NVIDIA嵌入式設備。Jetson TX2是一款嵌入式模塊化系統(SoM),採用雙核NVIDIA Denver2 +四核ARM Cortex-A57,8GB 128位LPDDR4和集成的256核Pascal GPU。Jetson TX2可用於部署計算機視覺和深度學習,可運行Linux,在低於7.5瓦的功率下提供超過1 TFLOPS的FP16計算性能。

 

Jetson的技術規範

在本文中,演示並評估了使用在NVIDIA Jetson TX2上運行的SSD Lite MobileNet V2對象檢測算法執行實時對象檢測的方法。

 

安裝Jetpack

首先,安裝NVIDIA JetPack。NVIDIA JetPack SDK是構建AI應用程式的最全面的解決方案。使用JetPack安裝程序使用最新的作業系統映像刷新Jetson Developer Kit,為主機PC和Developer Kit安裝開發人員工具,並安裝快速啟動開發環境所需的庫和API,示例和文檔。撰寫本文時的最新版本是JetPack 4.1.1。

 

在大多數情況下,安裝很容易。從Ubuntu 16.04或Ubuntu 18.04 PC主機,只需從NVIDIA JetPack 網頁下載JetPack (您必須使用您的開發者帳戶登錄才能下載JetPack)並按照設置指南中的說明進行操作。

https://docs.nvidia.com/jetpack-l4t/2_2/content/developertools/mobile/jetpack/l4t/2.2/jetpack_l4t_install.htm

安裝TensorFlow,TensoRT和OpenCV

TensorFlow是當今最流行的深度學習框架之一。NVIDIA®TensorRT™是一款深度學習平臺,可優化神經網絡模型,加快數據中心,嵌入式和汽車設備中運行的各種GPU加速平臺的推理速度。TensorFlow與TensorRT很好地集成,這似乎很自然,特別是當NVIDIA提供非常適合加速TensorFlow的平臺時。這使得TensorFlow用戶在使用TensorRT時具有極高的推理性能和近乎透明的工作流程。

 

 

將TensorRT添加到TensorFlow推理工作流程涉及一個額外的步驟,如圖3所示。在此步驟(以綠色突出顯示)中,TensorRT根據凍結的TensorFlow圖構建優化的推理圖。

 

在本文中,將使用python 3+讓我們在設備上安裝TensorFlow和TensorRT。可以在Jetson 存儲庫的 NVIDIA TensorFlow / TensorRT模型中找到很好的說明。但首先應該安裝python3-dev和libfreetype6-dev軟體包。它們可以解決matplotlib安裝的一些問題:

https://github.com/NVIDIA-AI-IOT/tf_trt_models

sudo apt-get update 

sudo apt-get upgrade

sudo apt-get install libfreetype6-dev python3-dev

另外,建議安裝最新版本的TensorFlow。

 

安裝TensorRT後,遇到了jupyter示例的問題。由於該示例使用ssd_inception_v2模型嘗試分配大量GPU內存,因此會話運行進程被系統殺死。為解決此問題,將模型從TensorFlow Model ZOO 更改為SSD Lite MobileNet v2 。Model ZOO是Google的預訓練對象檢測模型集合,具有不同級別的處理速度和準確性。

https://github.com/NVIDIA-AI-IOT/tf_trt_models/blob/master/examples/detection/detection.ipynb

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

儘管該模型運行得更快,但它的精確度較低。下載SSDLite-MobileNet模型並解壓縮並在jupyter筆記本中設置模型文件的路徑。

 

Model ZOO

現在構建並安裝openCV。為此更好地使用此存儲庫。但是在安裝之後你應該再做一步。Adrian Rosebrock在他的博客中描述了這一點:

https://github.com/jetsonhacks/buildOpenCVTX2

https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/

OpenCV + Python綁定應該安裝在/usr/local/lib/python3.5/site-packages中。但是在為Python 3+編譯OpenCV 3綁定時要小心,輸出.so文件有時被命名為cv2.cpython-35m-arm-linux-gnueabihf.so(或類似的東西)而不是cv2.so(就像在Python 2.7中一樣)綁定。也許這是CMake腳本中的一個錯誤。如果發生這種情況,只需將文件重命名為cv2.so.

 

這是一個簡單的解決方案。需要做的就是: 

cd /usr/local/lib/python3.5/site-packages/

sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so

運行Tensorflow圖

以下所有代碼均可在GitHub上獲得。

https://github.com/QuantuMobileSoftware/mobile_detector

首先,為對象檢測器定義一個抽象類:

https://github.com/QuantuMobileSoftware/mobile_detector/blob/jetson-tx2/object_detector.py

from abc import ABC, abstractmethod





class ObjectDetector(ABC):

    @abstractmethod

    def detect(self, frame, threshold=0.0):

        Pass

接下來,實現TensorFlow模型的接口,使用來自對象檢測API的代碼。

https://github.com/QuantuMobileSoftware/mobile_detector/blob/jetson-tx2/object_detector_detection_api.py

現在實現jetson板載攝像頭的視頻流功能:

def open_cam_onboard(width, height):

    

    gst_str = ('nvcamerasrc ! '

               'video/x-raw(memory:NVMM), '

               'width=(int)2592, height=(int)1458, '

               'format=(string)I420, framerate=(fraction)30/1 ! '

               'nvvidconv ! '

               'video/x-raw, width=(int){}, height=(int){}, '

               'format=(string)BGRx ! '

               'videoconvert ! appsink').format(width, height)

    return cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)

 

並使用它:

predictor = ObjectDetector(args.graph_path)

cap = open_cam_onboard(640, 480)

while (cap.isOpened()):

  ret, frame = cap.read()

  result = predictor.detect(frame)

 

因此,使用SSD Lite TensorFlow模型,有大約4.2 FPS。

 

SSD MobileNet v2 Lite結果

運行TensorFlow Lite優化圖

TensorFlow Lite是在移動和嵌入式設備上運行機器學習模型的官方解決方案。它可以在Android,iOS等上實現具有低延遲和小二進位大小的設備上機器學習推理.TensorFlow Lite使用許多技術,例如允許更小和更快(定點數學)模型的量化內核。

 

如何使用TensorFlow Lite設置環境和轉換圖形,可以從此處下載lite圖表(detect.tflite)。

https://www.dropbox.com/s/3i1hop5wm61jd5n/mobile_detector.tar.gz

需要創建另一個檢測類來使用優化的圖形。代碼可在此處獲得。

https://github.com/QuantuMobileSoftware/mobile_detector/blob/jetson-tx2/object_detector_detection_api_lite.py

採用TensorFlow Lite優化的SSD Lite模型平均具有4.7 FPS。

 

運行TensorRT優化圖

也可以跳過此部分,因為已經在這裡提供了預先訓練的模型。

(ssdlite_inception_v2_coco_trt.pb)

考慮一個更詳細的例子。

https://www.dropbox.com/s/3i1hop5wm61jd5n/mobile_detector.tar.gz

已經下載了預先訓練的SSD Lite模型。應該建立一個凍結圖:

from tf_trt_models.detection import build_detection_graph



frozen_graph, input_names, output_names = build_detection_graph(

    config=config_path,  

    checkpoint=checkpoint_path,  

    score_threshold=0.3,

    batch_size=1

)

 

接下來,構建TensorRT / Jetson兼容圖並保存:

import tensorflow.contrib.tensorrt as trt



trt_graph = trt.create_inference_graph(

    input_graph_def=frozen_graph,

    outputs=output_names,

    max_batch_size=1,

    max_workspace_size_bytes=1 << 25,

    precision_mode='FP16',

    minimum_segment_size=50

)



with open('./data/ssd_inception_v2_coco_trt.pb', 'wb') as f:

    f.write(trt_graph.SerializeToString())

 

可以像標準的凍結圖一樣使用這個優化的圖形。

 

在TensorRT優化之後,有11.5 FPS

 

TensorRT結果

摘要

測試運行後,得到以下性能結果:

 

模型的比較

如您所見,TensorRT優化幾乎使模型的性能提高了三倍。如果可以批量處理圖像,性能可能會更高。似乎TensorFlow Lite優化對Jetson的影響很小,這可能是因為它沒有針對GPU使用進行優化。TensorRT只有一個騙局:並非所有型號都可以用它進行優化。

 

總而言之,NVIDIA Jetson TX2 + TensorRT是一款相對便宜,緊湊且高效的機器,可用於實時物體檢測。

《深度學習之TensorFlow:入門、原理與進階實戰》和《Python帶我起飛——入門、進階、商業實戰》兩本圖書是代碼醫生團隊精心編著的 AI入門與提高的精品圖書。配套資源豐富:配套視頻、QQ讀者群、實例源碼、 配套論壇:http://bbs.aianaconda.com   。更多請見:aianaconda.com

點擊「閱讀原文」配套圖書資源

相關焦點

  • 再教一招NVIDIA Jetson TX2上的騷操作
    本文將演示如何在NVIDIA嵌入式開發平臺Jetson TX2上運行DeepStream SDK 。注意,我們這次演示的硬體是用Jetson TX2核心板搭配了一塊載板,大家在Jetson TX2開發套件上跑也是沒有問題噠:
  • 對於Jetson TX2新手幾個常見問題
    如何檢測NVIDIA Jetson TX2硬體溫度NVIDIA Jetson TX2到底支持哪些攝像頭?再教一招NVIDIA Jetson TX2上的騷操作看人家用Jetson TK1如何搭集群【用戶經驗分享】推薦一款Jetson TX2支持的網卡教你一個在NVIDIA Jetson開發板上顯示GPU利用率的圖形化工具如何在Jetson TX2上使用串口在Jetson TX2上跑個人臉識別小程序
  • 【用戶經驗分享】NVIDIA Jetson TX2開發板運行 jetson-inference 出現問題的終極解決辦法
    說說的遇到的情況吧,就是git clone  jetson-inference後,執行cmake ../後老是報nvidia.app.box.com連接不上,有的開發者的解決辦法是fan牆 ,然後下載,即使能翻出去,也是運氣好的情況下才能運行,最後不報錯。
  • 在NVIDIA Jetson集群上運行集群管理軟體K3s
    檢測是否安裝完成:docker images* 上述步驟在每個worker節點上執行3. 在 Master上執行下面指令,檢測 agent 安裝:sudo kubectl get nodes再檢測一下節點狀態:sudo kubectl get nodes
  • 如何使用 NVIDIA Jetson 和 Amazon SageMaker 結合打造智能邊緣
    鏡像燒錄參考:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#writeNIVIDA JetPack 可以實現在 Jetson 平臺上快速構建機器學習環境,JetPack 包括系統鏡像、TensorRT、CUDA、各種庫和 API、開發工具
  • 當ROS2遇到NVIDIA Jetson平臺,這些開原始碼你必須要知道的.
    機器人技術中採用了深度學習,以精確地導航室內環境,檢測並跟蹤感興趣的對象並進行機動而不會發生碰撞。
  • 用NVIDIA Jetson TX1構建更好的自動化機器(NV官網學習資源匯總篇)
    http://developer.nvidia.com/embedded/dlc/l4t-24-2-1-jetson-tx1-user-guideL4T Feature Listhttp://developer.nvidia.com/embedded/dlc/l4t-feature-list-24-2-1
  • Jetson-inference的安裝
    2021-01-22   15:56前日給jetson nano安裝jetson-inference
  • 英偉達NVIDIA Jetson Nano 2GB點亮篇
    考試前的最後一篇文章https://developer.download.nvidia.com/assets/embedded/downloads/jetson-nano-2gb-jp441-sd-card-image/jetson-nano-2gb-jp441-sd-card-image.zip?
  • Jetson-Xavier-NX使用教程
    連結:https://pan.baidu.com/s/1IwDlwaYbOmt7qyF2EjY9Zg 提取碼:r2tt下載鏡像:https://developer.nvidia.com/jetson-nx-developer-kit-sd-card-image
  • 乾貨 | NVIDIA Jetson NANO詳解
    Nvidia 在2019 GTC 上發布了 Jetson家族最新成員Nano, 美金報價僅為99美元。這款產品引起了大家的廣泛關注.
  • jetson nano -燒錄系統,從頭配置
    貼網址:系統鏡像地址https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write安裝參考資料http://spotpear.cn/public/index/study/detail/id/172.html
  • 用Jetson NANO做一個防疲勞駕駛的神器
    該系統的功能分為嗜睡檢測,情緒檢測和行車監控(使用Yolov3)模塊。睡意和情感模塊使用OpenCV的Haar Cascades方法進行面部檢測。一旦檢測到駕駛員的面部,這些模塊就會使用內置在PyTorch中並在Jetson Nano上運行的卷積神經網絡來檢測駕駛員的眼睛狀態(張開/閉合)和駕駛員的情緒。
  • 15分鐘連接Jetson Nano與K8S,輕鬆搭建機器學習集群
    你可以訪問Github了解這款工具:https://github.com/alexellis/k3sup一個K3s集群——只需要一個正確配置的主節點即可NVIDIA Jetson Nano開發板,並安裝好開發者套件如果你想了解如何在開發板上安裝開發者套件,你可以查看以下文檔:https://developer.nvidia.com
  • 在NVIDIA Jetson TX2上運行 openpose
    更多教程:NVIDIA Jetson Xavier開發套件揭秘在Jetson TX開發套件上使用QT Creator
  • 介紹一款NVIDIA Jetson實用功率估算工具:PowerEstimator
    PowerEstimator是用於Jetson模塊上系統(SOM)的功率估算工具。它估計平均SOM功耗並為系統配置和要建模的目標工作負載生成nvpmodel配置文件。該工具提供了一組輸入旋鈕,例如時鐘頻率,活動內核數,負載水平和設備運行狀態,用於定義目標工作負載並在將配置應用於目標設備之前獲得功耗估算值。幹什麼用?
  • Jetson Nano 夜用超長評測
    軟體資源基本就是系統一個,Ubuntu 16.04 x64宿主機(包括nvidia-docker並下載有DIGITS.),其他東西基本沒有. 至於其他軟體?你就當他是ARMv8板子跑就是,CPU性能的話,肯定不是值得炫耀的部分,但是也不會差到哪裡,畢竟還要靠CPU打包數據.至於從數據看,是比樹莓派出彩的!
  • 使用Python+Dlib構建人臉識別系統(在Nvidia Jetson Nano 2GB開發板上)
    以下是將Jetson Nano軟體安裝到SD卡上的方法:從Nvidia下載Jetson Nano Developer Kit SD卡映像。https://developer.nvidia.com/embedded/downloads下載Etcher,該程序將Jetson軟體映像寫入SD卡。
  • 全網首發|Jetson Xavier NX 評測,MIIVII Lite NX新品嘗鮮
    由上圖可見,在AI性能上,NX還是相當香的。基本上達到或者超過 Xavier 的2/3,達到了官方宣稱的水平。而且上圖沒有使用超(bian)常(tai)的 128batch,而是正常人類都會使用的 1batch。但是否 NX 就只有這點香呢?並不是!還有DLA。當然,DLA目前仍然存在著非常多的問題,稱之為雞肋毫不為過。