본문 바로가기

Computer Vision + Python/객체 탐지 & 추적 (실무자)

Python에서 객체 추적(Object Tracking) – SORT/DeepSORT 알고리즘 실습

 

Python에서 객체 추적(Object Tracking) – SORT/DeepSORT 알고리즘 실습

Python 기반 영상 분석에서 객체 탐지(Object Detection) 다음 단계는 바로 객체 추적(Object Tracking)이다. 특히 움직이는 사람이 많은 CCTV 영상, 도로 차량 분석, 스마트 스토어 고객 동선 분석 등에서 “어떤 객체가 어디로 이동하는지”를 파악하는 것은 비즈니스 데이터 분석에서 매우 중요하다. 본 글에서는 Python을 활용해 SORTDeepSORT 알고리즘으로 객체 추적을 구현하는 과정을 설명하며, 실제 프로젝트 경험을 바탕으로 얻은 실무적 인사이트도 함께 공유한다.

 객체 추적(Object Tracking)의 핵심 개념

객체 추적은 영상의 매 프레임마다 등장하는 객체를 식별하고, 같은 객체를 시간 축을 따라 이어 붙이는 기술이다.
단순히 객체를 찾는 Detection과 달리 Tracking은 다음과 같은 문제를 해결해야 한다.

  • 같은 객체가 여러 프레임에서 지속적으로 동일하게 인식되도록 ID를 부여
  • 객체가 가려지거나 프레임 밖으로 벗어났다 다시 등장해도 ID를 유지
  • 여러 객체가 겹쳐 움직일 때도 각각을 구분

검출과 추적 중에서 추적은 특히 “시간적 안정성”을 요구한다. 즉, 탐지 결과가 조금 흔들려도 ID는 크게 흔들리면 안 된다.


SORT 알고리즘(Python) – 빠르고 가벼운 추적 방식

SORT(Simple Online and Realtime Tracking)는 이름 그대로 단순함과 실시간성을 강조한 추적 알고리즘이다. YOLO 같은 객체 탐지 모델에서 나온 바운딩 박스를 입력으로 받아 Kalman Filter와 Hungarian Algorithm을 활용해 ID를 매칭한다.

 SORT의 동작 원리

SORT는 비교적 단순한 구조이다.

  • Kalman Filter로 다음 프레임에서 객체가 나타날 위치를 예측
  • Hungarian Algorithm으로 예측 위치와 실제 감지된 객체를 가장 합리적으로 매칭
  • 매칭되지 않은 객체는 새로운 ID로 등록

특징은 속도가 매우 빠르다는 것이다. 실제 테스트에서도 CPU 환경에서 30~40 FPS 정도는 무난히 나온다.
YOLO 기반 실시간 모니터링 시스템에서는 대부분 SORT가 충분히 좋은 선택이다.

 SORT를 사용하면서 느낀 한계

현업 프로젝트에서 SORT는 빠르고 안정적이지만 다음과 같은 한계가 있다.

  • 객체의 모양이 크게 변하거나,
  • 사람들이 상호 간에 많이 겹치거나,
  • 감시 카메라처럼 머리 위·대각선 구조로 찍는 경우

ID 유지가 불안정해진다. 특히 사람이 많아지는 상황에서는 ‘ID 스위칭’이 잦아 특정 사람을 지속적으로 추적하기 어렵다.


DeepSORT – SORT의 단점을 보완한 고급 객체 추적

DeepSORT는 SORT의 구조에 딥러닝 기반 Re-identification(Re-ID) 모델을 결합한 버전이다. 단순히 위치 정보뿐 아니라 개체의 외형 특징(appearance)을 벡터로 추출하여 객체 매칭에 활용한다.

 DeepSORT의 추적 방식

DeepSORT에서는 SORT에 추가하여 다음 기능이 들어간다.

  • CNN 기반 Re-ID 모델이 객체의 시각적 특징을 벡터로 추출
  • 같은 사람이 멀어졌다 돌아와도 특징 벡터로 ID 유지
  • 겹침, 빠른 이동, 부분 가림 등 난이도 있는 상황에서도 안정적인 추적

실제로 DeepSORT를 적용하면 사람이 많은 환경에서도 ID 유지율이 크게 올라간다.
예를 들어, 한 번은 복잡한 쇼핑몰 CCTV 데이터를 분석할 때 SORT로는 ID가 계속 바뀌었지만, DeepSORT로 바꾸니 동일 인물이 90% 이상 안정적인 ID를 유지했다. 이 경험이 DeepSORT를 실무에서 자주 추천하는 이유다.


Python에서 SORT/DeepSORT 실습 흐름

아래는 Python 기반으로 SORT 또는 DeepSORT를 구현할 때 흔히 사용하는 구조이다.

 1. 객체 탐지 모델 준비

보통 YOLOv8, YOLOv9, YOLO-NAS 같은 최신 모델을 먼저 사용한다.
탐지 성능이 좋아야 추적 성능도 높아진다.

 2. SORT 또는 DeepSORT 추적기 초기화

  • SORT는 설정해야 할 값이 거의 없다.
  • DeepSORT는 appearance 모델(.pb 또는 .pt) 파일을 먼저 로드한다.

 3. 매 프레임마다 탐지 결과 입력

탐지 결과(바운딩 박스, confidence)를 추적기에 넣으면 ID가 부여된 추적 결과가 나온다.

 4. ID가 부여된 박스를 영상에 표시

각 객체가 몇 번 ID인지 프레임에 표시하며 추적 흐름을 시각화할 수 있다.

이 과정은 간단해 보이지만 성능을 높이려면 다음 요소가 중요하다.

  • 탐지 모델의 정확도
  • 프레임 처리 속도
  • Re-ID 모델의 성능
  • ID 유지를 위한 파라미터 튜닝(max_age, iou_threshold 등)

이처럼 추적 성능은 많은 요소의 균형에 의해 결정된다.


실무 경험 기반 성능 최적화 팁

개인 프로젝트뿐 아니라 실제 기업 분석 업무에서도 SORT/DeepSORT를 활용해 본 경험을 기반으로 최적화 팁을 정리해본다.

 1. FPS를 높이고 싶다면 SORT

DeepSORT는 정확하지만 무겁다.
GPU가 없는 환경에서 실시간이 필요하면 SORT가 훨씬 유리하다.

 2. 사람처럼 외형이 동일한 객체가 많다면 DeepSORT

예를 들어 유니폼을 입은 직원들, 비슷한 복장의 고객 등은 SORT로 구분이 어렵다.
이럴 때 DeepSORT의 Re-ID가 큰 도움이 된다.

 3. CCTV처럼 시야가 넓은 환경에서는 DeepSORT

멀리 있는 사람, 부분 가림이 잦은 환경에서는 DeepSORT가 압도적으로 안정적이었다.

 4. YOLO confidence threshold 조절

추적 성능은 탐지 성능에 영향을 크게 받는다.
낮은 confidence로 너무 많은 객체를 탐지하면 ID 흔들림이 심해지므로
0.4~0.6 정도가 안정적인 경우가 많다.

 5. Re-ID 모델은 최신 버전으로 바꾸기

DeepSORT는 공개된 Re-ID 모델을 다양한 버전으로 바꿔 사용할 수 있다.
최근 모델들은 동일 인식률이 훨씬 높아 추적 성능이 크게 향상된다.


객체 추적 기술은 앞으로 어디로 갈까?

최근에는 DeepSORT를 넘어 OC-SORT, ByteTrack, StrongSORT 등 다양한 고성능 추적기들이 등장하고 있다.
이들의 공통점은 SORT의 빠른 구조는 유지하면서, 외형 정보 또는 후처리 알고리즘으로 정확도를 대폭 향상시킨다는 점이다.

특히 ByteTrack은 detection threshold를 낮추어 “버려지는 저신뢰 박스”까지 적극적으로 활용한다는 점이 인상적이며, 실제로 복잡한 장면에서 DeepSORT보다 안정적인 경우도 많다.

앞으로 객체 추적은 AI 분석의 핵심 기능으로 더욱 발전하며, 스마트 시티, 로봇, 이커머스 분석, 물류 자동화 등 다양한 산업 분야에서 필수 요소가 될 것이다.


결론

Python으로 SORT와 DeepSORT를 활용하면 객체 탐지 모델에서 한 단계 더 나아가 “객체의 움직임과 행동”까지 분석할 수 있게 된다. SORT는 가볍고 빠르며 실시간 분석에 유리하지만, 복잡한 상황에서는 DeepSORT의 Re-ID 기반 추적이 훨씬 안정적이다. 실제 프로젝트에서도 SORT와 DeepSORT를 적절히 조합하거나 상황에 따라 선택해 사용하는 것이 가장 효과적이었다.