Commit 17ac0691 authored by Xiangxu-0103's avatar Xiangxu-0103 Committed by ZwwWayne
Browse files

[Docs] Refine the documentation (#1994)



* refine doc

* refine docs

* replace `CLASSES` with `classes`

* update doc

* Minor fix
Co-authored-by: default avatarTai-Wang <tab_wang@outlook.com>
parent 116d9f23
# 常见问题解答 # 常见问题解答
我们列出了一些用户和开发者在开发过程中会遇到的常见问题以及对应的解决方案,如果您发现了任何频繁出现的问题,请随时扩充本列表,非常欢迎您提出的任何解决方案。如果您在环境配置、模型训练等工作中遇到任何的问题,请使用[问题模板](https://github.com/open-mmlab/mmdetection3d/blob/master/.github/ISSUE_TEMPLATE/error-report.md/)来创建相应的 issue,并将所需的所有信息填入到问题模板中,我们会尽快解决您的问题。 我们列出了一些用户和开发者在开发过程中会遇到的常见问题以及对应的解决方案,如果您发现了任何频繁出现的问题,请随时扩充本列表,非常欢迎您提出的任何解决方案。如果您在环境配置、模型训练等工作中遇到任何的问题,请使用[问题模板](https://github.com/open-mmlab/mmdetection3d/blob/master/.github/ISSUE_TEMPLATE/error-report.md)来创建相应的 issue,并将所需的所有信息填入到问题模板中,我们会尽快解决您的问题。
## MMEngine/MMCV/MMDet/MMDet3D 安装 ## MMEngine/MMCV/MMDet/MMDet3D 安装
...@@ -8,13 +8,13 @@ ...@@ -8,13 +8,13 @@
- MMDetection3D 需要的 MMEngine, MMCV 和 MMDetection 的版本列在了下面。请安装正确版本的 MMEngine、MMCV 和 MMDetection 以避免相关的安装问题。 - MMDetection3D 需要的 MMEngine, MMCV 和 MMDetection 的版本列在了下面。请安装正确版本的 MMEngine、MMCV 和 MMDetection 以避免相关的安装问题。
| MMDetection3D 版本 | MMEngine 版本 | MMCV 版本 | MMDetection 版本 | | MMDetection3D 版本 | MMEngine 版本 | MMCV 版本 | MMDetection 版本 |
| ---------------- | :----------------------: | :---------------------: | :----------------------: | | ---------------- | :----------------------: | :---------------------: | :----------------------: |
| dev-1.x | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 | | dev-1.x | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 |
| v1.1.0rc1 | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 | | v1.1.0rc1 | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 |
| v1.1.0rc0 | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 | | v1.1.0rc0 | mmengine>=0.1.0, \<1.0.0 | mmcv>=2.0.0rc0, \<2.1.0 | mmdet>=3.0.0rc0, \<3.1.0 |
**注意**:如果你想安装 mmdet3d-v1.0.0rcx,可以在[此处](https://mmdetection3d.readthedocs.io/en/latest/faq.html#mmcv-mmdet-mmdet3d-installation)找到 MMDetection,MMSegmentation 和 MMCV 的兼容版本。请选择正确版本的 MMCV、MMDetection 和 MMSegmentation 以避免安装问题。 **注意**:如果你想安装 mmdet3d-v1.0.0rcx,可以在[此处](https://mmdetection3d.readthedocs.io/en/latest/faq.html#mmcv-mmdet-mmdet3d-installation)找到 MMDetection,MMSegmentation 和 MMCV 的兼容版本。请选择正确版本的 MMCV、MMDetection 和 MMSegmentation 以避免安装问题。
- 如果您在 `import open3d` 时遇到下面的问题: - 如果您在 `import open3d` 时遇到下面的问题:
......
# 学习配置文件 # 学习配置文件
MMDetection3D 和其他 OpenMMLab 仓库使用[MMEngine 配置系统](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/config.html)。它具有模块化和继承性设计,便于进行各种实验。 MMDetection3D 和其他 OpenMMLab 仓库使用[MMEngine 配置系统](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/config.html)。它具有模块化和继承性设计,便于进行各种实验。如果希望检查配置文件,可以通过运行 `python tools/misc/print_config.py /PATH/TO/CONFIG` 来查看完整的配置。
如果希望检查配置文件,可以通过运行 `python tools/misc/print_config.py /PATH/TO/CONFIG` 来查看完整的配置。
## 配置文件内容 ## 配置文件内容
...@@ -119,7 +118,7 @@ data_root = 'data/kitti/' ...@@ -119,7 +118,7 @@ data_root = 'data/kitti/'
class_names = ['Pedestrian', 'Cyclist', 'Car'] class_names = ['Pedestrian', 'Cyclist', 'Car']
point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1] point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1]
input_modality = dict(use_lidar=True, use_camera=False) input_modality = dict(use_lidar=True, use_camera=False)
metainfo = dict(CLASSES=['Pedestrian', 'Cyclist', 'Car']) metainfo = dict(classes=['Pedestrian', 'Cyclist', 'Car'])
db_sampler = dict( db_sampler = dict(
data_root='data/kitti/', data_root='data/kitti/',
info_path='data/kitti/kitti_dbinfos_train.pkl', info_path='data/kitti/kitti_dbinfos_train.pkl',
...@@ -250,7 +249,7 @@ train_dataloader = dict( ...@@ -250,7 +249,7 @@ train_dataloader = dict(
], ],
modality=dict(use_lidar=True, use_camera=False), modality=dict(use_lidar=True, use_camera=False),
test_mode=False, test_mode=False,
metainfo=dict(CLASSES=['Pedestrian', 'Cyclist', 'Car']), metainfo=dict(classes=['Pedestrian', 'Cyclist', 'Car']),
box_type_3d='LiDAR'))) box_type_3d='LiDAR')))
val_dataloader = dict( val_dataloader = dict(
batch_size=1, batch_size=1,
...@@ -289,7 +288,7 @@ val_dataloader = dict( ...@@ -289,7 +288,7 @@ val_dataloader = dict(
], ],
modality=dict(use_lidar=True, use_camera=False), modality=dict(use_lidar=True, use_camera=False),
test_mode=True, test_mode=True,
metainfo=dict(CLASSES=['Pedestrian', 'Cyclist', 'Car']), metainfo=dict(classes=['Pedestrian', 'Cyclist', 'Car']),
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
test_dataloader = dict( test_dataloader = dict(
batch_size=1, batch_size=1,
...@@ -328,7 +327,7 @@ test_dataloader = dict( ...@@ -328,7 +327,7 @@ test_dataloader = dict(
], ],
modality=dict(use_lidar=True, use_camera=False), modality=dict(use_lidar=True, use_camera=False),
test_mode=True, test_mode=True,
metainfo=dict(CLASSES=['Pedestrian', 'Cyclist', 'Car']), metainfo=dict(classes=['Pedestrian', 'Cyclist', 'Car']),
box_type_3d='LiDAR')) box_type_3d='LiDAR'))
``` ```
...@@ -360,17 +359,17 @@ test_cfg = dict(type='TestLoop') ...@@ -360,17 +359,17 @@ test_cfg = dict(type='TestLoop')
### 优化器配置 ### 优化器配置
`optim_wrapper` 字段用来配置优化器相关设置。优化器包装器不仅提供优化器的功能,用时也支持其它功能,如梯度裁剪、混合精度训练等。更多内容参考[优化器包装器教程](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optimizer.html) `optim_wrapper` 字段用来配置优化器相关设置。优化器包装器不仅提供优化器的功能,用时也支持其它功能,如梯度裁剪、混合精度训练等。更多细节请参考[优化器封装教程](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optimizer.html)
```python ```python
optim_wrapper = dict( # Optimizer wrapper config optim_wrapper = dict( # 优化器封装配置
type='OptimWrapper', # Optimizer wrapper type, switch to AmpOptimWrapper to enable mixed precision training. type='OptimWrapper', # 优化器封装类型,切换成 AmpOptimWrapper 使用混合精度训练
optimizer=dict( # Optimizer config. Support all kinds of optimizers in PyTorch. Refer to https://pytorch.org/docs/stable/optim.html#algorithms optimizer=dict( # 优化器配置。支持 PyTorch 中所有类型的优化器。参考 https://pytorch.org/docs/stable/optim.html#algorithms
type='AdamW', lr=0.001, betas=(0.95, 0.99), weight_decay=0.01), type='AdamW', lr=0.001, betas=(0.95, 0.99), weight_decay=0.01),
clip_grad=dict(max_norm=35, norm_type=2)) # Gradient clip option. Set None to disable gradient clip. Find usage in https://mmengine.readthedocs.io/en/latest/tutorials clip_grad=dict(max_norm=35, norm_type=2)) # 梯度裁剪选项。设置 None 禁用梯度裁剪。用法请参考 https://mmengine.readthedocs.io/zh_CN/latest/tutorials
``` ```
`param_scheduler` 字段用来配置调整优化器超参数,例如学习率和动量。用户可以组合多个调度程序来创建所需要的参数调整策略。更多内容参考[参数调度器教程](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/param_scheduler.html)[参数调度器 API 文档](TODO) `param_scheduler` 字段用来配置调整优化器超参数,例如学习率和动量。用户可以组合多个调度来创建所需要的参数调整策略。更多细节请参考[参数调度器教程](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/param_scheduler.html)[参数调度器 API 文档](TODO)
```python ```python
param_scheduler = [ param_scheduler = [
...@@ -426,13 +425,13 @@ default_hooks = dict( ...@@ -426,13 +425,13 @@ default_hooks = dict(
### 运行配置 ### 运行配置
```python ```python
default_scope = 'mmdet3d' # The default registry scope to find modules. Refer to https://mmengine.readthedocs.io/en/latest/tutorials/registry.html default_scope = 'mmdet3d' # 寻找模块的默认注册域。参考 https://mmengine.readthedocs.io/zh_CN/latest/tutorials/registry.html
env_cfg = dict( env_cfg = dict(
cudnn_benchmark=False, # Whether to enable cudnn benchmark cudnn_benchmark=False, # 是否使用 cudnn benchmark
mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), # Use fork to start multi-processing threads. 'fork' usually faster than 'spawn' but maybe unsafe. See discussion in https://github.com/pytorch/pytorch/issues/1355 mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0), # 使用 fork 开启多线程。'fork' 通常比 'spawn' 快,但可能不安全。可参考 https://github.com/pytorch/pytorch/issues/1355
dist_cfg=dict(backend='nccl')) # Distribution configs dist_cfg=dict(backend='nccl')) # 分布式配置
vis_backends = [dict(type='LocalVisBackend')] # Visualization backends. vis_backends = [dict(type='LocalVisBackend')] # 可视化后端
visualizer = dict( visualizer = dict(
type='Det3DLocalVisualizer', type='Det3DLocalVisualizer',
vis_backends=[dict(type='LocalVisBackend')], vis_backends=[dict(type='LocalVisBackend')],
...@@ -449,7 +448,7 @@ resume = False ...@@ -449,7 +448,7 @@ resume = False
对于同一文件夹下的配置,推荐**只有一个**对应的 _原始配置_ 文件,所有其他的配置文件都应该继承自这个 _原始配置_ 文件,这样就能保证配置文件的最大继承深度为 3。 对于同一文件夹下的配置,推荐**只有一个**对应的 _原始配置_ 文件,所有其他的配置文件都应该继承自这个 _原始配置_ 文件,这样就能保证配置文件的最大继承深度为 3。
为了便于理解,我们建议贡献继承现有方法。例如,如果在 PointPillars 的基础上做了一些修改,用户首先可以通过指定 `_base_ = ../pointpillars/pointpillars_hv_fpn_sbn-all_8xb4_2x_nus-3d.py` 来继承基础的 PointPillars 结构,然后修改配置文件中的必要参数以完成继承。 为了便于理解,我们建议贡献继承现有方法。例如,如果在 PointPillars 的基础上做了一些修改,用户首先可以通过指定 `_base_ = ../pointpillars/pointpillars_hv_fpn_sbn-all_8xb4_2x_nus-3d.py` 来继承基础的 PointPillars 结构,然后修改配置文件中的必要参数以完成继承。
如果你在构建一个与任何现有方法不共享结构的全新方法,可以在 `configs` 文件夹下创建一个新的例如 `xxx_rcnn` 文件夹。 如果你在构建一个与任何现有方法不共享结构的全新方法,可以在 `configs` 文件夹下创建一个新的例如 `xxx_rcnn` 文件夹。
...@@ -459,7 +458,7 @@ resume = False ...@@ -459,7 +458,7 @@ resume = False
有时候,你需要设置 `_delete_=True` 来忽略基础配置中的某些字段。你可以参考 [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) 做简单了解。 有时候,你需要设置 `_delete_=True` 来忽略基础配置中的某些字段。你可以参考 [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) 做简单了解。
在 MMDetection3D 中,举个例子,修改以下 PointPillars 配置中的 FPN 瓶颈网络。 在 MMDetection3D 中,例如,修改以下 PointPillars 配置中的 FPN 瓶颈网络。
```python ```python
model = dict( model = dict(
...@@ -498,7 +497,7 @@ model = dict( ...@@ -498,7 +497,7 @@ model = dict(
### 在配置中使用中间变量 ### 在配置中使用中间变量
在配置文件中通常会使用一些中间变量,例如数据集中 `train_pipeline`/`test_pipeline`值得注意的是当在子配置中修改中间变量,用户需要再次将中间变量传递到相应的字段中。例如,我们想要使用多尺度策略训练和测试 PointPillars。`train_pipeline`/`test_pipeline` 是我们需要修改的中间变量。 在配置文件中通常会使用一些中间变量,例如数据集中 `train_pipeline`/`test_pipeline`需要注意的是当在子配置中修改中间变量,用户需要再次将中间变量传递到相应的字段中。例如,我们想要使用多尺度策略训练和测试 PointPillars。`train_pipeline`/`test_pipeline` 是我们需要修改的中间变量。
```python ```python
_base_ = './nus-3d.py' _base_ = './nus-3d.py'
...@@ -566,7 +565,7 @@ val_dataloader = dict(dataset=dict(pipeline=test_pipeline)) ...@@ -566,7 +565,7 @@ val_dataloader = dict(dataset=dict(pipeline=test_pipeline))
```python ```python
_base_ = './pointpillars_hv_secfpn_8xb6_160e_kitti-3d-3class.py' _base_ = './pointpillars_hv_secfpn_8xb6_160e_kitti-3d-3class.py'
a = {{_base_.model}} # variable `a` is equal to the `model` defined in `_base_` a = {{_base_.model}} # 变量 `a` 和 `_base_` 中定义的 `model` 相同
``` ```
### 通过脚本参数修改配置 ### 通过脚本参数修改配置
...@@ -575,7 +574,7 @@ a = {{_base_.model}} # variable `a` is equal to the `model` defined in `_base_` ...@@ -575,7 +574,7 @@ a = {{_base_.model}} # variable `a` is equal to the `model` defined in `_base_`
- 更新配置字典的键值 - 更新配置字典的键值
可以按照原始配置中字典的键值顺序指定配置选项。例如, `--cfg-options model.backbone.norm_eval=False` 改变模型骨干网络中的 BN 模块为 `train` 模式。 可以按照原始配置中字典的键值顺序指定配置选项。例如,`--cfg-options model.backbone.norm_eval=False` 改变模型骨干网络中的 BN 模块为 `train` 模式。
- 更新配置列表中的键值 - 更新配置列表中的键值
...@@ -597,11 +596,8 @@ a = {{_base_.model}} # variable `a` is equal to the `model` defined in `_base_` ...@@ -597,11 +596,8 @@ a = {{_base_.model}} # variable `a` is equal to the `model` defined in `_base_`
- `{algorithm name}`:算法名。这应该是检测器的名字例如 `pointpillars``fcos3d` 等。 - `{algorithm name}`:算法名。这应该是检测器的名字例如 `pointpillars``fcos3d` 等。
- `{model component names}`:算法中使用的组件名,例如体素编码器,骨干网络,瓶颈网络等。例如 `second_secfpn_head-dcn-circlenms` 意味着使用 SECOND's SparseEncoder,SECONDFPN 以及使用 DCN 和 circle NMS 的检测头。 - `{model component names}`:算法中使用的组件名,例如体素编码器,骨干网络,瓶颈网络等。例如 `second_secfpn_head-dcn-circlenms` 意味着使用 SECOND's SparseEncoder,SECONDFPN 以及使用 DCN 和 circle NMS 的检测头。
- `{training settings}`:训练设置信息,例如批量大小,数据增强,损失函数策略,调度器以及周期/迭代等。例如:`8xb4-tta-cyclic-20e` 意味着使用 8 个 GPUs,每个 GPU 有 4 个数据样本,测试增强,余弦退火学习率以及训练 20 个周期。 - `{training settings}`:训练设置信息,例如批量大小,数据增强,损失函数策略,调度器以及 epoch/迭代等。例如:`8xb4-tta-cyclic-20e` 意味着使用 8 个 GPUs,每个 GPU 有 4 个数据样本,测试增强,余弦退火学习率以及训练 20 个 epoch。一些缩写:
一些缩写:
- `{gpu x batch_per_gpu}`:GPUs 数以及每块 GPU 的样本数。`bN` 表示 每块 GPU 的批量大小为 N。例如 `4xb4` 是 4-gpus x 4-samples-per-gpu 的简写。 - `{gpu x batch_per_gpu}`:GPUs 数以及每块 GPU 的样本数。`bN` 表示 每块 GPU 的批量大小为 N。例如 `4xb4` 是 4-gpus x 4-samples-per-gpu 的简写。
- `{schedule}`:训练策略,可选项为 `schedule-2x``schedule-3x``cyclic-20e`等。 - `{schedule}`:训练调度,可选项为 `schedule-2x``schedule-3x``cyclic-20e`等。`schedule-2x``schedule-3x` 分别表示训练 24 和 36 个 epoch。`cyclic-20e` 表示训练 20 个 epoch。
`schedule-2x``schedule-3x` 分别表示训练 24 和 36 轮。
`cyclic-20e` 表示训练 20 轮。
- `{training dataset information}`:训练数据集名如 `kitti-3d-3class``nus-3d``s3dis-seg``scannet-seg``waymoD5-3d-car`。此处 `3d` 表示数据集用于 3d 目标检测,`seg` 表示数据集用于点云分割。 - `{training dataset information}`:训练数据集名如 `kitti-3d-3class``nus-3d``s3dis-seg``scannet-seg``waymoD5-3d-car`。此处 `3d` 表示数据集用于 3d 目标检测,`seg` 表示数据集用于点云分割。
- `{testing dataset information}`(可选):当模型在一个数据集上训练,在另一个数据集上测试时的测试数据集名。如果没有指定,意味着模型在同一数据类型上训练和测试。 - `{testing dataset information}`(可选):当模型在一个数据集上训练,在另一个数据集上测试时的测试数据集名。如果没有指定,意味着模型在同一数据类型上训练和测试。
...@@ -2,8 +2,7 @@ ...@@ -2,8 +2,7 @@
## 在数据预处理前 ## 在数据预处理前
我们推荐用户将数据集的路径软链接到 `$MMDETECTION3D/data` 我们推荐用户将数据集的路径软链接到 `$MMDETECTION3D/data`。如果你的文件夹结构和以下所展示的结构不一致,你可能需要改变配置文件中相应的数据路径。
如果你的文件夹结构和以下所展示的结构相异,你可能需要改变配置文件中相应的数据路径。
``` ```
mmdetection3d mmdetection3d
...@@ -88,17 +87,23 @@ wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/sec ...@@ -88,17 +87,23 @@ wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/sec
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/train.txt wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/train.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/val.txt wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/val.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/trainval.txt wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/trainval.txt
```
然后通过运行以下指令生成信息文件:
```bash
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti
``` ```
在使用 slurm 的环境下,用户需要使用下面的指令:
```bash
sh tools/create_data.sh <partition> kitti
```
### Waymo ### Waymo
[这里](https://waymo.com/open/download/)下载 Waymo 公开数据集1.2版本,在[这里](https://drive.google.com/drive/folders/18BVuF_RYJF0NjZpt8SnfzANiakoRMf0o?usp=sharing)下载其数据划分文件。 [这里](https://waymo.com/open/download/)下载 Waymo 公开数据集 1.2 版本,在[这里](https://drive.google.com/drive/folders/18BVuF_RYJF0NjZpt8SnfzANiakoRMf0o?usp=sharing)下载其数据划分文件。然后,将 `.tfrecord` 文件置于 `data/waymo/waymo_format/` 目录下的相应位置,并将数据划分的 `.txt` 文件置于 `data/waymo/kitti_format/ImageSets` 目录下。在[这里](https://console.cloud.google.com/storage/browser/waymo_open_dataset_v_1_2_0/validation/ground_truth_objects)下载验证集的真实标签(`.bin` 文件)并将其置于 `data/waymo/waymo_format/`。提示:你可以使用 `gsutil` 来用命令下载大规模的数据集。更多细节请参考此[工具](https://github.com/RalphMao/Waymo-Dataset-Tool)。完成以上各步后,可以通过运行以下指令对 Waymo 数据进行预处理:
然后,将 tfrecord 文件置于 `data/waymo/waymo_format/` 目录下的相应位置,并将数据划分的 txt 文件置于 `data/waymo/kitti_format/ImageSets` 目录下。
[这里](https://console.cloud.google.com/storage/browser/waymo_open_dataset_v_1_2_0/validation/ground_truth_objects)下载验证集的真实标签 (bin 文件) 并将其置于 `data/waymo/waymo_format/`
提示,你可以使用 `gsutil` 来用命令下载大规模的数据集。你可以参考这个[工具](https://github.com/RalphMao/Waymo-Dataset-Tool)来获取更多实现细节。
完成以上各步后,可以通过运行以下指令对 Waymo 数据进行预处理:
```bash ```bash
python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/waymo/ --workers 128 --extra-tag waymo python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/waymo/ --workers 128 --extra-tag waymo
...@@ -106,9 +111,10 @@ python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/way ...@@ -106,9 +111,10 @@ python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/way
注意: 注意:
- 如果你的硬盘空间大小不足以存储转换后的数据,你可以将 `out-dir` 参数设定为别的路径。 - 如果你的硬盘空间大小不足以存储转换后的数据,你可以将 `--out-dir` 参数设定为别的路径。你只需要记得在那个路径下创建文件夹并下载数据,然后在数据预处理完成后将其链接回 `data/waymo/kitti_format` 即可。
你只需要记得在那个路径下创建文件夹并下载数据,然后在数据预处理完成后将其链接回 `data/waymo/kitti_format` 即可
- 如果你想在 Waymo 上进行更快的评估,你可以下载已经预处理好的[元信息文件](https://download.openmmlab.com/mmdetection3d/data/waymo/idx2metainfo.pkl) 并将其放置在 `data/waymo/waymo_format/` 目录下. 接着,你可以按照下方来更改数据集的配置: - 如果你想在 Waymo 上进行更快的评估,你可以下载已经预处理好的[元信息文件](https://download.openmmlab.com/mmdetection3d/data/waymo/idx2metainfo.pkl)并将其放置在 `data/waymo/waymo_format/` 目录下。接着,你可以按照以下来修改数据集的配置:
```python ```python
val_evaluator = dict( val_evaluator = dict(
type='WaymoMetric', type='WaymoMetric',
...@@ -120,7 +126,8 @@ python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/way ...@@ -120,7 +126,8 @@ python tools/create_data.py waymo --root-path ./data/waymo/ --out-dir ./data/way
idx2metainfo='data/waymo/waymo_format/idx2metainfo.pkl' idx2metainfo='data/waymo/waymo_format/idx2metainfo.pkl'
) )
``` ```
目前这种方式仅限于纯点云任务。
目前这种方式仅限于纯点云检测任务。
### NuScenes ### NuScenes
...@@ -139,16 +146,15 @@ python tools/create_data.py lyft --root-path ./data/lyft --out-dir ./data/lyft - ...@@ -139,16 +146,15 @@ python tools/create_data.py lyft --root-path ./data/lyft --out-dir ./data/lyft -
python tools/data_converter/lyft_data_fixer.py --version v1.01 --root-folder ./data/lyft python tools/data_converter/lyft_data_fixer.py --version v1.01 --root-folder ./data/lyft
``` ```
注意,为了文件结构的清晰性,我们遵从了 Lyft 数据原先的文件夹名称。请按照上面展示出的文件结构对原始文件夹进行重命名。 注意,为了文件结构的清晰性,我们遵从了 Lyft 数据原先的文件夹名称。请按照上面展示出的文件结构对原始文件夹进行重命名。同样值得注意的是,第二行命令的目的是为了修复一个损坏的激光雷达数据文件。更多细节请参考[该讨论](https://www.kaggle.com/c/3d-object-detection-for-autonomous-vehicles/discussion/110000)
同样值得注意的是,第二行命令的目的是为了修复一个损坏的激光雷达数据文件。请参考[这一](https://www.kaggle.com/c/3d-object-detection-for-autonomous-vehicles/discussion/110000)讨论来获取更多细节。
### S3DIS、ScanNet 和 SUN RGB-D ### S3DIS、ScanNet 和 SUN RGB-D
请参考 S3DIS [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/s3dis/README.md/) 文件以对其进行数据预处理。 请参考 S3DIS [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/s3dis/README.md) 文件以对其进行数据预处理。
请参考 ScanNet [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/scannet/README.md/) 文件以对其进行数据预处理。 请参考 ScanNet [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/scannet/README.md) 文件以对其进行数据预处理。
请参考 SUN RGB-D [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/sunrgbd/README.md/) 文件以对其进行数据预处理。 请参考 SUN RGB-D [README](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/data/sunrgbd/README.md) 文件以对其进行数据预处理。
### 自定义数据集 ### 自定义数据集
...@@ -159,15 +165,15 @@ python tools/data_converter/lyft_data_fixer.py --version v1.01 --root-folder ./d ...@@ -159,15 +165,15 @@ python tools/data_converter/lyft_data_fixer.py --version v1.01 --root-folder ./d
如果你之前已经使用 v1.0.0rc1-v1.0.0rc4 版的 mmdetection3d 创建数据信息,现在你想使用最新的 v1.1.0 版 mmdetection3d,你需要更新数据信息文件。 如果你之前已经使用 v1.0.0rc1-v1.0.0rc4 版的 mmdetection3d 创建数据信息,现在你想使用最新的 v1.1.0 版 mmdetection3d,你需要更新数据信息文件。
```bash ```bash
python tools/dataset_converters/update_infos_to_v2.py --dataset ${DATA_SET} --pkl ${PKL_PATH} --out-dir ${OUT_DIR} python tools/dataset_converters/update_infos_to_v2.py --dataset ${DATA_SET} --pkl-path ${PKL_PATH} --out-dir ${OUT_DIR}
``` ```
- `dataset`:数据集名。 - `--dataset`:数据集名。
- `pkl`:指定数据信息 pkl 文件路径。 - `--pkl-path`:指定数据信息 pkl 文件路径。
- `out-dir`:输出数据信息 pkl 文件目录。 - `--out-dir`:输出数据信息 pkl 文件目录。
例如 例如
```bash ```bash
python tools/dataset_converters/update_infos_to_v2.py --dataset kitti --pkl ./data/kitti/kitti_infos_trainval.pkl --out-dir ./data/kitti python tools/dataset_converters/update_infos_to_v2.py --dataset kitti --pkl-path ./data/kitti/kitti_infos_trainval.pkl --out-dir ./data/kitti
``` ```
mmcv>=1.4.8 mmcv>=2.0.0rc0
mmdet>=2.24.0 mmdet>=3.0.0rc0
mmsegmentation>=0.20.1 mmengine>=0.1.0
torch torch
torchvision torchvision
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment