ARTICLE DETAIL

资讯详情

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

MMDetection 跟踪任务配置指南:从配置系统、TrackDataSample 到视频级数据管线

MMDetection 跟踪任务配置指南:从配置系统、TrackDataSample 到视频级数据管线 人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载本文面向需要在 MMDetection 中配置与调优多目标跟踪MOT任务的开发者系统讲解该仓库以 Python 文件为核心的模块化、可继承配置系统覆盖跟踪任务完整配置的各字段语义、--cfg-options命令行覆写技巧、configs/_base_组件继承机制、配置文件命名规范以及跟踪任务特有的TrackDataSample数据结构与UniformRefFrameSample关键帧采样管线并给出 SORT、DeepSORT、ByteTrack 等真实可运行的配置示例。读完本文你将能够独立阅读、修改、继承并调试任何 MOT 配置文件。一、配置系统的总体设计MMDetectionOpenMMLab Detection Toolbox采用Python 文件作为配置系统所有已提供的配置文件都位于仓库的 configs 目录下例如 configs/sort、configs/deepsort、configs/bytetrack 等。配置系统被设计为模块化 继承化模块化将数据集、模型、训练策略等拆分为独立文件可自由组合继承化通过_base_字段继承其他配置文件避免重复编写极大方便实验对比。如果你想查看某个配置被解析并合并后的完整最终形态可以运行python tools/misc/print_config.py /PATH/TO/CONFIG例如python tools/misc/print_config.py configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py该脚本定义于 tools/misc/print_config.py它会用mmengine.config.Config.fromfile读取配置、展开${key}变量引用replace_cfg_vals、并根据环境变量更新data_rootupdate_data_root最终打印继承合并后的完整配置。它还支持--save-path将完整配置另存为.py、.json或.yml文件便于追溯与分享实验记录。二、完整配置的字段构成一个完整的跟踪任务配置文件通常包含以下主要字段理解它们的语义是上手的第一步字段作用跟踪任务中的典型取值model模型整体配置包含data_preprocessor、detector、reid、tracker内含motion运动模型等子模块以及train_cfg、test_cfgtypeDeepSORT/typeByteTrack/typeSORTtrain_dataloader训练数据加载配置包含batch_size、num_workers、sampler、dataset、persistent_workers等samplerdict(typeTrackImgSampler)val_dataloader验证数据加载配置与训练类似与测试共用见下test_dataloader测试数据加载配置test_dataloader val_dataloaderval_evaluator验证评估器typeMOTChallengeMetric, metric[HOTA, CLEAR, Identity]test_evaluator测试评估器通常与验证评估器一致同上train_cfg训练循环配置typeEpochBasedTrainLoop如 ByteTrack 的 80 epoch 训练val_cfg验证循环配置typeValLooptest_cfg测试循环配置typeTestLoopdefault_hooks默认钩子计时、日志、参数调度、检查点、随机种子、可视化visualizationdict(typeTrackVisualizationHook, drawFalse)vis_backends可视化后端默认typeLocalVisBackendvisualizer可视化器MOT 任务使用typeTrackLocalVisualizerparam_scheduler参数调度器通常设置学习率策略CosineAnnealingLRQuadraticWarmupLR等optim_wrapper优化器封装优化器类型、学习率、梯度裁剪等dict(typeOptimWrapper, optimizerdict(typeSGD, lr0.02, ...))load_from预训练权重加载路径检测器或 ReID 模型的预训练 checkpointresume布尔值为True时从load_from指定的 checkpoint 恢复训练到对应迭代/轮次断点续训时使用2.1 以 SORT 配置为例解读字段以 configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 为例其_base_继承自三个基础文件_base_ [ ../_base_/models/faster-rcnn_r50_fpn.py, ../_base_/datasets/mot_challenge.py, ../_base_/default_runtime.py ]随后它把继承来的检测器提取出来改造为跟踪任务的检测器detector _base_.model detector.pop(data_preprocessor) detector.rpn_head.bbox_coder.update(dict(clip_borderFalse)) detector.roi_head.bbox_head.update(dict(num_classes1)) # MOT 只有 pedestrian 一类 detector[init_cfg] dict( typePretrained, checkpointhttps://download.openmmlab.com/mmtracking/mot/ faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth) del _base_.model然后组装最终的跟踪模型其中tracker.motion使用卡尔曼滤波model dict( typeDeepSORT, data_preprocessordict( typeTrackDataPreprocessor, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], bgr_to_rgbTrue, rgb_to_bgrFalse, pad_size_divisor32), detectordetector, trackerdict( typeSORTTracker, motiondict(typeKalmanFilter, center_onlyFalse), obj_score_thr0.5, match_iou_thr0.5, reidNone))注意model.data_preprocessor使用的是跟踪任务专属的 TrackDataPreprocessor定义于 track_data_preprocessor.py它在检测预处理的基础上支持视频帧批量处理train_dataloader None、train_cfg None表示该 SORT 配置只做推理评测、不训练。2.2 MOT Challenge 数据集与评估器配置跟踪任务的数据集与评估器基础配置在 configs/base/datasets/mot_challenge.pydataset_type MOTChallengeDataset data_root data/MOT17/ img_scale (1088, 1088) val_evaluator dict( typeMOTChallengeMetric, metric[HOTA, CLEAR, Identity]) test_evaluator val_evaluatorMOTChallengeMetric的实现位于 mmdet/evaluation/metrics/mot_challenge_metric.py其allowed_metrics [HOTA, CLEAR, Identity]默认前缀为motchallenge-metric即 MOT Challenge 官方的三组指标。它继承自BaseVideoMetric能够对视频级预测进行统一评测。三、通过脚本参数就地修改配置当使用 tools/train.py 训练或 tools/test_tracking.py 评测跟踪模型时都可以通过--cfg-options参数就地修改配置而无需改动配置文件本身。跟踪任务的测试脚本还额外提供了--detector、--reid参数可分别指定检测器与 ReID 模型的 checkpoint。下面分类说明--cfg-options的三种用法。3.1 更新 dict 链中的配置键按照原始配置中dict键的层级顺序即可定位目标键。例如将模型主干中所有 BN 模块设置为训练模式python tools/test_tracking.py \ configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py \ --checkpoint /path/to/checkpoint.pth \ --cfg-options model.detector.backbone.norm_evalFalse该命令会沿model - detector - backbone - norm_eval的键路径定位并改写配置值。3.2 更新配置列表中的关键字某些配置的dict关键字以列表形式组织例如测试数据管线test_dataloader.dataset.pipeline是一个列表[dict(typeLoadImageFromFile), ...]如果想将测试管线中的首元素LoadImageFromFile换成LoadImageFromWebcam摄像头实况推理使用下标索引定位--cfg-options test_dataloader.dataset.pipeline.0.typeLoadImageFromWebcam这里.0即列表第一个元素的下标type是其待修改字段。3.3 更新列表/元组的值被修改的目标本身可能是列表或元组例如修改data_preprocessor的均值--cfg-options model.data_preprocessor.mean[0,0,0]注意--cfg-options的取值中不允许出现空格否则命令行解析会出错如需复杂结构如嵌套列表应使用引号包裹并按 MMEngine 的 DictAction 规则书写。关于--cfg-options的完整解析规则包括列表/元组/嵌套值的写法详见 MMEngine 官方配置文档中关于“命令行覆写”的章节本仓库的 tools/test_tracking.py 与 tools/misc/print_config.py 均使用DictAction实现相同语义。四、配置文件结构与继承机制4.1 三种基础组件类型configs/base目录下有三类基础组件可用它们灵活拼装各种跟踪方法如 SORT、DeepSORT、ByteTrackdatasets数据集与数据管线如 mot_challenge.pymodels模型结构如 faster-rcnn_r50_fpn.pydefault_runtime.py默认运行时配置位于 configs/base/default_runtime.py。由_base_中组件组合而成的配置称为基元配置primitive config。工程实践上有两条约定同一文件夹下建议只保留一个基元配置文件其余文件均从基元继承继承层级最大为 3避免链条过深难以排查。4.2 继承已有方法 vs 新建方法如果是在既有方法如 Faster R-CNN基础上做修改应优先继承先通过_base_指定继承源再覆写必要字段。例如 ByteTrack 直接继承 YOLOX 的 COCO 配置 configs/yolox/yolox_x_8xb8-300e_coco.py_base_ [../yolox/yolox_x_8xb8-300e_coco.py]见 configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py。如果新方法与任何现有方法都不共享结构则在configs下新建一个method_name文件夹从_base_的三类组件组装。4.3 忽略基元中的某些字段_delete_True继承时若想丢弃基元配置中的某个字段可将其值设为_delete_True。典型场景是 ByteTrack 配置完全重写训练数据管线train_dataloader dict( _delete_True, # 丢弃基元中的 train_dataloader batch_sizebatch_size, samplerdict(typeDefaultSampler, shuffleTrue), ...)在 configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 中train_dataloader、val_dataloader、val_evaluator、default_hooks.checkpoint等多个字段都使用了_delete_True来彻底替换继承内容。关于_delete_的完整语义合并规则、嵌套行为参见 MMEngine 配置文档中的“继承与合并”章节。五、配置命名风格MMDetection 采用如下命名规范贡献者应遵循{method}_{module}_{train_cfg}_{train_data}_{test_data}各段含义如下{method}方法名例如sort、deepsort、bytetrack{module}方法的基本模块例如faster-rcnn_r50_fpn、yolox_x{train_cfg}训练配置通常包含批量大小与迭代次数例如8xb2-4e8 卡、batch 2、4 epoch、8xb4-80e{train_data}训练数据集例如mot17halftrain、crowdhuman{test_data}测试数据集例如test-mot17halfval。以实际文件 configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 为例方法为 SORT检测器为 Faster R-CNN R50 FPN训练配置为 8 卡 × batch 2、4 epoch在 MOT17 half-train 上训练、在 MOT17 half-val 上测试。该命名规则使文件名本身就是一份可读的“实验说明书”。六、跟踪数据结构与数据管线深入MMDetection 跟踪任务以视频为单位组织数据集并使用TrackDataSample描述数据信息这是与常规检测逐帧DetDataSample最本质的区别。6.1 TrackDataSample多帧检测样本的包装器TrackDataSample的实现位于 mmdet/structures/track_data_sample.py。它本质上可视为多个DetDataSample的包装器核心属性video_data_samples一个由DetDataSample组成的列表列表中的每个元素对应视频中的一帧通过下标即可取出某一帧的gt_instances、pred_instances等元信息metainfo与检测不同每个键对应的值是一个列表列表元素依次对应各帧的信息额外携带两个关键索引元信息key_frames_inds关键帧索引与ref_frames_inds参考帧索引用于剪辑clip训练提供便捷方法get_key_frames()、get_ref_frames()分别取回关键帧与参考帧样本实现了__len__、__getitem__以及to()、cpu()、cuda()、npu()、detach()、clone()等类张量方法便于设备迁移与深拷贝。该文件的 docstring 中附有完整可运行示例构造两帧DetDataSample含不同 shape 的gt_instances.bbox装配成TrackDataSample后打印结构、取关键帧/参考帧、按帧索引取样本并演示to(cuda)等操作。6.2 UniformRefFrameSample关键帧 参考帧采样基于视频组织MMDetection 提供了UniformRefFrameSample变换定义于 mmdet/datasets/transforms/frame_sampling.py用于均匀采样关键帧与参考帧再配合TransformBroadcaster完成剪辑训练。其构造参数如下参数默认值说明num_ref_imgs1要采样的参考帧数量frame_range10关键帧周围可采样的帧范围传int时等价于[-frame_range, frame_range]传list时须为长度 2 且满足左端 ≤ 0、右端 ≥ 0filter_key_imgTrue采样参考帧时是否过滤掉关键帧本身collect_video_keys[video_id, video_length]需要从视频级信息复制到帧级信息的键采样算法sampling_frames的关键逻辑计算合法帧区间left max(0, key_frame_id frame_range[0])、right min(key_frame_id frame_range[1], video_length - 1)在合法区间内默认剔除关键帧后用random.sample无放回抽取num_ref_imgs个参考帧若合法帧不足则将候选帧重复扩展后再采样输出sampled_frames_ids关键帧 参考帧排序与key_frame_flags标记各帧是否关键帧。在 configs/base/datasets/mot_challenge.py 的训练管线中它作为第一步被调用train_pipeline [ dict( typeUniformRefFrameSample, num_ref_imgs1, frame_range10, filter_key_imgTrue), dict( typeTransformBroadcaster, share_random_paramsTrue, transforms[ dict(typeLoadImageFromFile, backend_argsbackend_args), dict(typeLoadTrackAnnotations), dict( typeRandomResize, scaleimg_scale, ratio_range(0.8, 1.2), keep_ratioTrue, clip_object_borderFalse), dict(typePhotoMetricDistortion) ]), ... dict(typePackTrackInputs) ]TransformBroadcaster负责将其中定义的变换广播到采样出的所有帧上share_random_paramsTrue表示各帧共享同一随机参数如同一缩放保证剪辑内帧间空间一致性第二个TransformBroadcasterRandomCrop特意设置share_random_paramsFalse注释表明其目的是让不同帧裁剪位置不同增加时序多样性。最后一个TransformBroadcaster的RandomFlip又回到共享参数模式。6.3 视频级测试与图像级测试两种模式得益于基于视频的数据组织整个视频可以直接作为整体输入进行测试逻辑更简洁直观。测试管线同样使用TransformBroadcaster包装逐帧变换最后以PackTrackInputs打包见 mot_challenge.py 的test_pipeline。但如果 GPU 显存无法容纳整段视频MMDetection 也提供基于图像image-based的测试方法。两种方式的切换点在dataloader的sampler字段# 方式一image-based逐帧采样显存友好 samplerdict(typeTrackImgSampler) # 方式二video-based整段视频输入更简洁直观 # samplerdict(typeDefaultSampler, shuffleFalse, round_upFalse)TrackImgSampler的实现位于 mmdet/datasets/samplers/track_img_sampler.py。当前仓库的跟踪配置SORT、DeepSORT、ByteTrack、QDTrack默认采用 image-based 采样同时在注释中保留 video-based 的切换方式configs/qdtrack 的 README 也明确说明支持这两种评测/测试途径。七、可视化与运行时配置跟踪任务的可视化链路同样有专属组件visualizer使用typeTrackLocalVisualizer其实现位于 mmdet/visualization/local_visualizer.py负责在视频帧上绘制检测框、轨迹与 IDdefault_hooks.visualization使用typeTrackVisualizationHook实现于 mmdet/engine/hooks/visualization_hook.pydrawFalse表示训练/验证阶段不实际绘制图像仅保留可视化能力vis_backends默认[dict(typeLocalVisBackend)]将可视化结果保存到本地。典型配置片段摘自 configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.pydefault_hooks dict( loggerdict(typeLoggerHook, interval1), visualizationdict(typeTrackVisualizationHook, drawFalse)) vis_backends [dict(typeLocalVisBackend)] visualizer dict( typeTrackLocalVisualizer, vis_backendsvis_backends, namevisualizer) custom_hooks [ # 每个 epoch 结束时同步 BN 的 running_mean / running_var 等模型缓冲区 dict(typeSyncBuffersHook) ]ByteTrack 配置中还叠加了YOLOXModeSwitchHook、SyncNormHook、EMAHook指数滑动平均等自定义钩子以及三段式学习率调度前 1 epoch 二次方 warmup → 余弦退火 → 最后 10 epoch 固定学习率是学习复杂运行时配置的绝佳范例configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py。八、当前已知限制与后续规划根据文档的“要做的事”部分当前仓库在跟踪任务上存在两个已知限制部分算法不支持视频级测试StrongSORT、Mask2Former等算法对 GPU 显存要求较高暂不支持基于视频的整体输入测试未来会优化显存占用问题不支持混合数据联合训练暂时无法将基于视频的数据集如MOT Challenge与基于图像的数据集如用于QDTrack的Crowdhuman进行联合训练未来会优化此问题。了解这些限制有助于在选型与实验设计阶段规避踩坑例如训练含视频语义的任务时优先选择支持视频级测试且对显存友好的方案。九、实战速查从零配置一个跟踪实验最后给出配置与运行跟踪任务的最小流程选择基元从 configs/base/datasets/mot_challenge.py、configs/base/models/faster-rcnn_r50_fpn.py、configs/base/default_runtime.py 出发继承并改造在configs/下新建方法文件夹通过_base_继承按上文 2.1 的方式提取检测器、替换data_preprocessor为TrackDataPreprocessor、装配tracker含KalmanFilter运动模型与可选的reid模块DeepSORT 的 ReID 分支配置可参考 deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py其中reid使用mmpretrain.ResNet主干 LinearReIDHead分类损失 Triplet 损失输出 128 维特征校验配置用python tools/misc/print_config.py 你的配置查看合并后的完整配置运行训练tools/train.py测试/评测tools/test_tracking.py可用--detector、--reid分别指定检测与重识别 checkpoint临时调参一律通过--cfg-options完成保持配置文件干净可复现。配置是 MMDetection 跟踪任务的“入口语言”。掌握字段语义、继承规则、覆写技巧与视频级数据管线之后无论是复现 SORT/DeepSORT/ByteTrack 等基线还是设计新的跟踪算法你都能在配置层高效完成实验编排。赞分享人工智能计算机视觉深度学习模型评测【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址https://gitcode.com/gh_mirrors/mm/mmdetection点击查看免费下载相关推荐Obsidian插件本地化革命如何用智能翻译引擎打造完美中文工作空间Obsidian插件本地化革命如何用智能翻译引擎打造完美中文工作空间 还在为Obsidian插件的英文界面而困扰吗想象一下打开你最喜爱的笔记工具所有插件AI 应用开发工具大模型MMDetection 跟踪可视化实战指南TrackVisualizationHook 与 TrackLocalVisualizer 的配置、原理与验证MMDetection 跟踪可视化实战指南TrackVisualizationHook 与 TrackLocalVisualizer 的配置、原理与验证 导读人工智能计算机视觉深度学习模型评测Langfuse 仓库 turbo.json 配置实战从任务管线到 Package 配置的完整指南Langfuse 仓库 turbo.json 配置实战从任务管线到 Package 配置的完整指南 本文以 Langfuse 开源仓库AI 工程平台覆盖人工智能LLMOps可观测性AI 评测LLM 网关后端前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表