資料介紹
例如,未來的城市,也被稱為智慧城市,應(yīng)該部署攝像頭網(wǎng)絡(luò)來提供監(jiān)控以防止犯罪、有效管理交通并減少能源使用。其工作原理基于多層神經(jīng)網(wǎng)絡(luò),使用無限數(shù)據(jù)集進行訓練。然而,訓練深度學習網(wǎng)絡(luò)是一項計算密集型任務(wù),需要并行執(zhí)行許多矩陣乘法運算。因此,許多最先進的商用單板計算機不是執(zhí)行上述任務(wù)的合適硬件平臺,因為它們是單線程性能優(yōu)化架構(gòu)。隨著開發(fā)人員套件的到來,例如 NVIDIA 的 Jetson Nano,專門用于運行人工智能工作負載,
?
在這個項目中,我們將注意力集中在計算機視覺中的一個突出主題:行人分析。我們根據(jù)人們行為分析可以為地方當局提供的不同用例做出這一選擇,以定制該技術(shù)可能定位的當?shù)厝丝诘男枨蟆?/font>例如,我們設(shè)想以下應(yīng)用程序:
- 統(tǒng)計出入地鐵或公交車站的人數(shù),以規(guī)范行人交通。
- 統(tǒng)計在商店櫥窗里看文章的人數(shù),以建立一定數(shù)量的潛在客戶。
使用深度學習算法計算人數(shù)絕非易事,因為在訓練神經(jīng)網(wǎng)絡(luò)時需要考慮許多參數(shù)。例如,捕獲相機所在的高度會擾亂快照的質(zhì)量,從而給圖片引入噪點,從而更難跟蹤照片場景中的每個行人。因此,訓練階段可能意味著進一步的步驟來識別圖像的屬性。
解決方案
為了克服這些挑戰(zhàn),我們提出了一種基于 NVIDIA Jetson Nano 的解決方案來計算從攝像機前經(jīng)過的人數(shù)。我們算法的工作原理基于以下任務(wù):
- 以高捕捉率捕捉圖像。
- 不同幀率下的人物檢測。
- 跟蹤每個檢測到的人以在下一個數(shù)據(jù)幀中關(guān)聯(lián)。
- 通過在每個快照上區(qū)分個體來對個體進行計數(shù)。
除了人數(shù)統(tǒng)計算法外,還開發(fā)了一個基于網(wǎng)絡(luò)的應(yīng)用程序,以使用用戶選擇的各種參數(shù)來監(jiān)控跟蹤和統(tǒng)計結(jié)果。
項目計劃
這個項目使用了一個攝像頭,可以從街道上無縫捕捉圖像,并將它們傳輸?shù)?NVIDIA 的 Jetson Nano 進行進一步處理。除了圖像處理之外,Jetson Nano 還托管一個基于 Web 的應(yīng)用程序,連接到托管該應(yīng)用程序的互聯(lián)網(wǎng)的所有設(shè)備都可以訪問該應(yīng)用程序。這個項目需要一個攝像頭從街道上捕捉圖像并將它們傳輸?shù)?Jetson Nano 以處理信息。
硬件
本節(jié)列出了開發(fā)該項目所需的硬件組件:
- Jetson Nano 開發(fā)者套件
- Jetson Nano Waveshare 金屬外殼(B 型)
- IMX219 傳感器 160 度 8MP 網(wǎng)絡(luò)攝像頭
- 無線網(wǎng)卡AC8265
- 微型SD卡
您可以在此處找到在 Waveshare 金屬外殼中組裝 Jetson Nano 的說明。
執(zhí)行
NVIDIA 的 Jetson Nano 附帶一個軟件開發(fā)工具包,稱為 Jetpack 4.3.1,它是 GNU/Linux Ubuntu 操作系統(tǒng)的變體,用于構(gòu)建人工智能應(yīng)用程序。此 SDK 的安裝說明可在以下鏈接中找到。
該應(yīng)用程序有 2 個主要組件:
- 一個 python 編寫的后端應(yīng)用程序。
- 基于 Angular 8 框架的 typescript 編寫的前端應(yīng)用程序。
后端應(yīng)用程序執(zhí)行以下任務(wù):
- 從相機源捕獲幀。
- 加載對象檢測算法。
- 在每一幀上運行推理。
- 過濾圖像圖像。
- 通過 API 公開結(jié)果。
前端應(yīng)用程序改為使用后端的 API 來呈現(xiàn)結(jié)果并處理捕獲的數(shù)據(jù)。在以下部分中,將詳細介紹后端和前端應(yīng)用程序,重點介紹其每個組件。讀者可以在本文末尾找到完整的源代碼。
后端 - 捕獲信息
將攝像頭捕獲的數(shù)據(jù)提取到 NVIDIA 的 Jetson Nano 中的最快方法是使用 gstream-lib 庫,該庫從插入的 CSI 攝像頭的流源中設(shè)置。OpenCV 的 VideoCapture 函數(shù)通過從設(shè)備內(nèi)存中的指定緩沖區(qū)獲取圖像數(shù)據(jù)來讀取流式源。
后端 - 對象檢測
對象檢測 API 基于構(gòu)建在 TensorRT 之上的檢測框架,可簡化 Mobilenet SSD 模型的加載。在初始化期間,NVIDIA 的 Jetson Nano 使用 PyCUDA python 庫來訪問 CUDA 的并行計算 API。同時,它創(chuàng)建了一個流屬性,可以在 Jetson Nano 的內(nèi)存中獲取拍攝的圖像,以使用深度學習訓練的模型執(zhí)行推理操作。
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)
在推理結(jié)束時,根據(jù)檢測目的,基于置信概率閾值做出對象檢測決策。SSD MobileNet 模型在 Coco 數(shù)據(jù)集上獲取神經(jīng)網(wǎng)絡(luò)的預訓練權(quán)重,產(chǎn)生 80 個輸出類。對于行人分析,引入了一個名為“Person”的類來收集檢測算法執(zhí)行期間使用的所有屬性。
檢測模型的驗證是通過樣本圖像在模塊中完成的,這使我們能夠毫不費力地交換被測模型。隨后,我們使用 Github 的 Actions 來評估每個模型的性能,避免在引入修改時出現(xiàn)故障。用戶可以使用 Pytest 框架訪問目錄“Test”中的模型評估。
后端 - 對象跟蹤
當人在圖像中可見時,對象定位模塊會繪制一個邊界框。對象跟蹤算法連接到對象定位模塊的輸出,以確定何時有人進入快照場景,量化在捕獲攝像機前經(jīng)過的人數(shù)。兩種算法都使用稱為“t”的時間度量來存儲與邊界框質(zhì)心相關(guān)的信息。在下一個時間間隔“t+1”中,它使用以下參數(shù)關(guān)聯(lián)兩個檢測到的質(zhì)心:
- 最近的幀被認為是同一個對象。
- 當存儲在內(nèi)存中的前一幀和當前幀不匹配時,一個離開的對象被認為是“消失的”。
- 當沒有檢測到對象的先前幀時,對象被認為是“新的”。
- 考慮到質(zhì)心在先前幀中的位置,計算質(zhì)心之間的距離。
該算法的魯棒性依賴于在保持與先前幀的質(zhì)心位置相關(guān)的信息的基礎(chǔ)上跟蹤快照場景中多個對象的準確性。有關(guān)實現(xiàn)算法的更多詳細信息,請參閱 pyimagesearch 的博客。
后端 - Flask 應(yīng)用程序
后端 API 構(gòu)建在 Flask Web 應(yīng)用程序框架之上,它將 URL 路由鏈接到 Python 函數(shù)。本項目應(yīng)用的主要路線有:
- ”/” 和 “/” 渲染來自靜態(tài)前端應(yīng)用程序的 html、css 和 js 文件。
- “/imgs/” 以 jpg 字節(jié)發(fā)送圖像
- “/api/delete”刪除本地圖片
- “/api/single_image” 從相機捕獲圖像,如果需要運行對象檢測算法,然后將其發(fā)送到前端。
- “/api/images”根據(jù)日期、時間和檢測到的對象類型等輸入過濾器發(fā)送圖像列表。
- “/api/list_files” 用于計算每種過濾器的圖像數(shù)量,例如日期、時間和檢測到的對象類型。
前端
開發(fā)了一個基于 Angular 8 的 Web 應(yīng)用程序來執(zhí)行一些處理操作并直接從圖像中提取信息。這個基于 Web 的應(yīng)用程序通過 API 與后端應(yīng)用程序交互,可以在沒有主要限制的情況下加載保存的圖像。
用戶可以通過四個按鈕與 Web 應(yīng)用程序交互:
- 實時捕獲模式用于動態(tài)修改每秒幀數(shù),并執(zhí)行對象檢測和跟蹤算法。
- 統(tǒng)計模式通過 ChartJS 圖表即時查看快照的統(tǒng)計數(shù)據(jù)。此外,它還提供了以馬賽克模式可視化照片的選項。
- Celery 任務(wù)模式可視化在處理階段執(zhí)行的循環(huán)異步任務(wù)。
- 按日期過濾馬賽克照片的數(shù)據(jù)選擇器。
?
結(jié)果
在許多深度學習用例中,算法的推理階段是在邊緣設(shè)備上完成的,而神經(jīng)網(wǎng)絡(luò)的訓練階段是在云端完成的。我們在三種不同的硬件架構(gòu)上測試了對象檢測應(yīng)用程序的推理階段:x86、ARM 和 Maxwell GPU。廣泛使用的 Intel 和 AMD 處理器中的 x86 架構(gòu)簡化了深度學習算法的開發(fā),因為許多庫可用于執(zhí)行對象檢測任務(wù)。然而,由于嚴格的功耗限制,這種架構(gòu)不適合物聯(lián)網(wǎng)設(shè)備。另一方面,Raspberry Pi 內(nèi)置的 ARM 處理器在實時檢測階段和干擾階段都沒有提供良好的性能。除了被其他架構(gòu)超越之外,Raspberry Pi 的 ARM 內(nèi)核需要持續(xù)冷卻,以避免在神經(jīng)網(wǎng)絡(luò)訓練期間發(fā)生節(jié)流。最后,集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構(gòu)建的對象檢測算法由于其被動冷卻可以在很長一段時間內(nèi)平穩(wěn)執(zhí)行系統(tǒng)和一個附加的外部風扇。一個突出的事實是,與 x86 架構(gòu)相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構(gòu)在訓練和推理階段的延遲結(jié)果:集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構(gòu)建的對象檢測算法由于其被動冷卻系統(tǒng)可以在很長一段時間內(nèi)平穩(wěn)執(zhí)行,并且一個附加的外部風扇。一個突出的事實是,與 x86 架構(gòu)相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構(gòu)在訓練和推理階段的延遲結(jié)果:集成在 NVIDIA 的 Jetson Nano 上的 Maxwell GPU 在性能和功耗之間提供了良好的平衡,因為基于 Tensor RT 框架構(gòu)建的對象檢測算法由于其被動冷卻系統(tǒng)可以在很長一段時間內(nèi)平穩(wěn)執(zhí)行,并且一個附加的外部風扇。一個突出的事實是,與 x86 架構(gòu)相比,我們在 SSD Mobilenet 模型的推理階段獲得了更好的性能。下表顯示了每個架構(gòu)在訓練和推理階段的延遲結(jié)果:
對象跟蹤是使用 Celery 任務(wù)管理器執(zhí)行的。通過基于 Web 的應(yīng)用程序內(nèi)置的按鈕,可以啟動對象跟蹤任務(wù),檢查后臺運行的其他進程。
最后但并非最不重要的一點是,用于驗證對象檢測和跟蹤的場景是辦公室內(nèi)的走廊,在正常工作日期間有 130 人經(jīng)過。在下面的捕獲編譯中,讀者可以觀察到我們實現(xiàn)的結(jié)果。
結(jié)論
在這個項目的制定和部署過程中,我們了解了 NVIDIA 的 Jetson Nano 提供的許多優(yōu)勢,可以執(zhí)行應(yīng)用于真實場景中的對象檢測和跟蹤的深度學習任務(wù)。該設(shè)備成功地在長時間內(nèi)識別和跟蹤人員,而不會達到失控的內(nèi)部溫度。此外,它的小尺寸因素使其成為物聯(lián)網(wǎng)應(yīng)用的理想選擇,因為它有助于在偏遠或危險區(qū)域進行安裝。
我們通過將神經(jīng)網(wǎng)絡(luò)的訓練階段卸載到服務(wù)器上,在邊緣設(shè)備上維護推理階段來展示邊緣計算的概念。為了利用云上的計算,我們將數(shù)據(jù)從其來源(在本例中為 CSI 攝像機)移動到外部處理單元,克服了這種遷移的隱性挑戰(zhàn),例如延遲、可擴展性、隱私和動態(tài)網(wǎng)絡(luò)內(nèi)部的協(xié)調(diào)條件。
總之,我們的檢測和跟蹤深度學習算法的實施有效地解決了辦公室場景的動態(tài)行為,而不會被大量的物體所淹沒,在這種情況下,人們在一個普通的工作日出現(xiàn)。基于網(wǎng)絡(luò)的應(yīng)用程序通過引入簡單的圖像過濾器實現(xiàn)了進一步的圖像處理。
最后,我們想強調(diào)的是,這只是深度學習算法的眾多用例之一,在 NVIDIA 的 Jetson Nano 等強大平臺上實施,可以提供解決社會日常問題的方法。通過添加更好的捕獲設(shè)備、實施新的檢測解決方案,或者在將數(shù)據(jù)遷移到云中的集中位置期間簡單地建立新的漏洞條件,可以利用這項工作的許多擴展。
- 使用Azure和Nvidia Jetson的智能閉路電視
- 使用Jetson Nano構(gòu)建人臉識別系統(tǒng)
- 基于Jetson NANO的助手機器人
- CUDA與Jetson Nano:并行Pollard Rho測試
- 使用Jetson Nano的CSI相機接口
- Nvidia Jetson Nano面罩Yolov4探測器
- NVIDIA Jetson開發(fā)者工具包 0次下載
- 玩轉(zhuǎn)智能硬件(一)Jetson Nano安裝篇
- 玩轉(zhuǎn)智能硬件(二)Jetson Nano配置篇
- 玩轉(zhuǎn)智能硬件(三)Jetson Nano深度學習環(huán)境搭建
- NVIDIA Jetson Nano 2GB 系列文章(1):開箱介紹
- 【從零開始學深度學習編譯器】番外二,在Jetson Nano上玩TVM
- NVIDIA Jetson Nano 電源適配器 (供電)
- YOLO v4在jetson nano的安裝及測試
- NVIDIA Jetson TX2顯存的數(shù)據(jù)手冊免費下載 22次下載
- 使用NVIDIA JetPack 6.0和YOLOv8構(gòu)建智能交通應(yīng)用 243次閱讀
- NVIDIA Jetson Orin Nano開發(fā)套件 961次閱讀
- 英偉達Jetson設(shè)備上的YOLOv8性能基準測試 5550次閱讀
- 簡單易學的Jetson Nano問題排除小秘訣 7867次閱讀
- 使用NVIDIA Jetson Orin Nano解決入門級邊緣人工智能挑戰(zhàn) 2175次閱讀
- 將Jetson AGX Orin開發(fā)者套件轉(zhuǎn)化為任何Jetson Orin模塊 1762次閱讀
- DeepStream Samples版的操作環(huán)境調(diào)試過程 1339次閱讀
- 采用NVIDIA Jetson助力視頻數(shù)據(jù)低時延傳輸,提高智能分析標準 3070次閱讀
- 微雪電子人工智能開發(fā)套件AI計算機介紹 903次閱讀
- 微雪電子 IMX219-77攝像頭介紹 3323次閱讀
- 微雪電子 IMX219-160攝像頭介紹 3244次閱讀
- 微雪電子攝像頭 IMX219-200介紹 5667次閱讀
- 微雪電子 人工智能開發(fā)套件 AI計算機介紹 1687次閱讀
- 微雪電子NVIDIA Jetson Nano人工智能開發(fā)套件AI板介紹 5400次閱讀
- 用Jetson Nano打造您的專屬機器人 1.1w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 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開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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次下載 | 免費
評論
查看更多