如今,零售商可以使用商店中安裝的攝像頭和傳感器提供的大量視頻數據。利用計算機視覺 AI 應用程序,零售商和軟件合作伙伴可以更快地開發 AI 應用程序同時提供更高的準確性。這些應用程序可以幫助零售商:
了解店內顧客行為和購買偏好
減少收縮
通知員工庫存不足或耗盡
改進商品銷售
優化操作
大規模構建和部署這種高效的計算機視覺人工智能應用帶來了許多挑戰。傳統技術耗時,需要密集的開發工作和人工智能專業知識來繪制所有復雜的架構和選項。這些可以包括構建定制的人工智能模型、部署高性能視頻解碼和人工智能推理管道,以及生成有洞察力的分析儀表板。
NVIDIA 的 SDK 套件有助于簡化此工作流。您可以使用 NVIDIA DeepStream SDK 創建具有最低配置的高質量視頻分析,并使用 NVIDIA TAO Toolkit 創建簡單的模型訓練過程。
這篇文章提供了一個教程,介紹如何使用 NVIDIA DeepStream SDK 和 NVIDIA TAO Toolkit 構建一個可以在零售領域執行實時智能視頻分析( IVA )的示例應用程序。
要創建端到端零售愿景 AI 應用程序,請遵循以下步驟:
使用 NVIDIA 預訓練模型進行人員檢測和跟蹤。
使用 NVIDIA TAO 工具包為特定零售使用案例定制計算機視覺模型。
使用 Apache Kafka 開發 NVIDIA DeepStream 管道,用于視頻分析和流式推理輸出。 Kafka 是一個用于 stream processing 、實時數據管道和大規模數據集成的開源分布式流系統。
設置 Kafka Consumer 將推理數據存儲到數據庫中。
開發一個 Django web 應用程序,使用各種指標分析商店性能。
您可以使用 NVIDIA-AI-IOT/deepstream-retail-analytics GitHub repo 上的代碼來實現這個示例應用程序。
此示例的最終產品是一個自定義儀表板,如圖 1 所示。該儀表板提供分析見解,如商店流量趨勢、帶購物籃的顧客數量、過道占用率等。
圖 1 。用于可視化推斷數據的前端儀表板
應用程序體系結構簡介
在深入了解詳細的工作流之前,本節概述了用于構建此項目的工具。
NVIDIA DeepStream SDK 公司
NVIDIA DeepStream SDK 是 NVIDIA 的流媒體分析工具包,支持 GPU 加速視頻分析,支持跨各種硬件平臺的高性能 AI 推理。 DeepStream 包括幾個 reference applications 以啟動開發。這些參考應用程序可以很容易地進行修改,以適應新的用例,并且可以在 DeepStream Docker 鏡像和 GitHub 上的 deepstream_reference_apps 中獲得。
該零售視覺 AI 應用程序構建在兩個參考應用程序之上,- deepstream-test4 和 deepstream test5 。圖 2 顯示了典型 DeepStream 應用程序的體系結構。
圖 2 : NVIDIA DeepStream 參考應用程序架構
NVIDIA TAO 工具包和預訓練模型
NVIDIA TAO (訓練、調整和優化)工具包可將各種 AI 預訓練模型微調到新領域。 TAO 工具包與 DeepStream 應用程序配合使用,以執行獨特用例的分析。
在本項目中,該模型用于檢測客戶是否攜帶購物籃。 DeepStream 實現了 TAO 工具包與其現有管道的無縫集成,無需進行大量配置。
使用 TAO 工具包很容易。 TAO 工具包為 100 多種 CV 架構和主干的組合提供了完整的 Jupyter notebooks 模型定制。 TAO 工具包還為常見零售任務(如 people detection 、 pose estimation 和 action recognition 等)提供了一個特定于任務的預訓練模型庫。要開始,請參見 TAO Toolkit Quick Start 。
零售視覺 AI 應用程序工作流
零售視覺 AI 應用程序架構(圖 3 )由以下階段組成:
具有以下配置的DeepStream 管道:
主檢測器:從 NGC 配置 PeopleNet 預訓練模型以檢測“人員”
二級檢測器:使用 TAO 工具包訓練的自定義分類模型,用于購物籃檢測
對象跟蹤器: NvDCF 跟蹤器(在精度配置中),用于跟蹤視頻流中的移動
消息轉換器:消息轉換器,用于從推斷數據生成自定義 Kafka 流負載
MessageBroker :將推斷數據中繼到 Kafka 接收器的消息代理
kSQL 時間序列數據庫:用于存儲邊緣推理服務器的推理輸出流
Django Web Application:應用程序,用于分析存儲在 kSQL 數據庫中的數據,以生成有關存儲性能的見解,并將這些指標用作 RESTful API 和 web 儀表板
圖 3 。零售視覺 AI 應用架構
此外,此應用程序是為具有 NVIDIA GPU 的 x86 平臺構建的。然而,它可以很容易地部署在 NVIDIA Jetson 嵌入式平臺上,例如 NVIDIA ZVK4] AGX Orin 。
下一節將引導您完成構建應用程序所涉及的步驟。
步驟 1 :構建自定義 NVIDIA DeepStream 管道
要構建零售數據分析管道,請從 NVIDIA DeepStream reference applications deepstream-test4 和 deepstream-1test5 開始。 deepstream-retail-analytics GitHub repo 中提供了管道代碼和流程的詳細描述。我們建議使用本文作為對存儲庫中代碼的演練。
deepstream-test4 應用程序是一個引用 DeepStream 管道,它演示了將custom-detected對象添加為NVDS_EVENT_MSG_META用戶元數據并將其附加到要發布的緩沖區。 deepstream-test5 是一個端到端應用程序,它演示了如何在多流管道中使用nvmsgconv和nvmsgbroker插件,創建NVDS_META_EVENT_MSG類型的元,以及使用 Kafka 和其他匯類型的流推理輸出。
除了主對象檢測器之外,該管道還集成了一個輔助分類器,一旦在零售視頻分析應用程序中檢測到某人,該分類器可用于檢測購物者屬性。 test4 應用程序用于修改nvmsgconv插件以包括零售分析屬性。然后,在 Kafka 主題上使用nvmsgbroker從管道中獲取二級分類器和流式數據,請參考 test5 應用程序。
由于工作流的第一步是從視頻源中識別人和對象,因此首先使用 deepstream-test4 應用程序進行主要對象檢測。該對象檢測是在 PeopleNet 預訓練模型上完成的,默認情況下,該模型接受視頻輸入并檢測人或其物品。
對于此用例,請配置模型以僅捕獲有關人員的信息。這可以通過僅存儲關于數據集中包含人物的幀子集的信息來輕松實現。
完成主person對象檢測后,使用 deepstream-test5 添加輔助對象分類模型。該對象分類顯示檢測到的人是否攜帶籃子。
步驟 2 :使用 NVIDIA TAO 工具包構建購物籃檢測的自定義模型
本節介紹如何使用 TAO 工具包來微調對象分類模型,并找出 PeopleNet 模型中檢測到的人是否攜帶購物籃。
首先,從零售環境收集并注釋訓練數據,以執行對象分類。使用 Computer Vision Annotation Tool ( CVAT )為觀察到的人標注以下標簽:
hasBasket:有人提著籃子
noBasket:人沒有提籃子
此注釋存儲為 KITTI 格式的數據集,其中每行對應一個幀,因此對應一個對象。要使數據與對象分類兼容,請使用 GitHub 上的示例 ‘kitti_to_classification‘ Python file 裁剪數據集。然后可以對其執行對象分類。
接下來,使用 TAO 工具包微調 Resnet34 圖像分類模型,以對訓練數據執行分類。在 GitHub 上 deepstream-retail-analytics/tree/main/TAO 了解有關微調過程的更多信息。
創建自定義模型后,運行推斷以驗證模型是否按預期工作。
步驟 3 :集成 Kafka 消息代理以創建自定義前端儀表板
隨著主要對象檢測和次要對象分類模型準備就緒, DeepStream 應用程序需要將該推斷數據轉發到分析 web 服務器。使用 deepstream-test5 參考應用程序作為模板,使用 ApacheKafka 流式傳輸數據。
這里,內置在 DeepStream 中的 Kafka 適配器用于向 Kafka 消息代理發布消息。一旦 web 服務器從商店內的每個攝像頭接收到 Kafka 流,這些推斷輸出數據就會存儲在一個 kSQL 時間序列數據庫中。
DeepStream 有一個默認的 Kafka 消息共享庫對象,使用戶能夠執行主要對象檢測并無縫傳輸數據。這個項目進一步修改了這個庫,以包括關于二級分類器的信息。這有助于流式傳輸商店內購物籃使用的數據。
當前 DeepStream 庫包括NvDsPersonObject、 ,用于定義在主檢測器中檢測到的persons。為了確保籃子檢測唯一地映射到每個人,請修改該類,使其除了先前存在的屬性之外,還包含hasBasket屬性。有關詳細信息,請訪問 GitHub 上的 deepstream-retail-analytics/tree/main/nvmsgconv 。
在修改NvDsPersonObject 以包括籃檢測后,使用圖 5 所示的管道以確保籃檢測功能正常工作。
圖 5 。零售視覺 AI 應用管道
如圖 5 中的應用程序管道所示,對象檢測和跟蹤是在pgie和sgie.的幫助下執行的。這些 是nvinfer 插件[VZX6]的一部分,作為主要和次要推理引擎。使用nvtracker,將數據傳輸到nvosd 插件。這個nvosd 插件負責在前面章節中檢測到的對象周圍繪制方框。
接下來,需要根據特定的模式將該推斷數據轉換為消息負載, Kafka 消息代理稍后可以使用該模式來存儲和分析結果。使用NvDsPersonsObject (先前生成) 作為 eventmsg_payload file. 中更新的有效載荷
最后,您現在有了帶有自定義模式的消息負載。使用此命令將其傳遞給 Kafka 協議適配器,并發布 DeepStream 應用程序在指定的代理地址和主題向 Kafka 消息代理發送的消息。此時,最終的消息負載已準備就緒。
現在 DeepStream 管道已經準備好,構建一個 web 應用程序,將流式推理數據存儲到一個 kSQL 數據庫中。這個使用 Django 框架構建的 web 應用程序分析推理數據,以生成與前面討論的商店性能相關的指標。這些指標可通過 GitHub 上 deepstream-retail-analytics/tree/main/ds-retail-iva-frontend 中記錄的 RESTful API 獲得。
為了演示 API 功能,我們構建了一個前端 web 儀表板,以可視化分析服務器的結果。此儀表板充當整個門店分析系統的模板。
Results
前面的步驟演示了如何使用 NVIDIA DeepStream 和 NVIDIA TAO 工具包輕松開發端到端零售視頻分析管道。這條管道幫助零售企業利用已有的視頻源,并找到他們可以用來提高利潤的有洞察力的信息。
該工作流以易于使用的 web 儀表板為高潮,可實時分析寶貴的全店數據。如圖 1 所示,儀表板顯示以下信息:
全天門店訪客數量
關于帶籃子和不帶籃子購物的客戶比例的信息
每個商店過道的訪客數
門店入住熱圖
客戶旅程可視化
這些屬性可以很容易地修改,以包括與每個單獨商店更相關的特定用例的信息。商店可以使用這些信息來安排人員配置并改進商店布局,以最大限度地提高效率。
例如,圖 6 顯示了全天商店中顧客的總體分布,以及帶籃子和不帶籃子的顧客的比例。雖然此示例應用程序僅支持單個攝像機流,但可以輕松修改以支持多個攝像機。將此應用程序擴展到多個商店同樣容易。
圖 6 。一段時間內商店中顧客數量的推斷數據(左),以及有籃子的顧客與沒有籃子的顧客的比率(右)
應用程序通過設置hasBasket屬性來唯一檢測person 11攜帶購物籃,而未攜帶購物籃的其他客戶則標記為noBasket。此外,帶有紙板箱的person 1未被識別為有籃子。因此,該模型對誤報是魯棒的,確保它被成功訓練為只獲取該用例的相關信息。
總結
這篇文章展示了一個端到端的過程,即使用 NVIDIA TAO 工具包和 NVIDIA DeepStream SDK 開發視覺 AI 應用程序,以執行零售分析。零售企業可以利用現有的視頻數據流,并構建最先進的視頻分析應用程序。這些應用程序可以實時部署,啟動時只需最少的配置。此外,該應用程序的高度可定制性確保了它可以應用于商店可能受益的任何用例。
開始使用 GitHub 上的示例 deepstream-retail-analytics 應用程序。
-
NVIDIA
+關注
關注
14文章
4949瀏覽量
102830 -
AI
+關注
關注
87文章
30239瀏覽量
268480 -
TAO
+關注
關注
0文章
10瀏覽量
6990
發布評論請先 登錄
相關推薦
評論