
RF-DETR ByteTrack 多目标跟踪实战教程从命令行到 Python 视频轨迹可视化这篇教程是根据近期学习目标检测、多目标跟踪和视频分析项目的复现过程整理出来的重点演示如何把 RF-DETR 检测器和 ByteTrack 跟踪器组合起来对视频中的目标进行连续跟踪并绘制检测框、轨迹和跟踪 ID。ByteTrack 和 SORT 一样都建立在卡尔曼滤波与匈牙利匹配算法的基本框架上但它的核心改进是数据关联策略ByteTrack 会尽可能利用几乎所有检测框而不是简单丢弃低置信度框。它通常先用高置信度检测框匹配已有轨迹再用低置信度检测框通过 IoU 匹配仍未关联的轨迹。这样可以减少遮挡、弱检测带来的漏跟踪和轨迹断裂同时保持较高的运行速度。本文会分别演示两种使用方式使用trackers命令行工具快速跑通视频跟踪使用 Python 代码组合 RF-DETR、ByteTrack 和 supervision 标注器在移动镜头场景中加入相机运动补偿让轨迹显示更稳定如果你正在系统学习目标检测、多目标跟踪和视频理解任务可以先收藏本文配套 notebook、示例视频和后续同系列更新我会整理成资料包后面统一放到更方便获取的位置。 文章目录RF-DETR ByteTrack 多目标跟踪实战教程从命令行到 Python 视频轨迹可视化⚙️ 环境准备 检查 GPU 是否可用 安装依赖 下载示例视频 方式一使用 CLI 进行目标跟踪 方式二使用 Python 组合检测器和跟踪器 初始化检测器和跟踪器 配置标注器 运行检测和跟踪 显示 Python 跟踪结果️ 相机运动补偿 小结 同系列教程汇总⚙️ 环境准备这一部分主要完成 GPU 检查、依赖安装和示例视频下载。视频跟踪任务通常会逐帧运行检测模型因此建议优先使用 GPU 环境。 检查 GPU 是否可用先确认当前环境是否可以访问 GPU。可以使用nvidia-smi命令进行检查。如果在 Colab 中遇到 GPU 不可用的问题可以进入Runtime-Change runtime type-Hardware accelerator将硬件加速器设置为GPU然后点击Save。!nvidia-smi 安装依赖这里安装inference-gpu和trackers2.3.0。在 Google Colab 中可能会看到依赖冲突警告这通常来自 Colab 预装环境不影响本教程功能。!pip install-q inference-gpu trackers2.3.0 下载示例视频下面会下载 3 段示例视频分别用于普通视频跟踪和移动镜头下的轨迹补偿实验。你也可以把路径替换成自己的视频。!wget-q https://storage.googleapis.com/com-roboflow-marketing/supervision/video-examples/bikes-1280x720-1.mp4 !wget-q https://storage.googleapis.com/com-roboflow-marketing/supervision/video-examples/bikes-1280x720-2.mp4 !wget-q https://storage.googleapis.com/com-roboflow-marketing/supervision/video-examples/skiers-1280x720-5.mp4 方式一使用 CLI 进行目标跟踪trackers库提供了命令行接口CLI可以直接对视频运行目标跟踪不需要先写 Python 代码。对于快速验证模型、调参数或批量处理视频这种方式很方便。更多 CLI 参数和配置可以参考 Track from CLI documentation。SOURCE_VIDEO_PATH/content/bikes-1280x720-1.mp4TARGET_VIDEO_PATH/content/bikes-1280x720-1-result.mp4!trackers track \--source{SOURCE_VIDEO_PATH}\--output{TARGET_VIDEO_PATH}\--model rfdetr-medium \--tracker bytetrack \--show-trajectoriesTARGET_VIDEO_COMPRESSED_PATH/content/bikes-1280x720-1-result-compressed.mp4!ffmpeg-y-loglevel error-i{TARGET_VIDEO_PATH}-vcodec libx264-crf28{TARGET_VIDEO_COMPRESSED_PATH}fromIPython.displayimportVideo Video(TARGET_VIDEO_COMPRESSED_PATH,embedTrue,width1080) 方式二使用 Python 组合检测器和跟踪器如果你希望更细粒度地控制检测阈值、NMS、标注样式、轨迹长度或类别过滤就更适合使用 Python 代码。 初始化检测器和跟踪器这里使用get_model(rfdetr-medium)加载 RF-DETR Medium 检测模型并初始化ByteTrackTracker。frominferenceimportget_modelfromtrackersimportByteTrackTracker modelget_model(rfdetr-medium)trackerByteTrackTracker() 配置标注器这里使用supervision配置三类标注器BoxAnnotator绘制检测框LabelAnnotator绘制跟踪 ID 或标签TraceAnnotator绘制目标运动轨迹importsupervisionassv colorsv.ColorPalette.from_hex([#ffff00,#ff9b00,#ff8080,#ff66b2,#ff66ff,#b266ff,#9999ff,#3399ff,#66ffff,#33ff99,#66ff66,#99ff00])box_annotatorsv.BoxAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK)label_annotatorsv.LabelAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK,text_colorsv.Color.BLACK,text_scale0.8)trace_annotatorsv.TraceAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK,thickness2,trace_length100) 运行检测和跟踪这一段是 Python 版本的核心流程每一帧先用 RF-DETR 做目标检测使用 NMS 去除重叠框将检测结果交给 ByteTrack 更新轨迹在当前帧上绘制检测框、轨迹和跟踪 ID最后用sv.process_video逐帧处理并生成新视频CONFIDENCE_THRESHOLD0.2NMS_THRESHOLD0.3SOURCE_VIDEO_PATH/content/bikes-1280x720-2.mp4TARGET_VIDEO_PATH/content/bikes-1280x720-2-result.mp4defcallback(frame,i):resultmodel.infer(frame,confidenceCONFIDENCE_THRESHOLD)[0]detectionssv.Detections.from_inference(result).with_nms(thresholdNMS_THRESHOLD)detectionstracker.update(detections)annotated_imageframe.copy()annotated_imagebox_annotator.annotate(annotated_image,detections)annotated_imagetrace_annotator.annotate(annotated_image,detections)annotated_imagelabel_annotator.annotate(annotated_image,detections,detections.tracker_id)returnannotated_image tracker.reset()sv.process_video(source_pathSOURCE_VIDEO_PATH,target_pathTARGET_VIDEO_PATH,callbackcallback,show_progressTrue,) 显示 Python 跟踪结果TARGET_VIDEO_COMPRESSED_PATH/content/bikes-1280x720-2-result-compressed.mp4!ffmpeg-y-loglevel error-i{TARGET_VIDEO_PATH}-vcodec libx264-crf28{TARGET_VIDEO_COMPRESSED_PATH}fromIPython.displayimportVideo Video(TARGET_VIDEO_COMPRESSED_PATH,embedTrue,width1080)️ 相机运动补偿当视频由移动相机拍摄时比如无人机、手持设备、滑雪跟拍或车辆行驶画面目标轨迹可能会因为相机本身的平移或旋转而显得不稳定。相机运动补偿会通过光流估计相机运动并在绘制轨迹时进行稳定化处理。这种能力对移动镜头视频尤其重要因为我们真正关心的是目标自身的运动而不是相机移动造成的画面偏移。frominferenceimportget_modelfromtrackersimportByteTrackTracker,MotionEstimator,MotionAwareTraceAnnotator PERSON_CLASS_ID0modelget_model(rfdetr-large)trackerByteTrackTracker(minimum_consecutive_frames3)motion_estimatorMotionEstimator(max_points500,min_distance10,quality_level0.001,ransac_reproj_threshold1.0,)colorsv.ColorPalette.from_hex([#ffff00,#ff9b00,#ff8080,#ff66b2,#ff66ff,#b266ff,#9999ff,#3399ff,#66ffff,#33ff99,#66ff66,#99ff00])box_annotatorsv.BoxAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK)label_annotatorsv.LabelAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK,text_colorsv.Color.BLACK,text_scale0.8)motion_aware_trace_annotatorMotionAwareTraceAnnotator(colorcolor,color_lookupsv.ColorLookup.TRACK,thickness2,trace_length100)CONFIDENCE_THRESHOLD0.2NMS_THRESHOLD0.3SOURCE_VIDEO_PATH/content/skiers-1280x720-5.mp4TARGET_VIDEO_PATH/content/skiers-1280x720-5-result.mp4defcallback(frame,i):coord_transformmotion_estimator.update(frame)resultmodel.infer(frame,confidenceCONFIDENCE_THRESHOLD)[0]detectionssv.Detections.from_inference(result).with_nms(thresholdNMS_THRESHOLD)detectionsdetections[detections.class_idPERSON_CLASS_ID]detectionstracker.update(detections)annotated_imageframe.copy()annotated_imagebox_annotator.annotate(annotated_image,detections)annotated_imagemotion_aware_trace_annotator.annotate(annotated_image,detections,coord_transformcoord_transform)annotated_imagelabel_annotator.annotate(annotated_image,detections,detections.tracker_id)returnannotated_image tracker.reset()motion_estimator.reset()motion_aware_trace_annotator.reset()sv.process_video(source_pathSOURCE_VIDEO_PATH,target_pathTARGET_VIDEO_PATH,callbackcallback,show_progressTrue,)TARGET_VIDEO_COMPRESSED_PATH/content/skiers-1280x720-5-result-compressed.mp4!ffmpeg-y-loglevel error-i{TARGET_VIDEO_PATH}-vcodec libx264-crf28{TARGET_VIDEO_COMPRESSED_PATH}fromIPython.displayimportVideo Video(TARGET_VIDEO_COMPRESSED_PATH,embedTrue,width1080) 小结这篇教程把 RF-DETR 检测器和 ByteTrack 跟踪器组合起来分别演示了命令行和 Python 两种用法。对于入门多目标跟踪来说可以重点理解下面几件事检测器负责逐帧找出目标框跟踪器负责把不同帧中的同一目标关联起来ByteTrack 会利用低置信度检测框来减少轨迹断裂supervision标注器可以快速绘制检测框、轨迹和跟踪 ID移动镜头场景下相机运动补偿能让轨迹显示更稳定后续我会继续把类似的目标检测、多目标跟踪、OCR 和图像分割项目整理成系列教程。配套 notebook、示例视频和运行环境说明也会按主题逐步整理出来适合刚入门计算机视觉和视频分析的同学跟着实践。 同系列教程汇总Google Gemini 3.5 Flash 零样本目标检测教程从提示词到可视化结果GLM-OCR 文档识别实战教程从验证码、公式到车牌 OCRRF-DETR ByteTrack 多目标跟踪实战教程从命令行到 Python 视频轨迹可视化YOLO26 自定义目标检测训练中文教程待整理SAM 3 图像/视频分割中文教程待整理