본문 바로가기
Minding's Programming/CV

[DeepSort] GoogleColab을 이용해 DeepSort 맛보기 (Run Only)

by Minding 2021. 3. 16.
728x90
반응형

SORT 논문을 다 읽고 난 뒤 DeepSort Tracker를 직접 Run시켜보며 구조를 알아보았다.

 

실습에는 GoogleColab을 이용했다. 직접 GPU를 사지 않고도 버금가는 성능을 낼 수 있다는데 큰 장점이 있다.

 

모델을 Run하는 과정은 그리 어렵지 않으며, 코드로만 따지면 30줄도 안되는 간단한 코드로 구현 가능하다.

 

실습은 The AI Guy의 유튜브를 참고했다.

www.youtube.com/channel/UCrydcKaojc44XnuXrfhlV8Q

 

The AI Guy

Hi Everyone! I am the AI Guy and I'm extremely motivated to teach everyone I can about machine learning and AI. I post AI videos about everything AI! Currently in love with Object Detection and Computer Vision.. Let me know what type of videos you all woul

www.youtube.com


 

우선, YOLOv4는 깊은 CNN을 사용해 Object Detection을 하는 알고리즘이며, 매우 빠르고 정확한 성능을 내는 객체 탐지 알고리즘이다. SORT 논문에 따르면 Object Detection quality가 Tracking에도 매우 큰 영향을 준다고 알려져 있기 때문에 객체 추적에 있어 탐지 도구로 YOLOv4를 사용하고 있는 것이 요즘 추세이다.

 

DeepSORT는 기존 SORT Tracker의 (Detection + Kalman Filter + Hungarian Algorithm) 구조에서 '딥러닝'을 복합한 구조로, Appearance를 이용한 거리 측정 등을 통해 기존 SORT보다 더 뛰어난 성능을 보여주는 추적기이다.

 

GoogleColab은 브라우저에서 간편하게 Python과 그 라이브러리를 활용할 수 있는 Google의 서비스 중 하나이다.

본문에서는 Colab에 대한 환경설정이나 기본 조작법 등은 설명하지 않을 예정이며,

Colab에 대한 자세한 내용은 아래 링크(영상)를 참고바란다.

www.youtube.com/watch?v=inN8seMm7UI

 

 

1. Colab 설정하기 (런타임 설정)

 

실습에 들어가기 전, GoogleColab을 쓰는 중요한 이유인 GPU 설정을 해야한다.

GPU는 CPU보다 약 100배 정도의 연산속도를 낼 수 있으며, 이를 Colab에서는 무료로 사용 가능하다.

 

위쪽 설정 메뉴에서

[런타임] - [런타임 유형 변경] - [하드웨어 가속기 'GPU' 설정] - [저장]

이 설정만 해주면 실습을 위한 Colab에서의 준비는 끝났다.

 

 

2. Repository Clone하기 

실습에 참고한 The AI guy의 github에서 실습에 필요한 파일을 git clone을 통해 다운로드 받을 수 있다.

# yolo v4를 이용한 deepsort에 필요한 것 clone하기
!git clone https://github.com/theAIGuysCode/yolov4-deepsort

clone이 끝나면, 다운로드 받은 폴더로 위치를 옮겨준다.

%cd yolov4-deepsort

 

 

3. YOLOv4 학습된 가중치 다운로드 

본문에서는 미리 학습된 가중치를 통해 실습을 진행 할 것이다.

학습된 모델은 80개의 클래스를 가지고 있다.

# Data폴더에 Yolov4 모델의 학습된 가중치 다운로드
!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights -P data/

 

 

4. YOLOv4의 다크넷 가중치를 TensorFlow 모델로 변환

TensorFlow를 사용하여 DeepSort를 실행할 것이기 때문에,

YOLOv4 모델의 가중치를 TensorFlow 모델로 변환해 주어야 한다.

# Darknet 가중치를 tensorflow 모델로 전환
!python save_model.py --model yolov4

 

 

5. DeepSort 실행하기

앞까지의 준비로 YOLOv4를 이용한 DeepSort 실행준비는 끝났다.

GoogleColab에서는 Object Tracking을 하는 동안 영상 재생을 지원하지 않기 때문에,

Tracking을 하는 동안에는 --dont_show를 이용해 영상 출력을 제한하고,

Tracking이 완료되면 추가 코드를 통해서 추적 결과를 영상으로 확인하도록 한다.

 

* ./data/video/ 폴더에 자신이 원하는 영상을 넣고, 코드에 이름을 바꾸어주면 해당 영상으로도 실험해볼 수 있다.

(단, 종횡비가 일치하거나 비슷하게 맞추어야 추적 성능이 올라간다.)

# YOLOv4를 기반으로 한 DeepSort 실행하기
# --info를 이용하면 추적 객체들에 대한 정보를 볼 수 있다.
!python object_tracker.py --video ./data/video/test.mp4 --output ./outputs/tracker.avi --model yolov4 --dont_show --info

Tracking이 완료되면, 다음 코드들을 통해 결과 영상을 확인 할 수 있다.

# 영상 재생을 위한 함수 선언
import io 
from IPython.display import HTML
from base64 import b64encode
def show_video(file_name, width=640):
  # show resulting deepsort video
  mp4 = open(file_name,'rb').read()
  data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
  return HTML("""
  <video width="{0}" controls>
        <source src="{1}" type="video/mp4">
  </video>
  """.format(width, data_url))
# 결과영상 (.avi 확장자)을 .mp4 확장자로 변환하여 재생
import os
path_video = os.path.join("outputs","tracker.avi")
%cd outputs/
!ffmpeg -y -loglevel panic -i tracker.avi output.mp4
%cd ..

# output object tracking video
path_output = os.path.join("outputs","output.mp4")
show_video(path_output, width=960)

결과영상 (테스트 영상)

 

 

 

 

결과 영상 (축구 영상)

 

 


+) 종속성 문제 해결하기 

tensorflow 등 version 문제로 인해 실습이 제대로 진행되지 않는 경우가 있다.

그럴 경우 아래 코드를 실행한 뒤, 실습을 진행하면 된다.

# 종속성 문제에 부딪힐 경우 아래 코드 실행
!pip install -r requirements-gpu.txt

 


 

다음 포스팅에는 Custom Dataset으로 자체 학습을 통한 모델을 만들어 실습해 볼 예정이다.

YOLOv4를 자체적으로 학습하고, 해당 모델로 Tracking까지 실습해 볼 것이다.

 


 

 

728x90
반응형

댓글