# 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), ]) ```