MMDetection 多目标跟踪分析工具指南:参数搜索、误差可视化与数据集浏览 人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载MMDetection 在tools/目录下提供了丰富的跟踪分析工具本指南围绕其中三款 MOT多目标跟踪专用工具展开mot_param_search.py测试时跟踪器参数搜索、mot_error_visualize.py跟踪误差可视化、browse_dataset.py数据集浏览。读完本文你将掌握如何为 MOT 模型批量搜索tracker参数组合并自动记录评估指标、如何将漏检/误检/ID 切换三类跟踪错误逐帧渲染成视频以及如何快速检查 MOT 训练数据集配置的正确性。工具概览与适用前提本文涉及的工具位于 tools/analysis_tools/mot/ 目录共包含四个脚本与两个调度脚本文件用途mot_param_search.py测试时搜索tracker参数组合并记录评估指标mot_error_visualize.py可视化 MOT 的漏检、误检、ID 切换错误browse_dataset.py可视化训练数据集检查数据集配置dist_mot_search.sh基于torch.distributed.launch的多卡参数搜索启动脚本slurm_mot_search.sh基于 Slurm 集群的参数搜索启动脚本mot_param_search.py 依赖的评估器MOTChallenge 系列指标HOTA / CLEAR / Identity这些工具面向的是 MMDetection 中的 MOT 跟踪器tracker其实现位于 mmdet/models/trackers/包括BaseTracker、SORTTracker、ByteTracker、OCSORTTracker、QuasiDenseTracker、StrongSORTTracker、MaskTrackRCNNTracker等。不同跟踪器的参数不同但搜索与可视化的机制是一致的。MOT 测试时参数搜索mot_param_search.py跟踪器超参数如置信度阈值、匹配 IoU 阈值对跟踪结果尤其是 ID 切换与误检影响显著人工逐个调参非常低效。mot_param_search.py 支持在测试阶段自动遍历参数组合并记录每一组参数对应的评估指标从而帮助你快速选出最优配置。与 test.py 相同的用法不同的配置方式该脚本的调用方式与 tools/test.py 基本一致python tools/analysis_tools/mot/mot_param_search.py ${CONFIG_FILE} \ [--checkpoint ${CHECKPOINT}] \ [--work-dir ${WORK_DIR}] \ [--cfg-options ${CFG_OPTIONS}] \ [--launcher ${LAUNCHER}]命令行参数解析见 mot_param_search.py 中的parse_args${CONFIG_FILE}测试配置文件的路径必填--checkpoint模型权重文件--detector仅加载检测器的权重用于检测器与 ReID 分离训练的框架如 StrongSORT 类与--checkpoint不能同时存在源码第 122 行有断言--reid仅加载 ReID 分支的权重要求必须同时给定--checkpoint或--detector源码第 127-128 行断言且不能与--checkpoint同时存在--work-dir保存评估指标文件的目录。优先级为「命令行 配置片段 配置文件名」即未指定时默认使用./work_dirs/下以配置文件名为前缀的目录见 mot_param_search.py--cfg-options以xxxyyy键值对形式覆盖配置支持列表与嵌套列表语法如key[(a,b),(c,d)]注意引号必须保留且不允许空格--launcher启动方式可选none、pytorch、slurm、mpi默认none--local_rank分布式时的本地 rank。关键差异用列表声明要搜索的参数脚本与test.py最大的不同在于配置的写法。普通的 tracker 配置是这样的modeldict( trackerdict( typeBaseTracker, obj_score_thr0.5, match_iou_thr0.5 ) )要搜索某个参数只需把它的值从标量改成列表modeldict( trackerdict( typeBaseTracker, obj_score_thr[0.4, 0.5, 0.6], match_iou_thr[0.4, 0.5, 0.6, 0.7] ) )搜索逻辑笛卡尔积与逐组测试脚本的核心搜索流程位于 mot_param_search.py 的get_search_params函数与main函数中可以概括为三步递归收集搜索参数get_search_params递归遍历cfg.model.tracker配置树凡是值为list的字段都会被收集为待搜索参数并用点号拼接完整路径如obj_score_thr会变成obj_score_thr嵌套字段则为xxx.yyy同时打印日志提示正在搜索的字段及候选值生成笛卡尔积使用itertools.product对所有候选值求笛卡尔积得到全部参数组合。以上面的示例为例obj_score_thr有 3 个候选值、match_iou_thr有 4 个候选值总计3 × 4 12种情况脚本会打印Totally 12 cases.逐组测试并记录指标对每一组参数通过setattr将其写入runner.model.tracker若模型被MMDistributedDataParallel等包装则写入runner.model.module.tracker随后调用runner.test()执行一次完整测试。指标记录按 test_evaluator 的 metric 动态展开脚本记录的指标由配置中的test_evaluator决定其度量实现对应 MOTChallengeMetric默认支持三种指标族test_evaluatordict(typeMOTChallengeMetrics, metric[HOTA, CLEAR, Identity])metric可以是字符串或列表可从[HOTA, CLEAR, Identity]中自由选择一个或多个。脚本会根据所选指标族自动展开要记录的子指标见 mot_param_search.py选HOTA时额外记录AssA关联准确率、DetA检测准确率选CLEAR时额外记录MOTA、MOTP、IDSW、TP、FN、FP、Frag、MT、ML选Identity时额外记录IDF1、IDTP、IDFN、IDFP、IDP、IDR。每完成一组参数测试主进程rank 0会从runner.message_hub中按test/motchallenge-metric/{指标名}的键读取结果并以-------------- {参数组合}: {指标列表} --------------的格式打印到日志。最终你将得到 12 组参数各自的完整指标清单可直接横向对比选出最优组合。多卡并行搜索对于参数组合较多或视频较长的情况可以使用仓库提供的调度脚本加速# 基于 PyTorch 分布式启动 bash tools/analysis_tools/mot/dist_mot_search.sh ${CONFIG_FILE} ${GPUS} [其他参数] # 基于 Slurm 集群 bash tools/analysis_tools/mot/slurm_mot_search.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} [其他参数]dist_mot_search.sh 内部通过torch.distributed.launch --nproc_per_node${GPUS}启动并以--launcher pytorch传入脚本slurm_mot_search.sh 则以--launcherslurm提交作业。多进程时指标汇总仅在主进程打印避免重复输出。MOT 误差可视化mot_error_visualize.py评估指标只能告诉我们“差多少”却不能直观回答“错在哪里”。mot_error_visualize.py 将跟踪结果与真值GT对齐后逐帧标注三类典型错误并渲染成图片序列和视频方便快速定位问题帧。用法与参数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}]参数说明对应 mot_error_visualize.py 中的parse_args${CONFIG_FILE}配置文件路径脚本会用其中val_dataloader.dataset构建数据集以读取 GT 与图像路径源码第 105 行--input输入视频或图像序列--result-dir必填存放各视频推断结果的目录。每个视频的推断结果是一个txt文件文件名需与视频名一致格式为RESULT_DIR/{video_name}.txt--output-dir可视化结果的输出目录。若未指定则--show为必选用于即时弹窗显示视频源码第 90-92 行有对应断言--fps输出视频的帧率默认3--show是否即时显示视频--backend可视化后端可选cv2默认与plt。三类错误的颜色约定脚本默认使用三种颜色标注错误源码第 97-100 行的日志也有明确说明红色边界框误检false positiveFP即跟踪器输出了真值中不存在的目标黄色边界框漏检false negativeFN即真值中存在但跟踪器未检测到的目标蓝色边界框ID 切换ID switch即同一目标的身份 ID 发生了跳变。颜色在 mmdet/utils/mot_error_visualize.py 中由 seaborn 色板取出red / yellow / blue分别对应error_type的0 / 1 / 2。其中 FN 目标因没有匹配的检测结果不会绘制 score 与 id 文本FP 与 ID switch 目标则会绘制置信度分数与 ID。工作原理motmetrics 事件驱动脚本的核心逻辑是 compare_res_gts 与main中的逐帧渲染循环加载 GT 与结果根据dataset.ann_file是否包含half-train/half-val后缀分别读取gt_half-train.txt/gt_half-val.txt/gt.txt对应 MOT 的 half 划分与全量测试协议再读取RESULT_DIR/{video_name}.txt作为推断结果若seqinfo.ini存在则用CLEAR_MOT_M计算累积关联矩阵否则退化为compare_to_groundtruth提取事件通过acc.mot_events获取每一帧的关联事件其中Type FP为误检、Type MISS为漏检、Type SWITCH为 ID 切换逐帧组装边界框为三类事件分别构造[x1, y1, x2, y2, score]形式的边界框、ids与error_types0/1/2 对应 FP/FN/IDSW调用imshow_mot_errors渲染FN 的边界框来自 GTid 置为-1输出图片与视频每帧结果保存为{output_dir}/{video_name}/{frame_id:06d}.jpg全部帧渲染完成后用mmcv.frames2video以mp4v编码和指定fps合成{video_name}.mp4源码第 197-204 行。两种可视化后端imshow_mot_errors 根据backend分发到两个实现cv2后端_cv2_show_wrong_tracks使用 OpenCV 绘制矩形、置信度文本与 ID 文本适合实时播放与批量出图plt后端_plt_show_wrong_tracks使用 matplotlib 的Rectanglepatch 与text绘制保存时固定dpi300适合生成高分辨率、可直接用于论文或报告的图片。两个实现都做了输入校验边界框必须是(k, 5)二维数组、ids 与 error_types 必须为一维且长度一致并会将越界边界框裁剪到图像范围内。注意cv2后端依赖seaborn若未安装会抛出ImportError提示pip install seaborn。浏览数据集browse_dataset.py在配置好 MOT 训练数据集如 CrowdHuman、MOT17 等后先用可视化手段确认数据加载、标注与数据增强是否符合预期是最省时的排错方式。browse_dataset.py 专门用于此目的。用法python tools/analysis_tools/mot/browse_dataset.py ${CONFIG_FILE} \ [--show-interval ${SHOW_INTERVAL}] \ [--show] \ [--output-dir ${OUTPUT_DIR}] \ [--cfg-options ${CFG_OPTIONS}]参数说明对应 browse_dataset.py${CONFIG_FILE}训练配置文件路径脚本使用其中train_dataloader.dataset构建数据集源码第 48 行--show-interval显示间隔时间秒默认2--show是否即时显示图像默认开启--output-dir无显示界面时用于保存可视化结果的目录例如远程服务器场景指定后每张图按{output_dir}/{idx:06d}/img_{img_idx}.jpg保存并同步写入info.txt记录原始文件路径映射源码第 61-80 行--cfg-options与搜索工具相同的键值对覆盖语法。执行流程脚本读取配置后依次完成以下动作见 browse_dataset.py用DATASETS.build(cfg.train_dataloader.dataset)构建数据集并用VISUALIZERS.build(cfg.visualizer)构建可视化器将dataset.metainfo类别信息等写入visualizer.dataset_meta遍历数据集对每个样本调用visualizer.add_datasample以draw_predFalse仅绘制 GT 标注避免预测框干扰检查支持 BGR→RGB 转换后展示/保存ProgressBar会实时显示遍历进度。通过逐帧查看 GT 框与图像是否对齐、类别是否正确、视频帧是否连续即可快速发现data_root路径错误、标注文件格式问题或数据增强配置异常。小结三件工具的配合使用这三款工具覆盖了 MOT 开发流程中的三个关键环节配置校验先用browse_dataset.py确认数据正确加载参数调优用mot_param_search.py批量搜索tracker的obj_score_thr、match_iou_thr等关键阈值依据 HOTA/MOTA/IDF1 等指标选择最优组合错误分析用mot_error_visualize.py把 FP/FN/ID 切换逐帧渲染出来定位是检测器阈值问题、匹配策略问题还是遮挡导致的 ID 跳变从而反哺参数搜索的范围设定。配套的完整配置示例可参考 configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 中trackerdict(typeByteTracker, ...)的写法以及 mmdet/models/trackers/sort_tracker.py 中SORTTracker对obj_score_thr、match_iou_thr等参数的定义与默认值——搜索的候选区间应围绕这些默认值展开才能在有限组合内快速逼近最优配置。赞分享人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载相关推荐MMDetection MOT 分析工具实战Tracker 参数搜索、错误可视化与数据集浏览MMDetection MOT 分析工具实战Tracker 参数搜索、错误可视化与数据集浏览 本文围绕 MMDetection 在 tools/ 目录下提供的人工智能计算机视觉深度学习模型评测MMDetection 多目标跟踪配置完全指南从 Config 语法到视频数据结构MMDetection 多目标跟踪配置完全指南从 Config 语法到视频数据结构 本文围绕 MMDetection 仓库中的 docs/en/user_gu人工智能计算机视觉深度学习模型评测贡献者参与度跟踪工具All Contributors数据可视化方案贡献者参与度跟踪工具All Contributors数据可视化方案 你是否曾为开源项目中贡献者的贡献难以量化而烦恼是否希望能直观地展示每位贡献者的付出无论开源治理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考