본문 바로가기

Tech/DeepStream

[Deepstream] Gst-nvinfer

반응형

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-nvinfer 구조

 

하위 컴포넌트는 Gst Buffer 형식으로 원본 내용 + inference output을 추가한 metadata를 입력받게 된다.

 

 

Gst-nvinfer의 input/output

 

[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