
MMDetection MOT 分析工具实战Tracker 参数搜索、错误可视化与数据集浏览【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection本文围绕 MMDetection 在tools/目录下提供的一组多目标跟踪MOT分析工具展开聚焦三个核心脚本测试期 Tracker 参数自动搜索mot_param_search.py、跟踪错误可视化mot_error_visualize.py以及训练数据集浏览browse_dataset.py。这些工具分别解决 MOT 模型调参繁琐、误差定位困难、数据配置难以直观校验三大实战痛点。读完本文你将掌握如何通过修改配置文件即可自动遍历 Tracker 参数组合并记录全套 MOT 指标、如何用红/黄/蓝三色框快速定位误报/漏检/ID 切换三类错误以及如何一键可视化训练数据以核对数据流水线配置。总览tools/analysis_tools/mot/下的 MOT 分析工具当前仓库的 MOT 分析工具统一位于 tools/analysis_tools/mot 目录包含以下可直接运行的脚本脚本用途mot_param_search.py在测试阶段自动搜索 MOT 模型中tracker的参数并记录评估指标mot_error_visualize.py基于推理结果对比 GT可视化误报、漏检、ID 切换三类跟踪错误browse_dataset.py逐帧可视化训练数据集校验数据集配置与数据流水线是否正确dist_mot_search.shmot_param_search.py的多卡分布式启动脚本slurm_mot_search.shmot_param_search.py的 Slurm 集群启动脚本下文逐一深入介绍其用法与底层实现。MOT 测试期参数搜索让 Tracker 超参自动寻优MOT 模型的tracker如 ByteTrack、DeepSORT 中的关联器包含目标置信度阈值、匹配 IoU 阈值等关键超参这些参数对最终跟踪指标影响显著手工逐个试错效率极低。mot_param_search.py 即为此设计它的用法与常规测试脚本 tools/test.py 基本一致区别仅在于配置文件——把需要搜索的参数值从标量改成列表脚本就会自动遍历所有参数组合并逐一测试、记录指标。第一步定义需要记录的评估指标在配置文件中将test_evaluator指定为MOTChallengeMetric并声明需要记录的指标test_evaluator dict( typeMOTChallengeMetric, metric[HOTA, CLEAR, Identity] )metric的内容可以自由裁剪从中任选一个或多个[HOTA, CLEAR, Identity]。从源码看MOTChallengeMetric 的可选指标就是这三类allowed_metrics [HOTA, CLEAR, Identity]此外还支持track_iou_thr跟踪评估 IoU 阈值默认 0.5、benchmark默认MOT17可选MOT15/MOT16/MOT17/MOT20/DanceTrack、format_only仅格式化结果不评估以及postprocess_tracklet_cfg如InterpolateTracklets轨迹插值后处理等参数。值得注意的是搜索脚本会自动把三大指标展开为更细的子指标见 mot_param_search.py选择HOTA时额外记录AssA关联准确率与DetA检测准确率选择CLEAR时额外记录MOTA、MOTP、IDSWID 切换数、TP、FN、FP、Frag碎片数、MT大多跟踪轨迹数、ML大多丢失轨迹数选择Identity时额外记录IDF1、IDTP、IDFN、IDFP、IDP、IDR。这样每组参数测试后输出的日志就能覆盖你关心的全部细化指标便于综合权衡。第二步把待搜索参数改为列表假设你的模型配置中包含一个 Trackermodel dict( trackerdict( typeBaseTracker, obj_score_thr0.5, match_iou_thr0.5 ) )要搜索 Tracker 的参数只需把对应的值改成列表model dict( trackerdict( typeBaseTracker, obj_score_thr[0.4, 0.5, 0.6], match_iou_thr[0.4, 0.5, 0.6, 0.7] ) )脚本会遍历全部组合即3 × 4 12个 case并逐一测试、记录结果。示例中只展示了BaseTracker的obj_score_thr/match_iou_thr实际项目的 Tracker 参数形式更为丰富例如仓库内置的 ByteTrack 配置 中ByteTracker使用的是成对阈值obj_score_thrsdict(high0.6, low0.1)、match_iou_thrsdict(high0.1, low0.5, tentative0.3)同样可以将这些 dict 中的取值换成列表参与搜索。搜索机制的源码解读get_search_params 会递归遍历cfg.model.tracker的配置树凡是值为list的键都被视为一个待搜索参数并记录其完整路径如obj_score_thr。随后脚本用itertools.product对全部参数取值求笛卡尔积生成所有候选 casemot_param_search.py日志会输出Totally 12 cases.之类的统计。每个 case 的测试流程为通过setattr将参数写入 tracker 实例 → 调用runner.test()跑完整评估 → 从message_hub中以test/motchallenge-metric/ metric为键读取各指标并格式化输出mot_param_search.py。最终每组参数的结果会以-------------- {obj_score_thr: 0.4, match_iou_thr: 0.4}: [0.621, ...] --------------的形式打印方便你横向对比后选定最优组合。命令行用法与分布式加速搜索脚本的参数与tools/test.py基本一致常用命令如下python tools/analysis_tools/mot/mot_param_search.py \ ${CONFIG_FILE} \ [--checkpoint ${CHECKPOINT}] \ [--detector ${DETECTOR_CHECKPOINT}] \ [--reid ${REID_CHECKPOINT}] \ [--work-dir ${WORK_DIR}] \ [--cfg-options ${OPTIONS}]各参数说明对应 mot_param_search.py 中的解析逻辑--checkpoint整体模型权重文件--detector仅当检测器与 ReID 分支分开训练时使用单独加载检测器权重。注意它与--checkpoint不能同时存在源码中有显式断言--reid单独加载 ReID 分支权重前提是已提供--checkpoint或--detector之一--work-dir保存评估结果的工作目录优先级为命令行 配置中的work_dir 以配置文件命名的默认目录--cfg-options以keyvalue形式覆盖配置项列表值需写成key[a,b]或keya,b--launcher分布式启动方式可选none/pytorch/slurm/mpi。多卡环境可直接使用仓库提供的启动脚本。单机多卡bash tools/analysis_tools/mot/dist_mot_search.sh ${CONFIG_FILE} ${GPUS} [--checkpoint ${CHECKPOINT}]该脚本通过torch.distributed.launch拉起${GPUS}个进程见 dist_mot_search.sh。Slurm 集群bash tools/analysis_tools/mot/slurm_mot_search.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${GPUS}支持通过环境变量GPUS_PER_NODE、CPUS_PER_TASK、SRUN_ARGS进一步定制调度参数见 slurm_mot_search.sh。需要提醒的是该脚本依赖trackeval库执行 MOT Challenge 指标评估mot_challenge_metric.py 中会在缺失时直接报错提示安装且要求配套低版本 NumPy使用前请先确认环境依赖完整。MOT 错误可视化红黄蓝三色定位跟踪缺陷评估指标只能给出量化结果无法直观回答错在哪里。mot_error_visualize.py 将推理结果与 GT 逐帧对齐把三类典型跟踪错误直接画在原始图像上方便定位检测器与跟踪器的具体缺陷。颜色约定默认情况下三类错误的框颜色约定为红色false positive误报——模型输出了 GT 中不存在的目标黄色false negative漏检——GT 中的目标未被模型检出蓝色ID switchID 切换——同一目标在跟踪过程中被错误地更换了编号。源码中三类错误由error_types字段区分0 FP、1 FN、2 ID 切换见 mot_error_visualize.py可视化能力封装在 mmdet/utils/mot_error_visualize.py 的imshow_mot_errors中。命令行参数python tools/analysis_tools/mot/mot_error_visualize.py \ ${CONFIG_FILE} \ --input ${INPUT} \ --result-dir ${RESULT_DIR} \ [--output-dir ${OUTPUT}] \ [--fps ${FPS}] \ [--show] \ [--backend ${BACKEND}]各参数含义与 parse_args 一一对应参数说明${CONFIG_FILE}测试配置文件路径--input输入数据视频/图片目录--result-dir推理结果目录必须包含所有视频的推理结果每个视频对应一个txt文件文件名为${video_name}.txt格式为 MOT Challenge 标准结果格式--output-dir可视化结果输出目录。若未指定则必须使用--show在线播放视频--fps输出视频的帧率源码默认值为3--show是否在线逐帧显示可视化结果--backend绘制边框的后端可选cv2或plt默认cv2工作流程与输出脚本的核心流程为见 mot_error_visualize.py依据配置文件构建验证集 Dataset并从其ann_file自动判断使用哪份 GT包含half-train时加载gt_half-train.txt包含half-val时加载gt_half-val.txt否则加载gt.txt建立frame_id → 图片路径的索引映射兼容 Windows/Linux 路径分隔符逐视频调用motmetrics库比较结果与 GT存在seqinfo.ini时走CLEAR_MOT_M否则走compare_to_groundtruth提取每一帧的 FP / MISS / SWITCH 三类事件对每个含错误事件的帧调用imshow_mot_errors绘制三色框并保存为{video_name}/{frame_id:06d}.jpg全部帧绘制完成后用mmcv.frames2video将帧序列按指定--fps合成为{output_dir}/{video_name}.mp4编码mp4v。因此最终在输出目录下每个视频既有一组逐帧标注图片也有一份可直接播放的mp4视频非常适合用于撰写分析报告或排查跟踪链路。浏览训练数据集可视化校验数据流水线在训练 MOT 模型之前确认数据加载与增强流水线配置正确是避免训练半天才发现数据错位的关键。browse_dataset.py 将训练数据集逐样本可视化让你直观检查标注框、图像尺寸、增强效果是否符合预期。命令与参数python tools/analysis_tools/mot/browse_dataset.py ${CONFIG_FILE} [--show-interval ${SHOW_INTERVAL}]可选参数SHOW_INTERVAL逐样本展示的间隔秒源码默认值为2--show是否在线显示图像默认开启--output-dir当没有显示接口如纯服务器环境时可将可视化结果保存到指定目录--cfg-options以keyvalue形式覆盖配置项。从 main 函数 的实现看脚本会读取配置中的train_dataloader.dataset构建数据集并用配置里的visualizer如TrackLocalVisualizer逐样本绘制 GTdraw_predFalse只画标注不画预测在--output-dir模式下还会为每个样本生成info.txt记录img_*.jpg与原始图片路径的映射关系便于事后回溯。使用建议训练前先用它跑一遍完整数据流水线包括 Mosaic、MixUp、RandomAffine 等增强确认边界框裁剪、标签保留等行为符合预期若在无显示环境如 Docker 或远程开发机中使用务必指定--output-dir否则无法看到可视化效果MOT 数据集的准备、标注格式与训练测试流程可进一步参考 tracking_dataset_prepare.md 与 tracking_train_test.md。三个工具的协同使用建议在实际 MOT 项目中三者的典型配合路径为先用browse_dataset.py确认数据与增强配置无误训练后用mot_param_search.py对tracker的关键阈值置信度、匹配 IoU做网格搜索选出综合指标最优的参数组合对最终模型的推理结果运行mot_error_visualize.py按颜色分类观察误报/漏检/ID 切换的高发帧反过来指导检测器难例挖掘或跟踪器后处理如轨迹插值的改进。更完整的 MOT 配置、推理与可视化用法可继续阅读 tracking_config.md、tracking_inference.md 与 tracking_visualization.md。【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考