ByteTrack: Multi-Object Tracking by Associating Every Detection Box
저자: Yifu Zhang, Peize Sun, Yi Jiang
발행년도: 2022년
인용수: 850회
논문 링크: https://arxiv.org/abs/2110.06864
arXiv ID: 2110.06864
ByteTrack: 모든 검출 박스를 활용한 다중 객체 추적
문제 정의 (Problem Definition)
다중 객체 추적(MOT)에서 가장 근본적인 딜레마가 하나 있다. 검출기의 confidence threshold를 어디에 맞춰야 하는가? 높게 설정하면 정확한 검출만 남지만 폐색(occlusion)이나 모션 블러가 발생한 객체들을 놓치게 된다. 낮게 설정하면 모든 객체를 포착할 수 있지만 false positive가 급증해 추적 성능이 오히려 떨어진다.
기존의 tracking-by-detection 패러다임에서는 이 문제를 단순하게 접근했다. 적당한 threshold(보통 0.5~0.7)를 설정하고, 그 이상의 검출 박스만 추적에 사용하는 것이다. 하지만 현실의 비디오에서는 같은 객체라도 프레임마다 검출 신뢰도가 크게 변한다. 사람이 다른 사람 뒤로 지나가거나, 빠르게 움직여서 블러가 생기거나, 조명이 변하는 상황에서는 신뢰도가 순간적으로 떨어진다.
ByteTrack의 저자들은 이런 현상을 정량적으로 분석했다. MOT17 데이터셋에서 ground truth 객체들의 검출 신뢰도 분포를 보면, 약 20%의 true positive 검출이 0.5 이하의 낮은 신뢰도를 갖는다는 것을 발견했다. 즉, 높은 threshold 정책은 실제 객체의 1/5을 버리고 있었던 셈이다.
실제 CCTV나 자율주행 환경에서 이 문제는 더욱 심각하다. 카메라 해상도가 낮거나, 객체가 멀리 있거나, 악천후 상황에서는 검출 신뢰도의 변동폭이 더 크다. 연속된 프레임에서 같은 사람이 0.8 → 0.3 → 0.9로 신뢰도가 급변하는 것은 흔한 일이다.
기존 방법의 한계 (Motivation)
대표적인 MOT 방법들이 이 문제를 어떻게 다뤘는지 살펴보자. SORT(Simple Online and Realtime Tracking)는 칼만 필터와 헝가리안 알고리즘을 사용해 검출과 트랙을 매칭하는 간단하면서도 효과적인 방법이다. 하지만 SORT는 높은 신뢰도 검출만 사용하기 때문에, 일시적으로 검출이 누락되면 트랙이 끊기는 문제가 있었다.
DeepSORT는 이를 보완하기 위해 appearance feature를 추가했다. Reid 네트워크로 각 객체의 visual embedding을 추출하고, 이를 매칭에 활용하는 방식이다. 확실히 개선은 있었지만, 추가적인 네트워크가 필요해 속도가 느려졌고, 여전히 낮은 신뢰도 검출은 버리는 한계가 있었다.
최근의 JDE(Joint Detection and Embedding)나 FairMOT 같은 방법들은 검출과 Re-ID를 하나의 네트워크로 통합해 효율성을 높였다. 하지만 이들도 마찬가지로 confidence threshold 이상의 검출만 사용한다는 근본적인 한계를 벗어나지 못했다.

출처: ar5iv (Figure 6)
사실 기존 연구들도 이 문제를 인식하고 있었을 것이다. 하지만 낮은 신뢰도 검출을 포함하면 false positive가 늘어나는 trade-off 때문에 섣불리 시도하지 못했던 것으로 보인다. ByteTrack의 진짜 기여는 이 trade-off를 현명하게 다루는 방법을 찾았다는 점이다.
저자들은 기존 방법들의 비교에서 한 가지 흥미로운 점을 놓치지 않았다. 대부분의 방법들이 "detection 성능이 좋아지면 tracking도 좋아진다"는 가정 하에 더 좋은 검출기를 쓰는 데만 집중했다는 것이다. 하지만 검출기가 아무리 좋아도 100% 완벽할 수는 없고, 결국 불완전한 검출을 어떻게 활용할지가 핵심이다.
제안 방법의 핵심 아이디어 (Key Idea)
ByteTrack의 핵심 아이디어는 놀랍도록 단순하다. "버리지 말고 다시 한 번 써보자"는 것이다. 높은 신뢰도 검출로 1차 매칭을 하고, 매칭되지 않은 트랙에 한해서 낮은 신뢰도 검출과 2차 매칭을 시도한다.
이를 일상적인 비유로 설명하면 이렇다. 파티에서 사람들을 찾는다고 생각해보자. 처음에는 확실히 보이는 사람들(높은 신뢰도)부터 확인한다. "저기 빨간 셔츠 입은 사람이 철수구나." 그 다음, 아직 찾지 못한 친구들을 위해 흐릿하게 보이는 사람들(낮은 신뢰도)도 다시 살펴본다. "저 구석에 있는 사람이 영희인 것 같은데?"
기존 방법들은 첫 번째 단계만 수행하고 끝냈다. 흐릿하게 보이는 사람들은 아예 고려하지 않았던 것이다. ByteTrack은 이들도 조건부로 활용한다. 중요한 것은 "조건부"라는 점이다. 낮은 신뢰도 검출은 이미 존재하는 트랙과의 매칭에만 사용하고, 새로운 트랙을 시작하는 데는 사용하지 않는다.

출처: ar5iv (Figure 7)
개인적으로 이 아이디어의 우아함은 단순함에 있다고 생각한다. 복잡한 네트워크나 추가적인 학습 없이, 단지 매칭 전략만 바꿔서 성능을 크게 향상시켰다. 하지만 정말 이것이 "새로운" 아이디어일까? 실은 two-stage matching 자체는 새롭지 않다. ByteTrack의 진짜 기여는 이를 confidence 기준으로 명확하게 구분하고 체계화했다는 점이다.
아키텍처 설명 (Architecture)
ByteTrack의 전체 파이프라인을 단계별로 살펴보자. 입력은 비디오 프레임이고, 출력은 각 객체의 ID가 일관되게 부여된 바운딩 박스들이다.
Step 1: Detection
먼저 각 프레임에서 객체 검출을 수행한다. ByteTrack은 특정 검출기에 종속되지 않으며, YOLOX, Faster R-CNN 등 어떤 검출기든 사용할 수 있다. 검출 결과를 두 그룹으로 나눈다:
D_high: confidence > τ_high (보통 0.5-0.7)D_low: τ_low < confidence < τ_high (보통 0.1-0.3)
Step 2: First Association (High confidence)
높은 신뢰도 검출 D_high와 기존 트랙들을 매칭한다. 거리 척도로는 IoU distance를 사용하며, 헝가리안 알고리즘으로 최적 매칭을 찾는다. 매칭된 트랙은 업데이트하고, 매칭되지 않은 트랙은 T_remain에, 매칭되지 않은 검출은 D_remain에 보관한다.
Step 3: Second Association (Low confidence)
여기가 ByteTrack의 핵심이다. 1차 매칭에서 남은 트랙 T_remain과 낮은 신뢰도 검출 D_low를 다시 매칭한다. 이때도 똑같이 IoU distance와 헝가리안 알고리즘을 사용한다. 주목할 점은 D_low의 검출들이 새로운 트랙을 생성하지는 않는다는 것이다.
Step 4: Track Management
- 매칭된 트랙: 위치 업데이트 (칼만 필터 사용)
- 매칭 안 된 트랙: 일정 프레임(보통 30) 동안 유지 후 삭제
- 매칭 안 된 높은 신뢰도 검출: 새로운 트랙 생성
def byte_track(detections, tracks, tau_high=0.6, tau_low=0.1):
# Step 1: 검출 분리
d_high = [d for d in detections if d.score > tau_high]
d_low = [d for d in detections if tau_low < d.score < tau_high]
# Step 2: 1차 매칭 (높은 신뢰도)
matches1, t_remain, d_remain = match(tracks, d_high)
# Step 3: 2차 매칭 (낮은 신뢰도) - ByteTrack의 핵심
matches2, t_lost, _ = match(t_remain, d_low)
# Step 4: 트랙 업데이트
update_tracks(matches1 + matches2)
create_new_tracks(d_remain) # 높은 신뢰도만!
remove_lost_tracks(t_lost)
return active_tracks
이 구조가 효과적인 이유는 명확하다. 폐색이나 모션 블러로 일시적으로 신뢰도가 떨어진 객체도 기존 트랙과의 위치 관계(IoU)가 명확하다면 계속 추적할 수 있다. 동시에 낮은 신뢰도 검출이 무분별하게 새 트랙을 만들어내는 것은 방지한다.
접근 방법의 특징 및 설계 의도 (Design Choices)
ByteTrack의 설계에서 주목할 만한 선택들을 분석해보자.
1. IoU 거리 척도의 사용
저자들은 appearance feature 없이 순수하게 IoU만으로 매칭한다. 이는 의도적인 선택으로 보인다. 첫째, 계산이 매우 빠르다. 둘째, 짧은 시간 간격에서는 IoU가 충분히 discriminative하다. 셋째, appearance feature는 낮은 신뢰도 검출에서 신뢰하기 어렵다.
하지만 이 선택은 양날의 검이다. 빠른 움직임이나 프레임 레이트가 낮은 상황에서는 IoU만으로는 부족할 수 있다. 실제로 저자들도 MOT20 같은 crowded scene에서는 성능이 상대적으로 떨어진다고 인정한다.
2. Two-threshold 전략τ_high와 τ_low 두 개의 threshold를 사용하는 것도 중요한 설계다. 중간 영역(gray zone)을 만들어 완전히 버리지도, 완전히 신뢰하지도 않는 영역을 만든 것이다. 이는 hard decision보다 soft decision에 가깝다.
3. 칼만 필터의 유지
최신 논문들이 복잡한 motion model을 사용하는 것과 달리, ByteTrack은 전통적인 칼만 필터를 고수한다. 이는 "간단한 것을 먼저 개선하자"는 철학을 보여준다. 실제로 대부분의 pedestrian tracking에서 등속 운동 가정은 충분히 유효하다.
4. Detection 순서의 활용
코드를 자세히 보면, 검출 박스를 confidence 순으로 정렬해서 처리한다. 이는 작은 디테일이지만, 같은 객체에 대한 중복 검출이 있을 때 더 신뢰할 만한 것을 먼저 매칭하는 효과가 있다.
저자들이 명시적으로 언급하지 않은 설계 선택도 있다. 예를 들어, 왜 3단계 이상의 multi-level matching은 시도하지 않았을까? 왜 두 번째 매칭에서도 똑같은 IoU threshold를 사용할까? 이런 부분들은 ablation study에서 다뤄졌으면 좋았을 텐데 아쉽다.
실험 결과 분석
ByteTrack의 실험 결과는 인상적이다. MOT17 테스트 세트에서 80.3 MOTA, MOT20에서 77.8 MOTA를 달성했다. 당시 최고 성능 대비 각각 4.5%, 5.7% 향상된 수치다.
하지만 단순히 숫자를 나열하기보다 "무엇이 검증되었는가"를 살펴보자. 첫째, 다양한 검출기(YOLOX, CenterNet, FairMOT 등)와 결합했을 때 모두 일관된 성능 향상을 보였다. 이는 ByteTrack이 검출기에 독립적인 일반적인 개선임을 시사한다.
둘째, ablation study에서 낮은 신뢰도 검출을 제거했을 때 MOTA가 약 3-4% 떨어지는 것을 확인했다. 특히 IDF1 (ID F1-score)의 하락이 두드러졌는데, 이는 낮은 신뢰도 매칭이 ID 유지에 중요함을 보여준다.

출처: ar5iv (Figure 1)
셋째, 속도 측면에서도 우수했다. V100 GPU에서 30 FPS 이상을 달성해 실시간 처리가 가능하다. 복잡한 appearance network 없이 단순한 IoU 매칭만 사용한 덕분이다.
그런데 실험 설계에서 아쉬운 점도 있다. 저자들은 주로 pedestrian tracking 데이터셋에 집중했는데, vehicle이나 다른 객체 클래스에서는 어떨까? 또한 낮은 프레임 레이트(5-10 FPS)에서의 성능 분석도 부족하다. 실제 CCTV 환경에서는 이런 조건이 흔한데 말이다.
재현 가능성 측면에서는 긍정적이다. 저자들이 코드를 공개했고, 핵심 알고리즘이 단순해서 구현이 어렵지 않다. 실제로 여러 연구자들이 ByteTrack을 baseline으로 사용하고 있다.
총평: 개인적 해석과 후속 연구 방향
ByteTrack은 "간단한 아이디어가 큰 성능 향상을 가져올 수 있다"는 것을 보여준 좋은 예다. 복잡한 네트워크나 학습 과정 없이, 단지 매칭 전략만 바꿔서 SOTA를 달성했다. 실무 관점에서 이런 접근은 매우 가치 있다. 추가 학습이 필요 없고, 기존 시스템에 쉽게 통합할 수 있으며, 계산 비용도 거의 늘지 않는다.
하지만 한계도 명확하다. 첫째, crowded scene에서는 여전히 어려움을 겪는다. 객체가 밀집해 있으면 IoU만으로는 구분이 어렵기 때문이다. 둘째, 긴 시간 폐색(long-term occlusion)은 여전히 해결하지 못한다. 칼만 필터의 예측에는 한계가 있다.
만약 내가 이 연구를 이어간다면, 다음과 같은 방향을 탐색하고 싶다:
1. Adaptive threshold learning: 장면의 특성(밀도, 조명, 움직임 패턴)에 따라 τ_high와 τ_low를 자동으로 조정하는 방법. 고정된 threshold는 모든 상황에 최적일 수 없다.
2. Confidence prediction refinement: 검출기의 confidence 자체를 refinement하는 경량 네트워크를 추가하는 것. 일시적 폐색과 진짜 false positive를 구분할 수 있다면 더 공격적으로 낮은 신뢰도 검출을 활용할 수 있을 것이다.
3. Multi-camera extension: ByteTrack의 아이디어를 multi-camera tracking으로 확장하는 것. 한 카메라에서 낮은 신뢰도로 검출된 객체가 다른 카메라에서는 높은 신뢰도로 보일 수 있다.
ByteTrack이 주는 가장 큰 교훈은 "모든 정보를 활용하되, 현명하게 활용하라"는 것이다. AI 분야에서 우리는 종종 더 크고 복잡한 모델만 추구하지만, 때로는 데이터를 다루는 전략의 개선이 더 큰 효과를 가져올 수 있다.
결론적으로, ByteTrack은 실용적이면서도 효과적인 연구의 좋은 본보기다. 완벽하지는 않지만, 명확한 문제 정의와 간단한 해결책으로 의미 있는 진전을 이뤄냈다. 이런 접근 방식이 더 많이 나왔으면 하는 바람이다.
'PaperReview' 카테고리의 다른 글
| [비트코인] Bitcoin: A Peer-to-Peer Electronic Cash System (0) | 2026.01.26 |
|---|---|
| 대형 언어 모델이 제어공학을 이해할 수 있을까? (0) | 2026.01.26 |
| [XSTB] XGBoost: A Scalable Tree Boosting System (0) | 2026.01.26 |
| [KC] K-means Clustering (0) | 2026.01.26 |
| [RF] Random Forests (0) | 2026.01.25 |