在云中提供大規模的計算機視覺是一項復雜的任務。 Fyma ,一家計算機視覺公司,正借助于 NVIDIA DeepStream 。
作為一家相對較新的公司, Fyma 將視頻轉換為數據——更具體地說,是物理空間中的運動數據。 Fyma 平臺每天全天使用客戶的實時視頻流,并生成移動事件(例如,有人穿過門口或商店過道)。
他們早期學到的一個教訓是,他們的視頻處理管道必須簡單、可擴展,同時具備良好的性能。由于發展資源有限,一開始它們只能擁有這三種資源中的一種。 NVIDIA DeepStream 最近通過縮短開發時間、提高性能和提供優秀的軟件組件(如 GStreamer ),解鎖了同時擁有這三種功能的能力。
直播視頻流的挑戰
Fyma 專注于消費實時視頻流,以簡化其客戶的實施。客戶可能會猶豫是否在其場所安裝傳感器或任何其他硬件,因為他們已經投資了安全攝像頭。由于這些攝像機可以在任何地方, Fyma 可以提供不同的對象檢測模型,以在不同的環境中最大限度地提高精度。
消費實時視頻流在多個方面具有挑戰性:
攝像機有時會產生損壞的視頻(呈現/解碼時間戳跳躍,報告的幀率錯誤)
網絡問題導致視頻流凍結、結巴、跳轉或脫機
CPU /內存負載分配和規劃并不簡單
實時視頻流是無限的
實時視頻流的無限性意味著 Fyma 的平臺必須至少以幀到達的速度執行計算機視覺。基本上,整個管道必須實時工作。否則,幀將無休止地累積。
幸運的是,在過去幾年中,目標檢測在速度和準確性方面穩步提高。這意味著每秒可以從 1000 多張圖像中檢測到物體,而地圖的比例超過 90% 。這些進步使 Fyma 能夠以合理的價格向客戶提供大規模的計算機視覺。
使用計算機視覺(特別是實時)提供物理空間分析涉及的不僅僅是對象檢測。據 Fyma 軟件開發主管 Kaarel Kivistik 稱,“要真正從這些對象中提取一些東西,我們需要在幀之間跟蹤它們,并使用某種組件來分析其行為。考慮到每個客戶都可以選擇自己的模型,建立自己的分析,并根據收集的數據生成報告,一個簡單的視頻處理管道就成了一個巨大的平臺。”
版本 1 :你好,世界
Fyma 從將 OpenCV 和 ffmpeg 耦合到一個非常簡單的 Python 應用程序開始。除了他們的神經網絡,沒有任何硬件加速。當時他們正在使用 Yolo v3 和 Darknet 。盡管使用了 AWS g4dn ,但性能很差,約為每秒 50-60 幀。具有 NVIDIA Tesla T4 GPU (他們繼續使用)的 xlarge 實例。應用程序的功能如下:
用于捕獲視頻的 OpenCV
具有 Python 綁定以檢測對象的暗網
自制基于 IoU 的多目標跟蹤器
雖然實現相當簡單,但不足以擴展。表現不佳的原因有三個:
軟件視頻解碼
在進程之間和 CPU / GPU 內存之間復制解碼視頻幀
軟件對輸出進行編碼,同時在其上繪制檢測結果
他們通過硬件視頻解碼和編碼來改進第一個版本。當時,這并沒有使整體速度提高多少,因為他們仍然將解碼幀從 GPU 復制到 CPU 內存,然后再復制回[Z1K]內存。
版本 2 :自定義 ffmpeg 編碼器
在速度方面真正的突破來自自定義 ffmpeg 編碼器,它基本上是一個圍繞暗網的包裝器,將視頻幀轉換為檢測對象。幀速率增加了十倍,因為它們現在在硬件上解碼,而不需要在主機和設備內存之間復制視頻幀。
但是幀速率的增加意味著他們的部分應用程序現在是用 C 語言編寫的,并且由于 ffmpeg 的高度復雜的構建系統而增加了復雜性。盡管如此,他們的新組件不需要太多的改動,并且被證明是相當可靠的。
這個系統的一個缺點是他們現在只能使用暗網。
版本 2.1 : DeepSORT
為了提高目標跟蹤精度, Fyma 用 DeepSORT 取代了自制的基于 IoU 的跟蹤器。結果很好,但他們需要更改自定義編碼器,以輸出對象的視覺特征,以及跟蹤所需的邊界框。
引入 DeepSORT 提高了準確性,但也帶來了另一個問題:根據視頻內容,它有時會使用大量 CPU 內存。為了緩解這個問題,該團隊采用了“異步跟蹤”。基本上是一種基于工作人員的方法,它涉及每個工作人員使用由邊界框組成的元數據,并生成有關對象移動的事件。雖然這解決了 CPU 使用不均衡的問題,但它再次使整個體系結構更加復雜。
版本 3 : Triton 推理服務器
雖然之前的版本表現良好,但 Fyma 發現他們仍然無法在每個 GPU 上運行足夠的攝像頭。他們平臺上的每個視頻流都有其使用的任何模型的單獨副本。如果他們能夠減少單個攝像頭的內存占用,就有可能從 GPU 實例中擠出更多內存。
Fyma 決定重寫其應用程序中與 ffmpeg 相關的部分。更具體地說,該應用程序現在通過自定義 Python 綁定直接與 ffmpeg 庫( libav )接口。
這使 Fyma 能夠將其應用程序連接到 NVIDIA Triton 推理服務器,從而實現攝像機流之間的神經網絡共享。為了保持目標檢測代碼的核心不變,他們將自定義 ffmpeg 編碼器代碼移到了自定義 Triton 后端。
雖然這解決了內存問題,但它將 Fyma 應用程序的復雜性提高了至少三倍。
版本 4 : DeepStream
Fyma 應用程序的最新版本是基于 GStreamer 和 NVIDIA DeepStream 的完全重寫。
Kivistik 說:“基于管道的加速 DeepStream 組件方法是真正推動我們前進的原因。”。“此外,在不影響性能的情況下,將所有以前基于 C 的東西扔進回收站的樂趣真的令人難以置信。我們接受了 DeepStream 提供的一切:解碼、編碼、推理、跟蹤和分析。得益于 nvtracker ,我們恢復了同步跟蹤, CPU / GPU 使用率穩定。”
這意味著事件現在幾乎是實時到達他們的數據庫。以前,這些數據會延遲幾個小時,這取決于有多少工作人員在場以及一般的“視覺”負載(整個平臺看到了多少對象)。
Fyma 的當前實現為每個 GPU 實例運行一個主進程。該主進程依次為添加到平臺的每個視頻流運行 GStreamer 管道。每個攝像頭的內存開銷很低,因為所有內容都在一個進程中運行。
關于端到端性能(解碼、推斷、跟蹤、分析), Fyma 實現了高達 10 倍的幀速率(單個視頻流約 500 fps ),與第一次實現相比,精度提高了 2-3 倍。 Fyma 能夠在不到兩個月的時間內實施 DeepStream 。
Kivistik 說:“我想我們終于可以說,我們現在有了一個不那么大的代碼庫,并且具有可擴展性,因為我們可以輕松地切換模型,改變視頻管道和性能。”。
“對于每個想要創建生產級計算機視覺應用程序的軟件開發人員或數據科學家來說,使用 DeepStream 真的是一件輕而易舉的事。”
總結
通過使用 NVIDIA DeepStream , Fyma 能夠釋放其 AI 模型的威力,提高其 vision AI 應用程序的性能,同時加快開發時間。
關于作者
Alvin Clark 是 DeepStream 的產品營銷經理。阿爾文的職業生涯始于設計工程師,然后轉向技術銷售和市場營銷。他曾與多個行業的客戶合作,應用范圍從衛星系統、外科機器人到深海潛水器。阿爾文持有圣地亞哥加利福尼亞大學的工程學學位,目前正在喬治亞理工大學攻讀碩士學位。
Kaarel Kivistik 領導著 Fyma 的軟件部門。他擁有超過 10 年的軟件開發經驗,精通多種語言和環境。他設計并設計了 Fyma 平臺的工作方式。
審核編輯:郭婷
-
傳感器
+關注
關注
2552文章
51246瀏覽量
754844 -
NVIDIA
+關注
關注
14文章
5026瀏覽量
103272 -
計算機
+關注
關注
19文章
7520瀏覽量
88249
發布評論請先 登錄
相關推薦
評論