|
# Backends Support |
|
|
|
We support different file client backends: Disk, Ceph and LMDB, etc. Here is an example of how to modify configs for Ceph-based data loading and saving. |
|
|
|
## Load data and annotations from Ceph |
|
|
|
We support loading data and generated annotation info files (pkl and json) from Ceph: |
|
|
|
```python |
|
# set file client backends as Ceph |
|
backend_args = dict( |
|
backend='petrel', |
|
path_mapping=dict({ |
|
'./data/nuscenes/': |
|
's3://openmmlab/datasets/detection3d/nuscenes/', # replace the path with your data path on Ceph |
|
'data/nuscenes/': |
|
's3://openmmlab/datasets/detection3d/nuscenes/' # replace the path with your data path on Ceph |
|
})) |
|
|
|
db_sampler = dict( |
|
data_root=data_root, |
|
info_path=data_root + 'kitti_dbinfos_train.pkl', |
|
rate=1.0, |
|
prepare=dict(filter_by_difficulty=[-1], filter_by_min_points=dict(Car=5)), |
|
sample_groups=dict(Car=15), |
|
classes=class_names, |
|
# set file client for points loader to load training data |
|
points_loader=dict( |
|
type='LoadPointsFromFile', |
|
coord_type='LIDAR', |
|
load_dim=4, |
|
use_dim=4, |
|
backend_args=backend_args), |
|
# set file client for data base sampler to load db info file |
|
backend_args=backend_args) |
|
|
|
train_pipeline = [ |
|
# set file client for loading training data |
|
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4, backend_args=backend_args), |
|
# set file client for loading training data annotations |
|
dict(type='LoadAnnotations3D', with_bbox_3d=True, with_label_3d=True, backend_args=backend_args), |
|
dict(type='ObjectSample', db_sampler=db_sampler), |
|
dict( |
|
type='ObjectNoise', |
|
num_try=100, |
|
translation_std=[0.25, 0.25, 0.25], |
|
global_rot_range=[0.0, 0.0], |
|
rot_range=[-0.15707963267, 0.15707963267]), |
|
dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5), |
|
dict( |
|
type='GlobalRotScaleTrans', |
|
rot_range=[-0.78539816, 0.78539816], |
|
scale_ratio_range=[0.95, 1.05]), |
|
dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range), |
|
dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range), |
|
dict(type='PointShuffle'), |
|
dict(type='DefaultFormatBundle3D', class_names=class_names), |
|
dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d']) |
|
] |
|
test_pipeline = [ |
|
# set file client for loading validation/testing data |
|
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4, backend_args=backend_args), |
|
dict( |
|
type='MultiScaleFlipAug3D', |
|
img_scale=(1333, 800), |
|
pts_scale_ratio=1, |
|
flip=False, |
|
transforms=[ |
|
dict( |
|
type='GlobalRotScaleTrans', |
|
rot_range=[0, 0], |
|
scale_ratio_range=[1., 1.], |
|
translation_std=[0, 0, 0]), |
|
dict(type='RandomFlip3D'), |
|
dict( |
|
type='PointsRangeFilter', point_cloud_range=point_cloud_range), |
|
dict( |
|
type='DefaultFormatBundle3D', |
|
class_names=class_names, |
|
with_label=False), |
|
dict(type='Collect3D', keys=['points']) |
|
]) |
|
] |
|
|
|
data = dict( |
|
# set file client for loading training info files (.pkl) |
|
train=dict( |
|
type='RepeatDataset', |
|
times=2, |
|
dataset=dict(pipeline=train_pipeline, classes=class_names, backend_args=backend_args)), |
|
# set file client for loading validation info files (.pkl) |
|
val=dict(pipeline=test_pipeline, classes=class_names,backend_args=backend_args), |
|
# set file client for loading testing info files (.pkl) |
|
test=dict(pipeline=test_pipeline, classes=class_names, backend_args=backend_args)) |
|
``` |
|
|
|
## Load pretrained model from Ceph |
|
|
|
```python |
|
model = dict( |
|
pts_backbone=dict( |
|
_delete_=True, |
|
type='NoStemRegNet', |
|
arch='regnetx_1.6gf', |
|
init_cfg=dict( |
|
type='Pretrained', checkpoint='s3://openmmlab/checkpoints/mmdetection3d/regnetx_1.6gf'), # replace the path with your pretrained model path on Ceph |
|
... |
|
``` |
|
|
|
## Load checkpoint from Ceph |
|
|
|
```python |
|
# replace the path with your checkpoint path on Ceph |
|
load_from = 's3://openmmlab/checkpoints/mmdetection3d/v0.1.0_models/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car_20200620_230614-77663cd6.pth.pth' |
|
resume_from = None |
|
workflow = [('train', 1)] |
|
``` |
|
|
|
## Save checkpoint into Ceph |
|
|
|
```python |
|
# checkpoint saving |
|
# replace the path with your checkpoint saving path on Ceph |
|
checkpoint_config = dict(interval=1, max_keep_ckpts=2, out_dir='s3://openmmlab/mmdetection3d') |
|
``` |
|
|
|
## EvalHook saves the best checkpoint into Ceph |
|
|
|
```python |
|
# replace the path with your checkpoint saving path on Ceph |
|
evaluation = dict(interval=1, save_best='bbox', out_dir='s3://openmmlab/mmdetection3d') |
|
``` |
|
|
|
## Save the training log into Ceph |
|
|
|
The training log will be backed up to the specified Ceph path after training. |
|
|
|
```python |
|
log_config = dict( |
|
interval=50, |
|
hooks=[ |
|
dict(type='TextLoggerHook', out_dir='s3://openmmlab/mmdetection3d'), |
|
]) |
|
``` |
|
|
|
You can also delete the local training log after backing up to the specified Ceph path by setting `keep_local = False`. |
|
|
|
```python |
|
log_config = dict( |
|
interval=50, |
|
hooks=[ |
|
dict(type='TextLoggerHook', out_dir='s3://openmmlab/mmdetection3d', keep_local=False), |
|
]) |
|
``` |
|
|