# 后端支持 我们支持不同的文件客户端后端:磁盘、Ceph 和 LMDB 等。下面是修改配置使之从 Ceph 加载和保存数据的示例。 ## 从 Ceph 读取数据和标注文件 我们支持从 Ceph 加载数据和生成的标注信息文件(pkl 和 json): ```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)) ``` ## 从 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 ... ``` ## 从 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' resume_from = None workflow = [('train', 1)] ``` ## 保存模型权重文件至 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 保存最优模型权重文件至 Ceph ```python # replace the path with your checkpoint saving path on Ceph evaluation = dict(interval=1, save_best='bbox', out_dir='s3://openmmlab/mmdetection3d') ``` ## 训练日志保存至 Ceph 训练后的训练日志会备份到指定的 Ceph 路径。 ```python log_config = dict( interval=50, hooks=[ dict(type='TextLoggerHook', out_dir='s3://openmmlab/mmdetection3d'), ]) ``` 您还可以通过设置 `keep_local = False` 备份到指定的 Ceph 路径后删除本地训练日志。 ```python log_config = dict( interval=50, hooks=[ dict(type='TextLoggerHook', out_dir='s3://openmmlab/mmdetection3d', keep_local=False), ]) ```