Gst-nvinfer plugin은 NVDIA TensorRT를 사용하여 입력값을 inferencing한다.
이 플러그인은 NV12/RGBA buffer를 입력받는데, 이때 Gst Buffer에 NvDsBatchMeta structure가 미리 추가되어 있어야 한다.
low-level library (libnvds_infer)는 network height와 width 차원의 INT8 RGB, BGR 또는 GRAY 데이터에서 작동한다. Gst-nvinfer는 해당 network의 요청에 맞춰 input data를 변형(conversion, scailing)하고, 이를 low-level library로 전달한다. low-level library는 변형된 frame을 전처리(normalizaation, mean subtraction) 하고 inference를 진행할 최종 float RGB/BGR/GRAY planar data를 생성한다.
low-level library의 output은 network type에 의존하는데, 전처리 함수는 다음과 같다.
y = (net scale factor) * (x-mean)
- x: input pixel value. int8 [0,255]
- mean: mean value. read either from the mean file or as offset[c], where c is the channel to which the input pixel belongs.
- net-scale-factor: pixel scailing factor specified in the configuration file. float
- y: output pixel value. float
Gst-nvinfer는 현재 다음 종류의 network들에 대해서 동작한다.
- Multi-class object detection
- Multi-label classification
- Segmentation (semantic)
- Instance Segmentation
Gst-nvinfer plugin은 두가지 모드로 사용 가능하다.
- Primary mode: full frame에 대해서 inference 수행
- Secondary mode: upstream components에서 meta에 추가한 object에 대해서 inference 수행
secondary mode로 사용하는 경우에는 tracker를 pipeline에 추가하여서 같은 객체에 대해서 re-inferencing을 하지 않도록 하여 성능을 높일 수 있다. 이는 해당 객체에 unique ID를 key로 map에 캐싱하여서 저장한다. 이를 통해서 객체는 처음 탐지되었을 때와 객체의 크기가 20%이상 증가한 경우에만 inference를 수행한다.
하위 컴포넌트는 Gst Buffer 형식으로 원본 내용 + inference output을 추가한 metadata를 입력받게 된다.
[reference]
- https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinfer.html
'Tech > DeepStream' 카테고리의 다른 글
[Deepstream] Gst-nvdsanalytics (0) | 2021.08.18 |
---|---|
[Deepstream] Gst-nvstreammux (0) | 2021.08.16 |
[GStreamer] GStreamer 개념 정리 (0) | 2021.08.05 |