ÉlőUtoljára: 26 perceMa: 10
Eszközökfrissítve: 19:10

Egyedi Python-plugin gyorsítja a DeepStream videóelemzését

A Python-alapú megoldás lehetővé teszi a fejlesztők számára, hogy egyedi inference-modelleket integráljanak a DeepStream-be anélkül, hogy a teljesítmény csökkenne.

Egyedi Python-plugin gyorsítja a DeepStream videóelemzését
Fotó: Caspar Camille Rubin / Unsplash
forrás: Towards Data Science·AI Forradalom szerk.·
Megosztás

Az NVIDIA DeepStream egy produktor-kész, hardveresen gyorsított videóelemzési folyamatot kínál, amely GStreamer-en keresztül kapcsolódik össze. Alapértelmezetten a TensorRT-re exportált detektormodellekhez a nvinfer elem kezeli a folyamatot. Azonban ez a megoldás korlátos lehet olyan esetekben, mint a vision-language modellek, egyedi utófeldolgozás, forgatott bounding boxok, vagy modellváltás futásidőben.

A cikk egy új megközelítést mutat be: egyedi GStreamer-plugin írása Pythonban, a pyservicemaker segítségével. Ez lehetővé teszi a fejlesztők számára, hogy a már meglévő, gondosan finomhangolt PyTorch inference-stackjukat használják, anélkül, hogy azt újra implementálnák konfigurációs fájlokban. A kulcsfontosságú felismerés, hogy a DeepStream későbbi elemei, mint a nvtracker, nvdsosd és nvmsgconv, nem igényelnek specifikus forrást a metaadatokhoz. Ha a metaadat-struktúrát helyesen írjuk meg, a többi elem úgy működik, mintha a nvinfer lett volna a képben.

Kapcsolódó: chatbot-tesztelés GPU-val

A DeepStream minden feldolgozott pufferéhez egy NvDsBatchMeta struktúra kapcsolódik. Ez a struktúra tartalmazza a kötegszintű (NvDsUserMeta), a streamszintű (NvDsFrameMeta) és az objektumszintű (NvDsObjectMeta) metaadatokat. A NvDsObjectMeta minden egyes detektált objektumot reprezentál. Fontos megérteni, hogy ezek a metaadatok nem a nvinfer tulajdonát képezik, hanem egy megosztott szerződést jelentenek. Bármely GStreamer elem olvashat belőle vagy írhat bele.

Kapcsolódó: CUDA fordítás Rustból

Egy fontos korlátozás, hogy a NvDsObjectMeta példányokat nem lehet közvetlenül Pythonból létrehozni. A DeepStream memóriapoolokat használ a hatékonyság érdekében, és ezeket a poolokat a C-oldal kezeli. A Python-kötések csak a poolokhoz biztosítanak hozzáférést, de nem engedélyezik az új példányok közvetlen létrehozását Pythonból. A helyes módszer a batch metaadatokból való lekérés: `batch_meta.acquire_object_meta()`. Az elem a keret befejezése után automatikusan visszakerül a poolba.

Kapcsolódó: GPU flottafelügyelet

A DeepStream metaadataihoz Pythonból a pyservicemaker SDK segítségével férhetünk hozzá. Ez az eszköz lehetővé teszi a `BatchMetadataOperator` alosztályozását, amely a `handle_metadata(batch_meta)` metóduson keresztül hozzáférést biztosít a teljes NvDsBatchMeta-hoz minden pufferhez. A `Buffer` wrapper pedig lehetővé teszi a keret GPU memóriájának elérését, ami nulla-másolásos inference-t tesz lehetővé.

Kapcsolódó: föderált tanulás egyszerűsítése

A cikk szerint a Python-alapú plugin megvalósítható anélkül, hogy áldoznánk a teljesítményből, bár ehhez nincsenek teljesítményteszt adatok. A downstream elemek nem foglalkoznak azzal, hogy melyik elem hozta létre a detektálási metaadatokat – ez az SDK dokumentációjának értelmezésén alapul. A fejlesztőknek a `GST_PLUGIN_PATH` környezeti változóban kell megadniuk a plugin könyvtárát, hogy a GStreamer felismerje az új, Python-alapú elemet.

Kapcsolódó: LLM-motor C++-ban

Forrás

Feldolgozott sajtóforrás·Towards Data Science

Eredeti cikk megnyitása →

Ez a cikk a fenti sajtóforrás alapján készült AI-összefoglalóval.

tetszett a cikk? oszd meg →
Megosztás

Tetszik az oldal? Támogasd a fejlesztést

Az AI Forradalom egy automatizált pipeline: napi adatgyűjtés, LLM-feldolgozás és infrastruktúra fenntartása valódi költségekkel jár. Ha értékesnek találod a tömör, naprakész AI-összefoglalókat, egy kávé sokat segít.

Támogatom