Update from Sync Service
This commit is contained in:
173
专业领域/ByteTrack/ByteTrack核心原理.md
Executable file
173
专业领域/ByteTrack/ByteTrack核心原理.md
Executable file
@@ -0,0 +1,173 @@
|
||||
# ByteTrack 核心原理
|
||||
|
||||
> 多目标跟踪(MOT)算法详解
|
||||
|
||||
---
|
||||
|
||||
## 1. 问题背景
|
||||
|
||||
### 传统方法的局限
|
||||
|
||||
大多数 MOT 方法通过**高于阈值的高分检测框**来获取目标 ID:
|
||||
|
||||
- 遮挡物体的检测分数较低(低分检测框)
|
||||
- 低分物体被直接丢弃
|
||||
- 导致**轨迹断裂**和**漏检**
|
||||
|
||||
### ByteTrack 的解决思路
|
||||
|
||||
> **核心思想**:不仅仅关联高分检测框,而是关联**所有**检测框
|
||||
|
||||
---
|
||||
|
||||
## 2. 算法流程
|
||||
|
||||
### Two-Stage Association
|
||||
|
||||
```
|
||||
输入:视频序列
|
||||
↓
|
||||
┌─────────────────────────────┐
|
||||
│ Step 1: 高分检测框关联 │
|
||||
│ (High Score Detection) │
|
||||
│ 使用 IoU/特征匹配高分框 │
|
||||
└─────────────┬───────────────┘
|
||||
↓
|
||||
┌─────────────────────────────┐
|
||||
│ Step 2: 低分检测框关联 │
|
||||
│ (Low Score Detection) │
|
||||
│ 利用轨迹相似度恢复目标 │
|
||||
│ 过滤背景误检 │
|
||||
└─────────────┬───────────────┘
|
||||
↓
|
||||
输出:完整轨迹
|
||||
```
|
||||
|
||||
### Byte 名称由来
|
||||
|
||||
- "Byte" = 8 bits = 256 种可能性
|
||||
- 每个检测框有 0-255 的检测分数
|
||||
- 关联所有分数的检测框,如同处理字节一样
|
||||
|
||||
---
|
||||
|
||||
## 3. 核心创新点
|
||||
|
||||
### 创新一:双重关联
|
||||
|
||||
| 阶段 | 输入 | 目的 |
|
||||
|------|------|------|
|
||||
| **第一关联** | 高分检测框 (score > θ₁) | 找到明确的目标 |
|
||||
| **第二关联** | 低分检测框 (θ₂ < score ≤ θ₁) | 恢复被遮挡的目标 |
|
||||
|
||||
### 创新二:YOLOX 检测器
|
||||
|
||||
ByteTrack 使用 **YOLOX** 作为检测器:
|
||||
|
||||
- Anchor-free 设计
|
||||
- SimOTA 标签分配
|
||||
- 优秀的检测性能
|
||||
|
||||
### 创新三:简单强大的 Tracker
|
||||
|
||||
- 不依赖 Re-ID 特征
|
||||
- 仅使用 **IoU** 关联
|
||||
- 高效且易于部署
|
||||
|
||||
---
|
||||
|
||||
## 4. 匹配策略
|
||||
|
||||
### 卡尔曼滤波
|
||||
|
||||
- 预测下一帧目标位置
|
||||
- 处理物体运动平滑
|
||||
|
||||
### IoU 匹配
|
||||
|
||||
```python
|
||||
# 高分关联
|
||||
matched, unmatched_dets = IoUMatching(tracklets, high_score_dets)
|
||||
|
||||
# 低分关联(仅对未匹配轨迹)
|
||||
matched, unmatched_tracks = IoUMatching(unmatched_tracks, low_score_dets)
|
||||
```
|
||||
|
||||
### 阈值设置
|
||||
|
||||
| 参数 | 说明 | 典型值 |
|
||||
|------|------|--------|
|
||||
| `high_score_thresh` | 高分阈值 | 0.5 |
|
||||
| `match_thresh` | IoU 匹配阈值 | 0.8 |
|
||||
| `low_score_thresh` | 低分阈值 | 0.6 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 为什么有效?
|
||||
|
||||
### 遮挡场景示例
|
||||
|
||||
```
|
||||
帧 1: [Person A] → 检测分数 0.95 ✓
|
||||
帧 2: [Person A] → 检测分数 0.85 ✓
|
||||
帧 3: [被遮挡] → 检测分数 0.35 ✗ (传统方法丢弃)
|
||||
|
||||
ByteTrack 处理:
|
||||
- 帧 1-2: 正常关联,建立轨迹
|
||||
- 帧 3: 低分框仍参与第二关联
|
||||
- 利用运动预测 + IoU 匹配
|
||||
- 成功恢复被遮挡目标
|
||||
```
|
||||
|
||||
### 效果提升
|
||||
|
||||
| 指标 | 提升 | 原因 |
|
||||
|------|------|------|
|
||||
| MOTA | +2-3% | 减少漏检 |
|
||||
| IDF1 | +1-10% | 轨迹更连续 |
|
||||
| IDs | 大幅减少 | 减少轨迹断裂 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 与其他 Tracker 对比
|
||||
|
||||
ByteTrack 可集成到多种现有 tracker:
|
||||
|
||||
- ✅ ByteTrack + SORT
|
||||
- ✅ ByteTrack + DeepSORT
|
||||
- ✅ ByteTrack + MOTDT
|
||||
|
||||
所有组合都获得 **一致的性能提升**。
|
||||
|
||||
---
|
||||
|
||||
## 7. 核心代码框架
|
||||
|
||||
```python
|
||||
class BYTETracker:
|
||||
def __init__(self, args):
|
||||
self.high_score_thresh = args.track_thresh
|
||||
self.low_score_thresh = args.low_thresh
|
||||
self.match_thresh = args.match_thresh
|
||||
|
||||
def update(self, dets, frame_info):
|
||||
# 分离高低分检测框
|
||||
high_dets = dets[dets[:, 4] >= self.high_score_thresh]
|
||||
low_dets = dets[dets[:, 4] < self.high_score_thresh]
|
||||
|
||||
# 第一阶段:高分关联
|
||||
online_targets = self.associate(high_dets, tracks)
|
||||
|
||||
# 第二阶段:低分关联
|
||||
online_targets = self.associate_low(online_targets, low_dets)
|
||||
|
||||
return online_targets
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 参考
|
||||
|
||||
- **论文**:[ByteTrack: Multi-Object Tracking by Associating Every Detection Box](https://arxiv.org/abs/2110.06864)
|
||||
- **代码**:[FoundationVision/ByteTrack](https://github.com/FoundationVision/ByteTrack)
|
||||
- **发表**:ECCV 2022
|
||||
Reference in New Issue
Block a user