SORT 논문을 다 읽고 난 뒤 DeepSort Tracker를 직접 Run시켜보며 구조를 알아보았다.
실습에는 GoogleColab을 이용했다. 직접 GPU를 사지 않고도 버금가는 성능을 낼 수 있다는데 큰 장점이 있다.
모델을 Run하는 과정은 그리 어렵지 않으며, 코드로만 따지면 30줄도 안되는 간단한 코드로 구현 가능하다.
실습은 The AI Guy의 유튜브를 참고했다.
www.youtube.com/channel/UCrydcKaojc44XnuXrfhlV8Q
우선, 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까지 실습해 볼 것이다.
'Minding's Programming > CV' 카테고리의 다른 글
[Image Dataset] GITY : Gather Image Through Youtube, 이미지 데이터셋 생성 프로젝트 (0) | 2021.06.09 |
---|---|
[YOLOv5] YOLOv5 Custom Data로 학습시켜보기 (6) | 2021.04.29 |