資料介紹
例如,未來的城市,也被稱為智慧城市,應該部署攝像頭網絡來提供監控以防止犯罪、有效管理交通并減少能源使用。其工作原理基于多層神經網絡,使用無限數據集進行訓練。然而,訓練深度學習網絡是一項計算密集型任務,需要并行執行許多矩陣乘法運算。因此,許多最先進的商用單板計算機不是執行上述任務的合適硬件平臺,因為它們是單線程性能優化架構。隨著開發人員套件的到來,例如 NVIDIA 的 Jetson Nano,專門用于運行人工智能工作負載,
?
在這個項目中,我們將注意力集中在計算機視覺中的一個突出主題:行人分析。我們根據人們行為分析可以為地方當局提供的不同用例做出這一選擇,以定制該技術可能定位的當地人口的需求。例如,我們設想以下應用程序:
- 統計出入地鐵或公交車站的人數,以規范行人交通。
- 統計在商店櫥窗里看文章的人數,以建立一定數量的潛在客戶。
使用深度學習算法計算人數絕非易事,因為在訓練神經網絡時需要考慮許多參數。例如,捕獲相機所在的高度會擾亂快照的質量,從而給圖片引入噪點,從而更難跟蹤照片場景中的每個行人。因此,訓練階段可能意味著進一步的步驟來識別圖像的屬性。
解決方案
為了克服這些挑戰,我們提出了一種基于 NVIDIA Jetson Nano 的解決方案來計算從攝像機前經過的人數。我們算法的工作原理基于以下任務:
- 以高捕捉率捕捉圖像。
- 不同幀率下的人物檢測。
- 跟蹤每個檢測到的人以在下一個數據幀中關聯。
- 通過在每個快照上區分個體來對個體進行計數。
除了人數統計算法外,還開發了一個基于網絡的應用程序,以使用用戶選擇的各種參數來監控跟蹤和統計結果。
項目計劃
這個項目使用了一個攝像頭,可以從街道上無縫捕捉圖像,并將它們傳輸到 NVIDIA 的 Jetson Nano 進行進一步處理。除了圖像處理之外,Jetson Nano 還托管一個基于 Web 的應用程序,連接到托管該應用程序的互聯網的所有設備都可以訪問該應用程序。這個項目需要一個攝像頭從街道上捕捉圖像并將它們傳輸到 Jetson Nano 以處理信息。
硬件
本節列出了開發該項目所需的硬件組件:
您可以在此處找到在 Waveshare 金屬外殼中組裝 Jetson Nano 的說明。
執行
NVIDIA 的 Jetson Nano 附帶一個軟件開發工具包,稱為 Jetpack 4.3.1,它是 GNU/Linux Ubuntu 操作系統的變體,用于構建人工智能應用程序。此 SDK 的安裝說明可在以下鏈接中找到。
該應用程序有 2 個主要組件:
- 一個 python 編寫的后端應用程序。
- 基于 Angular 8 框架的 typescript 編寫的前端應用程序。
后端應用程序執行以下任務:
- 從相機源捕獲幀。
- 加載對象檢測算法。
- 在每一幀上運行推理。
- 過濾圖像圖像。
- 通過 API 公開結果。
前端應用程序改為使用后端的 API 來呈現結果并處理捕獲的數據。在以下部分中,將詳細介紹后端和前端應用程序,重點介紹其每個組件。讀者可以在本文末尾找到完整的源代碼。
后端 - 捕獲信息
將攝像頭捕獲的數據提取到 NVIDIA 的 Jetson Nano 中的最快方法是使用 gstream-lib 庫,該庫從插入的 CSI 攝像頭的流源中設置。OpenCV 的 VideoCapture 函數通過從設備內存中的指定緩沖區獲取圖像數據來讀取流式源。
后端 - 對象檢測
對象檢測 API 基于構建在 TensorRT 之上的檢測框架,可簡化 Mobilenet SSD 模型的加載。在初始化期間,NVIDIA 的 Jetson Nano 使用 PyCUDA python 庫來訪問 CUDA 的并行計算 API。同時,它創建了一個流屬性,可以在 Jetson Nano 的內存中獲取拍攝的圖像,以使用深度學習訓練的模型執行推理操作。
class TrtSSD(object):
""" TensorRT SSD mobilenet implementation """
def _load_plugins(self):
ctypes.CDLL("models/ssd_mobilenet/libflattenconcat.so")
trt.init_libnvinfer_plugins(self.trt_logger, '')
def _load_engine(self):
TRTbin = 'models/ssd_mobilenet/TRT_%s.bin' % self.model
with open(TRTbin, 'rb') as f, trt.Runtime(self.trt_logger) as runtime:
return runtime.deserialize_cuda_engine(f.read())
def _create_context(self):
for binding in self.engine:
size = trt.volume(self.engine.get_binding_shape(binding)) * \
self.engine.max_batch_size
host_mem = cuda.pagelocked_empty(size, np.float32)
cuda_mem = cuda.mem_alloc(host_mem.nbytes)
self.bindings.append(int(cuda_mem))
if self.engine.binding_is_input(binding):
self.host_inputs.append(host_mem)
self.cuda_inputs.append(cuda_mem)
else:
self.host_outputs.append(host_mem)
self.cuda_outputs.append(cuda_mem)
return self.engine.create_execution_context()
def __init__(self, model, input_shape, output_layout=7):
"""Initialize TensorRT plugins, engine and conetxt."""
self.model = model
self.input_shape = input_shape
self.output_layout = output_layout
self.trt_logger = trt.Logger(trt.Logger.INFO)
self._load_plugins()
self.engine = self._load_engine()
self.host_inputs = []
self.cuda_inputs = []
self.host_outputs = []
self.cuda_outputs = []
self.bindings = []
self.stream = cuda.Stream()
self.context = self._create_context()
def __del__(self):
"""Free CUDA memories."""
del self.stream
del self.cuda_outputs
del self.cuda_inputs
def detect(self, img, conf_th=0.3, conf_class=[]):
"""Detect objects in the input image."""
img_resized = _preprocess_trt(img, self.input_shape)
np.copyto(self.host_inputs[0], img_resized.ravel())
cuda.memcpy_htod_async(
self.cuda_inputs[0], self.host_inputs[0], self.stream)
self.context.execute_async(
batch_size=1,
bindings=self.bindings,
stream_handle=self.stream.handle)
cuda.memcpy_dtoh_async(
self.host_outputs[1], self.cuda_outputs[1], self.stream)
cuda.memcpy_dtoh_async(
self.host_outputs[0], self.cuda_outputs[0], self.stream)
self.stream.synchronize()
output = self.host_outputs[0]
return _postprocess_trt(img, output, conf_th, self.output_layout, conf_class)
在推理結束時,根據檢測目的,基于置信概率閾值做出對象檢測決策。SSD MobileNet 模型在 Coco 數據集上獲取神經網絡的預訓練權重,產生 80 個輸出類。對于行人分析,引入了一個名為“Person”的類來收集檢測算法執行期間使用的所有屬性。
檢測模型的驗證是通過樣本圖像在模塊中完成的,這使我們能夠毫不費力地交換被測模型。隨后,我們使用 Github 的 Actions 來評估每個模型的性能,避免在引入修改時出現故障。用戶可以使用 Pytest 框架訪問目錄“Test”中的模型評估。
后端 - 對象跟蹤
當人在圖像中可見時,對象定位模塊會繪制一個邊界框。對象跟蹤算法連接到對象定位模塊的輸出,以確定何時有人進入快照場景,量化在捕獲攝像機前經過的人數。兩種算法都使用稱為“t”的時間度量來存儲與邊界框質心相關的信息。在下一個時間間隔“t+1”中,它使用以下參數關聯兩個檢測到的質心:
- 最近的幀被認為是同一個對象。
- 當存儲在內存中的前一幀和當前幀不匹配時,一個離開的對象被認為是“消失的”。
- 當沒有檢測到對象的先前幀時,對象被認為是“新的”。
- 考慮到質心在先前幀中的位置,計算質心之間的距離。
該算法的魯棒性依賴于在保持與先前幀的質心位置相關的信息的基礎上跟蹤快照場景中多個對象的準確性。有關實現算法的更多詳細信息,請參閱 pyimagesearch 的博客。
后端 - Flask 應用程序
后端 API 構建在 Flask Web 應用程序框架之上,它將 URL 路由鏈接到 Python 函數。本項目應用的主要路線有:
- ”/” 和 “/” 渲染來自靜態前端應用程序的 html、css 和 js 文件。
- “/imgs/” 以 jpg 字節發送圖像
- “/api/delete”刪除本地圖片
- “/api/single_image” 從相機捕獲圖像,如果需要運行對象檢測算法,然后將其發送到前端。
- “/api/images”根據日期、時間和檢測到的對象類型等輸入過濾器發送圖像列表。
- “/api/list_files” 用于計算每種過濾器的圖像數量,例如日期、時間和檢測到的對象類型。
前端
開發了一個基于 Angular 8 的 Web 應用程序來執行一些處理操作并直接從圖像中提取信息。這個基于 Web 的應用程序通過 API 與后端應用程序交互,可以在沒有主要限制的情況下加載保存的圖像。
用戶可以通過四個按鈕與 Web 應用程序交互:
- 實時捕獲模式用于動態修改每秒幀數,并執行對象檢測和跟蹤算法。
- 統計模式通過 ChartJS 圖表即時查看快照的統計數據。此外,它還提供了以馬賽克模式可視化照片的選項。
- Celery 任務模式可視化在處理階段執行的循環異步任務。
- 按日期過濾馬賽克照片的數據選擇器。
?
結果
在許多深度學習用例中,算法的推理階段是在邊緣設備上完成的,而神經網絡的訓練階段是在云端完成的。我們在三種不同的硬件架構上測試了對象檢測應用程序的推理階段:x86、ARM 和 Maxwell GPU。廣泛使用的 Intel 和 AMD 處理器中的 x86 架構簡化了深度學習算法的開發,因為許多庫可用于執行對象檢測任務。然而,由于嚴格的功耗限制,這種架構不適合物聯網設備。另一方面,Raspberry Pi 內置的 ARM 處理器在實時檢測階段和干擾階段都沒有提供良好的性能。除了被其他架構超越之外,Raspberry Pi 的 ARM 內核需要持續冷卻,以避免在神經網絡訓練期間發生節流。最后,集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構建的對象檢測算法由于其被動冷卻可以在很長一段時間內平穩執行系統和一個附加的外部風扇。一個突出的事實是,與 x86 架構相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構在訓練和推理階段的延遲結果:集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構建的對象檢測算法由于其被動冷卻系統可以在很長一段時間內平穩執行,并且一個附加的外部風扇。一個突出的事實是,與 x86 架構相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構在訓練和推理階段的延遲結果:集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構建的對象檢測算法由于其被動冷卻系統可以在很長一段時間內平穩執行,并且一個附加的外部風扇。一個突出的事實是,與 x86 架構相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構在訓練和推理階段的延遲結果:
對象跟蹤是使用 Celery 任務管理器執行的。通過基于 Web 的應用程序內置的按鈕,可以啟動對象跟蹤任務,檢查后臺運行的其他進程。
最后但并非最不重要的一點是,用于驗證對象檢測和跟蹤的場景是辦公室內的走廊,在正常工作日期間有 130 人經過。在下面的捕獲編譯中,讀者可以觀察到我們實現的結果。
結論
在這個項目的制定和部署過程中,我們了解了 NVIDIA 的 Jetson Nano 提供的許多優勢,可以執行應用于真實場景中的對象檢測和跟蹤的深度學習任務。該設備成功地在長時間內識別和跟蹤人員,而不會達到失控的內部溫度。此外,它的小尺寸因素使其成為物聯網應用的理想選擇,因為它有助于在偏遠或危險區域進行安裝。
我們通過將神經網絡的訓練階段卸載到服務器上,在邊緣設備上維護推理階段來展示邊緣計算的概念。為了利用云上的計算,我們將數據從其來源(在本例中為 CSI 攝像機)移動到外部處理單元,克服了這種遷移的隱性挑戰,例如延遲、可擴展性、隱私和動態網絡內部的協調條件。
總之,我們的檢測和跟蹤深度學習算法的實施有效地解決了辦公室場景的動態行為,而不會被大量的物體所淹沒,在這種情況下,人們在一個普通的工作日出現。基于網絡的應用程序通過引入簡單的圖像過濾器實現了進一步的圖像處理。
最后,我們想強調的是,這只是深度學習算法的眾多用例之一,在 NVIDIA 的 Jetson Nano 等強大平臺上實施,可以提供解決社會日常問題的方法。通過添加更好的捕獲設備、實施新的檢測解決方案,或者在將數據遷移到云中的集中位置期間簡單地建立新的漏洞條件,可以利用這項工作的許多擴展。
- 使用Azure和Nvidia Jetson的智能閉路電視
- 使用Jetson Nano構建人臉識別系統
- 基于Jetson NANO的助手機器人
- CUDA與Jetson Nano:并行Pollard Rho測試
- 使用Jetson Nano的CSI相機接口
- Nvidia Jetson Nano面罩Yolov4探測器
- NVIDIA Jetson開發者工具包 0次下載
- 玩轉智能硬件(一)Jetson Nano安裝篇
- 玩轉智能硬件(二)Jetson Nano配置篇
- 玩轉智能硬件(三)Jetson Nano深度學習環境搭建
- NVIDIA Jetson Nano 2GB 系列文章(1):開箱介紹
- 【從零開始學深度學習編譯器】番外二,在Jetson Nano上玩TVM
- NVIDIA Jetson Nano 電源適配器 (供電)
- YOLO v4在jetson nano的安裝及測試
- NVIDIA Jetson TX2顯存的數據手冊免費下載 22次下載
- 使用NVIDIA JetPack 6.0和YOLOv8構建智能交通應用 243次閱讀
- NVIDIA Jetson Orin Nano開發套件 961次閱讀
- 英偉達Jetson設備上的YOLOv8性能基準測試 5550次閱讀
- 簡單易學的Jetson Nano問題排除小秘訣 7867次閱讀
- 使用NVIDIA Jetson Orin Nano解決入門級邊緣人工智能挑戰 2175次閱讀
- 將Jetson AGX Orin開發者套件轉化為任何Jetson Orin模塊 1762次閱讀
- DeepStream Samples版的操作環境調試過程 1339次閱讀
- 采用NVIDIA Jetson助力視頻數據低時延傳輸,提高智能分析標準 3070次閱讀
- 微雪電子人工智能開發套件AI計算機介紹 903次閱讀
- 微雪電子 IMX219-77攝像頭介紹 3323次閱讀
- 微雪電子 IMX219-160攝像頭介紹 3244次閱讀
- 微雪電子攝像頭 IMX219-200介紹 5667次閱讀
- 微雪電子 人工智能開發套件 AI計算機介紹 1687次閱讀
- 微雪電子NVIDIA Jetson Nano人工智能開發套件AI板介紹 5400次閱讀
- 用Jetson Nano打造您的專屬機器人 1.1w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多