Skip to content

Commit 69f9f3e

Browse files
committed
add fast tracker and fix bugs of cbiou
1 parent ed0a715 commit 69f9f3e

File tree

10 files changed

+652
-6
lines changed

10 files changed

+652
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ wandb/*
1111
track_result.txt
1212
.idea/
1313
track_results/*
14+
track_demo_results/*
1415
*.mp4
1516
*.mkv
1617
temp.py

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ However, bugs or issues should still be prioritized in the **Issue section in Gi
2424

2525
## 🗺️ Latest News
2626

27+
- ***2025.11.28*** FastTracker is added. Fix lost tracklets bugs of CBIoU_tracker.
2728
- ***2025.7.8*** New version 2.1 released. Add ImproAssoc, TrackTrack and support TensorRT. The other details are as follows:
2829

2930
<details>
@@ -66,6 +67,7 @@ and the tracker supports:
6667
- Hybrid SORT ([AAAI 2024](https://ojs.aaai.org/index.php/AAAI/article/view/28471))
6768
- ImproAssoc ([CVPRW 2023](https://openaccess.thecvf.com/content/CVPR2023W/E2EAD/papers/Stadler_An_Improved_Association_Pipeline_for_Multi-Person_Tracking_CVPRW_2023_paper.pdf))
6869
- TrackTrack ([CVPR 2025](https://openaccess.thecvf.com/content/CVPR2025/html/Shim_Focusing_on_Tracks_for_Online_Multi-Object_Tracking_CVPR_2025_paper.html))
70+
- FastTracker ([arxiv 2508](https://arxiv.org/pdf/2508.14370))
6971

7072
and the reid model supports:
7173

@@ -260,12 +262,21 @@ In addition, you can also specify
260262

261263
- TrackTrack: `python tracker/track.py --dataset visdrone_part --detector yolo_ultra --tracker tracktrack --kalman_format bot --detector_model_path weights/yolov8l_VisDrone_35epochs_20230509.pt --save_images --nms_thresh 0.95 --reid`
262264

265+
- FastTracker: `python tracker/track.py --dataset uavdt --detector yolo_ultra_v8 --tracker fasttrack --kalman_format byte --detector_model_path weights/yolov8l_UAVDT_60epochs_20230509.pt`
266+
267+
263268
> **Important notes for UCMC Track:**
264269
>
265270
> 1. Camera parameters. The UCMC Track need the intrinsic and extrinsic parameter of camera. Please organize like the format of `tracker/cam_param_files/uavdt/M0101.txt`. One video sequence corresponds to one txt file. If you do not have the labelled parameters, you can refer to the estimating toolbox in original repo ([https://github.com/corfyi/UCMCTrack](https://github.com/corfyi/UCMCTrack)).
266271
>
267272
> 2. The code does not contain the camera motion compensation part between every two frame, please refer to [https://github.com/corfyi/UCMCTrack/issues/12](https://github.com/corfyi/UCMCTrack/issues/12). From my perspective, since the algorithm name is 'uniform', the update of compensation between every two frames is not necessary.
268273
274+
>**Important Notes on Fast Tracker**
275+
>
276+
> In `fast_tracker.py`, the configuration related to the tracker is stored in the global variable `FAST_TRACKER_CONFIG`, which includes thresholds for recording occluded targets (such as velocity damping, bounding box enlargement, etc.) and environmental optimizations for road structure fusion (under the "ROIs" key, with specific values and meanings referenced in the original paper)
277+
278+
279+
269280
### ✨ TensorRT Convert and Inference
270281

271282
This code supports **fully automatic** generation and reasoning of Tensor RT engine, **which can be used for both detection model and ReID model**. If you have not converted Tensor RT engine, just add `--trt` parameter when running, for example:

README_CN.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ git checkout v2.1 # change to v2.1 branch !!
1818

1919
## 🗺️ 最近更新
2020

21+
- ***2025.11.28*** 增加FastTracker跟踪算法。修复CBIoU Tracker中的丢失轨迹的bug.
2122
- ***2025.7.8*** 新版本2.1发布. 添加ImproAssoc, TrackTrack并支持TensorRT. 其他细节如下:
2223

2324
<details>
@@ -60,6 +61,7 @@ git checkout v2.1 # change to v2.1 branch !!
6061
- Hybrid SORT([AAAI 2024](https://ojs.aaai.org/index.php/AAAI/article/view/28471))
6162
- ImproAssoc ([CVPRW 2023](https://openaccess.thecvf.com/content/CVPR2023W/E2EAD/papers/Stadler_An_Improved_Association_Pipeline_for_Multi-Person_Tracking_CVPRW_2023_paper.pdf))
6263
- TrackTrack ([CVPR 2025](https://openaccess.thecvf.com/content/CVPR2025/html/Shim_Focusing_on_Tracks_for_Online_Multi-Object_Tracking_CVPR_2025_paper.html))
64+
- FastTracker ([arxiv 2508](https://arxiv.org/pdf/2508.14370))
6365

6466
REID模型支持:
6567

@@ -254,12 +256,18 @@ python tracker/track.py --dataset ${dataset name, related with the yaml file} --
254256

255257
- TrackTrack: `python tracker/track.py --dataset visdrone_part --detector yolo_ultra --tracker tracktrack --kalman_format bot --detector_model_path weights/yolov8l_VisDrone_35epochs_20230509.pt --save_images --nms_thresh 0.95 --reid`
256258

259+
- FastTracker: `python tracker/track.py --dataset uavdt --detector yolo_ultra_v8 --tracker fasttrack --kalman_format byte --detector_model_path weights/yolov8l_UAVDT_60epochs_20230509.pt`
260+
257261
>**UCMC Track的重要提示:**
258262
>
259263
> 1. 相机参数. UCMC Track需要相机的内参和外参. 请按照`tracker/cam_ram_files/uavdt/M0101.txt`的格式组织. 一个视频序列对应一个txt文件. 如果您没有标记的参数, 可以参考原始仓库中的估算工具箱([https://github.com/corfyi/UCMCTrack](https://github.com/corfyi/UCMCTrack)).
260264
>
261265
> 2. 该代码不包含每两帧之间的相机运动补偿部分, 请参阅[https://github.com/corfyi/UCMCTrack/issues/12](https://github.com/corfyi/UCMCTrack/issues/12). 在我看来, 既然算法叫"统一相机运动补偿", 因此不需要每两帧之间再更新补偿.
262266
267+
>**Fast Tracker的重要提示:**
268+
>
269+
> 在fast_tracker.py中,与跟踪器有关的配置在FAST_TRACKER_CONFIG全局变量中,包括对遮挡目标记录的相关阈值(速度阻尼、边界框放大等),以及融合道路结构的环境优化("ROIs"键,具体数值以及含义请参照原论文)
270+
263271
### ✨ TensorRT的转换与推理
264272

265273
该代码支持**全自动**的Tensor RT engine的生成与推理, **既可以用于检测模型, 也可以用于ReID模型**. 如果您还没有转换Tensor RT engine, 只需在运行时加上`--trt`参数, 例如:

tracker/track.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from trackers.hybridsort_tracker import HybridSortTracker
3333
from trackers.tracktrack_tracker import TrackTrackTracker
3434
from trackers.improassoc_tracker import ImproAssocTracker
35+
from trackers.fast_tracker import FastTracker
3536

3637
# YOLOX modules
3738
try:
@@ -86,7 +87,8 @@
8687
'ucmctrack': UCMCTracker,
8788
'hybridsort': HybridSortTracker,
8889
'tracktrack': TrackTrackTracker,
89-
'improassoc': ImproAssocTracker
90+
'improassoc': ImproAssocTracker,
91+
'fasttrack': FastTracker
9092
}
9193

9294
def get_args():

tracker/track_demo.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from trackers.hybridsort_tracker import HybridSortTracker
3232
from trackers.tracktrack_tracker import TrackTrackTracker
3333
from trackers.improassoc_tracker import ImproAssocTracker
34+
from trackers.fast_tracker import FastTracker
3435

3536
# YOLOX modules
3637
try:
@@ -84,7 +85,8 @@
8485
'ucmctrack': UCMCTracker,
8586
'hybridsort': HybridSortTracker,
8687
'tracktrack': TrackTrackTracker,
87-
'improassoc': ImproAssocTracker
88+
'improassoc': ImproAssocTracker,
89+
'fasttrack': FastTracker,
8890
}
8991

9092
def get_args():
@@ -108,7 +110,7 @@ def get_args():
108110
parser.add_argument('--init_thresh', type=float, default=0.3, help='filter new detections, larger than this thresh consider as new tracklet')
109111
parser.add_argument('--nms_thresh', type=float, default=0.7, help='thresh for NMS')
110112

111-
parser.add_argument('--device', type=str, default='6', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
113+
parser.add_argument('--device', type=str, default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
112114

113115
"""yolox"""
114116
parser.add_argument('--num_classes', type=int, default=1)

tracker/trackers/byte_tracker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,12 @@ def update(self, output_results, img, ori_img):
123123
(tlwh, s, cate) in zip(dets_second, scores_second, cates_second)]
124124
else:
125125
detections_second = []
126+
126127
r_tracked_tracklets = [tracklet_pool[i] for i in u_track if tracklet_pool[i].state == TrackState.Tracked]
127128
dists = iou_distance(r_tracked_tracklets, detections_second)
129+
128130
matches, u_track, u_detection_second = linear_assignment(dists, thresh=0.5)
131+
129132
for itracked, idet in matches:
130133
track = r_tracked_tracklets[itracked]
131134
det = detections_second[idet]

tracker/trackers/c_biou_tracker.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ def update(self, output_results, img, ori_img):
9797
track.re_activate(det, self.frame_id, new_id=False)
9898
refind_tracklets.append(track)
9999

100+
# mark u_track as lost
101+
for it in u_track:
102+
track = unmatched_tracklets[it]
103+
if not track.state == TrackState.Lost:
104+
track.mark_lost()
105+
lost_tracklets.append(track)
106+
100107
'''Deal with unconfirmed tracks, usually tracks with only one beginning frame'''
101108
detections = [unmatched_detections[i] for i in u_detection]
102109
dists = buffered_iou_distance(unconfirmed, detections, level=1)

0 commit comments

Comments
 (0)