了解配置¶
我们使用 Python 文件作为我们的配置系统。您可以在 $MMDetection/configs 下找到所有提供的配置。
我们将模块化和继承设计融入到我们的配置系统中,这有利于进行各种实验。如果您希望检查配置文件,可以运行 python tools/misc/print_config.py /PATH/TO/CONFIG
来查看完整的配置。
完整配置的简要描述¶
完整的配置通常包含以下主要字段
model
: 模型的基本配置,可能包含data_preprocessor
、模块(例如,detector
、motion
)、train_cfg
、test_cfg
等。train_dataloader
: 训练数据加载器的配置,通常包含batch_size
、num_workers
、sampler
、dataset
等。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.py
或 tools/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
。
跟踪数据结构介绍¶
优势和新特性¶
在 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)。我们将在未来优化这个问题。