Skip to content

sjlee25/nnstreamer-object-detection

Repository files navigation

NNStreamer Pipeline for Object Detection

"NNStreamer를 이용한 실시간 동영상 기반 객체 인식 시스템 설계 (KSC2020)" 논문의 기반이 되는 코드 레포지토리입니다.

(이성주, 최예찬, & 박영준. (2020). NNStreamer 를 이용한 실시간 동영상 기반 객체 인식 시스템 설계. 한국정보과학회 학술발표논문집, 1559-1561.)


목차

  1. 연구 개요
  2. 코드 설명
  3. 코멘트

연구 개요

배경

  • 영상에 딥러닝 모델을 처리하는 과정을 구현하는 코드 작성 시 파이프라인 기반 프레임워크 활용 시 코드 최적화 및 유지 보수가 용이할 수 있습니다.

제안

파이프라인

  • 위의 NNStreamer 및 GStreamer element들로 파이프라인을 구성합니다.
  • Tensor 관련 element에서 입력 데이터를 학습된 모델에 알맞은 형태로 변환하고, 추론 후 얻은 출력 데이터를 적절한 callback 함수에서 영상에 표시 가능한 형태의 정보로 변환합니다.
  • 인식된 객체를 감쌀 수 있는 사각형의 위치 등 변환된 정보를 제공해 overlay element가 영상 위에 인식된 객체를 확인하기 위한 표기를 추가하도록 합니다.

결과

실험 결과

  • OpenCV와 Tensorflow를 활용해 객체 인식 결과를 영상에 합성할 때 대비 NNStreamer를 활용할 때 초당 출력되는 이미지의 수를 비교해 보았습니다.
  • NNStreamer 이용 시 OpenCV 대비 모델에 따라 약 0.89~2.1배의 성능 변화를 확인하였습니다.

코드 설명

테스트 환경

  • H/W
    • CPU: Intel i7-8700K
    • GPU: NVIDIA RTX 2060 Super
    • RAM: DDR4 16GB

  • S/W
    • Ubuntu 20.04 LTS, Python 3.8
    • NNStreamer 1.6.0, GStreamer 1.16.2
    • Tensorflow 2.3.1

의존 패키지 설치

$ sudo apt install libgstreamer1.0-0 libgstreamer1.0-dev gstreamer1.0-tools gstreamer1.0-doc gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly  gstreamer1.0-alsa gstreamer1.0-libav gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstreamer-plugins-base1.0-dev 

NNStreamer 설치

$ sudo apt-add-repository ppa:nnstreamer
$ sudo apt install nnstreamer nnstreamer-tensorflow

코드 활용 방법

  1. 본 repository를 clone 합니다.

    $ git clone https://github.com/lsj1213m/nnstreamer-od.git
    $ cd nnstreamer-od

  1. pip를 활용해 requirements.txt에 기재된 의존 패키지를 모두 설치합니다.

    $ pip install -r ./requirements.txt

  1. 객체 인식 데모를 확인하기 위해 object_detection.py 파일을 원하는 옵션과 함께 실행합니다.

    $ python object_detection.py --video [비디오 파일 경로] [하단의 추가 옵션]

    0번 GPU에서 YOLOv3 모델을 활용한 객체 인식 데모를 수행하려면 명령어를 다음과 같이 구성할 수 있습니다.

    $ python object_detection.py --video ./video/street.mp4 --model yolo --device gpu --gpu_idx 0

    활용 가능한 모든 옵션 및 그 설명은 다음과 같습니다.
    --video   [path to video file]: input video file path
    --use_webcam: whether to use webcam or not (default: False)
    --model   ['frcnn'/'ssdlite'/'ssd'/'yolo_tiny'/'yolo']: model name to use
    --score   [threshold value]: threshold for score (default: 0.3)
    --device  ['cpu'/'gpu']: device to use for inference (default: 'cpu')
    --gpu_idx ['0'/'1'/...]: gpu device number to use if the gpu will be used (default: '0')

    위 옵션들과 이외의 모델 별 설정은 config.py에서 수정 가능합니다.


실행 데모

NNStreamer 파이프라인을 활용한 YOLOv3 GPU 수행 데모


코멘트

TODO

  • Detailed FPS, mAP measurements
  • Apply more object detection models
  • Cooperate with TVM framework


Credits

Github Repositories


Papers


Frameworks


Datasets

About

Object Detection Implementation with NNStreamer (2020)

Topics

Resources

Stars

Watchers

Forks