调试需要修改的launch.json的内容如下{version:0.2.0,configurations:[{name:StreamMapNet Train Debug with torchrun,type:debugpy,request:launch,module:torch.distributed.run,cwd:${workspaceFolder},console:integratedTerminal,justMyCode:false,env:{PYTHONPATH:${workspaceFolder},CUDA_VISIBLE_DEVICES:0},args:[--nproc_per_node1,--master_port29500,${workspaceFolder}/tools/train.py,plugin/configs/nusc_newsplit_480_60x30_24e.py,--launcher,pytorch,--deterministic]}]}其中下载的是mini数据集注意分割命令为#准备数据代码python tools/data_converter/nuscenes_converter.py\--data-root ./datasets/nuScenes\--versionv1.0-mini\--newsplit# 训练代码bashtools/dist_train.sh plugin/configs/nusc_newsplit_480_60x30_24e.py5# 评估代码bashtools/dist_train.sh plugin/configs/nusc_newsplit_480_60x30_24e.py5数据集下载命令wgethttps://d36yt3mvayqw5m.cloudfront.net/public/v1.0/v1.0-mini.tgzwgethttps://d36yt3mvayqw5m.cloudfront.net/public/v1.0/nuScenes-map-expansion-v1.3.zipmkdir-pdatasetsmkdir-pdatasets/nuscenestar-xzfv1.0-mini.tgz-Cdatasets/nuscenesunzipnuScenes-map-expansion-v1.3.zip-ddatasetsmvdata/expansion data/nuscenes/mapsmvdata/prediction data/nuscenes/mapsmvdata/basemap data/nuscenes/mapspip uninstall timm-ypipinstalltimm0.6.13 pipinstallav20.2.1 pipinstallyapf0.32.0训练截图测试截图修改配置文件适配GPU数量重点修改内容为num_gpus5batch_size1num_iters_per_epoch150num_epochs24_base_[./_base_/default_runtime.py]# model typetypeMapperpluginTrue# plugin code dirplugin_dirplugin/# img configsimg_norm_cfgdict(mean[103.530,116.280,123.675],std[1.0,1.0,1.0],to_rgbFalse)img_h480img_w800img_size(img_h,img_w)num_gpus5batch_size1num_iters_per_epoch200num_epochs24num_epochs_single_framenum_epochs//6total_itersnum_epochs*num_iters_per_epoch num_queries100# category configscat2id{ped_crossing:0,divider:1,boundary:2,}num_classmax(list(cat2id.values()))1# bev configsroi_size(60,30)# bev range, 60m in x-axis, 30m in y-axisbev_h50bev_w100pc_range[-roi_size[0]/2,-roi_size[1]/2,-3,roi_size[0]/2,roi_size[1]/2,5]# vectorize paramscoords_dim2sample_dist-1sample_num-1simplifyTrue# meta info for submission pklmetadict(use_lidarFalse,use_cameraTrue,use_radarFalse,use_mapFalse,use_externalFalse,output_formatvector)# model configsbev_embed_dims256embed_dims512num_feat_levels3norm_cfgdict(typeBN2d)num_classmax(list(cat2id.values()))1num_points20permuteTruemodeldict(typeStreamMapNet,roi_sizeroi_size,bev_hbev_h,bev_wbev_w,backbone_cfgdict(typeBEVFormerBackbone,roi_sizeroi_size,bev_hbev_h,bev_wbev_w,use_grid_maskTrue,img_backbonedict(typeResNet,with_cpFalse,# pretrained./resnet50_checkpoint.pth,pretrainedopen-mmlab://detectron2/resnet50_caffe,depth50,num_stages4,out_indices(1,2,3),frozen_stages-1,norm_cfgnorm_cfg,norm_evalTrue,stylecaffe,dcndict(typeDCNv2,deform_groups1,fallback_on_strideFalse),stage_with_dcn(False,False,True,True)),img_neckdict(typeFPN,in_channels[512,1024,2048],out_channelsbev_embed_dims,start_level0,add_extra_convsTrue,num_outsnum_feat_levels,norm_cfgnorm_cfg,relu_before_extra_convsTrue),transformerdict(typePerceptionTransformer,embed_dimsbev_embed_dims,encoderdict(typeBEVFormerEncoder,num_layers1,pc_rangepc_range,num_points_in_pillar4,return_intermediateFalse,transformerlayersdict(typeBEVFormerLayer,attn_cfgs[dict(typeTemporalSelfAttention,embed_dimsbev_embed_dims,num_levels1),dict(typeSpatialCrossAttention,deformable_attentiondict(typeMSDeformableAttention3D,embed_dimsbev_embed_dims,num_points8,num_levelsnum_feat_levels),embed_dimsbev_embed_dims,)],feedforward_channelsbev_embed_dims*2,ffn_dropout0.1,operation_order(self_attn,norm,cross_attn,norm,ffn,norm))),),positional_encodingdict(typeLearnedPositionalEncoding,num_featsbev_embed_dims//2,row_num_embedbev_h,col_num_embedbev_w,),),head_cfgdict(typeMapDetectorHead,num_queriesnum_queries,embed_dimsembed_dims,num_classesnum_class,in_channelsembed_dims//2,num_pointsnum_points,roi_sizeroi_size,coord_dim2,different_headsFalse,predict_refineFalse,sync_cls_avg_factorTrue,streaming_cfgdict(streamingTrue,batch_sizebatch_size,topkint(num_queries*(1/3)),trans_loss_weight0.1,),transformerdict(typeMapTransformer,num_feature_levels1,num_pointsnum_points,coord_dim2,encoderdict(typePlaceHolderEncoder,embed_dimsembed_dims,),decoderdict(typeMapTransformerDecoder_new,num_layers6,prop_add_stage1,return_intermediateTrue,transformerlayersdict(typeMapTransformerLayer,attn_cfgs[dict(typeMultiheadAttention,embed_dimsembed_dims,num_heads8,attn_drop0.1,proj_drop0.1,),dict(typeCustomMSDeformableAttention,embed_dimsembed_dims,num_heads8,num_levels1,num_pointsnum_points,dropout0.1,),],ffn_cfgsdict(typeFFN,embed_dimsembed_dims,feedforward_channelsembed_dims*2,num_fcs2,ffn_drop0.1,act_cfgdict(typeReLU,inplaceTrue),),feedforward_channelsembed_dims*2,ffn_dropout0.1,# operation_order(norm, self_attn, norm, cross_attn,# norm, ffn,)operation_order(self_attn,norm,cross_attn,norm,ffn,norm)))),loss_clsdict(typeFocalLoss,use_sigmoidTrue,gamma2.0,alpha0.25,loss_weight5.0),loss_regdict(typeLinesL1Loss,loss_weight50.0,beta0.01,),assignerdict(typeHungarianLinesAssigner,costdict(typeMapQueriesCost,cls_costdict(typeFocalLossCost,weight5.0),reg_costdict(typeLinesL1Cost,weight50.0,beta0.01,permutepermute),),),),streaming_cfgdict(streaming_bevTrue,batch_sizebatch_size,fusion_cfgdict(typeConvGRU,out_channelsbev_embed_dims,)),model_nameSingleStage)# data processing pipelinestrain_pipeline[dict(typeVectorizeMap,coords_dimcoords_dim,roi_sizeroi_size,sample_numnum_points,normalizeTrue,permutepermute,),dict(typeLoadMultiViewImagesFromFiles,to_float32True),dict(typePhotoMetricDistortionMultiViewImage),dict(typeResizeMultiViewImages,sizeimg_size,# H, Wchange_intrinsicsTrue,),dict(typeNormalize3D,**img_norm_cfg),dict(typePadMultiViewImages,size_divisor32),dict(typeFormatBundleMap),dict(typeCollect3D,keys[img,vectors],meta_keys(token,ego2img,sample_idx,ego2global_translation,ego2global_rotation,img_shape,scene_name))]# data processing pipelinestest_pipeline[dict(typeLoadMultiViewImagesFromFiles,to_float32True),dict(typeResizeMultiViewImages,sizeimg_size,# H, Wchange_intrinsicsTrue,),dict(typeNormalize3D,**img_norm_cfg),dict(typePadMultiViewImages,size_divisor32),dict(typeFormatBundleMap),dict(typeCollect3D,keys[img],meta_keys(token,ego2img,sample_idx,ego2global_translation,ego2global_rotation,img_shape,scene_name))]# configs for evaluation code# DO NOT CHANGEeval_configdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipeline[dict(typeVectorizeMap,coords_dimcoords_dim,simplifyTrue,normalizeFalse,roi_sizeroi_size),dict(typeFormatBundleMap),dict(typeCollect3D,keys[vectors],meta_keys[token])],interval1,)# dataset configsdatadict(samples_per_gpubatch_size,workers_per_gpu4,traindict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_train_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetrain_pipeline,seq_split_num1,),valdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetest_pipeline,eval_configeval_config,test_modeTrue,seq_split_num1,),testdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetest_pipeline,eval_configeval_config,test_modeTrue,seq_split_num1,),shuffler_samplerdict(typeInfiniteGroupEachSampleInBatchSampler,seq_split_num1,num_iters_to_seqnum_epochs_single_frame*num_iters_per_epoch,random_drop0.0),nonshuffler_samplerdict(typeDistributedSampler))# optimizeroptimizerdict(typeAdamW,lr1e-4,paramwise_cfgdict(custom_keys{img_backbone:dict(lr_mult0.1),}),weight_decay1e-2)optimizer_configdict(grad_clipdict(max_norm35,norm_type2))# learning policy schedulelr_configdict(policyCosineAnnealing,warmuplinear,warmup_iters500,warmup_ratio1.0/3,min_lr_ratio3e-3)evaluationdict(intervalnum_epochs_single_frame*num_iters_per_epoch)find_unused_parametersTrue#### when use checkpoint, find_unused_parameters must be Falsecheckpoint_configdict(intervalnum_epochs_single_frame*num_iters_per_epoch)runnerdict(typeIterBasedRunner,max_itersnum_epochs*num_iters_per_epoch)log_configdict(interval100,hooks[dict(typeTextLoggerHook),dict(typeTensorboardLoggerHook)])SyncBNTrue成功用5张2080显卡python3.8,ubuntu20,04的环境对mini dataset进行训练
Streammapnet部署流程注意事项
调试需要修改的launch.json的内容如下{version:0.2.0,configurations:[{name:StreamMapNet Train Debug with torchrun,type:debugpy,request:launch,module:torch.distributed.run,cwd:${workspaceFolder},console:integratedTerminal,justMyCode:false,env:{PYTHONPATH:${workspaceFolder},CUDA_VISIBLE_DEVICES:0},args:[--nproc_per_node1,--master_port29500,${workspaceFolder}/tools/train.py,plugin/configs/nusc_newsplit_480_60x30_24e.py,--launcher,pytorch,--deterministic]}]}其中下载的是mini数据集注意分割命令为#准备数据代码python tools/data_converter/nuscenes_converter.py\--data-root ./datasets/nuScenes\--versionv1.0-mini\--newsplit# 训练代码bashtools/dist_train.sh plugin/configs/nusc_newsplit_480_60x30_24e.py5# 评估代码bashtools/dist_train.sh plugin/configs/nusc_newsplit_480_60x30_24e.py5数据集下载命令wgethttps://d36yt3mvayqw5m.cloudfront.net/public/v1.0/v1.0-mini.tgzwgethttps://d36yt3mvayqw5m.cloudfront.net/public/v1.0/nuScenes-map-expansion-v1.3.zipmkdir-pdatasetsmkdir-pdatasets/nuscenestar-xzfv1.0-mini.tgz-Cdatasets/nuscenesunzipnuScenes-map-expansion-v1.3.zip-ddatasetsmvdata/expansion data/nuscenes/mapsmvdata/prediction data/nuscenes/mapsmvdata/basemap data/nuscenes/mapspip uninstall timm-ypipinstalltimm0.6.13 pipinstallav20.2.1 pipinstallyapf0.32.0训练截图测试截图修改配置文件适配GPU数量重点修改内容为num_gpus5batch_size1num_iters_per_epoch150num_epochs24_base_[./_base_/default_runtime.py]# model typetypeMapperpluginTrue# plugin code dirplugin_dirplugin/# img configsimg_norm_cfgdict(mean[103.530,116.280,123.675],std[1.0,1.0,1.0],to_rgbFalse)img_h480img_w800img_size(img_h,img_w)num_gpus5batch_size1num_iters_per_epoch200num_epochs24num_epochs_single_framenum_epochs//6total_itersnum_epochs*num_iters_per_epoch num_queries100# category configscat2id{ped_crossing:0,divider:1,boundary:2,}num_classmax(list(cat2id.values()))1# bev configsroi_size(60,30)# bev range, 60m in x-axis, 30m in y-axisbev_h50bev_w100pc_range[-roi_size[0]/2,-roi_size[1]/2,-3,roi_size[0]/2,roi_size[1]/2,5]# vectorize paramscoords_dim2sample_dist-1sample_num-1simplifyTrue# meta info for submission pklmetadict(use_lidarFalse,use_cameraTrue,use_radarFalse,use_mapFalse,use_externalFalse,output_formatvector)# model configsbev_embed_dims256embed_dims512num_feat_levels3norm_cfgdict(typeBN2d)num_classmax(list(cat2id.values()))1num_points20permuteTruemodeldict(typeStreamMapNet,roi_sizeroi_size,bev_hbev_h,bev_wbev_w,backbone_cfgdict(typeBEVFormerBackbone,roi_sizeroi_size,bev_hbev_h,bev_wbev_w,use_grid_maskTrue,img_backbonedict(typeResNet,with_cpFalse,# pretrained./resnet50_checkpoint.pth,pretrainedopen-mmlab://detectron2/resnet50_caffe,depth50,num_stages4,out_indices(1,2,3),frozen_stages-1,norm_cfgnorm_cfg,norm_evalTrue,stylecaffe,dcndict(typeDCNv2,deform_groups1,fallback_on_strideFalse),stage_with_dcn(False,False,True,True)),img_neckdict(typeFPN,in_channels[512,1024,2048],out_channelsbev_embed_dims,start_level0,add_extra_convsTrue,num_outsnum_feat_levels,norm_cfgnorm_cfg,relu_before_extra_convsTrue),transformerdict(typePerceptionTransformer,embed_dimsbev_embed_dims,encoderdict(typeBEVFormerEncoder,num_layers1,pc_rangepc_range,num_points_in_pillar4,return_intermediateFalse,transformerlayersdict(typeBEVFormerLayer,attn_cfgs[dict(typeTemporalSelfAttention,embed_dimsbev_embed_dims,num_levels1),dict(typeSpatialCrossAttention,deformable_attentiondict(typeMSDeformableAttention3D,embed_dimsbev_embed_dims,num_points8,num_levelsnum_feat_levels),embed_dimsbev_embed_dims,)],feedforward_channelsbev_embed_dims*2,ffn_dropout0.1,operation_order(self_attn,norm,cross_attn,norm,ffn,norm))),),positional_encodingdict(typeLearnedPositionalEncoding,num_featsbev_embed_dims//2,row_num_embedbev_h,col_num_embedbev_w,),),head_cfgdict(typeMapDetectorHead,num_queriesnum_queries,embed_dimsembed_dims,num_classesnum_class,in_channelsembed_dims//2,num_pointsnum_points,roi_sizeroi_size,coord_dim2,different_headsFalse,predict_refineFalse,sync_cls_avg_factorTrue,streaming_cfgdict(streamingTrue,batch_sizebatch_size,topkint(num_queries*(1/3)),trans_loss_weight0.1,),transformerdict(typeMapTransformer,num_feature_levels1,num_pointsnum_points,coord_dim2,encoderdict(typePlaceHolderEncoder,embed_dimsembed_dims,),decoderdict(typeMapTransformerDecoder_new,num_layers6,prop_add_stage1,return_intermediateTrue,transformerlayersdict(typeMapTransformerLayer,attn_cfgs[dict(typeMultiheadAttention,embed_dimsembed_dims,num_heads8,attn_drop0.1,proj_drop0.1,),dict(typeCustomMSDeformableAttention,embed_dimsembed_dims,num_heads8,num_levels1,num_pointsnum_points,dropout0.1,),],ffn_cfgsdict(typeFFN,embed_dimsembed_dims,feedforward_channelsembed_dims*2,num_fcs2,ffn_drop0.1,act_cfgdict(typeReLU,inplaceTrue),),feedforward_channelsembed_dims*2,ffn_dropout0.1,# operation_order(norm, self_attn, norm, cross_attn,# norm, ffn,)operation_order(self_attn,norm,cross_attn,norm,ffn,norm)))),loss_clsdict(typeFocalLoss,use_sigmoidTrue,gamma2.0,alpha0.25,loss_weight5.0),loss_regdict(typeLinesL1Loss,loss_weight50.0,beta0.01,),assignerdict(typeHungarianLinesAssigner,costdict(typeMapQueriesCost,cls_costdict(typeFocalLossCost,weight5.0),reg_costdict(typeLinesL1Cost,weight50.0,beta0.01,permutepermute),),),),streaming_cfgdict(streaming_bevTrue,batch_sizebatch_size,fusion_cfgdict(typeConvGRU,out_channelsbev_embed_dims,)),model_nameSingleStage)# data processing pipelinestrain_pipeline[dict(typeVectorizeMap,coords_dimcoords_dim,roi_sizeroi_size,sample_numnum_points,normalizeTrue,permutepermute,),dict(typeLoadMultiViewImagesFromFiles,to_float32True),dict(typePhotoMetricDistortionMultiViewImage),dict(typeResizeMultiViewImages,sizeimg_size,# H, Wchange_intrinsicsTrue,),dict(typeNormalize3D,**img_norm_cfg),dict(typePadMultiViewImages,size_divisor32),dict(typeFormatBundleMap),dict(typeCollect3D,keys[img,vectors],meta_keys(token,ego2img,sample_idx,ego2global_translation,ego2global_rotation,img_shape,scene_name))]# data processing pipelinestest_pipeline[dict(typeLoadMultiViewImagesFromFiles,to_float32True),dict(typeResizeMultiViewImages,sizeimg_size,# H, Wchange_intrinsicsTrue,),dict(typeNormalize3D,**img_norm_cfg),dict(typePadMultiViewImages,size_divisor32),dict(typeFormatBundleMap),dict(typeCollect3D,keys[img],meta_keys(token,ego2img,sample_idx,ego2global_translation,ego2global_rotation,img_shape,scene_name))]# configs for evaluation code# DO NOT CHANGEeval_configdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipeline[dict(typeVectorizeMap,coords_dimcoords_dim,simplifyTrue,normalizeFalse,roi_sizeroi_size),dict(typeFormatBundleMap),dict(typeCollect3D,keys[vectors],meta_keys[token])],interval1,)# dataset configsdatadict(samples_per_gpubatch_size,workers_per_gpu4,traindict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_train_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetrain_pipeline,seq_split_num1,),valdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetest_pipeline,eval_configeval_config,test_modeTrue,seq_split_num1,),testdict(typeNuscDataset,data_root./datasets/nuScenes,ann_file./datasets/nuScenes/nuscenes_map_infos_val_newsplit.pkl,metameta,roi_sizeroi_size,cat2idcat2id,pipelinetest_pipeline,eval_configeval_config,test_modeTrue,seq_split_num1,),shuffler_samplerdict(typeInfiniteGroupEachSampleInBatchSampler,seq_split_num1,num_iters_to_seqnum_epochs_single_frame*num_iters_per_epoch,random_drop0.0),nonshuffler_samplerdict(typeDistributedSampler))# optimizeroptimizerdict(typeAdamW,lr1e-4,paramwise_cfgdict(custom_keys{img_backbone:dict(lr_mult0.1),}),weight_decay1e-2)optimizer_configdict(grad_clipdict(max_norm35,norm_type2))# learning policy schedulelr_configdict(policyCosineAnnealing,warmuplinear,warmup_iters500,warmup_ratio1.0/3,min_lr_ratio3e-3)evaluationdict(intervalnum_epochs_single_frame*num_iters_per_epoch)find_unused_parametersTrue#### when use checkpoint, find_unused_parameters must be Falsecheckpoint_configdict(intervalnum_epochs_single_frame*num_iters_per_epoch)runnerdict(typeIterBasedRunner,max_itersnum_epochs*num_iters_per_epoch)log_configdict(interval100,hooks[dict(typeTextLoggerHook),dict(typeTensorboardLoggerHook)])SyncBNTrue成功用5张2080显卡python3.8,ubuntu20,04的环境对mini dataset进行训练