지난 글에서 객체 탐지 모델인 YOLO에 대해서 살펴보았다. 이번 글에서는 탐지된 객체를 추적하는 Object Tracking 그중에서 ByteTrack에 대해 자세히 알아볼 것이다.
현재 진행 중인 프로젝트에서 축구 경기 영상에 학습된 YOLO 모델을 적용시켜봤다. 예상대로 객체 탐지를 잘 수행하지만 영상이 재생되는 동안 꾸준히 지속적으로 탐지하지는 못하였다. 그 이유와 함께 객체 트래킹에 대해 알아보자.
영상/비디오에서 움직이는 객체를 시간에 따라 식별하고 계속 추적하는 기술
그렇다면 YOLO만 사용한다면 특정 객체에 대해 왜 지속적으로 탐지를 못하는 것일까? 사람의 눈으로 영상을 본다면 시간에 따라 객체가 물 흐르듯이 움직이는 것을 볼 수 있다. 하지만 영상은 일련의 정지된 이미지를 빠르게 보여주는 것이다. 이유는 다음과 같다.
1. 객체마다 고유 식별 번호가 없음
YOLO는 현재 프레임을 기준으로만 객체를 인식하기 때문에 객체가 사람이라고 가정했을 때 누가 누구인지 구분을 하지 못한다.
2. 빠르게 움직이는 객체에 취약
모션 블러 현상으로 객체로 인식하지 못한다. 아래의 이미지는 모션블러의 예시이다.
3. 장애물의 변수
사람 객체가 다른 물체에 가려지면 탐지를 하지 못한다. 설령 다시 나타난다 해도 동일 객체로 구분하지 못한다. 아래의 이미지의 초록색 테두리로 표시된 사람 객체는 앞의 선수 때문에 가려지게 되고 객체로 인식하지 못하게 된다.
4. 경로 추적 불가
탐지된 객체가 어디서 왔고 어디로 가는지 전혀 알 수 없다.
이와 같은 이유로 영상에서 동일한 객체를 지속적으로 추적하기 위해 Object Tracking을 사용해야 한다.
객체 트래킹은 하나의 객체만 추적하느냐와 여러 개의 객체를 동시에 추적하느냐로 나뉜다.
이번 프로젝트에서는 축구 경기 영상에서 선수들과 공을 탐지하고 트래킹 해야 하기 때문에 MOT를 적용해야 하고 이들 중에서 ByteTrack을 알아보았다.
기존의 다른 MOT는 confidence가 높은 값의 탐지에만 의존하여 놓치는 객체가 많았다. ByteTrack은 confidence가 낮은 탐지 결과도 트래킹에 사용하여 ID스위칭과 누락을 감소시켰다.
Byte track의 작동 방식을 알아보자.
ByteTrack 깃허브에서 제공하는 예시로 확인해 보자. 빨간색 바운딩 박스를 주목하면 프레임을 시간순으로 진행시킬 때 객체가 점점 다른 물체에 가려지고 있지만 일부만 보고도 끝까지 추적하는 모습이다.
객체를 추적하는 track은 어떻게 관리될까? 3가지 상태로 관리된다.
GIF를 통해 Tracked에서 Lost로 Lost에서 다시 Tracked로 상태가 변경되는 순간을 확인해보자.
ID가 9번인 객체는 8번 객체에 가려지게 되는 순간 Lost 상태가 되고 다시 완전한 형체가 보여질 때 원래의 ID인 9번을 가지게 된다. 따라서 Removed 되지 않고 동일 객체로 잘 추적하는 것을 확인할 수 있다.
ByteTrack이 다른 알고리즘보다 추적 정확도도 높을 뿐만 아니라 속도도 빠르다. 높은 정확도를 달성하려는 알고리즘은 속도가 느릴 수 있지만 이러한 trade-off를 잘 극복하였다. 자율주행, 드론, 스포츠 분석 같은 실시간 활용이 가능한 기술에서 주로 사용된다.
이번 게시글에서는 YOLO 객체 탐지 모델에 이어서 객체 트래킹, 특히 ByteTrack에 대해서 알아봤다. 프로젝트에서 탐지만 하는 것이 아닌 꾸준히 객체를 추적까지 하여 객체에 대한 데이터를 정확하게 수집하는 것이 목표이다.