在云中提供大規(guī)模的計(jì)算機(jī)視覺(jué)是一項(xiàng)復(fù)雜的任務(wù)。 Fyma ,一家計(jì)算機(jī)視覺(jué)公司,正借助于 NVIDIA DeepStream 。
作為一家相對(duì)較新的公司, Fyma 將視頻轉(zhuǎn)換為數(shù)據(jù)——更具體地說(shuō),是物理空間中的運(yùn)動(dòng)數(shù)據(jù)。 Fyma 平臺(tái)每天全天使用客戶的實(shí)時(shí)視頻流,并生成移動(dòng)事件(例如,有人穿過(guò)門(mén)口或商店過(guò)道)。
他們?cè)缙趯W(xué)到的一個(gè)教訓(xùn)是,他們的視頻處理管道必須簡(jiǎn)單、可擴(kuò)展,同時(shí)具備良好的性能。由于發(fā)展資源有限,一開(kāi)始它們只能擁有這三種資源中的一種。 NVIDIA DeepStream 最近通過(guò)縮短開(kāi)發(fā)時(shí)間、提高性能和提供優(yōu)秀的軟件組件(如 GStreamer ),解鎖了同時(shí)擁有這三種功能的能力。
直播視頻流的挑戰(zhàn)
Fyma 專注于消費(fèi)實(shí)時(shí)視頻流,以簡(jiǎn)化其客戶的實(shí)施??蛻艨赡軙?huì)猶豫是否在其場(chǎng)所安裝傳感器或任何其他硬件,因?yàn)樗麄円呀?jīng)投資了安全攝像頭。由于這些攝像機(jī)可以在任何地方, Fyma 可以提供不同的對(duì)象檢測(cè)模型,以在不同的環(huán)境中最大限度地提高精度。
消費(fèi)實(shí)時(shí)視頻流在多個(gè)方面具有挑戰(zhàn)性:
攝像機(jī)有時(shí)會(huì)產(chǎn)生損壞的視頻(呈現(xiàn)/解碼時(shí)間戳跳躍,報(bào)告的幀率錯(cuò)誤)
網(wǎng)絡(luò)問(wèn)題導(dǎo)致視頻流凍結(jié)、結(jié)巴、跳轉(zhuǎn)或脫機(jī)
CPU /內(nèi)存負(fù)載分配和規(guī)劃并不簡(jiǎn)單
實(shí)時(shí)視頻流是無(wú)限的
實(shí)時(shí)視頻流的無(wú)限性意味著 Fyma 的平臺(tái)必須至少以幀到達(dá)的速度執(zhí)行計(jì)算機(jī)視覺(jué)?;旧?,整個(gè)管道必須實(shí)時(shí)工作。否則,幀將無(wú)休止地累積。
幸運(yùn)的是,在過(guò)去幾年中,目標(biāo)檢測(cè)在速度和準(zhǔn)確性方面穩(wěn)步提高。這意味著每秒可以從 1000 多張圖像中檢測(cè)到物體,而地圖的比例超過(guò) 90% 。這些進(jìn)步使 Fyma 能夠以合理的價(jià)格向客戶提供大規(guī)模的計(jì)算機(jī)視覺(jué)。
使用計(jì)算機(jī)視覺(jué)(特別是實(shí)時(shí))提供物理空間分析涉及的不僅僅是對(duì)象檢測(cè)。據(jù) Fyma 軟件開(kāi)發(fā)主管 Kaarel Kivistik 稱,“要真正從這些對(duì)象中提取一些東西,我們需要在幀之間跟蹤它們,并使用某種組件來(lái)分析其行為??紤]到每個(gè)客戶都可以選擇自己的模型,建立自己的分析,并根據(jù)收集的數(shù)據(jù)生成報(bào)告,一個(gè)簡(jiǎn)單的視頻處理管道就成了一個(gè)巨大的平臺(tái)。”
版本 1 :你好,世界
Fyma 從將 OpenCV 和 ffmpeg 耦合到一個(gè)非常簡(jiǎn)單的 Python 應(yīng)用程序開(kāi)始。除了他們的神經(jīng)網(wǎng)絡(luò),沒(méi)有任何硬件加速。當(dāng)時(shí)他們正在使用 Yolo v3 和 Darknet 。盡管使用了 AWS g4dn ,但性能很差,約為每秒 50-60 幀。具有 NVIDIA Tesla T4 GPU (他們繼續(xù)使用)的 xlarge 實(shí)例。應(yīng)用程序的功能如下:
用于捕獲視頻的 OpenCV
具有 Python 綁定以檢測(cè)對(duì)象的暗網(wǎng)
自制基于 IoU 的多目標(biāo)跟蹤器
雖然實(shí)現(xiàn)相當(dāng)簡(jiǎn)單,但不足以擴(kuò)展。表現(xiàn)不佳的原因有三個(gè):
軟件視頻解碼
在進(jìn)程之間和 CPU / GPU 內(nèi)存之間復(fù)制解碼視頻幀
軟件對(duì)輸出進(jìn)行編碼,同時(shí)在其上繪制檢測(cè)結(jié)果
他們通過(guò)硬件視頻解碼和編碼來(lái)改進(jìn)第一個(gè)版本。當(dāng)時(shí),這并沒(méi)有使整體速度提高多少,因?yàn)樗麄內(nèi)匀粚⒔獯a幀從 GPU 復(fù)制到 CPU 內(nèi)存,然后再?gòu)?fù)制回[Z1K]內(nèi)存。
版本 2 :自定義 ffmpeg 編碼器
在速度方面真正的突破來(lái)自自定義 ffmpeg 編碼器,它基本上是一個(gè)圍繞暗網(wǎng)的包裝器,將視頻幀轉(zhuǎn)換為檢測(cè)對(duì)象。幀速率增加了十倍,因?yàn)樗鼈儸F(xiàn)在在硬件上解碼,而不需要在主機(jī)和設(shè)備內(nèi)存之間復(fù)制視頻幀。
但是幀速率的增加意味著他們的部分應(yīng)用程序現(xiàn)在是用 C 語(yǔ)言編寫(xiě)的,并且由于 ffmpeg 的高度復(fù)雜的構(gòu)建系統(tǒng)而增加了復(fù)雜性。盡管如此,他們的新組件不需要太多的改動(dòng),并且被證明是相當(dāng)可靠的。
這個(gè)系統(tǒng)的一個(gè)缺點(diǎn)是他們現(xiàn)在只能使用暗網(wǎng)。
版本 2.1 : DeepSORT
為了提高目標(biāo)跟蹤精度, Fyma 用 DeepSORT 取代了自制的基于 IoU 的跟蹤器。結(jié)果很好,但他們需要更改自定義編碼器,以輸出對(duì)象的視覺(jué)特征,以及跟蹤所需的邊界框。
引入 DeepSORT 提高了準(zhǔn)確性,但也帶來(lái)了另一個(gè)問(wèn)題:根據(jù)視頻內(nèi)容,它有時(shí)會(huì)使用大量 CPU 內(nèi)存。為了緩解這個(gè)問(wèn)題,該團(tuán)隊(duì)采用了“異步跟蹤”?;旧鲜且环N基于工作人員的方法,它涉及每個(gè)工作人員使用由邊界框組成的元數(shù)據(jù),并生成有關(guān)對(duì)象移動(dòng)的事件。雖然這解決了 CPU 使用不均衡的問(wèn)題,但它再次使整個(gè)體系結(jié)構(gòu)更加復(fù)雜。
版本 3 : Triton 推理服務(wù)器
雖然之前的版本表現(xiàn)良好,但 Fyma 發(fā)現(xiàn)他們?nèi)匀粺o(wú)法在每個(gè) GPU 上運(yùn)行足夠的攝像頭。他們平臺(tái)上的每個(gè)視頻流都有其使用的任何模型的單獨(dú)副本。如果他們能夠減少單個(gè)攝像頭的內(nèi)存占用,就有可能從 GPU 實(shí)例中擠出更多內(nèi)存。
Fyma 決定重寫(xiě)其應(yīng)用程序中與 ffmpeg 相關(guān)的部分。更具體地說(shuō),該應(yīng)用程序現(xiàn)在通過(guò)自定義 Python 綁定直接與 ffmpeg 庫(kù)( libav )接口。
這使 Fyma 能夠?qū)⑵鋺?yīng)用程序連接到 NVIDIA Triton 推理服務(wù)器,從而實(shí)現(xiàn)攝像機(jī)流之間的神經(jīng)網(wǎng)絡(luò)共享。為了保持目標(biāo)檢測(cè)代碼的核心不變,他們將自定義 ffmpeg 編碼器代碼移到了自定義 Triton 后端。
雖然這解決了內(nèi)存問(wèn)題,但它將 Fyma 應(yīng)用程序的復(fù)雜性提高了至少三倍。
版本 4 : DeepStream
Fyma 應(yīng)用程序的最新版本是基于 GStreamer 和 NVIDIA DeepStream 的完全重寫(xiě)。
Kivistik 說(shuō):“基于管道的加速 DeepStream 組件方法是真正推動(dòng)我們前進(jìn)的原因?!??!按送?,在不影響性能的情況下,將所有以前基于 C 的東西扔進(jìn)回收站的樂(lè)趣真的令人難以置信。我們接受了 DeepStream 提供的一切:解碼、編碼、推理、跟蹤和分析。得益于 nvtracker ,我們恢復(fù)了同步跟蹤, CPU / GPU 使用率穩(wěn)定?!?/p>
這意味著事件現(xiàn)在幾乎是實(shí)時(shí)到達(dá)他們的數(shù)據(jù)庫(kù)。以前,這些數(shù)據(jù)會(huì)延遲幾個(gè)小時(shí),這取決于有多少工作人員在場(chǎng)以及一般的“視覺(jué)”負(fù)載(整個(gè)平臺(tái)看到了多少對(duì)象)。
Fyma 的當(dāng)前實(shí)現(xiàn)為每個(gè) GPU 實(shí)例運(yùn)行一個(gè)主進(jìn)程。該主進(jìn)程依次為添加到平臺(tái)的每個(gè)視頻流運(yùn)行 GStreamer 管道。每個(gè)攝像頭的內(nèi)存開(kāi)銷很低,因?yàn)樗袃?nèi)容都在一個(gè)進(jìn)程中運(yùn)行。
關(guān)于端到端性能(解碼、推斷、跟蹤、分析), Fyma 實(shí)現(xiàn)了高達(dá) 10 倍的幀速率(單個(gè)視頻流約 500 fps ),與第一次實(shí)現(xiàn)相比,精度提高了 2-3 倍。 Fyma 能夠在不到兩個(gè)月的時(shí)間內(nèi)實(shí)施 DeepStream 。
Kivistik 說(shuō):“我想我們終于可以說(shuō),我們現(xiàn)在有了一個(gè)不那么大的代碼庫(kù),并且具有可擴(kuò)展性,因?yàn)槲覀兛梢暂p松地切換模型,改變視頻管道和性能。”。
“對(duì)于每個(gè)想要?jiǎng)?chuàng)建生產(chǎn)級(jí)計(jì)算機(jī)視覺(jué)應(yīng)用程序的軟件開(kāi)發(fā)人員或數(shù)據(jù)科學(xué)家來(lái)說(shuō),使用 DeepStream 真的是一件輕而易舉的事?!?/p>
總結(jié)
通過(guò)使用 NVIDIA DeepStream , Fyma 能夠釋放其 AI 模型的威力,提高其 vision AI 應(yīng)用程序的性能,同時(shí)加快開(kāi)發(fā)時(shí)間。
關(guān)于作者
Alvin Clark 是 DeepStream 的產(chǎn)品營(yíng)銷經(jīng)理。阿爾文的職業(yè)生涯始于設(shè)計(jì)工程師,然后轉(zhuǎn)向技術(shù)銷售和市場(chǎng)營(yíng)銷。他曾與多個(gè)行業(yè)的客戶合作,應(yīng)用范圍從衛(wèi)星系統(tǒng)、外科機(jī)器人到深海潛水器。阿爾文持有圣地亞哥加利福尼亞大學(xué)的工程學(xué)學(xué)位,目前正在喬治亞理工大學(xué)攻讀碩士學(xué)位。
Kaarel Kivistik 領(lǐng)導(dǎo)著 Fyma 的軟件部門(mén)。他擁有超過(guò) 10 年的軟件開(kāi)發(fā)經(jīng)驗(yàn),精通多種語(yǔ)言和環(huán)境。他設(shè)計(jì)并設(shè)計(jì)了 Fyma 平臺(tái)的工作方式。
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2577文章
55180瀏覽量
792244 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5644瀏覽量
109890 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7816瀏覽量
93280
發(fā)布評(píng)論請(qǐng)先 登錄
首屆中國(guó)NVIDIA DGX Spark黑客松大賽開(kāi)啟報(bào)名
NVIDIA和ComfyUI攜手簡(jiǎn)化本地AI視頻生成工作流
電壓放大器在超聲微機(jī)器人及管道研究實(shí)驗(yàn)中的應(yīng)用
NVIDIA在ISC 2025分享最新超級(jí)計(jì)算進(jìn)展
基于DP1323EL的電動(dòng)車解鎖方案:超高速讀寫(xiě),提升電動(dòng)車一鍵解鎖體驗(yàn)
管道運(yùn)輸中的傳感器:管道狀態(tài)監(jiān)測(cè)
在 Buildroot 中啟用 JPEG格式支持,但它有警告消息:“錯(cuò)誤的管道:沒(méi)有元素 Jpegparse”,怎么解決?
NVIDIA助力樞途科技突破視頻提取具身數(shù)據(jù)技術(shù)鴻溝
騰視科技AIBOX雙版本重磅發(fā)布!本地安全與全球適配,解鎖視頻智能新可能
NVIDIA AI助力科學(xué)研究領(lǐng)域持續(xù)突破
如何本地部署NVIDIA Cosmos Reason-1-7B模型
NVIDIA Isaac Sim與NVIDIA Isaac Lab的更新
安泰功率放大器在管道螺旋導(dǎo)波信號(hào)測(cè)量實(shí)驗(yàn)中的應(yīng)用
焊接熔池監(jiān)控相機(jī)在管道焊接中的應(yīng)用:高效監(jiān)測(cè),保障管道安全
使用NVIDIA DeepStream在Fyma解鎖視頻管道
評(píng)論