ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleDetection 中 BoT-SORT 多目标跟踪实战:从 BOTSORTTracker 配置到训练、评估与部署全流程

PaddleDetection 中 BoT-SORT 多目标跟踪实战:从 BOTSORTTracker 配置到训练、评估与部署全流程 PaddleDetection 中 BoT-SORT 多目标跟踪实战从 BOTSORTTracker 配置到训练、评估与部署全流程【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetectionBoT-SORTRobust Associations Multi-Pedestrian Tracking是一种以高精度检测器为核心、结合相机运动补偿CMC与两阶段关联策略的多目标跟踪MOT方案。本指南围绕 PaddleDetection 仓库中 configs/mot/botsort/README_cn.md 展开系统讲解 BoT-SORT 在 PP-YOLOE 检测器上的组装配置、MOT-17 half 数据集上的精度表现以及从检测器训练、跟踪评估、模型导出到 Python 部署推理的完整实战流程。读完本文你将掌握BOTSORTTracker的每个配置参数含义、两条评估链路检测与跟踪的区别与用法并能独立搭建一套可运行的 BoT-SORT 行人跟踪系统。简介什么是 BoT-SORTBoT-SORTBoT-SORT: Robust Associations Multi-Pedestrian Tracking是 2022 年提出的一种基于检测的多目标跟踪算法核心思想是在 ByteTrack 的两阶段关联框架之上引入两项增强相机运动补偿Camera Motion Compensation, CMC通过全局运动估计将历史轨迹坐标对齐到当前帧缓解运动相机场景下的 ID 切换更高质量的检测框与更优的关联度量对检测器的 NMS 阈值进行针对性收紧并利用卡尔曼滤波对目标状态位置、宽高比、速度进行预测与更新。在 PaddleDetection 中BoT-SORT 被定位为一种组装式跟踪方案训练阶段只训练独立的检测器推理阶段再将检测器输出接入BOTSORTTracker组装成完整跟踪器用于评估 MOT 指标或部署上线。它同时也是 PP-Human、PP-Vehicle 等 Pipeline 分析项目跟踪方向的主要方案。论文引用Aharon, Nir et al. BoT-SORT: Robust Associations Multi-Pedestrian Tracking, arXiv:2206.14651完整 BibTeX 见文末。模型库与精度表现仓库在 configs/mot/botsort 目录下提供了以 PP-YOLOE-l 为检测器的 BoT-SORT 组装配置其在MOT-17 half Val Set上的结果如下检测训练数据集检测器输入尺度检测 mAPMOTAIDF1配置文件MOT-17 half trainPP-YOLOE-l640x64052.755.564.2botsort_ppyoloe.yml注意要点模型权重下载链接位于配置文件的det_weights字段中运行验证命令时脚本会自动下载无需手动准备权重。MOT17-half train由 MOT17 train 序列共 7 个视频每个视频的前一半帧的图片与标注组成验证精度时使用MOT17-half val每个视频的后一半帧。数据集可从仓库提供的下载地址获取后解压至dataset/mot/目录下。由于训练数据集、输入尺度、训练 epoch 数、NMS 阈值设置等不同均会导致模型精度与性能的差异请根据自身需求适配。配置文件深度解析BoT-SORT 的跟踪评估配置 botsort_ppyoloe.yml 是一个组装配置assembled config通过_BASE_继承检测器、数据集与 reader 三个子配置_BASE_: [ ../bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml, ../bytetrack/_base_/mot17.yml, ../bytetrack/_base_/ppyoloe_mot_reader_640x640.yml ] weights: output/botsort_ppyoloe/model_final log_iter: 20 snapshot_epoch: 2 metric: MOT # eval/infer 模式设为 COCO 则为训练模式 num_classes: 1 architecture: ByteTrack pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/ppyoloe_crn_l_300e_coco.pdparams ByteTrack: detector: YOLOv3 # 实际为 PP-YOLOE 检测器 reid: None # BoT-SORT 不需要 ReID 模型 tracker: BOTSORTTracker det_weights: https://bj.bcebos.com/v1/paddledet/models/mot/ppyoloe_crn_l_36e_640x640_mot17half.pdparams reid_weights: None检测器部分为跟踪收紧的 NMS配置中metric: MOT决定了该配置用于跟踪评估/推理若要切换回纯检测训练模式将其改为COCO即可。检测器部分沿用了 PP-YOLOE 结构CSPResNet主干 CustomCSPPAN颈部 PPYOLOEHead其中注释明确说明Tracking requires higher quality boxes, so NMS score_threshold will be higherPPYOLOEHead: fpn_strides: [32, 16, 8] grid_cell_scale: 5.0 grid_cell_offset: 0.5 static_assigner_epoch: -1 # 100 use_varifocal_loss: True loss_weight: {class: 1.0, iou: 2.5, dfl: 0.5} static_assigner: name: ATSSAssigner topk: 9 assigner: name: TaskAlignedAssigner topk: 13 alpha: 1.0 beta: 6.0 nms: name: MultiClassNMS nms_top_k: 1000 keep_top_k: 100 score_threshold: 0.1 # 原检测器为 0.01 nms_threshold: 0.4 # 原检测器为 0.6对比 ppyoloe_crn_l_36e_640x640_mot17half.yml 中的原始检测器配置可以发现跟踪版配置将 NMS 的score_threshold从 0.01 提升到 0.1、nms_threshold从 0.6 收紧到 0.4。这是因为跟踪关联对边界框质量敏感更严格的 NMS 过滤掉低质量、高重叠的重复框减少误关联是 BoT-SORT 获得稳健关联的前提。跟踪器部分BOTSORTTracker 参数BOTSORTTracker: track_high_thresh: 0.3 track_low_thresh: 0.2 new_track_thresh: 0.4 match_thresh: 0.7 track_buffer: 30 min_box_area: 0 camera_motion: False cmc_method: sparseOptFlow # 仅当 camera_motion 为 True 时生效 # 可选sparseOptFlow | files (Vidstab GMC) | orb | ecc各参数含义与 botsort_tracker.py 中BOTSORTTracker.__init__的默认值一一对应参数默认值含义track_high_thresh0.3高分检测框阈值用于第一阶段关联track_low_thresh0.2低分检测框过滤阈值低于此分数的检测被丢弃new_track_thresh0.4新建轨迹所需的最低检测分数match_thresh0.7关联IoU 匹配阈值track_buffer30轨迹保留帧数buffer_size int(frame_rate / 30.0 * track_buffer)即按帧率折算min_box_area0保留的最小检测框面积用于过滤过小目标camera_motionFalse是否启用相机运动补偿CMCcmc_methodsparseOptFlow相机运动估计方法sparseOptFlow稀疏光流、files读取 Vidstab GMC 文件、orbORB 特征、eccECC 变换数据集部分MOT 评估与推理EvalMOTDataset: !MOTImageFolder dataset_dir: dataset/mot data_root: MOT17/images/half keep_ori_im: True # DeepSORT 和 ByteTrack 中均设为 True TestMOTDataset: !MOTImageFolder dataset_dir: dataset/mot keep_ori_im: True # 如需保存可视化图片或视频须设为 Truekeep_ori_im: True表示保留原始尺寸图像——评估跟踪效果需要基于原图坐标计算 MOTA/IDF1同时保存可视化结果也依赖它。数据集目录结构要求为dataset/mot/MOT17/images/half对应 mot17.yml 中训练的MOT17/images/train。快速开始完整实战流程1. 训练检测器BoT-SORT 的训练即训练检测器。使用 ppyoloe_crn_l_36e_640x640_mot17half.yml 一键式启动训练与评估# 单卡训练 CUDA_VISIBLE_DEVICES0 python tools/train.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml --eval --amp # 多卡训练 python -m paddle.distributed.launch --log_dirppyoloe --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml --eval --amp该检测器配置在 PP-YOLOE-l 基础上做了 MOT 适配epoch: 36的微调 scheduleCosineDecay LinearWarmup、num_classes: 1仅行人单类、批量大小 8并开启use_ema: true指数滑动平均提升稳定性。2. 评估2.1 评估检测效果——使用tools/eval.pyCUDA_VISIBLE_DEVICES0 python tools/eval.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml2.2 评估跟踪效果——使用tools/eval_mot.pyCUDA_VISIBLE_DEVICES0 python tools/eval_mot.py -c configs/mot/botsort/botsort_ppyoloe.yml --scaledTrue注意评估检测使用tools/eval.py评估跟踪使用tools/eval_mot.py两者不可混用跟踪评估时会自动加载det_weights指定的检测权重。--scaled表示检测模型输出的坐标是否已缩放回原图若检测模型是 JDE YOLOv3 则为False若使用通用检测模型如 PP-YOLOE则为True默认值为False见 eval_mot.py 中的参数定义。跟踪结果会保存在{output_dir}/mot_results/中{output_dir}通过--output_dir设置默认output每个视频序列对应一个 txt每行格式为frame,id,x1,y1,w,h,score,-1,-1,-1。3. 导出预测模型BoT-SORT 的导出部署是单独导出检测模型再组装跟踪器运行的python tools/export_model.py -c configs/mot/bytetrack/detector/ppyoloe_crn_l_36e_640x640_mot17half.yml --output_diroutput_inference -o weightshttps://bj.bcebos.com/v1/paddledet/models/mot/ppyoloe_crn_l_36e_640x640_mot17half.pdparams4. 用导出的模型基于 Python 预测# 下载 demo 视频 wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mot17_demo.mp4 CUDA_VISIBLE_DEVICES0 python deploy/pptracking/python/mot_sde_infer.py --model_diroutput_inference/ppyoloe_crn_l_36e_640x640_mot17half --tracker_configdeploy/pptracking/python/tracker_config.yml --video_filemot17_demo.mp4 --deviceGPU --threshold0.5注意运行前需手动修改 tracker_config.yml 中的跟踪器类型为type: BOTSORTTracker该文件同时预置了JDETracker、OCSORTTracker、DeepSORTTracker、BOTSORTTracker四套参数其中BOTSORTTracker参数与配置文件中的一致可用于多方案对比。跟踪模型针对视频进行预测不支持单张图预测。默认保存跟踪结果可视化后的视频可添加--save_mot_txts每个视频保存一个 txt、--save_mot_txt_per_img每张图片保存一个 txt或--save_images保存跟踪结果可视化图片。跟踪结果 txt 每行格式同样是frame,id,x1,y1,w,h,score,-1,-1,-1。部署推理入口为 mot_sde_infer.py其中SDE_Detector将检测器输出逐帧送入跟踪器属于典型的 SDESeparate Detection and Embedding范式。源码级原理BOTSORTTracker 的关联流程PaddleDetection 中的BOTSORTTracker位于 botsort_tracker.py实现参考了 SMILEtrack 项目中的 BoT-SORT 跟踪器。其核心状态由三组轨迹列表构成tracked_stracks已确认轨迹、lost_stracks丢失轨迹、removed_stracks已移除轨迹。每次update()调用按以下步骤推进检测过滤与分档先按track_low_thresh过滤掉低分检测再按track_high_thresh将剩余检测分为高分与低分两档卡尔曼预测对tracked_stracks与lost_stracks的并集调用STrack.multi_predict用卡尔曼滤波预测当前帧位置状态空间为 8 维中心坐标 x/y、宽高比 a、高度 h 及其速度见 kalman_filter.py相机运动补偿可选当camera_motion: True时通过GMC估计帧间全局变换矩阵并用multi_gmc将轨迹均值与协方差变换到当前帧坐标系见 gmc.py支持稀疏光流、ORB、ECC 与文件四种方法第一阶段关联高分检测用 IoU 距离 线性分配Hungarian以match_thresh关联已跟踪/丢失轨迹与高分检测命中的丢失轨迹执行re_activate恢复第二阶段关联低分检测对剩余未匹配轨迹与低分检测以阈值 0.5 再关联一次弥补遮挡导致的短时检测降级未确认轨迹处理与新建轨迹单帧未确认的轨迹以 0.7 阈值尝试确认未匹配的高分检测若分数超过new_track_thresh则激活为新轨迹状态更新超过max_time_lost由track_buffer折算的丢失轨迹被移除最后合并轨迹列表并做去重。从整体架构看ppdet/engine/tracker.py 中的Tracker类统一承载了 JDEFairMOT 等与 SDEDeepSORT、ByteTrack、BoT-SORT两类跟踪器的评估逻辑BOTSORTTracker在评估时由配置中的ByteTrack.tracker: BOTSORTTracker字段动态创建这也解释了为什么 BoT-SORT 能直接复用 ByteTrack 的检测器训练与导出链路。延伸Pipeline 场景中的 BoT-SORTBoT-SORT 是 PP-Human 与 PP-Vehicle 等 Pipeline 分析项目跟踪方向的主要方案在行人/车辆流量统计、出入口计数等场景中可直接落地。相关使用方式参见Pipeline 项目说明 与 PP-Human MOT 教程PP-Tracking Python 部署文档。引用article{aharon2022bot, title{BoT-SORT: Robust Associations Multi-Pedestrian Tracking}, author{Aharon, Nir and Orfaig, Roy and Bobrovsky, Ben-Zion}, journal{arXiv preprint arXiv:2206.14651}, year{2022} }【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表