快捷键

了解配置

我们使用 Python 文件作为我们的配置系统。您可以在 $MMDetection/configs 下找到所有提供的配置。

我们将模块化和继承设计融入到我们的配置系统中,这有利于进行各种实验。如果您希望检查配置文件,可以运行 python tools/misc/print_config.py /PATH/TO/CONFIG 来查看完整的配置。

完整配置的简要描述

完整的配置通常包含以下主要字段

  • model: 模型的基本配置,可能包含 data_preprocessor、模块(例如,detectormotion)、train_cfgtest_cfg 等。

  • train_dataloader: 训练数据加载器的配置,通常包含 batch_sizenum_workerssamplerdataset 等。

  • val_dataloader: 验证数据加载器的配置,与 train_dataloader 类似。

  • test_dataloader: 测试数据加载器的配置,与 train_dataloader 类似。

  • val_evaluator: 验证评估器的配置。例如,type='MOTChallengeMetrics' 用于 MOTChallenge 基准测试上的 MOT 任务。

  • test_evaluator: 测试评估器的配置,与 val_evaluator 类似。

  • train_cfg: 训练循环的配置。例如,type='EpochBasedTrainLoop'

  • val_cfg: 验证循环的配置。例如,type='VideoValLoop'

  • test_cfg: 测试循环的配置。例如,type='VideoTestLoop'

  • default_hooks: 默认钩子的配置,可能包含用于计时器、日志记录器、参数调度器、检查点、采样器种子、可视化等钩子。

  • vis_backends: 可视化后端的配置,默认使用 type='LocalVisBackend'

  • visualizer: 可视化器的配置。type='TrackLocalVisualizer' 用于 MOT 任务。

  • param_scheduler: 参数调度器的配置,通常设置学习率调度器。

  • optim_wrapper: 优化器包装器的配置,包含与优化相关的配置信息,例如优化器、梯度裁剪等。

  • load_from: 从给定路径加载模型作为预训练模型。

  • resume: 如果为 True,则从 load_from 恢复检查点,训练将从保存检查点的时期开始恢复。

通过脚本参数修改配置

当使用 tools/train.pytools/test_tracking.py 提交作业时,您可以指定 --cfg-options 来就地修改配置。我们提供以下几个示例。有关更多详细信息,请参阅 MMEngine

  • 更新字典链中的配置键。

    配置选项可以按照原始配置中字典键的顺序指定。例如,--cfg-options model.detector.backbone.norm_eval=False 会将模型骨干中的所有 BN 模块更改为训练模式。

  • 更新列表配置中的键。

    一些配置字典在您的配置中以列表形式组成。例如,测试管道 test_dataloader.dataset.pipeline 通常是一个列表,例如 [dict(type='LoadImageFromFile'), ...]。如果您想将管道中的 LoadImageFromFile 更改为 LoadImageFromWebcam,可以指定 --cfg-options test_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam

  • 更新列表/元组的值。

    可能要更新的值是一个列表或一个元组。例如,您可以通过指定 --cfg-options model.data_preprocessor.mean=[0,0,0] 来更改 data_preprocessor 的键 mean。请注意,在指定的值中 **不允许** 使用空格。

配置文件结构

config/_base_ 下有 3 种基本组件类型,即数据集、模型和默认运行时。许多方法可以很容易地用其中的一种构建,例如 SORT、DeepSORT。由来自 _base_ 的组件组成的配置被称为原始配置。

对于同一文件夹下的所有配置,建议只有一个原始配置。所有其他配置都应该继承自原始配置。这样一来,继承的最高级别就是 3。

为了便于理解,我们建议贡献者从现有方法继承。例如,如果对 Faster R-CNN 进行了一些修改,用户可能首先通过指定 _base_ = ../_base_/models/faster-rcnn_r50-dc5.py 继承基本 Faster R-CNN 结构,然后在配置文件中修改必要的字段。

如果您正在构建一种与现有任何方法都没有结构共享的全新方法,则可以在 configs 下创建名为 method_name 的文件夹。

请参阅 MMEngine 获取详细文档。

配置名称风格

我们遵循以下风格来命名配置文件。建议贡献者遵循相同的风格。

{method}_{module}_{train_cfg}_{train_data}_{test_data}
  • {method}: 方法名称,例如 sort

  • {module}: 方法的基本模块,例如 faster-rcnn_r50_fpn

  • {train_cfg}: 训练配置,通常包含批次大小、时期等,例如 8xb4-80e

  • {train_data}: 训练数据,例如 mot17halftrain

  • {test_data}: 测试数据,例如 test-mot17halfval

常见问题解答

忽略基本配置中的某些字段

有时,您可以设置 _delete_=True 来忽略基本配置中的某些字段。您可以参考 MMEngine 获取简单的示例。

跟踪数据结构介绍

优势和新特性

在 mmdetection 跟踪任务中,我们使用视频来组织数据集,并使用 TrackDataSample 来描述数据集信息。

  • 基于视频组织,我们提供了变换 UniformRefFrameSample 来采样关键帧和参考帧,并使用 TransformBroadcaster 用于剪辑训练。

  • TrackDataSample 在一定程度上可以被视为多个 DetDataSample 的包装器。它包含一个属性 video_data_samples,它是一个 DetDataSample 列表,每个 DetDataSample 对应一个单帧。此外,它的元信息包括 key_frames_inds 和 ref_frames_inds 以应用剪辑训练方式。

  • 由于基于视频的数据组织,整个视频可以直接测试。这种方式更加简洁直观。我们也提供了基于图像的测试方法,如果您的 GPU 内存无法容纳整个视频。

待办事项

  • 一些算法,如 StrongSORT、Mask2Former,不支持基于视频的测试。这些算法对 GPU 内存提出了挑战。我们将在未来优化这个问题。

  • 目前,我们不支持针对算法 QDTrack 同时训练基于视频的数据集(如 MOT Challenge Dataset)和基于图像的数据集(如 Crowdhuman)。我们将在未来优化这个问题。