-
Notifications
You must be signed in to change notification settings - Fork 9.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CodeCamp2023-495]Translation into Chinese of an English document. (#…
…10805) Co-authored-by: Haian Huang(深度眸) <1286304229@qq.com>
- Loading branch information
1 parent
987f1f0
commit 9e752d8
Showing
1 changed file
with
109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
# 学习更多与配置相关的事 | ||
|
||
我们用 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`:验证数据集的配置,与训练数据集的配置类似; | ||
|
||
`test_dataloader`:测试数据集的配置,与训练数据集的配置类似; | ||
|
||
`val_evaluator`:验证评估器的配置,例如 `type='MOTChallengeMetrics'` 是 MOT 任务里面的测量标准; | ||
|
||
`test_evaluator`:测试评估器的配置,与验证评估器的配置类似; | ||
|
||
`train_cfg`:训练循环的配置,例如 `type='EpochBasedTrainLoop'` ; | ||
|
||
`val_cfg`:验证循环的配置,例如 `type='VideoValLoop'` ; | ||
|
||
`test_cfg`:测试循环的配置,例如 `type='VideoTestLoop'` ; | ||
|
||
`default_hooks`:默认鱼钩的配置,包含计时器、日志、参数调度程序、检查点、样本种子、可视化; | ||
|
||
`vis_backends`:可视化后端的配置,默认使用 `type='LocalVisBackend'` ; | ||
|
||
`visualizer`:可视化工具的配置,例如MOT任务使用 `type='TrackLocalVisualizer'` ; | ||
|
||
`param_scheduler`:参数调度程序的配置,通常里面设置学习率调度程序; | ||
|
||
`optim_wrapper`:优化器封装的配置,包含优化相关的信息,例如优化器、梯度剪裁等; | ||
|
||
`load_from`:加载预训练模型的路径; | ||
|
||
`resume`:布尔值,如果是 `True` ,会从 `load_from` 加载模型的检查点,训练会恢复至检查点的迭代次数。 | ||
|
||
## 通过脚本参数修改配置 | ||
|
||
当使用 `tools/train.py` 或 `tools/test_trackin.py` 执行任务时,可以指定 `--cfg-options` 来就地修改配置。我们举几个例子如下。有关更多详细信息,请参阅[MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)。 | ||
|
||
### 更新 dict 链的配置键 | ||
|
||
可以按照原始配置中 `dict` 键的顺序指定配置选项,例如,设置 `--cfg-options model.detector.backbone.norm_eval=False` 会将模型主干中的所有 `BN` 模块更改为训练模式。 | ||
|
||
### 更新配置列表中的关键字 | ||
|
||
一些配置的 `dict` 关键字会以列表的形式组成,例如,测试管道中的 `test_dataloader.dataset.pipeline` 以列表形式出现,即 `[dict(type='LoadImageFromFile'), ...]`。如果你想在测试管道中将 `LoadImageFromFile` 更改为 `LoadImageFromWebcam`,可以设置 `--cfg-options test_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam`。 | ||
|
||
### 更新列表/元组的值 | ||
|
||
要被更新的可能是一个列表或一个元组,例如,你可以通过指定 `--cfg options model.data_processor.mean=[0,0,0]` 来更改 `data_preprocessor` 的平均值的关键字。请注意,指定值内不允许有空格。 | ||
|
||
## 配置文件结构 | ||
|
||
`config/_base_` 下有三种基本组件类型,即数据集、模型和默认运行时间。可以用它们来轻松构建许多方法,例如 `SORT`,`DeepSORT`。由 `_base_` 中的组件组成的配置称为基元。 | ||
|
||
对于同一文件夹下的配置文件,建议只有一个基元配置文件。其他配置文件都应该从基元配置文件继承基本结构,这样,继承级别的最大值为 3。 | ||
|
||
为了便于理解,我们建议贡献者继承现有的方法。例如,如果在 `Faster R-CNN` 的基础上进行了一些修改,用户可以首先通过指定 `_base_ = ../_base_/models/faster-rcnn_r50-dc5.py` 来继承基本的 `Faster R-CNN` 结构,然后修改配置文件中的必要字段。 | ||
|
||
如果你正在构建一个与任何现有方法都不共享结构的全新方法,则可以在 `configs` 下创建一个新文件夹 method_name。 | ||
|
||
有关详细文档,请参阅[MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)。 | ||
|
||
## 配置命名风格 | ||
|
||
我们根据以下风格去命名配置文件,建议贡献者遵从相同风格。 | ||
|
||
`{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](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)进行简单说明。 | ||
|
||
### 跟踪数据结构介绍 | ||
|
||
#### 优点和新功能 | ||
|
||
在 `mmdetection` 跟踪任务中,我们使用视频来组织数据集,并使用 `TrackDataSample` 来描述数据集信息。 | ||
|
||
基于视频组织,我们提供了 `transform UniformRefFrameSample` 来对关键帧和参考帧进行采样,并使用 `TransformBroadcaster` 进行剪辑训练。 | ||
|
||
在某种程度上,`TrackDataSample` 可以被视为多个 `DetDataSample` 的包装器。它包含一个 `video_data_samples`,这是一个以 `DetDataSample` 组成的列表,里面每个 `DetDataSample` 对应一个帧。此外,它的元信息包括关键帧的索引和参考帧的索引,用与剪辑训练。 | ||
|
||
得益于基于视频的数据组织,整个视频可以直接被测试。这种方式更简洁直观。如果你的 GPU 内存无法容纳整个视频,我们还提供基于图像的测试方法。 | ||
|
||
## 要做的事 | ||
|
||
`StrongSORT`、`Mask2Former` 等算法不支持基于视频的测试,这些算法对 GPU 内存提出了挑战,我们将来会优化这个问题。 | ||
|
||
现在,我们不支持像 `MOT Challenge dataset` 这样的基于视频的数据集和像 `Crowdhuman` 用于 `QDTrack` 算法这样的基于图像的数据集进行联合训练。我们将来会优化这个问题。 |