├── .dev_scripts
├── gather_models.py
├── gen_benchmark_script.py
├── linter.sh
├── test_benchmark.sh
└── train_benchmark.sh
├── .github
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── error-report.md
│ ├── feature_request.md
│ ├── general_questions.md
│ └── reimplementation_questions.md
├── pull_request_template.md
└── workflows
│ ├── build.yml
│ └── deploy.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CITATION.cff
├── LICENSE
├── MANIFEST.in
├── README.md
├── README_zh-CN.md
├── configs
├── 3dssd
│ ├── 3dssd_4x4_kitti-3d-car.py
│ ├── README.md
│ └── metafile.yml
├── _base_
│ ├── datasets
│ │ ├── coco_instance.py
│ │ ├── kitti-3d-3class.py
│ │ ├── kitti-3d-car.py
│ │ ├── lyft-3d.py
│ │ ├── nuim_instance.py
│ │ ├── nus-3d.py
│ │ ├── nus-mono3d.py
│ │ ├── range100_lyft-3d.py
│ │ ├── s3dis-3d-5class.py
│ │ ├── s3dis_seg-3d-13class.py
│ │ ├── scannet-3d-18class.py
│ │ ├── scannet_seg-3d-20class.py
│ │ ├── sunrgbd-3d-10class.py
│ │ ├── waymoD5-3d-3class.py
│ │ └── waymoD5-3d-car.py
│ ├── default_runtime.py
│ ├── models
│ │ ├── 3dssd.py
│ │ ├── cascade_mask_rcnn_r50_fpn.py
│ │ ├── centerpoint_01voxel_second_secfpn_nus.py
│ │ ├── centerpoint_02pillar_second_secfpn_nus.py
│ │ ├── fcos3d.py
│ │ ├── groupfree3d.py
│ │ ├── h3dnet.py
│ │ ├── hv_pointpillars_fpn_lyft.py
│ │ ├── hv_pointpillars_fpn_nus.py
│ │ ├── hv_pointpillars_fpn_range100_lyft.py
│ │ ├── hv_pointpillars_secfpn_kitti.py
│ │ ├── hv_pointpillars_secfpn_waymo.py
│ │ ├── hv_second_secfpn_kitti.py
│ │ ├── hv_second_secfpn_waymo.py
│ │ ├── imvotenet_image.py
│ │ ├── mask_rcnn_r50_fpn.py
│ │ ├── paconv_cuda_ssg.py
│ │ ├── paconv_ssg.py
│ │ ├── parta2.py
│ │ ├── pointnet2_msg.py
│ │ ├── pointnet2_ssg.py
│ │ └── votenet.py
│ └── schedules
│ │ ├── cosine.py
│ │ ├── cyclic_20e.py
│ │ ├── cyclic_40e.py
│ │ ├── mmdet_schedule_1x.py
│ │ ├── schedule_2x.py
│ │ ├── schedule_3x.py
│ │ ├── seg_cosine_150e.py
│ │ ├── seg_cosine_200e.py
│ │ └── seg_cosine_50e.py
├── benchmark
│ ├── hv_PartA2_secfpn_4x8_cyclic_80e_pcdet_kitti-3d-3class.py
│ ├── hv_pointpillars_secfpn_3x8_100e_det3d_kitti-3d-car.py
│ ├── hv_pointpillars_secfpn_4x8_80e_pcdet_kitti-3d-3class.py
│ └── hv_second_secfpn_4x8_80e_pcdet_kitti-3d-3class.py
├── centerpoint
│ ├── README.md
│ ├── centerpoint_0075voxel_second_secfpn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_circlenms_4x8_cyclic_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_flip-tta_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_tta_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py
│ ├── centerpoint_0075voxel_second_secfpn_dcn_circlenms_4x8_cyclic_flip-tta_20e_nus.py
│ ├── centerpoint_01voxel_second_secfpn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_01voxel_second_secfpn_circlenms_4x8_cyclic_20e_nus.py
│ ├── centerpoint_01voxel_second_secfpn_dcn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_01voxel_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py
│ ├── centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_02pillar_second_secfpn_circlenms_4x8_cyclic_20e_nus.py
│ ├── centerpoint_02pillar_second_secfpn_dcn_4x8_cyclic_20e_nus.py
│ ├── centerpoint_02pillar_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py
│ └── metafile.yml
├── dynamic_voxelization
│ ├── README.md
│ ├── dv_pointpillars_secfpn_6x8_160e_kitti-3d-car.py
│ ├── dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py
│ ├── dv_second_secfpn_6x8_80e_kitti-3d-car.py
│ └── metafile.yml
├── fcos3d
│ ├── README.md
│ ├── fcos3d_r101_caffe_fpn_gn-head_dcn_2x8_1x_nus-mono3d.py
│ ├── fcos3d_r101_caffe_fpn_gn-head_dcn_2x8_1x_nus-mono3d_finetune.py
│ └── metafile.yml
├── fp16
│ ├── README.md
│ ├── hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-400mf_fpn_sbn-all_fp16_2x8_2x_nus-3d.py
│ ├── hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d.py
│ ├── hv_second_secfpn_fp16_6x8_80e_kitti-3d-3class.py
│ ├── hv_second_secfpn_fp16_6x8_80e_kitti-3d-car.py
│ └── metafile.yml
├── free_anchor
│ ├── README.md
│ ├── hv_pointpillars_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-1.6gf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-1.6gf_fpn_sbn-all_free-anchor_strong-aug_4x8_3x_nus-3d.py
│ ├── hv_pointpillars_regnet-3.2gf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-3.2gf_fpn_sbn-all_free-anchor_strong-aug_4x8_3x_nus-3d.py
│ ├── hv_pointpillars_regnet-400mf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py
│ └── metafile.yml
├── groupfree3d
│ ├── README.md
│ ├── groupfree3d_8x4_scannet-3d-18class-L12-O256.py
│ ├── groupfree3d_8x4_scannet-3d-18class-L6-O256.py
│ ├── groupfree3d_8x4_scannet-3d-18class-w2x-L12-O256.py
│ ├── groupfree3d_8x4_scannet-3d-18class-w2x-L12-O512.py
│ └── metafile.yml
├── h3dnet
│ ├── README.md
│ ├── h3dnet_3x8_scannet-3d-18class.py
│ └── metafile.yml
├── imvotenet
│ ├── README.md
│ ├── imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py
│ ├── imvotenet_stage2_16x8_sunrgbd-3d-10class.py
│ └── metafile.yml
├── imvoxelnet
│ ├── README.md
│ ├── imvoxelnet_4x8_kitti-3d-car.py
│ └── metafile.yml
├── mvxnet
│ ├── README.md
│ ├── dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py
│ └── metafile.yml
├── nuimages
│ ├── README.md
│ ├── cascade_mask_rcnn_r101_fpn_1x_nuim.py
│ ├── cascade_mask_rcnn_r50_fpn_1x_nuim.py
│ ├── cascade_mask_rcnn_r50_fpn_coco-20e_1x_nuim.py
│ ├── cascade_mask_rcnn_r50_fpn_coco-20e_20e_nuim.py
│ ├── cascade_mask_rcnn_x101_32x4d_fpn_1x_nuim.py
│ ├── htc_r50_fpn_1x_nuim.py
│ ├── htc_r50_fpn_coco-20e_1x_nuim.py
│ ├── htc_r50_fpn_coco-20e_20e_nuim.py
│ ├── htc_without_semantic_r50_fpn_1x_nuim.py
│ ├── htc_x101_64x4d_fpn_dconv_c3-c5_coco-20e_16x1_20e_nuim.py
│ ├── mask_rcnn_r101_fpn_1x_nuim.py
│ ├── mask_rcnn_r50_caffe_fpn_1x_nuim.py
│ ├── mask_rcnn_r50_caffe_fpn_coco-3x_1x_nuim.py
│ ├── mask_rcnn_r50_caffe_fpn_coco-3x_20e_nuim.py
│ ├── mask_rcnn_r50_fpn_1x_nuim.py
│ ├── mask_rcnn_r50_fpn_coco-2x_1x_nuim.py
│ ├── mask_rcnn_r50_fpn_coco-2x_1x_nus-2d.py
│ ├── mask_rcnn_x101_32x4d_fpn_1x_nuim.py
│ └── metafile.yml
├── paconv
│ ├── README.md
│ ├── metafile.yml
│ ├── paconv_cuda_ssg_8x8_cosine_200e_s3dis_seg-3d-13class.py
│ └── paconv_ssg_8x8_cosine_150e_s3dis_seg-3d-13class.py
├── parta2
│ ├── README.md
│ ├── hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py
│ ├── hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py
│ └── metafile.yml
├── pointnet2
│ ├── README.md
│ ├── metafile.yml
│ ├── pointnet2_msg_16x2_cosine_250e_scannet_seg-3d-20class.py
│ ├── pointnet2_msg_16x2_cosine_80e_s3dis_seg-3d-13class.py
│ ├── pointnet2_msg_xyz-only_16x2_cosine_250e_scannet_seg-3d-20class.py
│ ├── pointnet2_ssg_16x2_cosine_200e_scannet_seg-3d-20class.py
│ ├── pointnet2_ssg_16x2_cosine_50e_s3dis_seg-3d-13class.py
│ └── pointnet2_ssg_xyz-only_16x2_cosine_200e_scannet_seg-3d-20class.py
├── pointpillars
│ ├── README.md
│ ├── hv_pointpillars_fpn_sbn-all_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_fpn_sbn-all_range100_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py
│ ├── hv_pointpillars_secfpn_6x8_160e_kitti-3d-car.py
│ ├── hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_secfpn_sbn-all_range100_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_secfpn_sbn_2x16_2x_waymo-3d-3class.py
│ ├── hv_pointpillars_secfpn_sbn_2x16_2x_waymo-3d-car.py
│ ├── hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py
│ ├── hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-car.py
│ └── metafile.yml
├── regnet
│ ├── README.md
│ ├── hv_pointpillars_regnet-1.6gf_fpn_sbn-all_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-400mf_fpn_sbn-all_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-400mf_fpn_sbn-all_range100_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_regnet-400mf_secfpn_sbn-all_2x8_2x_lyft-3d.py
│ ├── hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d.py
│ ├── hv_pointpillars_regnet-400mf_secfpn_sbn-all_range100_2x8_2x_lyft-3d.py
│ └── metafile.yml
├── second
│ ├── README.md
│ ├── hv_second_secfpn_6x8_80e_kitti-3d-3class.py
│ ├── hv_second_secfpn_6x8_80e_kitti-3d-car.py
│ ├── hv_second_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py
│ └── metafile.yml
├── sr
│ ├── scannet_baseline.py
│ └── sunrgbd_baseline.py
├── ssn
│ ├── README.md
│ ├── hv_ssn_regnet-400mf_secfpn_sbn-all_1x16_2x_lyft-3d.py
│ ├── hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d.py
│ ├── hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d.py
│ ├── hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d.py
│ └── metafile.yml
└── votenet
│ ├── README.md
│ ├── metafile.yml
│ ├── votenet_16x8_sunrgbd-3d-10class.py
│ ├── votenet_8x8_scannet-3d-18class.py
│ └── votenet_iouloss_8x8_scannet-3d-18class.py
├── data
├── lyft
│ ├── test.txt
│ ├── train.txt
│ └── val.txt
├── s3dis
│ ├── README.md
│ ├── collect_indoor3d_data.py
│ ├── indoor3d_util.py
│ └── meta_data
│ │ ├── anno_paths.txt
│ │ └── class_names.txt
├── scannet
│ ├── README.md
│ ├── batch_load_scannet_data.py
│ ├── extract_posed_images.py
│ ├── load_scannet_data.py
│ ├── meta_data
│ │ ├── scannet_means.npz
│ │ ├── scannet_train.txt
│ │ ├── scannetv2-labels.combined.tsv
│ │ ├── scannetv2_test.txt
│ │ ├── scannetv2_train.txt
│ │ └── scannetv2_val.txt
│ └── scannet_utils.py
└── sunrgbd
│ ├── README.md
│ └── matlab
│ ├── extract_rgbd_data_v1.m
│ ├── extract_rgbd_data_v2.m
│ └── extract_split.m
├── demo
├── data
│ ├── kitti
│ │ ├── kitti_000008.bin
│ │ ├── kitti_000008.png
│ │ └── kitti_000008_infos.pkl
│ ├── nuscenes
│ │ ├── n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525.jpg
│ │ └── n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525_mono3d.coco.json
│ ├── scannet
│ │ └── scene0000_00.bin
│ └── sunrgbd
│ │ ├── sunrgbd_000017.bin
│ │ ├── sunrgbd_000017.jpg
│ │ └── sunrgbd_000017_infos.pkl
├── inference_demo.ipynb
├── mono_det_demo.py
├── multi_modality_demo.py
├── pc_seg_demo.py
└── pcd_demo.py
├── docker
└── Dockerfile
├── docs
├── 1_exist_data_model.md
├── 2_new_data_model.md
├── Makefile
├── _static
│ ├── css
│ │ └── readthedocs.css
│ └── image
│ │ └── mmdet3d-logo.png
├── api.rst
├── benchmarks.md
├── changelog.md
├── compatibility.md
├── conf.py
├── data_preparation.md
├── datasets
│ ├── index.rst
│ ├── kitti_det.md
│ ├── lyft_det.md
│ ├── nuscenes_det.md
│ ├── s3dis_sem_seg.md
│ ├── scannet_det.md
│ ├── scannet_sem_seg.md
│ ├── sunrgbd_det.md
│ └── waymo_det.md
├── demo.md
├── faq.md
├── getting_started.md
├── index.rst
├── make.bat
├── model_zoo.md
├── stat.py
├── supported_tasks
│ ├── index.rst
│ ├── lidar_det3d.md
│ ├── lidar_sem_seg3d.md
│ └── vision_det3d.md
├── switch_language.md
├── tutorials
│ ├── config.md
│ ├── customize_dataset.md
│ ├── customize_models.md
│ ├── customize_runtime.md
│ ├── data_pipeline.md
│ └── index.rst
└── useful_tools.md
├── docs_zh-CN
├── 1_exist_data_model.md
├── 2_new_data_model.md
├── Makefile
├── _static
│ ├── css
│ │ └── readthedocs.css
│ └── image
│ │ └── mmdet3d-logo.png
├── api.rst
├── benchmarks.md
├── changelog.md
├── compatibility.md
├── conf.py
├── data_preparation.md
├── datasets
│ ├── index.rst
│ ├── kitti_det.md
│ ├── lyft_det.md
│ ├── nuscenes_det.md
│ ├── s3dis_sem_seg.md
│ ├── scannet_det.md
│ ├── scannet_sem_seg.md
│ ├── sunrgbd_det.md
│ └── waymo_det.md
├── demo.md
├── faq.md
├── getting_started.md
├── index.rst
├── make.bat
├── model_zoo.md
├── stat.py
├── supported_tasks
│ ├── index.rst
│ ├── lidar_det3d.md
│ ├── lidar_sem_seg3d.md
│ └── vision_det3d.md
├── switch_language.md
├── tutorials
│ ├── config.md
│ ├── customize_dataset.md
│ ├── customize_models.md
│ ├── customize_runtime.md
│ ├── data_pipeline.md
│ └── index.rst
└── useful_tools.md
├── mmdet3d
├── __init__.py
├── apis
│ ├── __init__.py
│ ├── inference.py
│ ├── test.py
│ └── train.py
├── core
│ ├── __init__.py
│ ├── anchor
│ │ ├── __init__.py
│ │ └── anchor_3d_generator.py
│ ├── bbox
│ │ ├── __init__.py
│ │ ├── assigners
│ │ │ └── __init__.py
│ │ ├── box_np_ops.py
│ │ ├── coders
│ │ │ ├── __init__.py
│ │ │ ├── anchor_free_bbox_coder.py
│ │ │ ├── centerpoint_bbox_coders.py
│ │ │ ├── delta_xyzwhlr_bbox_coder.py
│ │ │ ├── groupfree3d_bbox_coder.py
│ │ │ └── partial_bin_based_bbox_coder.py
│ │ ├── iou_calculators
│ │ │ ├── __init__.py
│ │ │ └── iou3d_calculator.py
│ │ ├── samplers
│ │ │ ├── __init__.py
│ │ │ └── iou_neg_piecewise_sampler.py
│ │ ├── structures
│ │ │ ├── __init__.py
│ │ │ ├── base_box3d.py
│ │ │ ├── box_3d_mode.py
│ │ │ ├── cam_box3d.py
│ │ │ ├── coord_3d_mode.py
│ │ │ ├── depth_box3d.py
│ │ │ ├── lidar_box3d.py
│ │ │ └── utils.py
│ │ └── transforms.py
│ ├── evaluation
│ │ ├── __init__.py
│ │ ├── indoor_eval.py
│ │ ├── kitti_utils
│ │ │ ├── __init__.py
│ │ │ ├── eval.py
│ │ │ └── rotate_iou.py
│ │ ├── lyft_eval.py
│ │ ├── seg_eval.py
│ │ └── waymo_utils
│ │ │ └── prediction_kitti_to_waymo.py
│ ├── points
│ │ ├── __init__.py
│ │ ├── base_points.py
│ │ ├── cam_points.py
│ │ ├── depth_points.py
│ │ └── lidar_points.py
│ ├── post_processing
│ │ ├── __init__.py
│ │ ├── box3d_nms.py
│ │ └── merge_augs.py
│ ├── utils
│ │ ├── __init__.py
│ │ └── gaussian.py
│ ├── visualizer
│ │ ├── __init__.py
│ │ ├── image_vis.py
│ │ ├── open3d_vis.py
│ │ └── show_result.py
│ └── voxel
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ └── voxel_generator.py
├── datasets
│ ├── __init__.py
│ ├── builder.py
│ ├── custom_3d.py
│ ├── custom_3d_seg.py
│ ├── dataset_wrappers.py
│ ├── kitti2d_dataset.py
│ ├── kitti_dataset.py
│ ├── kitti_mono_dataset.py
│ ├── lyft_dataset.py
│ ├── nuscenes_dataset.py
│ ├── nuscenes_mono_dataset.py
│ ├── pipelines
│ │ ├── __init__.py
│ │ ├── data_augment_utils.py
│ │ ├── dbsampler.py
│ │ ├── formating.py
│ │ ├── loading.py
│ │ ├── test_time_aug.py
│ │ └── transforms_3d.py
│ ├── s3dis_dataset.py
│ ├── scannet_dataset.py
│ ├── semantickitti_dataset.py
│ ├── sunrgbd_dataset.py
│ ├── utils.py
│ └── waymo_dataset.py
├── models
│ ├── __init__.py
│ ├── backbones
│ │ ├── __init__.py
│ │ ├── base_pointnet.py
│ │ ├── multi_backbone.py
│ │ ├── nostem_regnet.py
│ │ ├── pointnet2_sa_msg.py
│ │ ├── pointnet2_sa_ssg.py
│ │ └── second.py
│ ├── builder.py
│ ├── decode_heads
│ │ ├── __init__.py
│ │ ├── decode_head.py
│ │ ├── paconv_head.py
│ │ └── pointnet2_head.py
│ ├── dense_heads
│ │ ├── __init__.py
│ │ ├── anchor3d_head.py
│ │ ├── anchor_free_mono3d_head.py
│ │ ├── base_conv_bbox_head.py
│ │ ├── base_mono3d_dense_head.py
│ │ ├── centerpoint_head.py
│ │ ├── fcos_mono3d_head.py
│ │ ├── free_anchor3d_head.py
│ │ ├── groupfree3d_head.py
│ │ ├── parta2_rpn_head.py
│ │ ├── shape_aware_head.py
│ │ ├── sr_head.py
│ │ ├── sr_init_head.py
│ │ ├── sr_roi_head.py
│ │ ├── ssd_3d_head.py
│ │ ├── train_mixins.py
│ │ └── vote_head.py
│ ├── detectors
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── centerpoint.py
│ │ ├── dynamic_voxelnet.py
│ │ ├── fcos_mono3d.py
│ │ ├── groupfree3dnet.py
│ │ ├── h3dnet.py
│ │ ├── imvotenet.py
│ │ ├── imvoxelnet.py
│ │ ├── mvx_faster_rcnn.py
│ │ ├── mvx_two_stage.py
│ │ ├── parta2.py
│ │ ├── single_stage.py
│ │ ├── single_stage_mono3d.py
│ │ ├── ssd3dnet.py
│ │ ├── two_stage.py
│ │ ├── votenet.py
│ │ └── voxelnet.py
│ ├── fusion_layers
│ │ ├── __init__.py
│ │ ├── coord_transform.py
│ │ ├── point_fusion.py
│ │ └── vote_fusion.py
│ ├── losses
│ │ ├── __init__.py
│ │ ├── axis_aligned_iou_loss.py
│ │ ├── chamfer_distance.py
│ │ └── paconv_regularization_loss.py
│ ├── middle_encoders
│ │ ├── __init__.py
│ │ ├── pillar_scatter.py
│ │ ├── sparse_encoder.py
│ │ └── sparse_unet.py
│ ├── model_utils
│ │ ├── __init__.py
│ │ ├── noise_suppression_module.py
│ │ ├── transformer.py
│ │ ├── utils.py
│ │ └── vote_module.py
│ ├── necks
│ │ ├── __init__.py
│ │ ├── imvoxel_neck.py
│ │ └── second_fpn.py
│ ├── roi_heads
│ │ ├── __init__.py
│ │ ├── base_3droi_head.py
│ │ ├── bbox_heads
│ │ │ ├── __init__.py
│ │ │ ├── h3d_bbox_head.py
│ │ │ └── parta2_bbox_head.py
│ │ ├── h3d_roi_head.py
│ │ ├── mask_heads
│ │ │ ├── __init__.py
│ │ │ ├── pointwise_semantic_head.py
│ │ │ └── primitive_head.py
│ │ ├── part_aggregation_roi_head.py
│ │ └── roi_extractors
│ │ │ ├── __init__.py
│ │ │ └── single_roiaware_extractor.py
│ ├── segmentors
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── encoder_decoder.py
│ ├── utils
│ │ ├── __init__.py
│ │ ├── clip_sigmoid.py
│ │ └── mlp.py
│ └── voxel_encoders
│ │ ├── __init__.py
│ │ ├── pillar_encoder.py
│ │ ├── utils.py
│ │ └── voxel_encoder.py
├── ops
│ ├── __init__.py
│ ├── ball_query
│ │ ├── __init__.py
│ │ ├── ball_query.py
│ │ └── src
│ │ │ ├── ball_query.cpp
│ │ │ └── ball_query_cuda.cu
│ ├── furthest_point_sample
│ │ ├── __init__.py
│ │ ├── furthest_point_sample.py
│ │ ├── points_sampler.py
│ │ ├── src
│ │ │ ├── furthest_point_sample.cpp
│ │ │ └── furthest_point_sample_cuda.cu
│ │ └── utils.py
│ ├── gather_points
│ │ ├── __init__.py
│ │ ├── gather_points.py
│ │ └── src
│ │ │ ├── gather_points.cpp
│ │ │ └── gather_points_cuda.cu
│ ├── group_points
│ │ ├── __init__.py
│ │ ├── group_points.py
│ │ └── src
│ │ │ ├── group_points.cpp
│ │ │ └── group_points_cuda.cu
│ ├── interpolate
│ │ ├── __init__.py
│ │ ├── src
│ │ │ ├── interpolate.cpp
│ │ │ ├── three_interpolate_cuda.cu
│ │ │ └── three_nn_cuda.cu
│ │ ├── three_interpolate.py
│ │ └── three_nn.py
│ ├── iou3d
│ │ ├── __init__.py
│ │ ├── iou3d_utils.py
│ │ └── src
│ │ │ ├── iou3d.cpp
│ │ │ └── iou3d_kernel.cu
│ ├── knn
│ │ ├── __init__.py
│ │ ├── knn.py
│ │ └── src
│ │ │ ├── knn.cpp
│ │ │ └── knn_cuda.cu
│ ├── norm.py
│ ├── paconv
│ │ ├── __init__.py
│ │ ├── assign_score.py
│ │ ├── paconv.py
│ │ ├── src
│ │ │ ├── assign_score_withk.cpp
│ │ │ └── assign_score_withk_cuda.cu
│ │ └── utils.py
│ ├── pointnet_modules
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ ├── paconv_sa_module.py
│ │ ├── point_fp_module.py
│ │ ├── point_fp_modulev2.py
│ │ └── point_sa_module.py
│ ├── roiaware_pool3d
│ │ ├── __init__.py
│ │ ├── points_in_boxes.py
│ │ ├── roiaware_pool3d.py
│ │ └── src
│ │ │ ├── points_in_boxes_cpu.cpp
│ │ │ ├── points_in_boxes_cuda.cu
│ │ │ ├── roiaware_pool3d.cpp
│ │ │ └── roiaware_pool3d_kernel.cu
│ ├── sparse_block.py
│ ├── spconv
│ │ ├── __init__.py
│ │ ├── conv.py
│ │ ├── functional.py
│ │ ├── include
│ │ │ ├── paramsgrid.h
│ │ │ ├── prettyprint.h
│ │ │ ├── pybind11_utils.h
│ │ │ ├── spconv
│ │ │ │ ├── fused_spconv_ops.h
│ │ │ │ ├── geometry.h
│ │ │ │ ├── indice.cu.h
│ │ │ │ ├── indice.h
│ │ │ │ ├── maxpool.h
│ │ │ │ ├── mp_helper.h
│ │ │ │ ├── point2voxel.h
│ │ │ │ ├── pool_ops.h
│ │ │ │ ├── reordering.cu.h
│ │ │ │ ├── reordering.h
│ │ │ │ └── spconv_ops.h
│ │ │ ├── tensorview
│ │ │ │ ├── helper_kernel.cu.h
│ │ │ │ ├── helper_launch.h
│ │ │ │ └── tensorview.h
│ │ │ ├── torch_utils.h
│ │ │ └── utility
│ │ │ │ └── timer.h
│ │ ├── modules.py
│ │ ├── ops.py
│ │ ├── pool.py
│ │ ├── src
│ │ │ ├── all.cc
│ │ │ ├── indice.cc
│ │ │ ├── indice_cuda.cu
│ │ │ ├── maxpool.cc
│ │ │ ├── maxpool_cuda.cu
│ │ │ ├── reordering.cc
│ │ │ └── reordering_cuda.cu
│ │ ├── structure.py
│ │ └── test_utils.py
│ └── voxel
│ │ ├── __init__.py
│ │ ├── scatter_points.py
│ │ ├── src
│ │ ├── scatter_points_cpu.cpp
│ │ ├── scatter_points_cuda.cu
│ │ ├── voxelization.cpp
│ │ ├── voxelization.h
│ │ ├── voxelization_cpu.cpp
│ │ └── voxelization_cuda.cu
│ │ └── voxelize.py
├── utils
│ ├── __init__.py
│ ├── collect_env.py
│ └── logger.py
└── version.py
├── model-index.yml
├── requirements.txt
├── requirements
├── build.txt
├── docs.txt
├── mminstall.txt
├── optional.txt
├── readthedocs.txt
├── runtime.txt
└── tests.txt
├── resources
├── browse_dataset_mono.png
├── browse_dataset_multi_modality.png
├── browse_dataset_seg.png
├── data_pipeline.png
├── loss_curve.png
├── mmdet3d-logo.png
├── mmdet3d_outdoor_demo.gif
├── nuimages_demo.gif
├── open3d_visual.gif
├── qq_group_qrcode.png
└── zhihu_qrcode.jpg
├── setup.cfg
├── setup.py
├── tests
├── data
│ ├── kitti
│ │ ├── a.bin
│ │ ├── kitti_dbinfos_train.pkl
│ │ ├── kitti_gt_database
│ │ │ └── 0_Pedestrian_0.bin
│ │ ├── kitti_infos_mono3d.coco.json
│ │ ├── kitti_infos_mono3d.pkl
│ │ ├── kitti_infos_train.pkl
│ │ ├── mono3d_sample_results.pkl
│ │ ├── mono3d_sample_results2d.pkl
│ │ └── training
│ │ │ ├── image_2
│ │ │ ├── 000000.png
│ │ │ └── 000007.png
│ │ │ ├── velodyne
│ │ │ └── 000000.bin
│ │ │ └── velodyne_reduced
│ │ │ └── 000000.bin
│ ├── lyft
│ │ ├── lidar
│ │ │ ├── host-a017_lidar1_1236118886501000046.bin
│ │ │ ├── host-a017_lidar1_1236118886701083686.bin
│ │ │ └── host-a017_lidar1_1236118886901125926.bin
│ │ ├── lyft_infos.pkl
│ │ ├── lyft_infos_val.pkl
│ │ ├── sample_results.pkl
│ │ ├── v1.01-train
│ │ │ ├── maps
│ │ │ │ └── map_raster_palo_alto.png
│ │ │ └── v1.01-train
│ │ │ │ ├── attribute.json
│ │ │ │ ├── calibrated_sensor.json
│ │ │ │ ├── category.json
│ │ │ │ ├── ego_pose.json
│ │ │ │ ├── instance.json
│ │ │ │ ├── log.json
│ │ │ │ ├── map.json
│ │ │ │ ├── sample.json
│ │ │ │ ├── sample_annotation.json
│ │ │ │ ├── sample_data.json
│ │ │ │ ├── scene.json
│ │ │ │ ├── sensor.json
│ │ │ │ └── visibility.json
│ │ └── val.txt
│ ├── nuscenes
│ │ ├── mono3d_sample_results.pkl
│ │ ├── nus_info.pkl
│ │ ├── nus_infos_mono3d.coco.json
│ │ ├── samples
│ │ │ ├── CAM_BACK_LEFT
│ │ │ │ └── n015-2018-07-18-11-07-57+0800__CAM_BACK_LEFT__1531883530447423.jpg
│ │ │ └── LIDAR_TOP
│ │ │ │ └── n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470948018.pcd.bin
│ │ └── sweeps
│ │ │ └── LIDAR_TOP
│ │ │ ├── n008-2018-09-18-12-07-26-0400__LIDAR_TOP__1537287083900561.pcd.bin
│ │ │ └── n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470898274.pcd.bin
│ ├── ops
│ │ ├── features_for_fps_distance.npy
│ │ └── fps_idx.npy
│ ├── s3dis
│ │ ├── instance_mask
│ │ │ └── Area_1_office_2.bin
│ │ ├── points
│ │ │ └── Area_1_office_2.bin
│ │ ├── s3dis_infos.pkl
│ │ └── semantic_mask
│ │ │ └── Area_1_office_2.bin
│ ├── scannet
│ │ ├── instance_mask
│ │ │ └── scene0000_00.bin
│ │ ├── points
│ │ │ └── scene0000_00.bin
│ │ ├── scannet_infos.pkl
│ │ └── semantic_mask
│ │ │ └── scene0000_00.bin
│ ├── semantickitti
│ │ ├── semantickitti_infos.pkl
│ │ └── sequences
│ │ │ └── 00
│ │ │ ├── labels
│ │ │ └── 000000.label
│ │ │ └── velodyne
│ │ │ └── 000000.bin
│ ├── sunrgbd
│ │ ├── points
│ │ │ └── 000001.bin
│ │ ├── sunrgbd_infos.pkl
│ │ └── sunrgbd_trainval
│ │ │ └── image
│ │ │ └── 000001.jpg
│ └── waymo
│ │ ├── kitti_format
│ │ ├── training
│ │ │ ├── image_0
│ │ │ │ ├── 0000000.png
│ │ │ │ └── 1000000.png
│ │ │ └── velodyne
│ │ │ │ ├── 0000000.bin
│ │ │ │ └── 1000000.bin
│ │ ├── waymo_dbinfos_train.pkl
│ │ ├── waymo_gt_database
│ │ │ └── 0_Car_0.bin
│ │ ├── waymo_infos_train.pkl
│ │ └── waymo_infos_val.pkl
│ │ └── waymo_format
│ │ ├── gt.bin
│ │ └── validation
│ │ └── val.tfrecord
├── test_data
│ ├── test_datasets
│ │ ├── test_dataset_wrappers.py
│ │ ├── test_kitti_dataset.py
│ │ ├── test_kitti_mono_dataset.py
│ │ ├── test_lyft_dataset.py
│ │ ├── test_nuscene_dataset.py
│ │ ├── test_nuscenes_mono_dataset.py
│ │ ├── test_s3dis_dataset.py
│ │ ├── test_scannet_dataset.py
│ │ ├── test_semantickitti_dataset.py
│ │ ├── test_sunrgbd_dataset.py
│ │ └── test_waymo_dataset.py
│ └── test_pipelines
│ │ ├── test_augmentations
│ │ ├── test_data_augment_utils.py
│ │ ├── test_test_augment_utils.py
│ │ └── test_transforms_3d.py
│ │ ├── test_indoor_pipeline.py
│ │ ├── test_indoor_sample.py
│ │ ├── test_loadings
│ │ ├── test_load_images_from_multi_views.py
│ │ ├── test_load_points_from_multi_sweeps.py
│ │ └── test_loading.py
│ │ └── test_outdoor_pipeline.py
├── test_metrics
│ ├── test_indoor_eval.py
│ ├── test_kitti_eval.py
│ ├── test_losses.py
│ └── test_seg_eval.py
├── test_models
│ ├── test_backbones.py
│ ├── test_common_modules
│ │ ├── test_middle_encoders.py
│ │ ├── test_paconv_modules.py
│ │ ├── test_paconv_ops.py
│ │ ├── test_pointnet_modules.py
│ │ ├── test_pointnet_ops.py
│ │ ├── test_roiaware_pool3d.py
│ │ ├── test_sparse_unet.py
│ │ └── test_vote_module.py
│ ├── test_detectors.py
│ ├── test_forward.py
│ ├── test_fusion
│ │ ├── test_fusion_coord_trans.py
│ │ ├── test_point_fusion.py
│ │ └── test_vote_fusion.py
│ ├── test_heads
│ │ ├── test_heads.py
│ │ ├── test_paconv_decode_head.py
│ │ ├── test_parta2_bbox_head.py
│ │ ├── test_pointnet2_decode_head.py
│ │ ├── test_roi_extractors.py
│ │ └── test_semantic_heads.py
│ ├── test_necks
│ │ ├── test_fpn.py
│ │ └── test_necks.py
│ ├── test_segmentors.py
│ └── test_voxel_encoder
│ │ ├── test_dynamic_scatter.py
│ │ ├── test_voxel_encoders.py
│ │ ├── test_voxel_generator.py
│ │ └── test_voxelize.py
├── test_runtime
│ ├── test_apis.py
│ └── test_config.py
├── test_samples
│ └── parta2_roihead_inputs.npz
└── test_utils
│ ├── test_anchors.py
│ ├── test_assigners.py
│ ├── test_bbox_coders.py
│ ├── test_box3d.py
│ ├── test_box_np_ops.py
│ ├── test_coord_3d_mode.py
│ ├── test_merge_augs.py
│ ├── test_nms.py
│ ├── test_points.py
│ ├── test_samplers.py
│ └── test_utils.py
└── tools
├── analysis_tools
├── analyze_logs.py
├── benchmark.py
└── get_flops.py
├── create_data.py
├── create_data.sh
├── data_converter
├── __init__.py
├── create_gt_database.py
├── indoor_converter.py
├── kitti_converter.py
├── kitti_data_utils.py
├── lyft_converter.py
├── lyft_data_fixer.py
├── nuimage_converter.py
├── nuscenes_converter.py
├── s3dis_data_utils.py
├── scannet_data_utils.py
├── sunrgbd_data_utils.py
└── waymo_converter.py
├── dist_test.sh
├── dist_train.sh
├── misc
├── browse_dataset.py
├── fuse_conv_bn.py
├── print_config.py
└── visualize_results.py
├── model_converters
├── convert_h3dnet_checkpoints.py
├── convert_votenet_checkpoints.py
├── publish_model.py
└── regnet2mmdet.py
├── slurm_test.sh
├── slurm_train.sh
├── test.py
└── train.py
/.dev_scripts/linter.sh:
--------------------------------------------------------------------------------
1 | yapf -r -i mmdet3d/ configs/ tests/ tools/
2 | isort mmdet3d/ configs/ tests/ tools/
3 | flake8 .
4 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | We appreciate all contributions to improve MMDetection3D. Please refer to [CONTRIBUTING.md](https://github.com/open-mmlab/mmcv/blob/master/CONTRIBUTING.md) in MMCV for more details about the contributing guideline.
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/error-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Error report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | Thanks for your error report and we appreciate it a lot.
11 |
12 | **Checklist**
13 | 1. I have searched related issues but cannot get the expected help.
14 | 2. The bug has not been fixed in the latest version.
15 |
16 | **Describe the bug**
17 | A clear and concise description of what the bug is.
18 |
19 | **Reproduction**
20 | 1. What command or script did you run?
21 |
22 | ```
23 | A placeholder for the command.
24 | ```
25 |
26 | 2. Did you make any modifications on the code or config? Did you understand what you have modified?
27 | 3. What dataset did you use?
28 |
29 | **Environment**
30 |
31 | 1. Please run `python mmdet3d/utils/collect_env.py` to collect necessary environment infomation and paste it here.
32 | 2. You may add addition that may be helpful for locating the problem, such as
33 | - How you installed PyTorch [e.g., pip, conda, source]
34 | - Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.)
35 |
36 | **Error traceback**
37 | If applicable, paste the error trackback here.
38 |
39 | ```
40 | A placeholder for trackback.
41 | ```
42 |
43 | **Bug fix**
44 | If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated!
45 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the feature**
11 |
12 | **Motivation**
13 | A clear and concise description of the motivation of the feature.
14 | Ex1. It is inconvenient when [....].
15 | Ex2. There is a recent paper [....], which is very helpful for [....].
16 |
17 | **Related resources**
18 | If there is an official code release or third-party implementations, please also provide the information here, which would be very helpful.
19 |
20 | **Additional context**
21 | Add any other context or screenshots about the feature request here.
22 | If you would like to implement the feature and create a PR, please leave a comment here and that would be much appreciated.
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/general_questions.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: General questions
3 | about: Ask general questions to get help
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | Thanks for your contribution and we appreciate it a lot. The following instructions would make your pull request more healthy and more easily get feedback. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers.
2 |
3 | ## Motivation
4 | Please describe the motivation of this PR and the goal you want to achieve through this PR.
5 |
6 | ## Modification
7 | Please briefly describe what modification is made in this PR.
8 |
9 | ## BC-breaking (Optional)
10 | Does the modification introduce changes that break the back-compatibility of the downstream repos?
11 | If so, please describe how it breaks the compatibility and how the downstream projects should modify their code to keep compatibility with this PR.
12 |
13 | ## Use cases (Optional)
14 | If this PR introduces a new feature, it is better to list some use cases here, and update the documentation.
15 |
16 | ## Checklist
17 |
18 | 1. Pre-commit or other linting tools are used to fix the potential lint issues.
19 | 2. The modification is covered by complete unit tests. If not, please add more unit test to ensure the correctness.
20 | 3. If the modification has potential influence on downstream projects, this PR should be tested with downstream projects.
21 | 4. The documentation has been modified accordingly, like docstring or example tutorials.
22 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: deploy
2 |
3 | on: push
4 |
5 | jobs:
6 | build-n-publish:
7 | runs-on: ubuntu-18.04
8 | if: startsWith(github.event.ref, 'refs/tags')
9 | steps:
10 | - uses: actions/checkout@v2
11 | - name: Set up Python 3.7
12 | uses: actions/setup-python@v2
13 | with:
14 | python-version: 3.7
15 | - name: Install torch
16 | run: pip install torch
17 | - name: Build MMDet3D
18 | run: python setup.py sdist
19 | - name: Publish distribution to PyPI
20 | run: |
21 | pip install twine
22 | twine upload dist/* -u __token__ -p ${{ secrets.pypi_password }}
23 |
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
1 | repos:
2 | - repo: https://gitlab.com/pycqa/flake8.git
3 | rev: 3.8.3
4 | hooks:
5 | - id: flake8
6 | - repo: https://github.com/asottile/seed-isort-config
7 | rev: v2.2.0
8 | hooks:
9 | - id: seed-isort-config
10 | - repo: https://github.com/timothycrosley/isort
11 | rev: 5.0.2
12 | hooks:
13 | - id: isort
14 | - repo: https://github.com/pre-commit/mirrors-yapf
15 | rev: v0.30.0
16 | hooks:
17 | - id: yapf
18 | - repo: https://github.com/pre-commit/pre-commit-hooks
19 | rev: v3.1.0
20 | hooks:
21 | - id: trailing-whitespace
22 | - id: check-yaml
23 | - id: end-of-file-fixer
24 | - id: requirements-txt-fixer
25 | - id: double-quote-string-fixer
26 | - id: check-merge-conflict
27 | - id: fix-encoding-pragma
28 | args: ["--remove"]
29 | - id: mixed-line-ending
30 | args: ["--fix=lf"]
31 | - repo: https://github.com/myint/docformatter
32 | rev: v1.3.1
33 | hooks:
34 | - id: docformatter
35 | args: ["--in-place", "--wrap-descriptions", "79"]
36 |
--------------------------------------------------------------------------------
/.readthedocs.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 |
3 | formats: all
4 |
5 | python:
6 | version: 3.7
7 | install:
8 | - requirements: requirements/docs.txt
9 | - requirements: requirements/runtime.txt
10 | - requirements: requirements/readthedocs.txt
11 | - requirements: requirements/mminstall.txt
12 |
--------------------------------------------------------------------------------
/CITATION.cff:
--------------------------------------------------------------------------------
1 | cff-version: 1.2.0
2 | message: "If you use this software, please cite it as below."
3 | authors:
4 | - name: "MMDetection3D Contributors"
5 | title: "OpenMMLab's Next-generation Platform for General 3D Object Detection"
6 | date-released: 2020-07-23
7 | url: "https://github.com/open-mmlab/mmdetection3d"
8 | license: Apache-2.0
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include mmdet3d/.mim/model-index.yml
2 | include requirements/*.txt
3 | recursive-include mmdet3d/.mim/ops *.cpp *.cu *.h *.cc
4 | recursive-include mmdet3d/.mim/configs *.py *.yml
5 | recursive-include mmdet3d/.mim/tools *.sh *.py
6 |
--------------------------------------------------------------------------------
/configs/3dssd/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: 3DSSD
3 | Metadata:
4 | Training Data: KITTI
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 4x TITAN X
8 | Architecture:
9 | - PointNet++
10 | Paper:
11 | URL: https://arxiv.org/abs/2002.10187
12 | Title: '3DSSD: Point-based 3D Single Stage Object Detector'
13 | README: configs/3dssd/README.md
14 | Code:
15 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/ssd3dnet.py#L7
16 | Version: v0.6.0
17 |
18 | Models:
19 | - Name: 3dssd_4x4_kitti-3d-car
20 | In Collection: 3DSSD
21 | Config: configs/3dssd/3dssd_4x4_kitti-3d-car.py
22 | Metadata:
23 | Training Memory (GB): 4.7
24 | Results:
25 | - Task: 3D Object Detection
26 | Dataset: KITTI
27 | Metrics:
28 | mAP: 78.69
29 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/3dssd/3dssd_kitti-3d-car_20210602_124438-b4276f56.pth
30 |
--------------------------------------------------------------------------------
/configs/_base_/default_runtime.py:
--------------------------------------------------------------------------------
1 | checkpoint_config = dict(interval=1)
2 | # yapf:disable push
3 | # By default we use textlogger hook and tensorboard
4 | # For more loggers see
5 | # https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.LoggerHook
6 | log_config = dict(
7 | interval=50,
8 | hooks=[
9 | dict(type='TextLoggerHook'),
10 | dict(type='TensorboardLoggerHook')
11 | ])
12 | # yapf:enable
13 | dist_params = dict(backend='nccl')
14 | log_level = 'INFO'
15 | work_dir = None
16 | load_from = None
17 | resume_from = None
18 | workflow = [('train', 1)]
19 |
--------------------------------------------------------------------------------
/configs/_base_/models/hv_pointpillars_fpn_lyft.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_pointpillars_fpn_nus.py'
2 |
3 | # model settings (based on nuScenes model settings)
4 | # Voxel size for voxel encoder
5 | # Usually voxel size is changed consistently with the point cloud range
6 | # If point cloud range is modified, do remember to change all related
7 | # keys in the config.
8 | model = dict(
9 | pts_voxel_layer=dict(
10 | max_num_points=20,
11 | point_cloud_range=[-80, -80, -5, 80, 80, 3],
12 | max_voxels=(60000, 60000)),
13 | pts_voxel_encoder=dict(
14 | feat_channels=[64], point_cloud_range=[-80, -80, -5, 80, 80, 3]),
15 | pts_middle_encoder=dict(output_shape=[640, 640]),
16 | pts_bbox_head=dict(
17 | num_classes=9,
18 | anchor_generator=dict(
19 | ranges=[[-80, -80, -1.8, 80, 80, -1.8]], custom_values=[]),
20 | bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder', code_size=7)),
21 | # model training settings (based on nuScenes model settings)
22 | train_cfg=dict(pts=dict(code_weight=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])))
23 |
--------------------------------------------------------------------------------
/configs/_base_/models/hv_pointpillars_fpn_range100_lyft.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_pointpillars_fpn_nus.py'
2 |
3 | # model settings (based on nuScenes model settings)
4 | # Voxel size for voxel encoder
5 | # Usually voxel size is changed consistently with the point cloud range
6 | # If point cloud range is modified, do remember to change all related
7 | # keys in the config.
8 | model = dict(
9 | pts_voxel_layer=dict(
10 | max_num_points=20,
11 | point_cloud_range=[-100, -100, -5, 100, 100, 3],
12 | max_voxels=(60000, 60000)),
13 | pts_voxel_encoder=dict(
14 | feat_channels=[64], point_cloud_range=[-100, -100, -5, 100, 100, 3]),
15 | pts_middle_encoder=dict(output_shape=[800, 800]),
16 | pts_bbox_head=dict(
17 | num_classes=9,
18 | anchor_generator=dict(
19 | ranges=[[-100, -100, -1.8, 100, 100, -1.8]], custom_values=[]),
20 | bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder', code_size=7)),
21 | # model training settings (based on nuScenes model settings)
22 | train_cfg=dict(pts=dict(code_weight=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])))
23 |
--------------------------------------------------------------------------------
/configs/_base_/models/paconv_cuda_ssg.py:
--------------------------------------------------------------------------------
1 | _base_ = './paconv_ssg.py'
2 |
3 | model = dict(
4 | backbone=dict(
5 | sa_cfg=dict(
6 | type='PAConvCUDASAModule',
7 | scorenet_cfg=dict(mlp_channels=[8, 16, 16]))))
8 |
--------------------------------------------------------------------------------
/configs/_base_/models/pointnet2_msg.py:
--------------------------------------------------------------------------------
1 | _base_ = './pointnet2_ssg.py'
2 |
3 | # model settings
4 | model = dict(
5 | backbone=dict(
6 | _delete_=True,
7 | type='PointNet2SAMSG',
8 | in_channels=6, # [xyz, rgb], should be modified with dataset
9 | num_points=(1024, 256, 64, 16),
10 | radii=((0.05, 0.1), (0.1, 0.2), (0.2, 0.4), (0.4, 0.8)),
11 | num_samples=((16, 32), (16, 32), (16, 32), (16, 32)),
12 | sa_channels=(((16, 16, 32), (32, 32, 64)), ((64, 64, 128), (64, 96,
13 | 128)),
14 | ((128, 196, 256), (128, 196, 256)), ((256, 256, 512),
15 | (256, 384, 512))),
16 | aggregation_channels=(None, None, None, None),
17 | fps_mods=(('D-FPS'), ('D-FPS'), ('D-FPS'), ('D-FPS')),
18 | fps_sample_range_lists=((-1), (-1), (-1), (-1)),
19 | dilated_group=(False, False, False, False),
20 | out_indices=(0, 1, 2, 3),
21 | sa_cfg=dict(
22 | type='PointSAModuleMSG',
23 | pool_mod='max',
24 | use_xyz=True,
25 | normalize_xyz=False)),
26 | decode_head=dict(
27 | fp_channels=((1536, 256, 256), (512, 256, 256), (352, 256, 128),
28 | (128, 128, 128, 128))))
29 |
--------------------------------------------------------------------------------
/configs/_base_/models/pointnet2_ssg.py:
--------------------------------------------------------------------------------
1 | # model settings
2 | model = dict(
3 | type='EncoderDecoder3D',
4 | backbone=dict(
5 | type='PointNet2SASSG',
6 | in_channels=6, # [xyz, rgb], should be modified with dataset
7 | num_points=(1024, 256, 64, 16),
8 | radius=(0.1, 0.2, 0.4, 0.8),
9 | num_samples=(32, 32, 32, 32),
10 | sa_channels=((32, 32, 64), (64, 64, 128), (128, 128, 256), (256, 256,
11 | 512)),
12 | fp_channels=(),
13 | norm_cfg=dict(type='BN2d'),
14 | sa_cfg=dict(
15 | type='PointSAModule',
16 | pool_mod='max',
17 | use_xyz=True,
18 | normalize_xyz=False)),
19 | decode_head=dict(
20 | type='PointNet2Head',
21 | fp_channels=((768, 256, 256), (384, 256, 256), (320, 256, 128),
22 | (128, 128, 128, 128)),
23 | channels=128,
24 | dropout_ratio=0.5,
25 | conv_cfg=dict(type='Conv1d'),
26 | norm_cfg=dict(type='BN1d'),
27 | act_cfg=dict(type='ReLU'),
28 | loss_decode=dict(
29 | type='CrossEntropyLoss',
30 | use_sigmoid=False,
31 | class_weight=None, # should be modified with dataset
32 | loss_weight=1.0)),
33 | # model training and testing settings
34 | train_cfg=dict(),
35 | test_cfg=dict(mode='slide'))
36 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/cosine.py:
--------------------------------------------------------------------------------
1 | # This schedule is mainly used by models with dynamic voxelization
2 | # optimizer
3 | lr = 0.003 # max learning rate
4 | optimizer = dict(
5 | type='AdamW',
6 | lr=lr,
7 | betas=(0.95, 0.99), # the momentum is change during training
8 | weight_decay=0.001)
9 | optimizer_config = dict(grad_clip=dict(max_norm=10, norm_type=2))
10 |
11 | lr_config = dict(
12 | policy='CosineAnnealing',
13 | warmup='linear',
14 | warmup_iters=1000,
15 | warmup_ratio=1.0 / 10,
16 | min_lr_ratio=1e-5)
17 |
18 | momentum_config = None
19 |
20 | runner = dict(type='EpochBasedRunner', max_epochs=40)
21 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/cyclic_20e.py:
--------------------------------------------------------------------------------
1 | # For nuScenes dataset, we usually evaluate the model at the end of training.
2 | # Since the models are trained by 24 epochs by default, we set evaluation
3 | # interval to be 20. Please change the interval accordingly if you do not
4 | # use a default schedule.
5 | # optimizer
6 | # This schedule is mainly used by models on nuScenes dataset
7 | optimizer = dict(type='AdamW', lr=1e-4, weight_decay=0.01)
8 | # max_norm=10 is better for SECOND
9 | optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
10 | lr_config = dict(
11 | policy='cyclic',
12 | target_ratio=(10, 1e-4),
13 | cyclic_times=1,
14 | step_ratio_up=0.4,
15 | )
16 | momentum_config = dict(
17 | policy='cyclic',
18 | target_ratio=(0.85 / 0.95, 1),
19 | cyclic_times=1,
20 | step_ratio_up=0.4,
21 | )
22 |
23 | # runtime settings
24 | runner = dict(type='EpochBasedRunner', max_epochs=20)
25 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/cyclic_40e.py:
--------------------------------------------------------------------------------
1 | # The schedule is usually used by models trained on KITTI dataset
2 |
3 | # The learning rate set in the cyclic schedule is the initial learning rate
4 | # rather than the max learning rate. Since the target_ratio is (10, 1e-4),
5 | # the learning rate will change from 0.0018 to 0.018, than go to 0.0018*1e-4
6 | lr = 0.0018
7 | # The optimizer follows the setting in SECOND.Pytorch, but here we use
8 | # the offcial AdamW optimizer implemented by PyTorch.
9 | optimizer = dict(type='AdamW', lr=lr, betas=(0.95, 0.99), weight_decay=0.01)
10 | optimizer_config = dict(grad_clip=dict(max_norm=10, norm_type=2))
11 | # We use cyclic learning rate and momentum schedule following SECOND.Pytorch
12 | # https://github.com/traveller59/second.pytorch/blob/3aba19c9688274f75ebb5e576f65cfe54773c021/torchplus/train/learning_schedules_fastai.py#L69 # noqa
13 | # We implement them in mmcv, for more details, please refer to
14 | # https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/lr_updater.py#L327 # noqa
15 | # https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/momentum_updater.py#L130 # noqa
16 | lr_config = dict(
17 | policy='cyclic',
18 | target_ratio=(10, 1e-4),
19 | cyclic_times=1,
20 | step_ratio_up=0.4,
21 | )
22 | momentum_config = dict(
23 | policy='cyclic',
24 | target_ratio=(0.85 / 0.95, 1),
25 | cyclic_times=1,
26 | step_ratio_up=0.4,
27 | )
28 | # Although the max_epochs is 40, this schedule is usually used we
29 | # RepeatDataset with repeat ratio N, thus the actual max epoch
30 | # number could be Nx40
31 | runner = dict(type='EpochBasedRunner', max_epochs=40)
32 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/mmdet_schedule_1x.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)
3 | optimizer_config = dict(grad_clip=None)
4 | # learning policy
5 | lr_config = dict(
6 | policy='step',
7 | warmup='linear',
8 | warmup_iters=500,
9 | warmup_ratio=0.001,
10 | step=[8, 11])
11 | runner = dict(type='EpochBasedRunner', max_epochs=12)
12 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/schedule_2x.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | # This schedule is mainly used by models on nuScenes dataset
3 | optimizer = dict(type='AdamW', lr=0.001, weight_decay=0.01)
4 | # max_norm=10 is better for SECOND
5 | optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
6 | lr_config = dict(
7 | policy='step',
8 | warmup='linear',
9 | warmup_iters=1000,
10 | warmup_ratio=1.0 / 1000,
11 | step=[20, 23])
12 | momentum_config = None
13 | # runtime settings
14 | runner = dict(type='EpochBasedRunner', max_epochs=24)
15 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/schedule_3x.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | # This schedule is mainly used by models on indoor dataset,
3 | # e.g., VoteNet on SUNRGBD and ScanNet
4 | lr = 0.008 # max learning rate
5 | optimizer = dict(type='AdamW', lr=lr, weight_decay=0.01)
6 | optimizer_config = dict(grad_clip=dict(max_norm=10, norm_type=2))
7 | lr_config = dict(policy='step', warmup=None, step=[24, 32])
8 | # runtime settings
9 | runner = dict(type='EpochBasedRunner', max_epochs=36)
10 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/seg_cosine_150e.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | # This schedule is mainly used on S3DIS dataset in segmentation task
3 | optimizer = dict(type='SGD', lr=0.2, weight_decay=0.0001, momentum=0.9)
4 | optimizer_config = dict(grad_clip=None)
5 | lr_config = dict(policy='CosineAnnealing', warmup=None, min_lr=0.002)
6 | momentum_config = None
7 |
8 | # runtime settings
9 | runner = dict(type='EpochBasedRunner', max_epochs=150)
10 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/seg_cosine_200e.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | # This schedule is mainly used on ScanNet dataset in segmentation task
3 | optimizer = dict(type='Adam', lr=0.001, weight_decay=0.01)
4 | optimizer_config = dict(grad_clip=None)
5 | lr_config = dict(policy='CosineAnnealing', warmup=None, min_lr=1e-5)
6 | momentum_config = None
7 |
8 | # runtime settings
9 | runner = dict(type='EpochBasedRunner', max_epochs=200)
10 |
--------------------------------------------------------------------------------
/configs/_base_/schedules/seg_cosine_50e.py:
--------------------------------------------------------------------------------
1 | # optimizer
2 | # This schedule is mainly used on S3DIS dataset in segmentation task
3 | optimizer = dict(type='Adam', lr=0.001, weight_decay=0.001)
4 | optimizer_config = dict(grad_clip=None)
5 | lr_config = dict(policy='CosineAnnealing', warmup=None, min_lr=1e-5)
6 | momentum_config = None
7 |
8 | # runtime settings
9 | runner = dict(type='EpochBasedRunner', max_epochs=50)
10 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_0075voxel_second_secfpn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_0075voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(test_cfg=dict(pts=dict(nms_type='circle')))
4 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_0075voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)))
16 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_flip-tta_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = './centerpoint_0075voxel_second_secfpn_dcn_4x8_cyclic_20e_nus.py'
2 |
3 | point_cloud_range = [-54, -54, -5.0, 54, 54, 3.0]
4 | file_client_args = dict(backend='disk')
5 | class_names = [
6 | 'car', 'truck', 'construction_vehicle', 'bus', 'trailer', 'barrier',
7 | 'motorcycle', 'bicycle', 'pedestrian', 'traffic_cone'
8 | ]
9 |
10 | test_pipeline = [
11 | dict(
12 | type='LoadPointsFromFile',
13 | coord_type='LIDAR',
14 | load_dim=5,
15 | use_dim=5,
16 | file_client_args=file_client_args),
17 | dict(
18 | type='LoadPointsFromMultiSweeps',
19 | sweeps_num=9,
20 | use_dim=[0, 1, 2, 3, 4],
21 | file_client_args=file_client_args,
22 | pad_empty_sweeps=True,
23 | remove_close=True),
24 | dict(
25 | type='MultiScaleFlipAug3D',
26 | img_scale=(1333, 800),
27 | pts_scale_ratio=1,
28 | # Add double-flip augmentation
29 | flip=True,
30 | pcd_horizontal_flip=True,
31 | pcd_vertical_flip=True,
32 | transforms=[
33 | dict(
34 | type='GlobalRotScaleTrans',
35 | rot_range=[0, 0],
36 | scale_ratio_range=[1., 1.],
37 | translation_std=[0, 0, 0]),
38 | dict(type='RandomFlip3D', sync_2d=False),
39 | dict(
40 | type='PointsRangeFilter', point_cloud_range=point_cloud_range),
41 | dict(
42 | type='DefaultFormatBundle3D',
43 | class_names=class_names,
44 | with_label=False),
45 | dict(type='Collect3D', keys=['points'])
46 | ])
47 | ]
48 |
49 | data = dict(
50 | val=dict(pipeline=test_pipeline), test=dict(pipeline=test_pipeline))
51 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_0075voxel_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_0075voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)),
16 | test_cfg=dict(pts=dict(nms_type='circle')))
17 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_01voxel_second_secfpn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_01voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(test_cfg=dict(pts=dict(nms_type='circle')))
4 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_01voxel_second_secfpn_dcn_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_01voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)))
16 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_01voxel_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_01voxel_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)),
16 | test_cfg=dict(pts=dict(nms_type='circle')))
17 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_02pillar_second_secfpn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(test_cfg=dict(pts=dict(nms_type='circle')))
4 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_02pillar_second_secfpn_dcn_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)))
16 |
--------------------------------------------------------------------------------
/configs/centerpoint/centerpoint_02pillar_second_secfpn_dcn_circlenms_4x8_cyclic_20e_nus.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./centerpoint_02pillar_second_secfpn_4x8_cyclic_20e_nus.py']
2 |
3 | model = dict(
4 | pts_bbox_head=dict(
5 | separate_head=dict(
6 | type='DCNSeparateHead',
7 | dcn_config=dict(
8 | type='DCN',
9 | in_channels=64,
10 | out_channels=64,
11 | kernel_size=3,
12 | padding=1,
13 | groups=4),
14 | init_bias=-2.19,
15 | final_kernel=3)),
16 | test_cfg=dict(pts=dict(nms_type='circle')))
17 |
--------------------------------------------------------------------------------
/configs/dynamic_voxelization/dv_pointpillars_secfpn_6x8_160e_kitti-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = '../pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car.py'
2 |
3 | voxel_size = [0.16, 0.16, 4]
4 | point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1]
5 |
6 | model = dict(
7 | type='DynamicVoxelNet',
8 | voxel_layer=dict(
9 | max_num_points=-1,
10 | point_cloud_range=point_cloud_range,
11 | voxel_size=voxel_size,
12 | max_voxels=(-1, -1)),
13 | voxel_encoder=dict(
14 | type='DynamicPillarFeatureNet',
15 | in_channels=4,
16 | feat_channels=[64],
17 | with_distance=False,
18 | voxel_size=voxel_size,
19 | point_cloud_range=point_cloud_range))
20 |
--------------------------------------------------------------------------------
/configs/dynamic_voxelization/dv_second_secfpn_2x8_cosine_80e_kitti-3d-3class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_second_secfpn_kitti.py',
3 | '../_base_/datasets/kitti-3d-3class.py', '../_base_/schedules/cosine.py',
4 | '../_base_/default_runtime.py'
5 | ]
6 |
7 | point_cloud_range = [0, -40, -3, 70.4, 40, 1]
8 | voxel_size = [0.05, 0.05, 0.1]
9 |
10 | model = dict(
11 | type='DynamicVoxelNet',
12 | voxel_layer=dict(
13 | _delete_=True,
14 | max_num_points=-1,
15 | point_cloud_range=point_cloud_range,
16 | voxel_size=voxel_size,
17 | max_voxels=(-1, -1)),
18 | voxel_encoder=dict(
19 | _delete_=True,
20 | type='DynamicSimpleVFE',
21 | voxel_size=voxel_size,
22 | point_cloud_range=point_cloud_range))
23 |
--------------------------------------------------------------------------------
/configs/dynamic_voxelization/dv_second_secfpn_6x8_80e_kitti-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = '../second/hv_second_secfpn_6x8_80e_kitti-3d-car.py'
2 |
3 | point_cloud_range = [0, -40, -3, 70.4, 40, 1]
4 | voxel_size = [0.05, 0.05, 0.1]
5 |
6 | model = dict(
7 | type='DynamicVoxelNet',
8 | voxel_layer=dict(
9 | _delete_=True,
10 | max_num_points=-1,
11 | point_cloud_range=point_cloud_range,
12 | voxel_size=voxel_size,
13 | max_voxels=(-1, -1)),
14 | voxel_encoder=dict(
15 | _delete_=True,
16 | type='DynamicSimpleVFE',
17 | voxel_size=voxel_size,
18 | point_cloud_range=point_cloud_range))
19 |
--------------------------------------------------------------------------------
/configs/fcos3d/fcos3d_r101_caffe_fpn_gn-head_dcn_2x8_1x_nus-mono3d_finetune.py:
--------------------------------------------------------------------------------
1 | _base_ = './fcos3d_r101_caffe_fpn_gn-head_dcn_2x8_1x_nus-mono3d.py'
2 | # model settings
3 | model = dict(
4 | train_cfg=dict(
5 | code_weight=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.05, 0.05]))
6 | # optimizer
7 | optimizer = dict(lr=0.001)
8 | load_from = 'work_dirs/fcos3d_nus/latest.pth'
9 |
--------------------------------------------------------------------------------
/configs/fp16/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = '../pointpillars/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d.py'
2 | data = dict(samples_per_gpu=2, workers_per_gpu=2)
3 | # fp16 settings, the loss scale is specifically tuned to avoid Nan
4 | fp16 = dict(loss_scale=32.)
5 |
--------------------------------------------------------------------------------
/configs/fp16/hv_pointpillars_regnet-400mf_fpn_sbn-all_fp16_2x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = '../regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d.py'
2 | data = dict(samples_per_gpu=2, workers_per_gpu=2)
3 | # fp16 settings, the loss scale is specifically tuned to avoid Nan
4 | fp16 = dict(loss_scale=32.)
5 |
--------------------------------------------------------------------------------
/configs/fp16/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = '../pointpillars/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d.py'
2 | data = dict(samples_per_gpu=2, workers_per_gpu=2)
3 | # fp16 settings, the loss scale is specifically tuned to avoid Nan
4 | fp16 = dict(loss_scale=32.)
5 |
--------------------------------------------------------------------------------
/configs/fp16/hv_second_secfpn_fp16_6x8_80e_kitti-3d-3class.py:
--------------------------------------------------------------------------------
1 | _base_ = '../second/hv_second_secfpn_6x8_80e_kitti-3d-3class.py'
2 | # fp16 settings
3 | fp16 = dict(loss_scale=512.)
4 |
--------------------------------------------------------------------------------
/configs/fp16/hv_second_secfpn_fp16_6x8_80e_kitti-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = '../second/hv_second_secfpn_6x8_80e_kitti-3d-car.py'
2 | # fp16 settings
3 | fp16 = dict(loss_scale=512.)
4 |
--------------------------------------------------------------------------------
/configs/free_anchor/hv_pointpillars_regnet-1.6gf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_pointpillars_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py'
2 |
3 | model = dict(
4 | pts_backbone=dict(
5 | _delete_=True,
6 | type='NoStemRegNet',
7 | arch='regnetx_1.6gf',
8 | init_cfg=dict(
9 | type='Pretrained', checkpoint='open-mmlab://regnetx_1.6gf'),
10 | out_indices=(1, 2, 3),
11 | frozen_stages=-1,
12 | strides=(1, 2, 2, 2),
13 | base_channels=64,
14 | stem_channels=64,
15 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
16 | norm_eval=False,
17 | style='pytorch'),
18 | pts_neck=dict(in_channels=[168, 408, 912]))
19 |
--------------------------------------------------------------------------------
/configs/free_anchor/hv_pointpillars_regnet-3.2gf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_pointpillars_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py'
2 |
3 | model = dict(
4 | pts_backbone=dict(
5 | _delete_=True,
6 | type='NoStemRegNet',
7 | arch='regnetx_3.2gf',
8 | init_cfg=dict(
9 | type='Pretrained', checkpoint='open-mmlab://regnetx_3.2gf'),
10 | out_indices=(1, 2, 3),
11 | frozen_stages=-1,
12 | strides=(1, 2, 2, 2),
13 | base_channels=64,
14 | stem_channels=64,
15 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
16 | norm_eval=False,
17 | style='pytorch'),
18 | pts_neck=dict(in_channels=[192, 432, 1008]))
19 |
--------------------------------------------------------------------------------
/configs/free_anchor/hv_pointpillars_regnet-400mf_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_pointpillars_fpn_sbn-all_free-anchor_4x8_2x_nus-3d.py'
2 |
3 | model = dict(
4 | pts_backbone=dict(
5 | _delete_=True,
6 | type='NoStemRegNet',
7 | arch='regnetx_400mf',
8 | init_cfg=dict(
9 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
10 | out_indices=(1, 2, 3),
11 | frozen_stages=-1,
12 | strides=(1, 2, 2, 2),
13 | base_channels=64,
14 | stem_channels=64,
15 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
16 | norm_eval=False,
17 | style='pytorch'),
18 | pts_neck=dict(in_channels=[64, 160, 384]))
19 |
--------------------------------------------------------------------------------
/configs/h3dnet/README.md:
--------------------------------------------------------------------------------
1 | # H3DNet: 3D Object Detection Using Hybrid Geometric Primitives
2 |
3 | ## Introduction
4 |
5 |
6 |
7 | We implement H3DNet and provide the result and checkpoints on ScanNet datasets.
8 |
9 | ```
10 | @inproceedings{zhang2020h3dnet,
11 | author = {Zhang, Zaiwei and Sun, Bo and Yang, Haitao and Huang, Qixing},
12 | title = {H3DNet: 3D Object Detection Using Hybrid Geometric Primitives},
13 | booktitle = {Proceedings of the European Conference on Computer Vision},
14 | year = {2020}
15 | }
16 | ```
17 |
18 | ## Results
19 |
20 | ### ScanNet
21 |
22 | | Backbone | Lr schd | Mem (GB) | Inf time (fps) | AP@0.25 |AP@0.5| Download |
23 | | :---------: | :-----: | :------: | :------------: | :----: |:----: | :------: |
24 | | [MultiBackbone](./h3dnet_3x8_scannet-3d-18class.py) | 3x |7.9||66.43|48.01|[model](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/h3dnet/h3dnet_scannet-3d-18class/h3dnet_scannet-3d-18class_20200830_000136-02e36246.pth) | [log](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/h3dnet/h3dnet_scannet-3d-18class/h3dnet_scannet-3d-18class_20200830_000136.log.json) |
25 |
26 | **Notice**: If your current mmdetection3d version >= 0.6.0, and you are using the checkpoints downloaded from the above links or using checkpoints trained with mmdetection3d version < 0.6.0, the checkpoints have to be first converted via [tools/model_converters/convert_h3dnet_checkpoints.py](../../tools/model_converters/convert_h3dnet_checkpoints.py):
27 |
28 | ```
29 | python ./tools/model_converters/convert_h3dnet_checkpoints.py ${ORIGINAL_CHECKPOINT_PATH} --out=${NEW_CHECKPOINT_PATH}
30 | ```
31 |
32 | Then you can use the converted checkpoints following [getting_started.md](../../docs/getting_started.md).
33 |
--------------------------------------------------------------------------------
/configs/h3dnet/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: H3DNet
3 | Metadata:
4 | Training Data: ScanNet
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 8x GeForce GTX 1080 Ti
8 | Architecture:
9 | Paper:
10 | URL: https://arxiv.org/abs/2006.05682
11 | Title: 'H3DNet: 3D Object Detection Using Hybrid Geometric Primitives'
12 | README: configs/h3dnet/README.md
13 | Code:
14 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/h3dnet.py#L10
15 | Version: v0.6.0
16 |
17 | Models:
18 | - Name: h3dnet_3x8_scannet-3d-18class
19 | In Collection: H3DNet
20 | Config: configs/h3dnet/h3dnet_3x8_scannet-3d-18class.py
21 | Metadata:
22 | Training Memory (GB): 7.9
23 | Results:
24 | - Task: 3D Object Detection
25 | Dataset: ScanNet
26 | Metrics:
27 | AP@0.25: 66.43
28 | AP@0.5: 48.01
29 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/h3dnet/h3dnet_scannet-3d-18class/h3dnet_scannet-3d-18class_20200830_000136-02e36246.pth
30 |
--------------------------------------------------------------------------------
/configs/imvotenet/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: ImVoteNet
3 | Metadata:
4 | Training Data: SUNRGBD
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 8x TITAN Xp
8 | Architecture:
9 | - Faster R-CNN
10 | - VoteNet
11 | - Feature Pyramid Network
12 | Paper:
13 | URL: https://arxiv.org/abs/2001.10692
14 | Title: 'ImVoteNet: Boosting 3D Object Detection in Point Clouds with Image Votes'
15 | README: configs/imvotenet/README.md
16 | Code:
17 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/imvotenet.py#L56
18 | Version: v0.12.0
19 |
20 | Models:
21 | - Name: imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class
22 | In Collection: ImVoteNet
23 | Config: configs/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class.py
24 | Metadata:
25 | Training Memory (GB): 2.1
26 | Results:
27 | - Task: Object Detection
28 | Dataset: SUNRGBD-2D
29 | Metrics:
30 | AP@0.5: 62.70
31 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvotenet/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class/imvotenet_faster_rcnn_r50_fpn_2x4_sunrgbd-3d-10class_20210323_173222-cad62aeb.pth
32 |
33 | - Name: imvotenet_stage2_16x8_sunrgbd-3d-10class
34 | In Collection: ImVoteNet
35 | Config: configs/imvotenet/imvotenet_stage2_16x8_sunrgbd-3d-10class.py
36 | Metadata:
37 | Training Memory (GB): 9.4
38 | Results:
39 | - Task: 3D Object Detection
40 | Dataset: SUNRGBD-3D
41 | Metrics:
42 | AP@0.25: 64.04
43 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvotenet/imvotenet_stage2_16x8_sunrgbd-3d-10class/imvotenet_stage2_16x8_sunrgbd-3d-10class_20210323_184021-d44dcb66.pth
44 |
--------------------------------------------------------------------------------
/configs/imvoxelnet/README.md:
--------------------------------------------------------------------------------
1 | # ImVoxelNet: Image to Voxels Projection for Monocular and Multi-View General-Purpose 3D Object Detection
2 |
3 | ## Introduction
4 |
5 |
6 |
7 | We implement a monocular 3D detector ImVoxelNet and provide its results and checkpoints on KITTI dataset.
8 | Results for SUN RGB-D, ScanNet and nuScenes are currently available in ImVoxelNet authors
9 | [repo](https://github.com/saic-vul/imvoxelnet) (based on mmdetection3d).
10 |
11 | ```
12 | @article{rukhovich2021imvoxelnet,
13 | title={ImVoxelNet: Image to Voxels Projection for Monocular and Multi-View General-Purpose 3D Object Detection},
14 | author={Danila Rukhovich, Anna Vorontsova, Anton Konushin},
15 | journal={arXiv preprint arXiv:2106.01178},
16 | year={2021}
17 | }
18 | ```
19 |
20 | ## Results
21 |
22 | ### KITTI
23 |
24 | | Backbone |Class| Lr schd | Mem (GB) | Inf time (fps) | mAP | Download |
25 | | :---------: | :-----: |:-----: | :------: | :------------: | :----: |:----: |
26 | | [ResNet-50](./imvoxelnet_kitti-3d-car.py) | Car | 3x | | |17.4|[model](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvoxelnet/imvoxelnet_kitti-3d-car_20210610_152323-b9abba85.pth) | [log](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvoxelnet/imvoxelnet_kitti-3d-car_20210610_152323.log.json)|
27 |
--------------------------------------------------------------------------------
/configs/imvoxelnet/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: ImVoxelNet
3 | Metadata:
4 | Training Data: KITTI
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 8x Tesla P40
8 | Architecture:
9 | - Anchor3DHead
10 | Paper:
11 | URL: https://arxiv.org/abs/2106.01178
12 | Title: 'ImVoxelNet: Image to Voxels Projection for Monocular and Multi-View General-Purpose 3D Object Detection'
13 | README: configs/imvoxelnet/README.md
14 | Code:
15 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/imvoxelnet.py#L11
16 | Version: v0.15.0
17 |
18 | Models:
19 | - Name: imvoxelnet_kitti-3d-car
20 | In Collection: ImVoxelNet
21 | Config: configs/imvoxelnet/imvoxelnet_kitti-3d-car.py
22 | Metadata:
23 | Training Memory (GB): 15.0
24 | Results:
25 | - Task: 3D Object Detection
26 | Dataset: KITTI
27 | Metrics:
28 | mAP: 17.4
29 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/imvoxelnet/imvoxelnet_kitti-3d-car_20210610_152323-b9abba85.pth
30 |
--------------------------------------------------------------------------------
/configs/mvxnet/README.md:
--------------------------------------------------------------------------------
1 | # MVX-Net: Multimodal VoxelNet for 3D Object Detection
2 |
3 | ## Introduction
4 |
5 |
6 |
7 | We implement MVX-Net and provide its results and models on KITTI dataset.
8 |
9 | ```
10 | @inproceedings{sindagi2019mvx,
11 | title={MVX-Net: Multimodal voxelnet for 3D object detection},
12 | author={Sindagi, Vishwanath A and Zhou, Yin and Tuzel, Oncel},
13 | booktitle={2019 International Conference on Robotics and Automation (ICRA)},
14 | pages={7276--7282},
15 | year={2019},
16 | organization={IEEE}
17 | }
18 |
19 | ```
20 |
21 | ## Results
22 |
23 | ### KITTI
24 |
25 | | Backbone |Class| Lr schd | Mem (GB) | Inf time (fps) | mAP | Download |
26 | | :---------: | :-----: | :------: | :------------: | :----: |:----: | :------: |
27 | | [SECFPN](./dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py)|3 Class|cosine 80e|6.7||63.0|[model](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class_20200621_003904-10140f2d.pth) | [log](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class_20200621_003904.log.json)|
28 |
--------------------------------------------------------------------------------
/configs/mvxnet/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: MVX-Net
3 | Metadata:
4 | Training Data: KITTI
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 8x V100 GPUs
8 | Architecture:
9 | - Feature Pyramid Network
10 | - Dynamic Voxelization
11 | Paper:
12 | URL: https://arxiv.org/abs/1904.01649
13 | Title: 'MVX-Net: Multimodal VoxelNet for 3D Object Detection'
14 | README: configs/mvxnet/README.md
15 | Code:
16 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/mvx_two_stage.py#L20
17 | Version: v0.5.0
18 |
19 | Models:
20 | - Name: dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class
21 | In Collection: MVX-Net
22 | Config: configs/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class.py
23 | Metadata:
24 | Training Memory (GB): 6.7
25 | Results:
26 | - Task: 3D Object Detection
27 | Dataset: KITTI
28 | Metrics:
29 | mAP: 63.0
30 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/mvxnet/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class/dv_mvx-fpn_second_secfpn_adamw_2x8_80e_kitti-3d-3class_20200621_003904-10140f2d.pth
31 |
--------------------------------------------------------------------------------
/configs/nuimages/cascade_mask_rcnn_r101_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './cascade_mask_rcnn_r50_fpn_1x_nuim.py'
2 | model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101))
3 |
--------------------------------------------------------------------------------
/configs/nuimages/cascade_mask_rcnn_r50_fpn_coco-20e_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './cascade_mask_rcnn_r50_fpn_1x_nuim.py'
2 |
3 | load_from = 'http://download.openmmlab.com/mmdetection/v2.0/cascade_rcnn/cascade_mask_rcnn_r50_fpn_20e_coco/cascade_mask_rcnn_r50_fpn_20e_coco_bbox_mAP-0.419__segm_mAP-0.365_20200504_174711-4af8e66e.pth' # noqa
4 |
--------------------------------------------------------------------------------
/configs/nuimages/cascade_mask_rcnn_r50_fpn_coco-20e_20e_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './cascade_mask_rcnn_r50_fpn_1x_nuim.py'
2 |
3 | # learning policy
4 | lr_config = dict(step=[16, 19])
5 | runner = dict(max_epochs=20)
6 |
7 | load_from = 'http://download.openmmlab.com/mmdetection/v2.0/cascade_rcnn/cascade_mask_rcnn_r50_fpn_20e_coco/cascade_mask_rcnn_r50_fpn_20e_coco_bbox_mAP-0.419__segm_mAP-0.365_20200504_174711-4af8e66e.pth' # noqa
8 |
--------------------------------------------------------------------------------
/configs/nuimages/cascade_mask_rcnn_x101_32x4d_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './cascade_mask_rcnn_r50_fpn_1x_nuim.py'
2 | model = dict(
3 | pretrained='open-mmlab://resnext101_32x4d',
4 | backbone=dict(
5 | type='ResNeXt',
6 | depth=101,
7 | groups=32,
8 | base_width=4,
9 | num_stages=4,
10 | out_indices=(0, 1, 2, 3),
11 | frozen_stages=1,
12 | norm_cfg=dict(type='BN', requires_grad=True),
13 | style='pytorch'))
14 |
--------------------------------------------------------------------------------
/configs/nuimages/htc_r50_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './htc_without_semantic_r50_fpn_1x_nuim.py'
2 | model = dict(
3 | roi_head=dict(
4 | semantic_roi_extractor=dict(
5 | type='SingleRoIExtractor',
6 | roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0),
7 | out_channels=256,
8 | featmap_strides=[8]),
9 | semantic_head=dict(
10 | type='FusedSemanticHead',
11 | num_ins=5,
12 | fusion_level=1,
13 | num_convs=4,
14 | in_channels=256,
15 | conv_out_channels=256,
16 | num_classes=32,
17 | ignore_label=0,
18 | loss_weight=0.2)))
19 |
20 | data_root = 'data/nuimages/'
21 | img_norm_cfg = dict(
22 | mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
23 | train_pipeline = [
24 | dict(type='LoadImageFromFile'),
25 | dict(
26 | type='LoadAnnotations', with_bbox=True, with_mask=True, with_seg=True),
27 | dict(
28 | type='Resize',
29 | img_scale=[(1280, 720), (1920, 1080)],
30 | multiscale_mode='range',
31 | keep_ratio=True),
32 | dict(type='RandomFlip', flip_ratio=0.5),
33 | dict(type='Normalize', **img_norm_cfg),
34 | dict(type='Pad', size_divisor=32),
35 | dict(type='SegRescale', scale_factor=1 / 8),
36 | dict(type='DefaultFormatBundle'),
37 | dict(
38 | type='Collect',
39 | keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks', 'gt_semantic_seg'])
40 | ]
41 | data = dict(
42 | train=dict(
43 | seg_prefix=data_root + 'annotations/semantic_masks/',
44 | pipeline=train_pipeline))
45 |
--------------------------------------------------------------------------------
/configs/nuimages/htc_r50_fpn_coco-20e_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './htc_r50_fpn_1x_nuim.py'
2 |
3 | load_from = 'http://download.openmmlab.com/mmdetection/v2.0/htc/htc_r50_fpn_20e_coco/htc_r50_fpn_20e_coco_20200319-fe28c577.pth' # noqa
4 |
--------------------------------------------------------------------------------
/configs/nuimages/htc_r50_fpn_coco-20e_20e_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './htc_r50_fpn_coco-20e_1x_nuim.py'
2 | # learning policy
3 | lr_config = dict(step=[16, 19])
4 | runner = dict(max_epochs=20)
5 |
--------------------------------------------------------------------------------
/configs/nuimages/htc_x101_64x4d_fpn_dconv_c3-c5_coco-20e_16x1_20e_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './htc_r50_fpn_1x_nuim.py'
2 | model = dict(
3 | pretrained='open-mmlab://resnext101_64x4d',
4 | backbone=dict(
5 | type='ResNeXt',
6 | depth=101,
7 | groups=64,
8 | base_width=4,
9 | num_stages=4,
10 | out_indices=(0, 1, 2, 3),
11 | frozen_stages=1,
12 | norm_cfg=dict(type='BN', requires_grad=True),
13 | norm_eval=True,
14 | style='pytorch',
15 | dcn=dict(type='DCN', deform_groups=1, fallback_on_stride=False),
16 | stage_with_dcn=(False, True, True, True)))
17 |
18 | data = dict(samples_per_gpu=1, workers_per_gpu=1)
19 | # learning policy
20 | lr_config = dict(step=[16, 19])
21 | runner = dict(max_epochs=20)
22 |
23 | load_from = 'http://download.openmmlab.com/mmdetection/v2.0/htc/htc_x101_64x4d_fpn_dconv_c3-c5_mstrain_400_1400_16x1_20e_coco/htc_x101_64x4d_fpn_dconv_c3-c5_mstrain_400_1400_16x1_20e_coco_20200312-946fd751.pth' # noqa
24 |
--------------------------------------------------------------------------------
/configs/nuimages/mask_rcnn_r101_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './mask_rcnn_r50_fpn_1x_nuim.py'
2 | model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101))
3 |
--------------------------------------------------------------------------------
/configs/nuimages/mask_rcnn_r50_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/mask_rcnn_r50_fpn.py',
3 | '../_base_/datasets/nuim_instance.py',
4 | '../_base_/schedules/mmdet_schedule_1x.py', '../_base_/default_runtime.py'
5 | ]
6 | model = dict(
7 | roi_head=dict(
8 | bbox_head=dict(num_classes=10), mask_head=dict(num_classes=10)))
9 |
--------------------------------------------------------------------------------
/configs/nuimages/mask_rcnn_r50_fpn_coco-2x_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/mask_rcnn_r50_fpn.py',
3 | '../_base_/datasets/nuim_instance.py',
4 | '../_base_/schedules/mmdet_schedule_1x.py', '../_base_/default_runtime.py'
5 | ]
6 | model = dict(
7 | roi_head=dict(
8 | bbox_head=dict(num_classes=10), mask_head=dict(num_classes=10)))
9 | load_from = 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_2x_coco/mask_rcnn_r50_fpn_2x_coco_bbox_mAP-0.392__segm_mAP-0.354_20200505_003907-3e542a40.pth' # noqa
10 |
--------------------------------------------------------------------------------
/configs/nuimages/mask_rcnn_r50_fpn_coco-2x_1x_nus-2d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/mask_rcnn_r50_fpn.py',
3 | '../_base_/datasets/nuim_instance.py',
4 | '../_base_/schedules/mmdet_schedule_1x.py', '../_base_/default_runtime.py'
5 | ]
6 | model = dict(
7 | roi_head=dict(
8 | bbox_head=dict(num_classes=10), mask_head=dict(num_classes=10)))
9 |
10 | file_client_args = dict(
11 | backend='petrel',
12 | path_mapping=dict({
13 | './data/nuscenes/': 's3://nuscenes/nuscenes/',
14 | 'data/nuscenes/': 's3://nuscenes/nuscenes/'
15 | }))
16 | img_norm_cfg = dict(
17 | mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
18 |
19 | test_pipeline = [
20 | dict(type='LoadImageFromFile', file_client_args=file_client_args),
21 | dict(
22 | type='MultiScaleFlipAug',
23 | img_scale=(1600, 900),
24 | flip=False,
25 | transforms=[
26 | dict(type='Resize', keep_ratio=True),
27 | dict(type='RandomFlip'),
28 | dict(type='Normalize', **img_norm_cfg),
29 | dict(type='Pad', size_divisor=32),
30 | dict(type='ImageToTensor', keys=['img']),
31 | dict(type='Collect', keys=['img']),
32 | ])
33 | ]
34 | data_root = 'data/nuimages/'
35 | # data = dict(
36 | # val=dict(
37 | # ann_file=data_root + 'annotations/nuimages_v1.0-mini.json'),
38 | # test=dict(
39 | # ann_file=data_root + 'annotations/nuimages_v1.0-mini.json'))
40 |
--------------------------------------------------------------------------------
/configs/nuimages/mask_rcnn_x101_32x4d_fpn_1x_nuim.py:
--------------------------------------------------------------------------------
1 | _base_ = './mask_rcnn_r50_fpn_1x_nuim.py'
2 | model = dict(
3 | pretrained='open-mmlab://resnext101_32x4d',
4 | backbone=dict(
5 | type='ResNeXt',
6 | depth=101,
7 | groups=32,
8 | base_width=4,
9 | num_stages=4,
10 | out_indices=(0, 1, 2, 3),
11 | frozen_stages=1,
12 | norm_cfg=dict(type='BN', requires_grad=True),
13 | style='pytorch'))
14 |
--------------------------------------------------------------------------------
/configs/paconv/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: PAConv
3 | Metadata:
4 | Training Techniques:
5 | - SGD
6 | Training Resources: 8x Titan XP GPUs
7 | Architecture:
8 | - PAConv
9 | Paper:
10 | URL: https://arxiv.org/abs/2103.14635
11 | Title: 'PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds'
12 | README: configs/paconv/README.md
13 | Code:
14 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/ops/paconv/paconv.py#L106
15 | Version: v0.16.0
16 |
17 | Models:
18 | - Name: paconv_ssg_8x8_cosine_150e_s3dis_seg-3d-13class.py
19 | In Collection: PAConv
20 | Config: configs/paconv/paconv_ssg_8x8_cosine_150e_s3dis_seg-3d-13class.py
21 | Metadata:
22 | Training Data: S3DIS
23 | Training Memory (GB): 5.8
24 | Results:
25 | - Task: 3D Semantic Segmentation
26 | Dataset: S3DIS
27 | Metrics:
28 | mIoU: 66.65
29 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/paconv/paconv_ssg_8x8_cosine_150e_s3dis_seg-3d-13class/paconv_ssg_8x8_cosine_150e_s3dis_seg-3d-13class_20210729_200615-2147b2d1.pth
30 |
--------------------------------------------------------------------------------
/configs/parta2/README.md:
--------------------------------------------------------------------------------
1 | # From Points to Parts: 3D Object Detection from Point Cloud with Part-aware and Part-aggregation Network
2 |
3 | ## Introduction
4 |
5 |
6 |
7 | We implement Part-A^2 and provide its results and checkpoints on KITTI dataset.
8 |
9 | ```
10 | @article{shi2020points,
11 | title={From points to parts: 3d object detection from point cloud with part-aware and part-aggregation network},
12 | author={Shi, Shaoshuai and Wang, Zhe and Shi, Jianping and Wang, Xiaogang and Li, Hongsheng},
13 | journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
14 | year={2020},
15 | publisher={IEEE}
16 | }
17 | ```
18 |
19 | ## Results
20 |
21 | ### KITTI
22 |
23 | | Backbone |Class| Lr schd | Mem (GB) | Inf time (fps) | mAP | Download |
24 | | :---------: | :-----: |:-----: | :------: | :------------: | :----: |:----: |
25 | | [SECFPN](./hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py) |3 Class|cyclic 80e|4.1||67.9|[model](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class_20200620_230724-a2672098.pth) | [log](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class_20200620_230724.log.json)|
26 | | [SECFPN](./hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py) |Car |cyclic 80e|4.0||79.16|[model](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car_20200620_230755-f2a38b9a.pth) | [log](https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car_20200620_230755.log.json)|
27 |
--------------------------------------------------------------------------------
/configs/parta2/metafile.yml:
--------------------------------------------------------------------------------
1 | Collections:
2 | - Name: Part-A^2
3 | Metadata:
4 | Training Data: KITTI
5 | Training Techniques:
6 | - AdamW
7 | Training Resources: 8x V100 GPUs
8 | Architecture:
9 | - Sparse U-Net
10 | Paper:
11 | URL: https://arxiv.org/abs/1907.03670
12 | Title: 'From Points to Parts: 3D Object Detection from Point Cloud with Part-aware and Part-aggregation Network'
13 | README: configs/parta2/README.md
14 | Code:
15 | URL: https://github.com/open-mmlab/mmdetection3d/blob/master/mmdet3d/models/detectors/parta2.py#L12
16 | Version: v0.5.0
17 |
18 | Models:
19 | - Name: hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class
20 | In Collection: Part-A^2
21 | Config: configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class.py
22 | Metadata:
23 | Training Memory (GB): 4.1
24 | Results:
25 | - Task: 3D Object Detection
26 | Dataset: KITTI
27 | Metrics:
28 | mAP: 67.9
29 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-3class_20200620_230724-a2672098.pth
30 |
31 | - Name: hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car
32 | In Collection: Part-A^2
33 | Config: configs/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car.py
34 | Metadata:
35 | Training Memory (GB): 4.0
36 | Results:
37 | - Task: 3D Object Detection
38 | Dataset: KITTI
39 | Metrics:
40 | mAP: 79.16
41 | Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/parta2/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car/hv_PartA2_secfpn_2x8_cyclic_80e_kitti-3d-car_20200620_230755-f2a38b9a.pth
42 |
--------------------------------------------------------------------------------
/configs/pointnet2/pointnet2_msg_16x2_cosine_250e_scannet_seg-3d-20class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/scannet_seg-3d-20class.py',
3 | '../_base_/models/pointnet2_msg.py',
4 | '../_base_/schedules/seg_cosine_200e.py', '../_base_/default_runtime.py'
5 | ]
6 |
7 | # data settings
8 | data = dict(samples_per_gpu=16)
9 | evaluation = dict(interval=5)
10 |
11 | # model settings
12 | model = dict(
13 | decode_head=dict(
14 | num_classes=20,
15 | ignore_index=20,
16 | # `class_weight` is generated in data pre-processing, saved in
17 | # `data/scannet/seg_info/train_label_weight.npy`
18 | # you can copy paste the values here, or input the file path as
19 | # `class_weight=data/scannet/seg_info/train_label_weight.npy`
20 | loss_decode=dict(class_weight=[
21 | 2.389689, 2.7215734, 4.5944676, 4.8543367, 4.096086, 4.907941,
22 | 4.690836, 4.512031, 4.623311, 4.9242644, 5.358117, 5.360071,
23 | 5.019636, 4.967126, 5.3502126, 5.4023647, 5.4027233, 5.4169416,
24 | 5.3954206, 4.6971426
25 | ])),
26 | test_cfg=dict(
27 | num_points=8192,
28 | block_size=1.5,
29 | sample_rate=0.5,
30 | use_normalized_coord=False,
31 | batch_size=24))
32 |
33 | # runtime settings
34 | checkpoint_config = dict(interval=5)
35 | # PointNet2-MSG needs longer training time than PointNet2-SSG
36 | runner = dict(type='EpochBasedRunner', max_epochs=250)
37 |
--------------------------------------------------------------------------------
/configs/pointnet2/pointnet2_msg_16x2_cosine_80e_s3dis_seg-3d-13class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/s3dis_seg-3d-13class.py',
3 | '../_base_/models/pointnet2_msg.py',
4 | '../_base_/schedules/seg_cosine_50e.py', '../_base_/default_runtime.py'
5 | ]
6 |
7 | # data settings
8 | data = dict(samples_per_gpu=16)
9 | evaluation = dict(interval=2)
10 |
11 | # model settings
12 | model = dict(
13 | backbone=dict(in_channels=9), # [xyz, rgb, normalized_xyz]
14 | decode_head=dict(
15 | num_classes=13, ignore_index=13,
16 | loss_decode=dict(class_weight=None)), # S3DIS doesn't use class_weight
17 | test_cfg=dict(
18 | num_points=4096,
19 | block_size=1.0,
20 | sample_rate=0.5,
21 | use_normalized_coord=True,
22 | batch_size=24))
23 |
24 | # runtime settings
25 | checkpoint_config = dict(interval=2)
26 | # PointNet2-MSG needs longer training time than PointNet2-SSG
27 | runner = dict(type='EpochBasedRunner', max_epochs=80)
28 |
--------------------------------------------------------------------------------
/configs/pointnet2/pointnet2_ssg_16x2_cosine_200e_scannet_seg-3d-20class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/scannet_seg-3d-20class.py',
3 | '../_base_/models/pointnet2_ssg.py',
4 | '../_base_/schedules/seg_cosine_200e.py', '../_base_/default_runtime.py'
5 | ]
6 |
7 | # data settings
8 | data = dict(samples_per_gpu=16)
9 | evaluation = dict(interval=5)
10 |
11 | # model settings
12 | model = dict(
13 | decode_head=dict(
14 | num_classes=20,
15 | ignore_index=20,
16 | # `class_weight` is generated in data pre-processing, saved in
17 | # `data/scannet/seg_info/train_label_weight.npy`
18 | # you can copy paste the values here, or input the file path as
19 | # `class_weight=data/scannet/seg_info/train_label_weight.npy`
20 | loss_decode=dict(class_weight=[
21 | 2.389689, 2.7215734, 4.5944676, 4.8543367, 4.096086, 4.907941,
22 | 4.690836, 4.512031, 4.623311, 4.9242644, 5.358117, 5.360071,
23 | 5.019636, 4.967126, 5.3502126, 5.4023647, 5.4027233, 5.4169416,
24 | 5.3954206, 4.6971426
25 | ])),
26 | test_cfg=dict(
27 | num_points=8192,
28 | block_size=1.5,
29 | sample_rate=0.5,
30 | use_normalized_coord=False,
31 | batch_size=24))
32 |
33 | # runtime settings
34 | checkpoint_config = dict(interval=5)
35 |
--------------------------------------------------------------------------------
/configs/pointnet2/pointnet2_ssg_16x2_cosine_50e_s3dis_seg-3d-13class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/s3dis_seg-3d-13class.py',
3 | '../_base_/models/pointnet2_ssg.py',
4 | '../_base_/schedules/seg_cosine_50e.py', '../_base_/default_runtime.py'
5 | ]
6 |
7 | # data settings
8 | data = dict(samples_per_gpu=16)
9 | evaluation = dict(interval=2)
10 |
11 | # model settings
12 | model = dict(
13 | backbone=dict(in_channels=9), # [xyz, rgb, normalized_xyz]
14 | decode_head=dict(
15 | num_classes=13, ignore_index=13,
16 | loss_decode=dict(class_weight=None)), # S3DIS doesn't use class_weight
17 | test_cfg=dict(
18 | num_points=4096,
19 | block_size=1.0,
20 | sample_rate=0.5,
21 | use_normalized_coord=True,
22 | batch_size=24))
23 |
24 | # runtime settings
25 | checkpoint_config = dict(interval=2)
26 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_fpn_sbn-all_2x8_2x_lyft-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_lyft.py',
3 | '../_base_/datasets/lyft-3d.py', '../_base_/schedules/schedule_2x.py',
4 | '../_base_/default_runtime.py'
5 | ]
6 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_nus.py',
3 | '../_base_/datasets/nus-3d.py', '../_base_/schedules/schedule_2x.py',
4 | '../_base_/default_runtime.py'
5 | ]
6 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_fpn_sbn-all_range100_2x8_2x_lyft-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_range100_lyft.py',
3 | '../_base_/datasets/range100_lyft-3d.py',
4 | '../_base_/schedules/schedule_2x.py', '../_base_/default_runtime.py'
5 | ]
6 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymo-3d-3class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_secfpn_waymo.py',
3 | '../_base_/datasets/waymoD5-3d-3class.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 |
8 | # data settings
9 | data = dict(train=dict(dataset=dict(load_interval=1)))
10 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymo-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_secfpn_waymo.py',
3 | '../_base_/datasets/waymoD5-3d-car.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 |
8 | # data settings
9 | data = dict(train=dict(dataset=dict(load_interval=1)))
10 |
11 | # model settings
12 | model = dict(
13 | type='MVXFasterRCNN',
14 | pts_bbox_head=dict(
15 | type='Anchor3DHead',
16 | num_classes=1,
17 | anchor_generator=dict(
18 | type='AlignedAnchor3DRangeGenerator',
19 | ranges=[[-74.88, -74.88, -0.0345, 74.88, 74.88, -0.0345]],
20 | sizes=[[2.08, 4.73, 1.77]],
21 | rotations=[0, 1.57],
22 | reshape_out=True)),
23 | # model training and testing settings
24 | train_cfg=dict(
25 | _delete_=True,
26 | pts=dict(
27 | assigner=dict(
28 | type='MaxIoUAssigner',
29 | iou_calculator=dict(type='BboxOverlapsNearest3D'),
30 | pos_iou_thr=0.55,
31 | neg_iou_thr=0.4,
32 | min_pos_iou=0.4,
33 | ignore_iof_thr=-1),
34 | allowed_border=0,
35 | code_weight=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
36 | pos_weight=-1,
37 | debug=False)))
38 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_secfpn_waymo.py',
3 | '../_base_/datasets/waymoD5-3d-3class.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 |
--------------------------------------------------------------------------------
/configs/pointpillars/hv_pointpillars_secfpn_sbn_2x16_2x_waymoD5-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_secfpn_waymo.py',
3 | '../_base_/datasets/waymoD5-3d-car.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 |
8 | # model settings
9 | model = dict(
10 | type='MVXFasterRCNN',
11 | pts_bbox_head=dict(
12 | type='Anchor3DHead',
13 | num_classes=1,
14 | anchor_generator=dict(
15 | type='AlignedAnchor3DRangeGenerator',
16 | ranges=[[-74.88, -74.88, -0.0345, 74.88, 74.88, -0.0345]],
17 | sizes=[[2.08, 4.73, 1.77]],
18 | rotations=[0, 1.57],
19 | reshape_out=True)),
20 | # model training and testing settings
21 | train_cfg=dict(
22 | _delete_=True,
23 | pts=dict(
24 | assigner=dict(
25 | type='MaxIoUAssigner',
26 | iou_calculator=dict(type='BboxOverlapsNearest3D'),
27 | pos_iou_thr=0.55,
28 | neg_iou_thr=0.4,
29 | min_pos_iou=0.4,
30 | ignore_iof_thr=-1),
31 | allowed_border=0,
32 | code_weight=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
33 | pos_weight=-1,
34 | debug=False)))
35 |
--------------------------------------------------------------------------------
/configs/regnet/hv_pointpillars_regnet-1.6gf_fpn_sbn-all_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_nus.py',
3 | '../_base_/datasets/nus-3d.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 | # model settings
8 | model = dict(
9 | type='MVXFasterRCNN',
10 | pts_backbone=dict(
11 | _delete_=True,
12 | type='NoStemRegNet',
13 | arch='regnetx_1.6gf',
14 | init_cfg=dict(
15 | type='Pretrained', checkpoint='open-mmlab://regnetx_1.6gf'),
16 | out_indices=(1, 2, 3),
17 | frozen_stages=-1,
18 | strides=(1, 2, 2, 2),
19 | base_channels=64,
20 | stem_channels=64,
21 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
22 | norm_eval=False,
23 | style='pytorch'),
24 | pts_neck=dict(in_channels=[168, 408, 912]))
25 |
--------------------------------------------------------------------------------
/configs/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_2x8_2x_lyft-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_lyft.py',
3 | '../_base_/datasets/lyft-3d.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 | # model settings
8 | model = dict(
9 | type='MVXFasterRCNN',
10 | pts_backbone=dict(
11 | _delete_=True,
12 | type='NoStemRegNet',
13 | arch=dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0),
14 | init_cfg=dict(
15 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
16 | out_indices=(1, 2, 3),
17 | frozen_stages=-1,
18 | strides=(1, 2, 2, 2),
19 | base_channels=64,
20 | stem_channels=64,
21 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
22 | norm_eval=False,
23 | style='pytorch'),
24 | pts_neck=dict(in_channels=[64, 160, 384]))
25 |
--------------------------------------------------------------------------------
/configs/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_nus.py',
3 | '../_base_/datasets/nus-3d.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 | # model settings
8 | model = dict(
9 | type='MVXFasterRCNN',
10 | pts_backbone=dict(
11 | _delete_=True,
12 | type='NoStemRegNet',
13 | arch=dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0),
14 | init_cfg=dict(
15 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
16 | out_indices=(1, 2, 3),
17 | frozen_stages=-1,
18 | strides=(1, 2, 2, 2),
19 | base_channels=64,
20 | stem_channels=64,
21 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
22 | norm_eval=False,
23 | style='pytorch'),
24 | pts_neck=dict(in_channels=[64, 160, 384]))
25 |
--------------------------------------------------------------------------------
/configs/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_range100_2x8_2x_lyft-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_pointpillars_fpn_range100_lyft.py',
3 | '../_base_/datasets/range100_lyft-3d.py',
4 | '../_base_/schedules/schedule_2x.py',
5 | '../_base_/default_runtime.py',
6 | ]
7 | # model settings
8 | model = dict(
9 | type='MVXFasterRCNN',
10 | pts_backbone=dict(
11 | _delete_=True,
12 | type='NoStemRegNet',
13 | arch=dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0),
14 | init_cfg=dict(
15 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
16 | out_indices=(1, 2, 3),
17 | frozen_stages=-1,
18 | strides=(1, 2, 2, 2),
19 | base_channels=64,
20 | stem_channels=64,
21 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
22 | norm_eval=False,
23 | style='pytorch'),
24 | pts_neck=dict(in_channels=[64, 160, 384]))
25 |
--------------------------------------------------------------------------------
/configs/second/hv_second_secfpn_6x8_80e_kitti-3d-3class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_second_secfpn_kitti.py',
3 | '../_base_/datasets/kitti-3d-3class.py',
4 | '../_base_/schedules/cyclic_40e.py', '../_base_/default_runtime.py'
5 | ]
6 |
--------------------------------------------------------------------------------
/configs/second/hv_second_secfpn_6x8_80e_kitti-3d-car.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/models/hv_second_secfpn_kitti.py',
3 | '../_base_/datasets/kitti-3d-car.py', '../_base_/schedules/cyclic_40e.py',
4 | '../_base_/default_runtime.py'
5 | ]
6 | point_cloud_range = [0, -40, -3, 70.4, 40, 1]
7 | model = dict(
8 | bbox_head=dict(
9 | type='Anchor3DHead',
10 | num_classes=1,
11 | anchor_generator=dict(
12 | _delete_=True,
13 | type='Anchor3DRangeGenerator',
14 | ranges=[[0, -40.0, -1.78, 70.4, 40.0, -1.78]],
15 | sizes=[[1.6, 3.9, 1.56]],
16 | rotations=[0, 1.57],
17 | reshape_out=True)),
18 | # model training and testing settings
19 | train_cfg=dict(
20 | _delete_=True,
21 | assigner=dict(
22 | type='MaxIoUAssigner',
23 | iou_calculator=dict(type='BboxOverlapsNearest3D'),
24 | pos_iou_thr=0.6,
25 | neg_iou_thr=0.45,
26 | min_pos_iou=0.45,
27 | ignore_iof_thr=-1),
28 | allowed_border=0,
29 | pos_weight=-1,
30 | debug=False))
31 |
--------------------------------------------------------------------------------
/configs/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_1x16_2x_lyft-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d.py'
2 | # model settings
3 | model = dict(
4 | type='MVXFasterRCNN',
5 | pts_backbone=dict(
6 | _delete_=True,
7 | type='NoStemRegNet',
8 | arch=dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0),
9 | init_cfg=dict(
10 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
11 | out_indices=(1, 2, 3),
12 | frozen_stages=-1,
13 | strides=(1, 2, 2, 2),
14 | base_channels=64,
15 | stem_channels=64,
16 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
17 | norm_eval=False,
18 | style='pytorch'),
19 | pts_neck=dict(in_channels=[64, 160, 384]))
20 | # dataset settings
21 | data = dict(samples_per_gpu=1, workers_per_gpu=2)
22 |
--------------------------------------------------------------------------------
/configs/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d.py:
--------------------------------------------------------------------------------
1 | _base_ = './hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d.py'
2 | # model settings
3 | model = dict(
4 | type='MVXFasterRCNN',
5 | pts_backbone=dict(
6 | _delete_=True,
7 | type='NoStemRegNet',
8 | arch=dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0),
9 | init_cfg=dict(
10 | type='Pretrained', checkpoint='open-mmlab://regnetx_400mf'),
11 | out_indices=(1, 2, 3),
12 | frozen_stages=-1,
13 | strides=(1, 2, 2, 2),
14 | base_channels=64,
15 | stem_channels=64,
16 | norm_cfg=dict(type='naiveSyncBN2d', eps=1e-3, momentum=0.01),
17 | norm_eval=False,
18 | style='pytorch'),
19 | pts_neck=dict(in_channels=[64, 160, 384]))
20 |
--------------------------------------------------------------------------------
/configs/votenet/votenet_16x8_sunrgbd-3d-10class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/sunrgbd-3d-10class.py', '../_base_/models/votenet.py',
3 | '../_base_/schedules/schedule_3x.py', '../_base_/default_runtime.py'
4 | ]
5 | # model settings
6 | model = dict(
7 | bbox_head=dict(
8 | num_classes=10,
9 | bbox_coder=dict(
10 | type='PartialBinBasedBBoxCoder',
11 | num_sizes=10,
12 | num_dir_bins=12,
13 | with_rot=True,
14 | mean_sizes=[
15 | [2.114256, 1.620300, 0.927272], [0.791118, 1.279516, 0.718182],
16 | [0.923508, 1.867419, 0.845495], [0.591958, 0.552978, 0.827272],
17 | [0.699104, 0.454178, 0.75625], [0.69519, 1.346299, 0.736364],
18 | [0.528526, 1.002642, 1.172878], [0.500618, 0.632163, 0.683424],
19 | [0.404671, 1.071108, 1.688889], [0.76584, 1.398258, 0.472728]
20 | ]),
21 | ))
22 |
--------------------------------------------------------------------------------
/configs/votenet/votenet_8x8_scannet-3d-18class.py:
--------------------------------------------------------------------------------
1 | _base_ = [
2 | '../_base_/datasets/scannet-3d-18class.py', '../_base_/models/votenet.py',
3 | '../_base_/schedules/schedule_3x.py', '../_base_/default_runtime.py'
4 | ]
5 |
6 | # model settings
7 | model = dict(
8 | bbox_head=dict(
9 | num_classes=18,
10 | bbox_coder=dict(
11 | type='PartialBinBasedBBoxCoder',
12 | num_sizes=18,
13 | num_dir_bins=1,
14 | with_rot=False,
15 | mean_sizes=[[0.76966727, 0.8116021, 0.92573744],
16 | [1.876858, 1.8425595, 1.1931566],
17 | [0.61328, 0.6148609, 0.7182701],
18 | [1.3955007, 1.5121545, 0.83443564],
19 | [0.97949594, 1.0675149, 0.6329687],
20 | [0.531663, 0.5955577, 1.7500148],
21 | [0.9624706, 0.72462326, 1.1481868],
22 | [0.83221924, 1.0490936, 1.6875663],
23 | [0.21132214, 0.4206159, 0.5372846],
24 | [1.4440073, 1.8970833, 0.26985747],
25 | [1.0294262, 1.4040797, 0.87554324],
26 | [1.3766412, 0.65521795, 1.6813129],
27 | [0.6650819, 0.71111923, 1.298853],
28 | [0.41999173, 0.37906948, 1.7513971],
29 | [0.59359556, 0.5912492, 0.73919016],
30 | [0.50867593, 0.50656086, 0.30136237],
31 | [1.1511526, 1.0546296, 0.49706793],
32 | [0.47535285, 0.49249494, 0.5802117]])))
33 |
34 | # yapf:disable
35 | log_config = dict(interval=30)
36 | # yapf:enable
37 |
--------------------------------------------------------------------------------
/configs/votenet/votenet_iouloss_8x8_scannet-3d-18class.py:
--------------------------------------------------------------------------------
1 | _base_ = ['./votenet_8x8_scannet-3d-18class.py']
2 |
3 | # model settings, add iou loss
4 | model = dict(
5 | bbox_head=dict(
6 | iou_loss=dict(
7 | type='AxisAlignedIoULoss', reduction='sum', loss_weight=10.0 /
8 | 3.0)))
9 |
--------------------------------------------------------------------------------
/data/lyft/val.txt:
--------------------------------------------------------------------------------
1 | host-a004-lidar0-1233080749298771736-1233080774198118416
2 | host-a004-lidar0-1232905197298264546-1232905222198133856
3 | host-a011-lidar0-1232732468299489666-1232732493199050666
4 | host-a101-lidar0-1241561147998866622-1241561172899320654
5 | host-a006-lidar0-1237322885198285226-1237322910098576786
6 | host-a004-lidar0-1233963848198981116-1233963873098642176
7 | host-a011-lidar0-1232752543198025666-1232752568099126026
8 | host-a004-lidar0-1232842367198056546-1232842392097783226
9 | host-a004-lidar0-1233615989298293586-1233616014198854636
10 | host-a011-lidar0-1233965426299054906-1233965451199121906
11 | host-a011-lidar0-1236104034298928316-1236104059198988026
12 | host-a007-lidar0-1233946614199227636-1233946639098289666
13 | host-a015-lidar0-1235423696198069636-1235423721098551296
14 | host-a004-lidar0-1233014843199117706-1233014868098023786
15 | host-a011-lidar0-1236093962299300416-1236093987199363346
16 | host-a011-lidar0-1234639296198260986-1234639321099417316
17 | host-a011-lidar0-1233524871199389346-1233524896098591466
18 | host-a011-lidar0-1235933781298838116-1235933806199517736
19 | host-a011-lidar0-1233965312298542226-1233965337198958586
20 | host-a011-lidar0-1233090567199118316-1233090592098933996
21 | host-a007-lidar0-1233621256298511876-1233621281197988026
22 | host-a007-lidar0-1233079617197863906-1233079642098533586
23 | host-a015-lidar0-1236112516098396876-1236112540999028556
24 | host-a008-lidar0-1236016333197799906-1236016358099063636
25 | host-a101-lidar0-1240710366399037786-1240710391298976894
26 | host-a102-lidar0-1242755350298764586-1242755375198787666
27 | host-a101-lidar0-1240877587199107226-1240877612099413030
28 | host-a101-lidar0-1242583745399163026-1242583770298821706
29 | host-a011-lidar0-1232817034199342856-1232817059098800346
30 | host-a004-lidar0-1232905117299287546-1232905142198246226
31 |
--------------------------------------------------------------------------------
/data/s3dis/meta_data/class_names.txt:
--------------------------------------------------------------------------------
1 | ceiling
2 | floor
3 | wall
4 | beam
5 | column
6 | window
7 | door
8 | table
9 | chair
10 | sofa
11 | bookcase
12 | board
13 | clutter
14 |
--------------------------------------------------------------------------------
/data/scannet/meta_data/scannet_means.npz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/data/scannet/meta_data/scannet_means.npz
--------------------------------------------------------------------------------
/demo/data/kitti/kitti_000008.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/kitti/kitti_000008.bin
--------------------------------------------------------------------------------
/demo/data/kitti/kitti_000008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/kitti/kitti_000008.png
--------------------------------------------------------------------------------
/demo/data/kitti/kitti_000008_infos.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/kitti/kitti_000008_infos.pkl
--------------------------------------------------------------------------------
/demo/data/nuscenes/n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/nuscenes/n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525.jpg
--------------------------------------------------------------------------------
/demo/data/nuscenes/n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525_mono3d.coco.json:
--------------------------------------------------------------------------------
1 | {"images": [{"file_name": "samples/CAM_BACK/n015-2018-07-24-11-22-45+0800__CAM_BACK__1532402927637525.jpg", "cam_intrinsic": [[809.2209905677063, 0.0, 829.2196003259838], [0.0, 809.2209905677063, 481.77842384512485], [0.0, 0.0, 1.0]]}]}
2 |
--------------------------------------------------------------------------------
/demo/data/scannet/scene0000_00.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/scannet/scene0000_00.bin
--------------------------------------------------------------------------------
/demo/data/sunrgbd/sunrgbd_000017.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/sunrgbd/sunrgbd_000017.bin
--------------------------------------------------------------------------------
/demo/data/sunrgbd/sunrgbd_000017.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/sunrgbd/sunrgbd_000017.jpg
--------------------------------------------------------------------------------
/demo/data/sunrgbd/sunrgbd_000017_infos.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/demo/data/sunrgbd/sunrgbd_000017_infos.pkl
--------------------------------------------------------------------------------
/demo/mono_det_demo.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from argparse import ArgumentParser
3 |
4 | from mmdet3d.apis import (inference_mono_3d_detector, init_model,
5 | show_result_meshlab)
6 |
7 |
8 | def main():
9 | parser = ArgumentParser()
10 | parser.add_argument('image', help='image file')
11 | parser.add_argument('ann', help='ann file')
12 | parser.add_argument('config', help='Config file')
13 | parser.add_argument('checkpoint', help='Checkpoint file')
14 | parser.add_argument(
15 | '--device', default='cuda:0', help='Device used for inference')
16 | parser.add_argument(
17 | '--score-thr', type=float, default=0.15, help='bbox score threshold')
18 | parser.add_argument(
19 | '--out-dir', type=str, default='demo', help='dir to save results')
20 | parser.add_argument(
21 | '--show',
22 | action='store_true',
23 | help='show online visualization results')
24 | parser.add_argument(
25 | '--snapshot',
26 | action='store_true',
27 | help='whether to save online visualization results')
28 | args = parser.parse_args()
29 |
30 | # build the model from a config file and a checkpoint file
31 | model = init_model(args.config, args.checkpoint, device=args.device)
32 | # test a single image
33 | result, data = inference_mono_3d_detector(model, args.image, args.ann)
34 | # show the results
35 | show_result_meshlab(
36 | data,
37 | result,
38 | args.out_dir,
39 | args.score_thr,
40 | show=args.show,
41 | snapshot=args.snapshot,
42 | task='mono-det')
43 |
44 |
45 | if __name__ == '__main__':
46 | main()
47 |
--------------------------------------------------------------------------------
/demo/pc_seg_demo.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from argparse import ArgumentParser
3 |
4 | from mmdet3d.apis import inference_segmentor, init_model, show_result_meshlab
5 |
6 |
7 | def main():
8 | parser = ArgumentParser()
9 | parser.add_argument('pcd', help='Point cloud file')
10 | parser.add_argument('config', help='Config file')
11 | parser.add_argument('checkpoint', help='Checkpoint file')
12 | parser.add_argument(
13 | '--device', default='cuda:0', help='Device used for inference')
14 | parser.add_argument(
15 | '--out-dir', type=str, default='demo', help='dir to save results')
16 | parser.add_argument(
17 | '--show',
18 | action='store_true',
19 | help='show online visualization results')
20 | parser.add_argument(
21 | '--snapshot',
22 | action='store_true',
23 | help='whether to save online visualization results')
24 | args = parser.parse_args()
25 |
26 | # build the model from a config file and a checkpoint file
27 | model = init_model(args.config, args.checkpoint, device=args.device)
28 | # test a single image
29 | result, data = inference_segmentor(model, args.pcd)
30 | # show the results
31 | show_result_meshlab(
32 | data,
33 | result,
34 | args.out_dir,
35 | show=args.show,
36 | snapshot=args.snapshot,
37 | task='seg',
38 | palette=model.PALETTE)
39 |
40 |
41 | if __name__ == '__main__':
42 | main()
43 |
--------------------------------------------------------------------------------
/demo/pcd_demo.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from argparse import ArgumentParser
3 |
4 | from mmdet3d.apis import inference_detector, init_model, show_result_meshlab
5 |
6 |
7 | def main():
8 | parser = ArgumentParser()
9 | parser.add_argument('pcd', help='Point cloud file')
10 | parser.add_argument('config', help='Config file')
11 | parser.add_argument('checkpoint', help='Checkpoint file')
12 | parser.add_argument(
13 | '--device', default='cuda:0', help='Device used for inference')
14 | parser.add_argument(
15 | '--score-thr', type=float, default=0.0, help='bbox score threshold')
16 | parser.add_argument(
17 | '--out-dir', type=str, default='demo', help='dir to save results')
18 | parser.add_argument(
19 | '--show',
20 | action='store_true',
21 | help='show online visualization results')
22 | parser.add_argument(
23 | '--snapshot',
24 | action='store_true',
25 | help='whether to save online visualization results')
26 | args = parser.parse_args()
27 |
28 | # build the model from a config file and a checkpoint file
29 | model = init_model(args.config, args.checkpoint, device=args.device)
30 | # test a single image
31 | result, data = inference_detector(model, args.pcd)
32 | # show the results
33 | show_result_meshlab(
34 | data,
35 | result,
36 | args.out_dir,
37 | args.score_thr,
38 | show=args.show,
39 | snapshot=args.snapshot,
40 | task='det')
41 |
42 |
43 | if __name__ == '__main__':
44 | main()
45 |
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | ARG PYTORCH="1.6.0"
2 | ARG CUDA="10.1"
3 | ARG CUDNN="7"
4 |
5 | FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel
6 |
7 | ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
8 | ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
9 | ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"
10 |
11 | RUN apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 \
12 | && apt-get clean \
13 | && rm -rf /var/lib/apt/lists/*
14 |
15 | # Install MMCV, MMDetection and MMSegmentation
16 | RUN pip install mmcv-full==1.3.13 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
17 | RUN pip install mmdet==2.17.0
18 | RUN pip install mmsegmentation==0.18.0
19 |
20 | # Install MMDetection3D
21 | RUN conda clean --all
22 | RUN git clone https://github.com/open-mmlab/mmdetection3d.git /mmdetection3d
23 | WORKDIR /mmdetection3d
24 | ENV FORCE_CUDA="1"
25 | RUN pip install -r requirements/build.txt
26 | RUN pip install --no-cache-dir -e .
27 |
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line, and also
5 | # from the environment for the first two.
6 | SPHINXOPTS ?=
7 | SPHINXBUILD ?= sphinx-build
8 | SOURCEDIR = .
9 | BUILDDIR = _build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21 |
--------------------------------------------------------------------------------
/docs/_static/css/readthedocs.css:
--------------------------------------------------------------------------------
1 | .header-logo {
2 | background-image: url("../image/mmdet3d-logo.png");
3 | background-size: 182.5px 40px;
4 | height: 40px;
5 | width: 182.5px;
6 | }
7 |
--------------------------------------------------------------------------------
/docs/_static/image/mmdet3d-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/docs/_static/image/mmdet3d-logo.png
--------------------------------------------------------------------------------
/docs/api.rst:
--------------------------------------------------------------------------------
1 | mmdet3d.core
2 | --------------
3 |
4 | anchor
5 | ^^^^^^^^^^
6 | .. automodule:: mmdet3d.core.anchor
7 | :members:
8 |
9 | bbox
10 | ^^^^^^^^^^
11 | .. automodule:: mmdet3d.core.bbox
12 | :members:
13 |
14 | evaluation
15 | ^^^^^^^^^^
16 | .. automodule:: mmdet3d.core.evaluation
17 | :members:
18 |
19 | visualizer
20 | ^^^^^^^^^^^^^^^
21 | .. automodule:: mmdet3d.core.visualizer
22 | :members:
23 |
24 | voxel
25 | ^^^^^^^^^^^^^^^
26 | .. automodule:: mmdet3d.core.voxel
27 | :members:
28 |
29 | post_processing
30 | ^^^^^^^^^^^^^^^
31 | .. automodule:: mmdet3d.core.post_processing
32 | :members:
33 |
34 | mmdet3d.datasets
35 | ----------------
36 |
37 | .. automodule:: mmdet3d.datasets
38 | :members:
39 |
40 | mmdet3d.models
41 | --------------
42 |
43 | detectors
44 | ^^^^^^^^^^
45 | .. automodule:: mmdet3d.models.detectors
46 | :members:
47 |
48 | backbones
49 | ^^^^^^^^^^
50 | .. automodule:: mmdet3d.models.backbones
51 | :members:
52 |
53 | necks
54 | ^^^^^^^^^^
55 | .. automodule:: mmdet3d.models.necks
56 | :members:
57 |
58 | dense_heads
59 | ^^^^^^^^^^^^
60 | .. automodule:: mmdet3d.models.dense_heads
61 | :members:
62 |
63 | roi_heads
64 | ^^^^^^^^^^
65 | .. automodule:: mmdet3d.models.roi_heads
66 | :members:
67 |
68 | fusion_layers
69 | ^^^^^^^^^^^^^
70 | .. automodule:: mmdet3d.models.fusion_layers
71 | :members:
72 |
73 | losses
74 | ^^^^^^^^^^
75 | .. automodule:: mmdet3d.models.losses
76 | :members:
77 |
78 | middle_encoders
79 | ^^^^^^^^^^^^^^^
80 | .. automodule:: mmdet3d.models.middle_encoders
81 | :members:
82 |
83 | model_utils
84 | ^^^^^^^^^^^^^
85 | .. automodule:: mmdet3d.models.model_utils
86 | :members:
87 |
--------------------------------------------------------------------------------
/docs/datasets/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | kitti_det.md
5 | nuscenes_det.md
6 | lyft_det.md
7 | waymo_det.md
8 | sunrgbd_det.md
9 | scannet_det.md
10 | scannet_sem_seg.md
11 | s3dis_sem_seg.md
12 |
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | Welcome to MMDetection3D's documentation!
2 | ==========================================
3 |
4 | .. toctree::
5 | :maxdepth: 1
6 | :caption: Get Started
7 |
8 | getting_started.md
9 |
10 | .. toctree::
11 | :maxdepth: 1
12 | :caption: Demo
13 |
14 | demo.md
15 |
16 | .. toctree::
17 | :maxdepth: 1
18 | :caption: Model Zoo
19 |
20 | model_zoo.md
21 |
22 | .. toctree::
23 | :maxdepth: 1
24 | :caption: Data Preparation
25 |
26 | data_preparation.md
27 |
28 | .. toctree::
29 | :maxdepth: 1
30 | :caption: Exist Data and Model
31 |
32 | 1_exist_data_model.md
33 |
34 | .. toctree::
35 | :maxdepth: 1
36 | :caption: New Data and Model
37 |
38 | 2_new_data_model.md
39 |
40 | .. toctree::
41 | :maxdepth: 1
42 | :caption: Supported Tasks
43 |
44 | supported_tasks/index.rst
45 |
46 | .. toctree::
47 | :maxdepth: 1
48 | :caption: Datasets
49 |
50 | datasets/index.rst
51 |
52 | .. toctree::
53 | :maxdepth: 1
54 | :caption: Tutorials
55 |
56 | tutorials/index.rst
57 |
58 | .. toctree::
59 | :maxdepth: 1
60 | :caption: Useful Tools and Scripts
61 |
62 | useful_tools.md
63 |
64 | .. toctree::
65 | :maxdepth: 1
66 | :caption: Notes
67 |
68 | benchmarks.md
69 |
70 | .. toctree::
71 | :maxdepth: 1
72 | :caption: FAQ
73 |
74 | faq.md
75 |
76 | .. toctree::
77 | :maxdepth: 1
78 | :caption: Compatibility
79 |
80 | compatibility.md
81 |
82 | .. toctree::
83 | :maxdepth: 1
84 | :caption: API Reference
85 |
86 | api.rst
87 |
88 | .. toctree::
89 | :maxdepth: 1
90 | :caption: Switch Language
91 |
92 | switch_language.md
93 |
94 | Indices and tables
95 | ==================
96 |
97 | * :ref:`genindex`
98 | * :ref:`search`
99 |
--------------------------------------------------------------------------------
/docs/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | pushd %~dp0
4 |
5 | REM Command file for Sphinx documentation
6 |
7 | if "%SPHINXBUILD%" == "" (
8 | set SPHINXBUILD=sphinx-build
9 | )
10 | set SOURCEDIR=.
11 | set BUILDDIR=_build
12 |
13 | if "%1" == "" goto help
14 |
15 | %SPHINXBUILD% >NUL 2>NUL
16 | if errorlevel 9009 (
17 | echo.
18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
19 | echo.installed, then set the SPHINXBUILD environment variable to point
20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
21 | echo.may add the Sphinx directory to PATH.
22 | echo.
23 | echo.If you don't have Sphinx installed, grab it from
24 | echo.http://sphinx-doc.org/
25 | exit /b 1
26 | )
27 |
28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29 | goto end
30 |
31 | :help
32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33 |
34 | :end
35 | popd
36 |
--------------------------------------------------------------------------------
/docs/stat.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import functools as func
3 | import glob
4 | import numpy as np
5 | import re
6 | from os import path as osp
7 |
8 | url_prefix = 'https://github.com/open-mmlab/mmdetection3d/blob/master/'
9 |
10 | files = sorted(glob.glob('../configs/*/README.md'))
11 |
12 | stats = []
13 | titles = []
14 | num_ckpts = 0
15 |
16 | for f in files:
17 | url = osp.dirname(f.replace('../', url_prefix))
18 |
19 | with open(f, 'r') as content_file:
20 | content = content_file.read()
21 |
22 | title = content.split('\n')[0].replace('#', '').strip()
23 | ckpts = set(x.lower().strip()
24 | for x in re.findall(r'https?://download.*\.pth', content)
25 | if 'mmdetection3d' in x)
26 | if len(ckpts) == 0:
27 | continue
28 |
29 | _papertype = [x for x in re.findall(r'', content)]
30 | assert len(_papertype) > 0
31 | papertype = _papertype[0]
32 |
33 | paper = set([(papertype, title)])
34 |
35 | titles.append(title)
36 | num_ckpts += len(ckpts)
37 | statsmsg = f"""
38 | \t* [{papertype}] [{title}]({url}) ({len(ckpts)} ckpts)
39 | """
40 | stats.append((paper, ckpts, statsmsg))
41 |
42 | allpapers = func.reduce(lambda a, b: a.union(b), [p for p, _, _ in stats])
43 | msglist = '\n'.join(x for _, _, x in stats)
44 |
45 | papertypes, papercounts = np.unique([t for t, _ in allpapers],
46 | return_counts=True)
47 | countstr = '\n'.join(
48 | [f' - {t}: {c}' for t, c in zip(papertypes, papercounts)])
49 |
50 | modelzoo = f"""
51 | \n## Model Zoo Statistics
52 |
53 | * Number of papers: {len(set(titles))}
54 | {countstr}
55 |
56 | * Number of checkpoints: {num_ckpts}
57 | {msglist}
58 | """
59 |
60 | with open('model_zoo.md', 'a') as f:
61 | f.write(modelzoo)
62 |
--------------------------------------------------------------------------------
/docs/supported_tasks/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | lidar_det3d.md
5 | vision_det3d.md
6 | lidar_sem_seg3d.md
7 |
--------------------------------------------------------------------------------
/docs/switch_language.md:
--------------------------------------------------------------------------------
1 | ## English
2 |
3 | ## 简体中文
4 |
--------------------------------------------------------------------------------
/docs/tutorials/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | config.md
5 | customize_dataset.md
6 | data_pipeline.md
7 | customize_models.md
8 | customize_runtime.md
9 |
--------------------------------------------------------------------------------
/docs_zh-CN/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line, and also
5 | # from the environment for the first two.
6 | SPHINXOPTS ?=
7 | SPHINXBUILD ?= sphinx-build
8 | SOURCEDIR = .
9 | BUILDDIR = _build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21 |
--------------------------------------------------------------------------------
/docs_zh-CN/_static/css/readthedocs.css:
--------------------------------------------------------------------------------
1 | .header-logo {
2 | background-image: url("../image/mmdet3d-logo.png");
3 | background-size: 182.5px 40px;
4 | height: 40px;
5 | width: 182.5px;
6 | }
7 |
--------------------------------------------------------------------------------
/docs_zh-CN/_static/image/mmdet3d-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/docs_zh-CN/_static/image/mmdet3d-logo.png
--------------------------------------------------------------------------------
/docs_zh-CN/api.rst:
--------------------------------------------------------------------------------
1 | mmdet3d.core
2 | --------------
3 |
4 | anchor
5 | ^^^^^^^^^^
6 | .. automodule:: mmdet3d.core.anchor
7 | :members:
8 |
9 | bbox
10 | ^^^^^^^^^^
11 | .. automodule:: mmdet3d.core.bbox
12 | :members:
13 |
14 | evaluation
15 | ^^^^^^^^^^
16 | .. automodule:: mmdet3d.core.evaluation
17 | :members:
18 |
19 | visualizer
20 | ^^^^^^^^^^^^^^^
21 | .. automodule:: mmdet3d.core.visualizer
22 | :members:
23 |
24 | voxel
25 | ^^^^^^^^^^^^^^^
26 | .. automodule:: mmdet3d.core.voxel
27 | :members:
28 |
29 | post_processing
30 | ^^^^^^^^^^^^^^^
31 | .. automodule:: mmdet3d.core.post_processing
32 | :members:
33 |
34 | mmdet3d.datasets
35 | ----------------
36 |
37 | .. automodule:: mmdet3d.datasets
38 | :members:
39 |
40 | mmdet3d.models
41 | --------------
42 |
43 | detectors
44 | ^^^^^^^^^^
45 | .. automodule:: mmdet3d.models.detectors
46 | :members:
47 |
48 | backbones
49 | ^^^^^^^^^^
50 | .. automodule:: mmdet3d.models.backbones
51 | :members:
52 |
53 | necks
54 | ^^^^^^^^^^
55 | .. automodule:: mmdet3d.models.necks
56 | :members:
57 |
58 | dense_heads
59 | ^^^^^^^^^^^^
60 | .. automodule:: mmdet3d.models.dense_heads
61 | :members:
62 |
63 | roi_heads
64 | ^^^^^^^^^^
65 | .. automodule:: mmdet3d.models.roi_heads
66 | :members:
67 |
68 | fusion_layers
69 | ^^^^^^^^^^^^^
70 | .. automodule:: mmdet3d.models.fusion_layers
71 | :members:
72 |
73 | losses
74 | ^^^^^^^^^^
75 | .. automodule:: mmdet3d.models.losses
76 | :members:
77 |
78 | middle_encoders
79 | ^^^^^^^^^^^^^^^
80 | .. automodule:: mmdet3d.models.middle_encoders
81 | :members:
82 |
83 | model_utils
84 | ^^^^^^^^^^^^^
85 | .. automodule:: mmdet3d.models.model_utils
86 | :members:
87 |
--------------------------------------------------------------------------------
/docs_zh-CN/benchmarks.md:
--------------------------------------------------------------------------------
1 | # 基准测试
--------------------------------------------------------------------------------
/docs_zh-CN/changelog.md:
--------------------------------------------------------------------------------
1 | # 变更日志
--------------------------------------------------------------------------------
/docs_zh-CN/compatibility.md:
--------------------------------------------------------------------------------
1 | ## 0.16.0
2 |
--------------------------------------------------------------------------------
/docs_zh-CN/datasets/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | kitti_det.md
5 | nuscenes_det.md
6 | lyft_det.md
7 | waymo_det.md
8 | sunrgbd_det.md
9 | scannet_det.md
10 | scannet_sem_seg.md
11 | s3dis_sem_seg.md
12 |
--------------------------------------------------------------------------------
/docs_zh-CN/faq.md:
--------------------------------------------------------------------------------
1 | # 常见问题解答
2 |
3 | 我们列出了一些用户和开发者在开发过程中会遇到的常见问题以及对应的解决方案,如果您发现了任何频繁出现的问题,请随时扩充本列表,非常欢迎您提出的任何解决方案。如果您在环境配置、模型训练等工作中遇到任何的问题,请使用[问题模板](https://github.com/open-mmlab/mmdetection3d/blob/master/.github/ISSUE_TEMPLATE/error-report.md/)来创建相应的 issue,并将所需的所有信息填入到问题模板中,我们会尽快解决您的问题。
4 |
5 | ## MMCV/MMDet/MMDet3D Installation
6 |
7 | - 如果您在 `import open3d` 时遇到下面的问题:
8 |
9 | ``OSError: /lib/x86_64-linux-gnu/libm.so.6: version 'GLIBC_2.27' not found``
10 |
11 | 请将 open3d 的版本降级至 0.9.0.0,因为最新版 open3d 需要 'GLIBC_2.27' 文件的支持, Ubuntu 16.04 系统中缺失该文件,且该文件仅存在于 Ubuntu 18.04 及之后的系统中。
12 |
13 | - 如果您在 `import pycocotools` 时遇到版本错误的问题,这是由于 nuscenes-devkit 需要安装 pycocotools,然而 mmdet 依赖于 mmpycocotools,当前的解决方案如下所示,我们将会在之后全面支持 pycocotools :
14 |
15 | ```shell
16 | pip uninstall pycocotools mmpycocotools
17 | pip install mmpycocotools
18 | ```
19 |
20 | **注意**: 我们已经在 0.13.0 及之后的版本中全面支持 pycocotools。
21 |
22 | - 如果您遇到下面的问题,并且您的环境包含 numba == 0.48.0 和 numpy >= 1.20.0:
23 |
24 | ``TypeError: expected dtype object, got 'numpy.dtype[bool_]'``
25 |
26 | 请将 numpy 的版本降级至 < 1.20.0,或者从源码安装 numba == 0.48,这是由于 numpy == 1.20.0 改变了 API,使得在调用 `np.dtype` 会产生子类。请参考 [这里](https://github.com/numba/numba/issues/6041) 获取更多细节。
27 |
28 | - 如果您在导入 pycocotools 相关包时遇到下面的问题:
29 |
30 | ``ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject``
31 |
32 | 请将 pycocotools 的版本降级至 2.0.1,这是由于最新版本的 pycocotools 与 numpy < 1.20.0 不兼容。或者通过下面的方式从源码进行编译来安装最新版本的 pycocotools :
33 |
34 | ``pip install -e "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"``
35 |
36 | 或者
37 |
38 | ``pip install -e "git+https://github.com/ppwwyyxx/cocoapi#egg=pycocotools&subdirectory=PythonAPI"``
39 |
--------------------------------------------------------------------------------
/docs_zh-CN/index.rst:
--------------------------------------------------------------------------------
1 | Welcome to MMDetection3D's documentation!
2 | ==========================================
3 |
4 | .. toctree::
5 | :maxdepth: 1
6 | :caption: 开始你的第一步
7 |
8 | getting_started.md
9 |
10 | .. toctree::
11 | :maxdepth: 1
12 | :caption: 演示
13 |
14 | demo.md
15 |
16 | .. toctree::
17 | :maxdepth: 1
18 | :caption: 模型库
19 |
20 | model_zoo.md
21 |
22 | .. toctree::
23 | :maxdepth: 1
24 | :caption: 数据预处理
25 |
26 | data_preparation.md
27 |
28 | .. toctree::
29 | :maxdepth: 1
30 | :caption: 使用现有数据及模型
31 |
32 | 1_exist_data_model.md
33 |
34 | .. toctree::
35 | :maxdepth: 1
36 | :caption: 创建新的数据与模型
37 |
38 | 2_new_data_model.md
39 |
40 | .. toctree::
41 | :maxdepth: 1
42 | :caption: 支持的任务
43 |
44 | supported_tasks/index.rst
45 |
46 | .. toctree::
47 | :maxdepth: 1
48 | :caption: 数据集介绍
49 |
50 | datasets/index.rst
51 |
52 | .. toctree::
53 | :maxdepth: 1
54 | :caption: 教程
55 |
56 | tutorials/index.rst
57 |
58 | .. toctree::
59 | :maxdepth: 1
60 | :caption: 实用工具与脚本
61 |
62 | useful_tools.md
63 |
64 | .. toctree::
65 | :maxdepth: 1
66 | :caption: 说明
67 |
68 | benchmarks.md
69 |
70 | .. toctree::
71 | :maxdepth: 1
72 | :caption: 常见问题
73 |
74 | faq.md
75 |
76 | .. toctree::
77 | :maxdepth: 1
78 | :caption: 兼容性
79 |
80 | compatibility.md
81 |
82 | .. toctree::
83 | :maxdepth: 1
84 | :caption: 接口文档(英文)
85 |
86 | api.rst
87 |
88 | .. toctree::
89 | :maxdepth: 1
90 | :caption: 语言切换
91 |
92 | switch_language.md
93 |
94 | Indices and tables
95 | ==================
96 |
97 | * :ref:`genindex`
98 | * :ref:`search`
99 |
--------------------------------------------------------------------------------
/docs_zh-CN/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | pushd %~dp0
4 |
5 | REM Command file for Sphinx documentation
6 |
7 | if "%SPHINXBUILD%" == "" (
8 | set SPHINXBUILD=sphinx-build
9 | )
10 | set SOURCEDIR=.
11 | set BUILDDIR=_build
12 |
13 | if "%1" == "" goto help
14 |
15 | %SPHINXBUILD% >NUL 2>NUL
16 | if errorlevel 9009 (
17 | echo.
18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
19 | echo.installed, then set the SPHINXBUILD environment variable to point
20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
21 | echo.may add the Sphinx directory to PATH.
22 | echo.
23 | echo.If you don't have Sphinx installed, grab it from
24 | echo.http://sphinx-doc.org/
25 | exit /b 1
26 | )
27 |
28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29 | goto end
30 |
31 | :help
32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33 |
34 | :end
35 | popd
36 |
--------------------------------------------------------------------------------
/docs_zh-CN/stat.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import functools as func
3 | import glob
4 | import numpy as np
5 | import re
6 | from os import path as osp
7 |
8 | url_prefix = 'https://github.com/open-mmlab/mmdetection3d/blob/master/'
9 |
10 | files = sorted(glob.glob('../configs/*/README.md'))
11 |
12 | stats = []
13 | titles = []
14 | num_ckpts = 0
15 |
16 | for f in files:
17 | url = osp.dirname(f.replace('../', url_prefix))
18 |
19 | with open(f, 'r') as content_file:
20 | content = content_file.read()
21 |
22 | title = content.split('\n')[0].replace('#', '').strip()
23 | ckpts = set(x.lower().strip()
24 | for x in re.findall(r'https?://download.*\.pth', content)
25 | if 'mmdetection3d' in x)
26 | if len(ckpts) == 0:
27 | continue
28 |
29 | _papertype = [x for x in re.findall(r'', content)]
30 | assert len(_papertype) > 0
31 | papertype = _papertype[0]
32 |
33 | paper = set([(papertype, title)])
34 |
35 | titles.append(title)
36 | num_ckpts += len(ckpts)
37 | statsmsg = f"""
38 | \t* [{papertype}] [{title}]({url}) ({len(ckpts)} ckpts)
39 | """
40 | stats.append((paper, ckpts, statsmsg))
41 |
42 | allpapers = func.reduce(lambda a, b: a.union(b), [p for p, _, _ in stats])
43 | msglist = '\n'.join(x for _, _, x in stats)
44 |
45 | papertypes, papercounts = np.unique([t for t, _ in allpapers],
46 | return_counts=True)
47 | countstr = '\n'.join(
48 | [f' - {t}: {c}' for t, c in zip(papertypes, papercounts)])
49 |
50 | modelzoo = f"""
51 | \n## Model Zoo Statistics
52 |
53 | * Number of papers: {len(set(titles))}
54 | {countstr}
55 |
56 | * Number of checkpoints: {num_ckpts}
57 | {msglist}
58 | """
59 |
60 | with open('model_zoo.md', 'a') as f:
61 | f.write(modelzoo)
62 |
--------------------------------------------------------------------------------
/docs_zh-CN/supported_tasks/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | lidar_det3d.md
5 | vision_det3d.md
6 | lidar_sem_seg3d.md
7 |
--------------------------------------------------------------------------------
/docs_zh-CN/supported_tasks/lidar_det3d.md:
--------------------------------------------------------------------------------
1 | # 基于Lidar的3D检测
--------------------------------------------------------------------------------
/docs_zh-CN/supported_tasks/lidar_sem_seg3d.md:
--------------------------------------------------------------------------------
1 | # 基于Lidar的3D语义分割
--------------------------------------------------------------------------------
/docs_zh-CN/supported_tasks/vision_det3d.md:
--------------------------------------------------------------------------------
1 | # 基于视觉的3D检测
--------------------------------------------------------------------------------
/docs_zh-CN/switch_language.md:
--------------------------------------------------------------------------------
1 | ## English
2 |
3 | ## 简体中文
4 |
--------------------------------------------------------------------------------
/docs_zh-CN/tutorials/index.rst:
--------------------------------------------------------------------------------
1 | .. toctree::
2 | :maxdepth: 2
3 |
4 | config.md
5 | customize_dataset.md
6 | data_pipeline.md
7 | customize_models.md
8 | customize_runtime.md
9 |
--------------------------------------------------------------------------------
/mmdet3d/apis/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .inference import (convert_SyncBN, inference_detector,
3 | inference_mono_3d_detector,
4 | inference_multi_modality_detector, inference_segmentor,
5 | init_model, show_result_meshlab)
6 | from .test import single_gpu_test
7 | from .train import train_model
8 |
9 | __all__ = [
10 | 'inference_detector', 'init_model', 'single_gpu_test',
11 | 'inference_mono_3d_detector', 'show_result_meshlab', 'convert_SyncBN',
12 | 'train_model', 'inference_multi_modality_detector', 'inference_segmentor'
13 | ]
14 |
--------------------------------------------------------------------------------
/mmdet3d/apis/train.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.apis import train_detector
3 | from mmseg.apis import train_segmentor
4 |
5 |
6 | def train_model(model,
7 | dataset,
8 | cfg,
9 | distributed=False,
10 | validate=False,
11 | timestamp=None,
12 | meta=None):
13 | """A function wrapper for launching model training according to cfg.
14 |
15 | Because we need different eval_hook in runner. Should be deprecated in the
16 | future.
17 | """
18 | if cfg.model.type in ['EncoderDecoder3D']:
19 | train_segmentor(
20 | model,
21 | dataset,
22 | cfg,
23 | distributed=distributed,
24 | validate=validate,
25 | timestamp=timestamp,
26 | meta=meta)
27 | else:
28 | train_detector(
29 | model,
30 | dataset,
31 | cfg,
32 | distributed=distributed,
33 | validate=validate,
34 | timestamp=timestamp,
35 | meta=meta)
36 |
--------------------------------------------------------------------------------
/mmdet3d/core/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .anchor import * # noqa: F401, F403
3 | from .bbox import * # noqa: F401, F403
4 | from .evaluation import * # noqa: F401, F403
5 | from .points import * # noqa: F401, F403
6 | from .post_processing import * # noqa: F401, F403
7 | from .utils import * # noqa: F401, F403
8 | from .visualizer import * # noqa: F401, F403
9 | from .voxel import * # noqa: F401, F403
10 |
--------------------------------------------------------------------------------
/mmdet3d/core/anchor/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.core.anchor import build_prior_generator
3 | from .anchor_3d_generator import (AlignedAnchor3DRangeGenerator,
4 | AlignedAnchor3DRangeGeneratorPerCls,
5 | Anchor3DRangeGenerator)
6 |
7 | __all__ = [
8 | 'AlignedAnchor3DRangeGenerator', 'Anchor3DRangeGenerator',
9 | 'build_prior_generator', 'AlignedAnchor3DRangeGeneratorPerCls'
10 | ]
11 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .assigners import AssignResult, BaseAssigner, MaxIoUAssigner
3 | from .coders import DeltaXYZWLHRBBoxCoder
4 | # from .bbox_target import bbox_target
5 | from .iou_calculators import (AxisAlignedBboxOverlaps3D, BboxOverlaps3D,
6 | BboxOverlapsNearest3D,
7 | axis_aligned_bbox_overlaps_3d, bbox_overlaps_3d,
8 | bbox_overlaps_nearest_3d)
9 | from .samplers import (BaseSampler, CombinedSampler,
10 | InstanceBalancedPosSampler, IoUBalancedNegSampler,
11 | PseudoSampler, RandomSampler, SamplingResult)
12 | from .structures import (BaseInstance3DBoxes, Box3DMode, CameraInstance3DBoxes,
13 | Coord3DMode, DepthInstance3DBoxes,
14 | LiDARInstance3DBoxes, get_box_type, limit_period,
15 | mono_cam_box2vis, points_cam2img, xywhr2xyxyr)
16 | from .transforms import bbox3d2result, bbox3d2roi, bbox3d_mapping_back
17 |
18 | __all__ = [
19 | 'BaseSampler', 'AssignResult', 'BaseAssigner', 'MaxIoUAssigner',
20 | 'PseudoSampler', 'RandomSampler', 'InstanceBalancedPosSampler',
21 | 'IoUBalancedNegSampler', 'CombinedSampler', 'SamplingResult',
22 | 'DeltaXYZWLHRBBoxCoder', 'BboxOverlapsNearest3D', 'BboxOverlaps3D',
23 | 'bbox_overlaps_nearest_3d', 'bbox_overlaps_3d',
24 | 'AxisAlignedBboxOverlaps3D', 'axis_aligned_bbox_overlaps_3d', 'Box3DMode',
25 | 'LiDARInstance3DBoxes', 'CameraInstance3DBoxes', 'bbox3d2roi',
26 | 'bbox3d2result', 'DepthInstance3DBoxes', 'BaseInstance3DBoxes',
27 | 'bbox3d_mapping_back', 'xywhr2xyxyr', 'limit_period', 'points_cam2img',
28 | 'get_box_type', 'Coord3DMode', 'mono_cam_box2vis'
29 | ]
30 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/assigners/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.core.bbox import AssignResult, BaseAssigner, MaxIoUAssigner
3 |
4 | __all__ = ['BaseAssigner', 'MaxIoUAssigner', 'AssignResult']
5 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/coders/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.core.bbox import build_bbox_coder
3 | from .anchor_free_bbox_coder import AnchorFreeBBoxCoder
4 | from .centerpoint_bbox_coders import CenterPointBBoxCoder
5 | from .delta_xyzwhlr_bbox_coder import DeltaXYZWLHRBBoxCoder
6 | from .groupfree3d_bbox_coder import GroupFree3DBBoxCoder
7 | from .partial_bin_based_bbox_coder import PartialBinBasedBBoxCoder
8 |
9 | __all__ = [
10 | 'build_bbox_coder', 'DeltaXYZWLHRBBoxCoder', 'PartialBinBasedBBoxCoder',
11 | 'CenterPointBBoxCoder', 'AnchorFreeBBoxCoder', 'GroupFree3DBBoxCoder'
12 | ]
13 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/iou_calculators/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .iou3d_calculator import (AxisAlignedBboxOverlaps3D, BboxOverlaps3D,
3 | BboxOverlapsNearest3D,
4 | axis_aligned_bbox_overlaps_3d, bbox_overlaps_3d,
5 | bbox_overlaps_nearest_3d)
6 |
7 | __all__ = [
8 | 'BboxOverlapsNearest3D', 'BboxOverlaps3D', 'bbox_overlaps_nearest_3d',
9 | 'bbox_overlaps_3d', 'AxisAlignedBboxOverlaps3D',
10 | 'axis_aligned_bbox_overlaps_3d'
11 | ]
12 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/samplers/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.core.bbox.samplers import (BaseSampler, CombinedSampler,
3 | InstanceBalancedPosSampler,
4 | IoUBalancedNegSampler, OHEMSampler,
5 | PseudoSampler, RandomSampler,
6 | SamplingResult)
7 | from .iou_neg_piecewise_sampler import IoUNegPiecewiseSampler
8 |
9 | __all__ = [
10 | 'BaseSampler', 'PseudoSampler', 'RandomSampler',
11 | 'InstanceBalancedPosSampler', 'IoUBalancedNegSampler', 'CombinedSampler',
12 | 'OHEMSampler', 'SamplingResult', 'IoUNegPiecewiseSampler'
13 | ]
14 |
--------------------------------------------------------------------------------
/mmdet3d/core/bbox/structures/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .base_box3d import BaseInstance3DBoxes
3 | from .box_3d_mode import Box3DMode
4 | from .cam_box3d import CameraInstance3DBoxes
5 | from .coord_3d_mode import Coord3DMode
6 | from .depth_box3d import DepthInstance3DBoxes
7 | from .lidar_box3d import LiDARInstance3DBoxes
8 | from .utils import (get_box_type, get_proj_mat_by_coord_type, limit_period,
9 | mono_cam_box2vis, points_cam2img, rotation_3d_in_axis,
10 | xywhr2xyxyr)
11 |
12 | __all__ = [
13 | 'Box3DMode', 'BaseInstance3DBoxes', 'LiDARInstance3DBoxes',
14 | 'CameraInstance3DBoxes', 'DepthInstance3DBoxes', 'xywhr2xyxyr',
15 | 'get_box_type', 'rotation_3d_in_axis', 'limit_period', 'points_cam2img',
16 | 'Coord3DMode', 'mono_cam_box2vis', 'get_proj_mat_by_coord_type'
17 | ]
18 |
--------------------------------------------------------------------------------
/mmdet3d/core/evaluation/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .indoor_eval import indoor_eval
3 | from .kitti_utils import kitti_eval, kitti_eval_coco_style
4 | from .lyft_eval import lyft_eval
5 | from .seg_eval import seg_eval
6 |
7 | __all__ = [
8 | 'kitti_eval_coco_style', 'kitti_eval', 'indoor_eval', 'lyft_eval',
9 | 'seg_eval'
10 | ]
11 |
--------------------------------------------------------------------------------
/mmdet3d/core/evaluation/kitti_utils/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .eval import kitti_eval, kitti_eval_coco_style
3 |
4 | __all__ = ['kitti_eval', 'kitti_eval_coco_style']
5 |
--------------------------------------------------------------------------------
/mmdet3d/core/points/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .base_points import BasePoints
3 | from .cam_points import CameraPoints
4 | from .depth_points import DepthPoints
5 | from .lidar_points import LiDARPoints
6 |
7 | __all__ = ['BasePoints', 'CameraPoints', 'DepthPoints', 'LiDARPoints']
8 |
9 |
10 | def get_points_type(points_type):
11 | """Get the class of points according to coordinate type.
12 |
13 | Args:
14 | points_type (str): The type of points coordinate.
15 | The valid value are "CAMERA", "LIDAR", or "DEPTH".
16 |
17 | Returns:
18 | class: Points type.
19 | """
20 | if points_type == 'CAMERA':
21 | points_cls = CameraPoints
22 | elif points_type == 'LIDAR':
23 | points_cls = LiDARPoints
24 | elif points_type == 'DEPTH':
25 | points_cls = DepthPoints
26 | else:
27 | raise ValueError('Only "points_type" of "CAMERA", "LIDAR", or "DEPTH"'
28 | f' are supported, got {points_type}')
29 |
30 | return points_cls
31 |
--------------------------------------------------------------------------------
/mmdet3d/core/post_processing/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.core.post_processing import (merge_aug_bboxes, merge_aug_masks,
3 | merge_aug_proposals, merge_aug_scores,
4 | multiclass_nms)
5 | from .box3d_nms import aligned_3d_nms, box3d_multiclass_nms, circle_nms
6 | from .merge_augs import merge_aug_bboxes_3d
7 |
8 | __all__ = [
9 | 'multiclass_nms', 'merge_aug_proposals', 'merge_aug_bboxes',
10 | 'merge_aug_scores', 'merge_aug_masks', 'box3d_multiclass_nms',
11 | 'aligned_3d_nms', 'merge_aug_bboxes_3d', 'circle_nms'
12 | ]
13 |
--------------------------------------------------------------------------------
/mmdet3d/core/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .gaussian import draw_heatmap_gaussian, gaussian_2d, gaussian_radius
3 |
4 | __all__ = ['gaussian_2d', 'gaussian_radius', 'draw_heatmap_gaussian']
5 |
--------------------------------------------------------------------------------
/mmdet3d/core/visualizer/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .show_result import (show_multi_modality_result, show_result,
3 | show_seg_result)
4 |
5 | __all__ = ['show_result', 'show_seg_result', 'show_multi_modality_result']
6 |
--------------------------------------------------------------------------------
/mmdet3d/core/voxel/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .builder import build_voxel_generator
3 | from .voxel_generator import VoxelGenerator
4 |
5 | __all__ = ['build_voxel_generator', 'VoxelGenerator']
6 |
--------------------------------------------------------------------------------
/mmdet3d/core/voxel/builder.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | import mmcv
3 |
4 | from . import voxel_generator
5 |
6 |
7 | def build_voxel_generator(cfg, **kwargs):
8 | """Builder of voxel generator."""
9 | if isinstance(cfg, voxel_generator.VoxelGenerator):
10 | return cfg
11 | elif isinstance(cfg, dict):
12 | return mmcv.runner.obj_from_dict(
13 | cfg, voxel_generator, default_args=kwargs)
14 | else:
15 | raise TypeError('Invalid type {} for building a sampler'.format(
16 | type(cfg)))
17 |
--------------------------------------------------------------------------------
/mmdet3d/datasets/pipelines/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.datasets.pipelines import Compose
3 | from .dbsampler import DataBaseSampler
4 | from .formating import Collect3D, DefaultFormatBundle, DefaultFormatBundle3D
5 | from .loading import (LoadAnnotations3D, LoadImageFromFileMono3D,
6 | LoadMultiViewImageFromFiles, LoadPointsFromFile,
7 | LoadPointsFromMultiSweeps, NormalizePointsColor,
8 | PointSegClassMapping)
9 | from .test_time_aug import MultiScaleFlipAug3D
10 | from .transforms_3d import (BackgroundPointsFilter, GlobalAlignment,
11 | GlobalRotScaleTrans, IndoorPatchPointSample,
12 | IndoorPointSample, ObjectNameFilter, ObjectNoise,
13 | ObjectRangeFilter, ObjectSample, PointSample,
14 | PointShuffle, PointsRangeFilter,
15 | RandomDropPointsColor, RandomFlip3D,
16 | RandomJitterPoints, VoxelBasedPointSampler)
17 |
18 | __all__ = [
19 | 'ObjectSample', 'RandomFlip3D', 'ObjectNoise', 'GlobalRotScaleTrans',
20 | 'PointShuffle', 'ObjectRangeFilter', 'PointsRangeFilter', 'Collect3D',
21 | 'Compose', 'LoadMultiViewImageFromFiles', 'LoadPointsFromFile',
22 | 'DefaultFormatBundle', 'DefaultFormatBundle3D', 'DataBaseSampler',
23 | 'NormalizePointsColor', 'LoadAnnotations3D', 'IndoorPointSample',
24 | 'PointSample', 'PointSegClassMapping', 'MultiScaleFlipAug3D',
25 | 'LoadPointsFromMultiSweeps', 'BackgroundPointsFilter',
26 | 'VoxelBasedPointSampler', 'GlobalAlignment', 'IndoorPatchPointSample',
27 | 'LoadImageFromFileMono3D', 'ObjectNameFilter', 'RandomDropPointsColor',
28 | 'RandomJitterPoints'
29 | ]
30 |
--------------------------------------------------------------------------------
/mmdet3d/models/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .backbones import * # noqa: F401,F403
3 | from .builder import (FUSION_LAYERS, MIDDLE_ENCODERS, VOXEL_ENCODERS,
4 | build_backbone, build_detector, build_fusion_layer,
5 | build_head, build_loss, build_middle_encoder,
6 | build_model, build_neck, build_roi_extractor,
7 | build_shared_head, build_voxel_encoder)
8 | from .decode_heads import * # noqa: F401,F403
9 | from .dense_heads import * # noqa: F401,F403
10 | from .detectors import * # noqa: F401,F403
11 | from .fusion_layers import * # noqa: F401,F403
12 | from .losses import * # noqa: F401,F403
13 | from .middle_encoders import * # noqa: F401,F403
14 | from .model_utils import * # noqa: F401,F403
15 | from .necks import * # noqa: F401,F403
16 | from .roi_heads import * # noqa: F401,F403
17 | from .segmentors import * # noqa: F401,F403
18 | from .voxel_encoders import * # noqa: F401,F403
19 |
20 | __all__ = [
21 | 'VOXEL_ENCODERS', 'MIDDLE_ENCODERS', 'FUSION_LAYERS', 'build_backbone',
22 | 'build_neck', 'build_roi_extractor', 'build_shared_head', 'build_head',
23 | 'build_loss', 'build_detector', 'build_fusion_layer', 'build_model',
24 | 'build_middle_encoder', 'build_voxel_encoder'
25 | ]
26 |
--------------------------------------------------------------------------------
/mmdet3d/models/backbones/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.backbones import SSDVGG, HRNet, ResNet, ResNetV1d, ResNeXt
3 | from .multi_backbone import MultiBackbone
4 | from .nostem_regnet import NoStemRegNet
5 | from .pointnet2_sa_msg import PointNet2SAMSG
6 | from .pointnet2_sa_ssg import PointNet2SASSG
7 | from .second import SECOND
8 |
9 | __all__ = [
10 | 'ResNet', 'ResNetV1d', 'ResNeXt', 'SSDVGG', 'HRNet', 'NoStemRegNet',
11 | 'SECOND', 'PointNet2SASSG', 'PointNet2SAMSG', 'MultiBackbone'
12 | ]
13 |
--------------------------------------------------------------------------------
/mmdet3d/models/backbones/base_pointnet.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | import warnings
3 | from abc import ABCMeta
4 | from mmcv.runner import BaseModule
5 |
6 |
7 | class BasePointNet(BaseModule, metaclass=ABCMeta):
8 | """Base class for PointNet."""
9 |
10 | def __init__(self, init_cfg=None, pretrained=None):
11 | super(BasePointNet, self).__init__(init_cfg)
12 | self.fp16_enabled = False
13 | assert not (init_cfg and pretrained), \
14 | 'init_cfg and pretrained cannot be setting at the same time'
15 | if isinstance(pretrained, str):
16 | warnings.warn('DeprecationWarning: pretrained is a deprecated, '
17 | 'please use "init_cfg" instead')
18 | self.init_cfg = dict(type='Pretrained', checkpoint=pretrained)
19 |
20 | @staticmethod
21 | def _split_point_feats(points):
22 | """Split coordinates and features of input points.
23 |
24 | Args:
25 | points (torch.Tensor): Point coordinates with features,
26 | with shape (B, N, 3 + input_feature_dim).
27 |
28 | Returns:
29 | torch.Tensor: Coordinates of input points.
30 | torch.Tensor: Features of input points.
31 | """
32 | xyz = points[..., 0:3].contiguous()
33 | if points.size(-1) > 3:
34 | features = points[..., 3:].transpose(1, 2).contiguous()
35 | else:
36 | features = None
37 |
38 | return xyz, features
39 |
--------------------------------------------------------------------------------
/mmdet3d/models/decode_heads/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .paconv_head import PAConvHead
3 | from .pointnet2_head import PointNet2Head
4 |
5 | __all__ = ['PointNet2Head', 'PAConvHead']
6 |
--------------------------------------------------------------------------------
/mmdet3d/models/dense_heads/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .anchor3d_head import Anchor3DHead
3 | from .anchor_free_mono3d_head import AnchorFreeMono3DHead
4 | from .base_conv_bbox_head import BaseConvBboxHead
5 | from .base_mono3d_dense_head import BaseMono3DDenseHead
6 | from .centerpoint_head import CenterHead
7 | from .fcos_mono3d_head import FCOSMono3DHead
8 | from .free_anchor3d_head import FreeAnchor3DHead
9 | from .groupfree3d_head import GroupFree3DHead
10 | from .parta2_rpn_head import PartA2RPNHead
11 | from .shape_aware_head import ShapeAwareHead
12 | from .ssd_3d_head import SSD3DHead
13 | from .vote_head import VoteHead
14 | from .sr_head import SRHead
15 |
16 | __all__ = [
17 | 'Anchor3DHead', 'FreeAnchor3DHead', 'PartA2RPNHead', 'VoteHead',
18 | 'SSD3DHead', 'BaseConvBboxHead', 'CenterHead', 'ShapeAwareHead',
19 | 'BaseMono3DDenseHead', 'AnchorFreeMono3DHead', 'FCOSMono3DHead',
20 | 'GroupFree3DHead',
21 | 'SRHead'
22 | ]
23 |
--------------------------------------------------------------------------------
/mmdet3d/models/detectors/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .base import Base3DDetector
3 | from .centerpoint import CenterPoint
4 | from .dynamic_voxelnet import DynamicVoxelNet
5 | from .fcos_mono3d import FCOSMono3D
6 | from .groupfree3dnet import GroupFree3DNet
7 | from .h3dnet import H3DNet
8 | from .imvotenet import ImVoteNet
9 | from .imvoxelnet import ImVoxelNet
10 | from .mvx_faster_rcnn import DynamicMVXFasterRCNN, MVXFasterRCNN
11 | from .mvx_two_stage import MVXTwoStageDetector
12 | from .parta2 import PartA2
13 | from .single_stage_mono3d import SingleStageMono3DDetector
14 | from .ssd3dnet import SSD3DNet
15 | from .votenet import VoteNet
16 | from .voxelnet import VoxelNet
17 |
18 | __all__ = [
19 | 'Base3DDetector', 'VoxelNet', 'DynamicVoxelNet', 'MVXTwoStageDetector',
20 | 'DynamicMVXFasterRCNN', 'MVXFasterRCNN', 'PartA2', 'VoteNet', 'H3DNet',
21 | 'CenterPoint', 'SSD3DNet', 'ImVoteNet', 'SingleStageMono3DDetector',
22 | 'FCOSMono3D', 'ImVoxelNet', 'GroupFree3DNet',
23 | ]
24 |
--------------------------------------------------------------------------------
/mmdet3d/models/detectors/fcos_mono3d.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.builder import DETECTORS
3 | from .single_stage_mono3d import SingleStageMono3DDetector
4 |
5 |
6 | @DETECTORS.register_module()
7 | class FCOSMono3D(SingleStageMono3DDetector):
8 | r"""`FCOS3D `_ for monocular 3D object detection.
9 |
10 | Currently please refer to our entry on the
11 | `leaderboard `_.
12 | """ # noqa: E501
13 |
14 | def __init__(self,
15 | backbone,
16 | neck,
17 | bbox_head,
18 | train_cfg=None,
19 | test_cfg=None,
20 | pretrained=None):
21 | super(FCOSMono3D, self).__init__(backbone, neck, bbox_head, train_cfg,
22 | test_cfg, pretrained)
23 |
--------------------------------------------------------------------------------
/mmdet3d/models/detectors/ssd3dnet.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models import DETECTORS
3 | from .votenet import VoteNet
4 |
5 |
6 | @DETECTORS.register_module()
7 | class SSD3DNet(VoteNet):
8 | """3DSSDNet model.
9 |
10 | https://arxiv.org/abs/2002.10187.pdf
11 | """
12 |
13 | def __init__(self,
14 | backbone,
15 | bbox_head=None,
16 | train_cfg=None,
17 | test_cfg=None,
18 | init_cfg=None,
19 | pretrained=None):
20 | super(SSD3DNet, self).__init__(
21 | backbone=backbone,
22 | bbox_head=bbox_head,
23 | train_cfg=train_cfg,
24 | test_cfg=test_cfg,
25 | init_cfg=init_cfg,
26 | pretrained=pretrained)
27 |
--------------------------------------------------------------------------------
/mmdet3d/models/detectors/two_stage.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models import DETECTORS, TwoStageDetector
3 | from .base import Base3DDetector
4 |
5 |
6 | @DETECTORS.register_module()
7 | class TwoStage3DDetector(Base3DDetector, TwoStageDetector):
8 | """Base class of two-stage 3D detector.
9 |
10 | It inherits original ``:class:TwoStageDetector`` and
11 | ``:class:Base3DDetector``. This class could serve as a base class for all
12 | two-stage 3D detectors.
13 | """
14 |
15 | def __init__(self, **kwargs):
16 | super(TwoStage3DDetector, self).__init__(**kwargs)
17 |
--------------------------------------------------------------------------------
/mmdet3d/models/fusion_layers/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .coord_transform import (apply_3d_transformation, bbox_2d_transform,
3 | coord_2d_transform)
4 | from .point_fusion import PointFusion
5 | from .vote_fusion import VoteFusion
6 |
7 | __all__ = [
8 | 'PointFusion', 'VoteFusion', 'apply_3d_transformation',
9 | 'bbox_2d_transform', 'coord_2d_transform'
10 | ]
11 |
--------------------------------------------------------------------------------
/mmdet3d/models/losses/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.losses import FocalLoss, SmoothL1Loss, binary_cross_entropy
3 | from .axis_aligned_iou_loss import AxisAlignedIoULoss, axis_aligned_iou_loss
4 | from .chamfer_distance import ChamferDistance, chamfer_distance
5 | from .paconv_regularization_loss import PAConvRegularizationLoss
6 |
7 | __all__ = [
8 | 'FocalLoss', 'SmoothL1Loss', 'binary_cross_entropy', 'ChamferDistance',
9 | 'chamfer_distance', 'axis_aligned_iou_loss', 'AxisAlignedIoULoss',
10 | 'PAConvRegularizationLoss'
11 | ]
12 |
--------------------------------------------------------------------------------
/mmdet3d/models/middle_encoders/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .pillar_scatter import PointPillarsScatter
3 | from .sparse_encoder import SparseEncoder
4 | from .sparse_unet import SparseUNet
5 |
6 | __all__ = ['PointPillarsScatter', 'SparseEncoder', 'SparseUNet']
7 |
--------------------------------------------------------------------------------
/mmdet3d/models/model_utils/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .transformer import GroupFree3DMHA
3 | from .vote_module import VoteModule
4 | from .noise_suppression_module import NoiseSuppressionModule
5 |
6 | __all__ = ['VoteModule', 'GroupFree3DMHA', 'NoiseSuppressionModule']
7 |
--------------------------------------------------------------------------------
/mmdet3d/models/necks/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.necks.fpn import FPN
3 | from .imvoxel_neck import OutdoorImVoxelNeck
4 | from .second_fpn import SECONDFPN
5 |
6 | __all__ = ['FPN', 'SECONDFPN', 'OutdoorImVoxelNeck']
7 |
--------------------------------------------------------------------------------
/mmdet3d/models/roi_heads/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .base_3droi_head import Base3DRoIHead
3 | from .bbox_heads import PartA2BboxHead
4 | from .h3d_roi_head import H3DRoIHead
5 | from .mask_heads import PointwiseSemanticHead, PrimitiveHead
6 | from .part_aggregation_roi_head import PartAggregationROIHead
7 | from .roi_extractors import Single3DRoIAwareExtractor, SingleRoIExtractor
8 |
9 | __all__ = [
10 | 'Base3DRoIHead', 'PartAggregationROIHead', 'PointwiseSemanticHead',
11 | 'Single3DRoIAwareExtractor', 'PartA2BboxHead', 'SingleRoIExtractor',
12 | 'H3DRoIHead', 'PrimitiveHead',
13 | ]
14 |
--------------------------------------------------------------------------------
/mmdet3d/models/roi_heads/bbox_heads/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.roi_heads.bbox_heads import (BBoxHead, ConvFCBBoxHead,
3 | DoubleConvFCBBoxHead,
4 | Shared2FCBBoxHead,
5 | Shared4Conv1FCBBoxHead)
6 | from .h3d_bbox_head import H3DBboxHead
7 | from .parta2_bbox_head import PartA2BboxHead
8 |
9 | __all__ = [
10 | 'BBoxHead', 'ConvFCBBoxHead', 'Shared2FCBBoxHead',
11 | 'Shared4Conv1FCBBoxHead', 'DoubleConvFCBBoxHead', 'PartA2BboxHead',
12 | 'H3DBboxHead'
13 | ]
14 |
--------------------------------------------------------------------------------
/mmdet3d/models/roi_heads/mask_heads/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .pointwise_semantic_head import PointwiseSemanticHead
3 | from .primitive_head import PrimitiveHead
4 |
5 | __all__ = ['PointwiseSemanticHead', 'PrimitiveHead']
6 |
--------------------------------------------------------------------------------
/mmdet3d/models/roi_heads/roi_extractors/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmdet.models.roi_heads.roi_extractors import SingleRoIExtractor
3 | from .single_roiaware_extractor import Single3DRoIAwareExtractor
4 |
5 | __all__ = ['SingleRoIExtractor', 'Single3DRoIAwareExtractor']
6 |
--------------------------------------------------------------------------------
/mmdet3d/models/segmentors/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .base import Base3DSegmentor
3 | from .encoder_decoder import EncoderDecoder3D
4 |
5 | __all__ = ['Base3DSegmentor', 'EncoderDecoder3D']
6 |
--------------------------------------------------------------------------------
/mmdet3d/models/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .clip_sigmoid import clip_sigmoid
3 | from .mlp import MLP
4 |
5 | __all__ = ['clip_sigmoid', 'MLP']
6 |
--------------------------------------------------------------------------------
/mmdet3d/models/utils/clip_sigmoid.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | import torch
3 |
4 |
5 | def clip_sigmoid(x, eps=1e-4):
6 | """Sigmoid function for input feature.
7 |
8 | Args:
9 | x (torch.Tensor): Input feature map with the shape of [B, N, H, W].
10 | eps (float): Lower bound of the range to be clamped to. Defaults
11 | to 1e-4.
12 |
13 | Returns:
14 | torch.Tensor: Feature map after sigmoid.
15 | """
16 | y = torch.clamp(x.sigmoid_(), min=eps, max=1 - eps)
17 | return y
18 |
--------------------------------------------------------------------------------
/mmdet3d/models/voxel_encoders/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .pillar_encoder import PillarFeatureNet
3 | from .voxel_encoder import DynamicSimpleVFE, DynamicVFE, HardSimpleVFE, HardVFE
4 |
5 | __all__ = [
6 | 'PillarFeatureNet', 'HardVFE', 'DynamicVFE', 'HardSimpleVFE',
7 | 'DynamicSimpleVFE'
8 | ]
9 |
--------------------------------------------------------------------------------
/mmdet3d/ops/ball_query/__init__.py:
--------------------------------------------------------------------------------
1 | from .ball_query import ball_query
2 |
3 | __all__ = ['ball_query']
4 |
--------------------------------------------------------------------------------
/mmdet3d/ops/ball_query/ball_query.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch.autograd import Function
3 |
4 | from . import ball_query_ext
5 |
6 |
7 | class BallQuery(Function):
8 | """Ball Query.
9 |
10 | Find nearby points in spherical space.
11 | """
12 |
13 | @staticmethod
14 | def forward(ctx, min_radius: float, max_radius: float, sample_num: int,
15 | xyz: torch.Tensor, center_xyz: torch.Tensor) -> torch.Tensor:
16 | """forward.
17 |
18 | Args:
19 | min_radius (float): minimum radius of the balls.
20 | max_radius (float): maximum radius of the balls.
21 | sample_num (int): maximum number of features in the balls.
22 | xyz (Tensor): (B, N, 3) xyz coordinates of the features.
23 | center_xyz (Tensor): (B, npoint, 3) centers of the ball query.
24 |
25 | Returns:
26 | Tensor: (B, npoint, nsample) tensor with the indicies of
27 | the features that form the query balls.
28 | """
29 | assert center_xyz.is_contiguous()
30 | assert xyz.is_contiguous()
31 | assert min_radius < max_radius
32 |
33 | # selected samples are not sorted based on the distance
34 | # larger center-xyz can better benifits from GPU
35 | B, N, _ = xyz.size()
36 | npoint = center_xyz.size(1)
37 | idx = torch.cuda.IntTensor(B, npoint, sample_num).zero_()
38 |
39 | ball_query_ext.ball_query_wrapper(B, N, npoint, min_radius, max_radius,
40 | sample_num, center_xyz, xyz, idx)
41 | ctx.mark_non_differentiable(idx)
42 | return idx
43 |
44 | @staticmethod
45 | def backward(ctx, a=None):
46 | return None, None, None, None
47 |
48 |
49 | ball_query = BallQuery.apply
50 |
--------------------------------------------------------------------------------
/mmdet3d/ops/furthest_point_sample/__init__.py:
--------------------------------------------------------------------------------
1 | from .furthest_point_sample import (furthest_point_sample,
2 | furthest_point_sample_with_dist)
3 | from .points_sampler import Points_Sampler
4 |
5 | __all__ = [
6 | 'furthest_point_sample', 'furthest_point_sample_with_dist',
7 | 'Points_Sampler'
8 | ]
9 |
--------------------------------------------------------------------------------
/mmdet3d/ops/furthest_point_sample/utils.py:
--------------------------------------------------------------------------------
1 | import torch
2 |
3 |
4 | def calc_square_dist(point_feat_a, point_feat_b, norm=True):
5 | """Calculating square distance between a and b.
6 |
7 | Args:
8 | point_feat_a (Tensor): (B, N, C) Feature vector of each point.
9 | point_feat_b (Tensor): (B, M, C) Feature vector of each point.
10 | norm (Bool): Whether to normalize the distance.
11 | Default: True.
12 |
13 | Returns:
14 | Tensor: (B, N, M) Distance between each pair points.
15 | """
16 | length_a = point_feat_a.shape[1]
17 | length_b = point_feat_b.shape[1]
18 | num_channel = point_feat_a.shape[-1]
19 | # [bs, n, 1]
20 | a_square = torch.sum(point_feat_a.unsqueeze(dim=2).pow(2), dim=-1)
21 | # [bs, 1, m]
22 | b_square = torch.sum(point_feat_b.unsqueeze(dim=1).pow(2), dim=-1)
23 | a_square = a_square.repeat((1, 1, length_b)) # [bs, n, m]
24 | b_square = b_square.repeat((1, length_a, 1)) # [bs, n, m]
25 |
26 | coor = torch.matmul(point_feat_a, point_feat_b.transpose(1, 2))
27 |
28 | dist = a_square + b_square - 2 * coor
29 | if norm:
30 | dist = torch.sqrt(dist) / num_channel
31 | return dist
32 |
--------------------------------------------------------------------------------
/mmdet3d/ops/gather_points/__init__.py:
--------------------------------------------------------------------------------
1 | from .gather_points import gather_points
2 |
3 | __all__ = ['gather_points']
4 |
--------------------------------------------------------------------------------
/mmdet3d/ops/gather_points/gather_points.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch.autograd import Function
3 |
4 | from . import gather_points_ext
5 |
6 |
7 | class GatherPoints(Function):
8 | """Gather Points.
9 |
10 | Gather points with given index.
11 | """
12 |
13 | @staticmethod
14 | def forward(ctx, features: torch.Tensor,
15 | indices: torch.Tensor) -> torch.Tensor:
16 | """forward.
17 |
18 | Args:
19 | features (Tensor): (B, C, N) features to gather.
20 | indices (Tensor): (B, M) where M is the number of points.
21 |
22 | Returns:
23 | Tensor: (B, C, M) where M is the number of points.
24 | """
25 | assert features.is_contiguous()
26 | assert indices.is_contiguous()
27 |
28 | B, npoint = indices.size()
29 | _, C, N = features.size()
30 | output = torch.cuda.FloatTensor(B, C, npoint)
31 |
32 | gather_points_ext.gather_points_wrapper(B, C, N, npoint, features,
33 | indices, output)
34 |
35 | ctx.for_backwards = (indices, C, N)
36 | ctx.mark_non_differentiable(indices)
37 | return output
38 |
39 | @staticmethod
40 | def backward(ctx, grad_out):
41 | idx, C, N = ctx.for_backwards
42 | B, npoint = idx.size()
43 |
44 | grad_features = torch.cuda.FloatTensor(B, C, N).zero_()
45 | grad_out_data = grad_out.data.contiguous()
46 | gather_points_ext.gather_points_grad_wrapper(B, C, N, npoint,
47 | grad_out_data, idx,
48 | grad_features.data)
49 | return grad_features, None
50 |
51 |
52 | gather_points = GatherPoints.apply
53 |
--------------------------------------------------------------------------------
/mmdet3d/ops/group_points/__init__.py:
--------------------------------------------------------------------------------
1 | from .group_points import GroupAll, QueryAndGroup, grouping_operation
2 |
3 | __all__ = ['QueryAndGroup', 'GroupAll', 'grouping_operation']
4 |
--------------------------------------------------------------------------------
/mmdet3d/ops/interpolate/__init__.py:
--------------------------------------------------------------------------------
1 | from .three_interpolate import three_interpolate
2 | from .three_nn import three_nn
3 |
4 | __all__ = ['three_nn', 'three_interpolate']
5 |
--------------------------------------------------------------------------------
/mmdet3d/ops/interpolate/three_nn.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch.autograd import Function
3 | from typing import Tuple
4 |
5 | from . import interpolate_ext
6 |
7 |
8 | class ThreeNN(Function):
9 |
10 | @staticmethod
11 | def forward(ctx, target: torch.Tensor,
12 | source: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
13 | """Find the top-3 nearest neighbors of the target set from the source
14 | set.
15 |
16 | Args:
17 | target (Tensor): shape (B, N, 3), points set that needs to
18 | find the nearest neighbors.
19 | source (Tensor): shape (B, M, 3), points set that is used
20 | to find the nearest neighbors of points in target set.
21 |
22 | Returns:
23 | Tensor: shape (B, N, 3), L2 distance of each point in target
24 | set to their corresponding nearest neighbors.
25 | """
26 | assert target.is_contiguous()
27 | assert source.is_contiguous()
28 |
29 | B, N, _ = target.size()
30 | m = source.size(1)
31 | dist2 = torch.cuda.FloatTensor(B, N, 3)
32 | idx = torch.cuda.IntTensor(B, N, 3)
33 |
34 | interpolate_ext.three_nn_wrapper(B, N, m, target, source, dist2, idx)
35 |
36 | ctx.mark_non_differentiable(idx)
37 |
38 | return torch.sqrt(dist2), idx
39 |
40 | @staticmethod
41 | def backward(ctx, a=None, b=None):
42 | return None, None
43 |
44 |
45 | three_nn = ThreeNN.apply
46 |
--------------------------------------------------------------------------------
/mmdet3d/ops/iou3d/__init__.py:
--------------------------------------------------------------------------------
1 | from .iou3d_utils import boxes_iou_bev, nms_gpu, nms_normal_gpu
2 |
3 | __all__ = ['boxes_iou_bev', 'nms_gpu', 'nms_normal_gpu']
4 |
--------------------------------------------------------------------------------
/mmdet3d/ops/knn/__init__.py:
--------------------------------------------------------------------------------
1 | from .knn import knn
2 |
3 | __all__ = ['knn']
4 |
--------------------------------------------------------------------------------
/mmdet3d/ops/knn/src/knn.cpp:
--------------------------------------------------------------------------------
1 | // Modified from https://github.com/CVMI-Lab/PAConv/tree/main/scene_seg/lib/pointops/src/knnquery_heap
2 |
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | extern THCState *state;
10 |
11 | #define CHECK_CUDA(x) TORCH_CHECK(x.is_cuda(), #x, " must be a CUDAtensor ")
12 | #define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x, " must be contiguous ")
13 | #define CHECK_INPUT(x) CHECK_CUDA(x);CHECK_CONTIGUOUS(x)
14 |
15 |
16 | void knn_kernel_launcher(
17 | int b,
18 | int n,
19 | int m,
20 | int nsample,
21 | const float *xyz,
22 | const float *new_xyz,
23 | int *idx,
24 | float *dist2,
25 | cudaStream_t stream
26 | );
27 |
28 | void knn_wrapper(int b, int n, int m, int nsample, at::Tensor xyz_tensor, at::Tensor new_xyz_tensor, at::Tensor idx_tensor, at::Tensor dist2_tensor)
29 | {
30 | CHECK_INPUT(new_xyz_tensor);
31 | CHECK_INPUT(xyz_tensor);
32 |
33 | const float *new_xyz = new_xyz_tensor.data_ptr();
34 | const float *xyz = xyz_tensor.data_ptr();
35 | int *idx = idx_tensor.data_ptr();
36 | float *dist2 = dist2_tensor.data_ptr();
37 |
38 | cudaStream_t stream = at::cuda::getCurrentCUDAStream();
39 |
40 | knn_kernel_launcher(b, n, m, nsample, xyz, new_xyz, idx, dist2, stream);
41 | }
42 |
43 |
44 | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
45 | m.def("knn_wrapper", &knn_wrapper, "knn_wrapper");
46 | }
47 |
--------------------------------------------------------------------------------
/mmdet3d/ops/paconv/__init__.py:
--------------------------------------------------------------------------------
1 | from .assign_score import assign_score_withk
2 | from .paconv import PAConv, PAConvCUDA
3 |
4 | __all__ = ['assign_score_withk', 'PAConv', 'PAConvCUDA']
5 |
--------------------------------------------------------------------------------
/mmdet3d/ops/paconv/src/assign_score_withk.cpp:
--------------------------------------------------------------------------------
1 | // Modified from https://github.com/CVMI-Lab/PAConv/tree/main/scene_seg/lib/paconv_lib/src/gpu
2 |
3 | #include
4 | #include
5 |
6 | void assign_score_withk_forward_wrapper(
7 | int B, int N0, int N1, int M,
8 | int K, int O, int aggregate,
9 | const at::Tensor& points,
10 | const at::Tensor& centers,
11 | const at::Tensor& scores,
12 | const at::Tensor& knn_idx,
13 | at::Tensor& output
14 | );
15 |
16 | void assign_score_withk_backward_wrapper(
17 | int B, int N0, int N1, int M,
18 | int K, int O, int aggregate,
19 | const at::Tensor& grad_out,
20 | const at::Tensor& points,
21 | const at::Tensor& centers,
22 | const at::Tensor& scores,
23 | const at::Tensor& knn_idx,
24 | at::Tensor& grad_points,
25 | at::Tensor& grad_centers,
26 | at::Tensor& grad_scores
27 | );
28 |
29 | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
30 | m.def("assign_score_withk_forward_wrapper",
31 | &assign_score_withk_forward_wrapper,
32 | "Assign score kernel forward (GPU), save memory version");
33 | m.def("assign_score_withk_backward_wrapper",
34 | &assign_score_withk_backward_wrapper,
35 | "Assign score kernel backward (GPU), save memory version");
36 | }
37 |
--------------------------------------------------------------------------------
/mmdet3d/ops/pointnet_modules/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from .builder import build_sa_module
3 | from .paconv_sa_module import (PAConvCUDASAModule, PAConvCUDASAModuleMSG,
4 | PAConvSAModule, PAConvSAModuleMSG)
5 | from .point_fp_module import PointFPModule
6 | from .point_sa_module import PointSAModule, PointSAModuleMSG
7 | from .point_fp_modulev2 import PointFPModulev2
8 |
9 | __all__ = [
10 | 'build_sa_module', 'PointSAModuleMSG', 'PointSAModule', 'PointFPModule',
11 | 'PAConvSAModule', 'PAConvSAModuleMSG', 'PAConvCUDASAModule',
12 | 'PAConvCUDASAModuleMSG', 'PointFPModulev2',
13 | ]
14 |
--------------------------------------------------------------------------------
/mmdet3d/ops/pointnet_modules/builder.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmcv.utils import Registry
3 |
4 | SA_MODULES = Registry('point_sa_module')
5 |
6 |
7 | def build_sa_module(cfg, *args, **kwargs):
8 | """Build PointNet2 set abstraction (SA) module.
9 |
10 | Args:
11 | cfg (None or dict): The SA module config, which should contain:
12 | - type (str): Module type.
13 | - module args: Args needed to instantiate an SA module.
14 | args (argument list): Arguments passed to the `__init__`
15 | method of the corresponding module.
16 | kwargs (keyword arguments): Keyword arguments passed to the `__init__`
17 | method of the corresponding SA module .
18 |
19 | Returns:
20 | nn.Module: Created SA module.
21 | """
22 | if cfg is None:
23 | cfg_ = dict(type='PointSAModule')
24 | else:
25 | if not isinstance(cfg, dict):
26 | raise TypeError('cfg must be a dict')
27 | if 'type' not in cfg:
28 | raise KeyError('the cfg dict must contain the key "type"')
29 | cfg_ = cfg.copy()
30 |
31 | module_type = cfg_.pop('type')
32 | if module_type not in SA_MODULES:
33 | raise KeyError(f'Unrecognized module type {module_type}')
34 | else:
35 | sa_module = SA_MODULES.get(module_type)
36 |
37 | module = sa_module(*args, **kwargs, **cfg_)
38 |
39 | return module
40 |
--------------------------------------------------------------------------------
/mmdet3d/ops/roiaware_pool3d/__init__.py:
--------------------------------------------------------------------------------
1 | from .points_in_boxes import (points_in_boxes_batch, points_in_boxes_cpu,
2 | points_in_boxes_gpu)
3 | from .roiaware_pool3d import RoIAwarePool3d
4 |
5 | __all__ = [
6 | 'RoIAwarePool3d', 'points_in_boxes_gpu', 'points_in_boxes_cpu',
7 | 'points_in_boxes_batch'
8 | ]
9 |
--------------------------------------------------------------------------------
/mmdet3d/ops/spconv/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2019 Yan Yan
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | from .conv import (SparseConv2d, SparseConv3d, SparseConvTranspose2d,
16 | SparseConvTranspose3d, SparseInverseConv2d,
17 | SparseInverseConv3d, SubMConv2d, SubMConv3d)
18 | from .modules import SparseModule, SparseSequential
19 | from .pool import SparseMaxPool2d, SparseMaxPool3d
20 | from .structure import SparseConvTensor, scatter_nd
21 |
22 | __all__ = [
23 | 'SparseConv2d',
24 | 'SparseConv3d',
25 | 'SubMConv2d',
26 | 'SubMConv3d',
27 | 'SparseConvTranspose2d',
28 | 'SparseConvTranspose3d',
29 | 'SparseInverseConv2d',
30 | 'SparseInverseConv3d',
31 | 'SparseModule',
32 | 'SparseSequential',
33 | 'SparseMaxPool2d',
34 | 'SparseMaxPool3d',
35 | 'SparseConvTensor',
36 | 'scatter_nd',
37 | ]
38 |
--------------------------------------------------------------------------------
/mmdet3d/ops/spconv/include/spconv/maxpool.h:
--------------------------------------------------------------------------------
1 | // Copyright 2019 Yan Yan
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef SPARSE_MAXPOOL_FUNCTOR_H_
16 | #define SPARSE_MAXPOOL_FUNCTOR_H_
17 | #include
18 |
19 | namespace spconv {
20 | namespace functor {
21 | template
22 | struct SparseMaxPoolForwardFunctor {
23 | void operator()(const Device& d, tv::TensorView outFeatures,
24 | tv::TensorView inFeatures,
25 | tv::TensorView indices, int size);
26 | };
27 |
28 | template
29 | struct SparseMaxPoolBackwardFunctor {
30 | void operator()(const Device& d, tv::TensorView outFeatures,
31 | tv::TensorView inFeatures,
32 | tv::TensorView dout, tv::TensorView din,
33 | tv::TensorView indices, int size);
34 | };
35 |
36 | } // namespace functor
37 | } // namespace spconv
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/mmdet3d/ops/spconv/include/spconv/mp_helper.h:
--------------------------------------------------------------------------------
1 | #ifndef MP_HELPER_H_
2 | #define MP_HELPER_H_
3 | #include
4 | #include
5 |
6 | namespace spconv {
7 | template
8 | struct mp_list {};
9 |
10 | template
11 | using mp_list_c = mp_list...>;
12 |
13 | namespace detail {
14 |
15 | template
16 | constexpr F mp_for_each_impl(mp_list, F &&f) {
17 | return std::initializer_list{(f(T()), 0)...}, std::forward(f);
18 | }
19 |
20 | template
21 | constexpr F mp_for_each_impl(mp_list<>, F &&f) {
22 | return std::forward(f);
23 | }
24 |
25 | } // namespace detail
26 |
27 | namespace detail {
28 |
29 | template class B>
30 | struct mp_rename_impl {
31 | // An error "no type named 'type'" here means that the first argument to
32 | // mp_rename is not a list
33 | };
34 |
35 | template class A, class... T, template class B>
36 | struct mp_rename_impl, B> {
37 | using type = B;
38 | };
39 |
40 | } // namespace detail
41 |
42 | template class B>
43 | using mp_rename = typename detail::mp_rename_impl::type;
44 |
45 | template
46 | constexpr F mp_for_each(F &&f) {
47 | return detail::mp_for_each_impl(mp_rename(), std::forward(f));
48 | }
49 | } // namespace spconv
50 |
51 | #endif
52 |
--------------------------------------------------------------------------------
/mmdet3d/ops/spconv/include/spconv/reordering.h:
--------------------------------------------------------------------------------
1 | // Copyright 2019 Yan Yan
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // http://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef SPARSE_REORDERING_FUNCTOR_H_
16 | #define SPARSE_REORDERING_FUNCTOR_H_
17 | #include
18 |
19 | namespace spconv {
20 | namespace functor {
21 | template
22 | struct SparseGatherFunctor {
23 | void operator()(const Device& d, tv::TensorView buffer,
24 | tv::TensorView features,
25 | tv::TensorView indices, int size);
26 | };
27 |
28 | template
29 | struct SparseScatterAddFunctor {
30 | void operator()(const Device& d, tv::TensorView out_features,
31 | tv::TensorView buffer,
32 | tv::TensorView indices, int size,
33 | bool stable = false);
34 | };
35 | } // namespace functor
36 | } // namespace spconv
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/mmdet3d/ops/spconv/include/tensorview/helper_launch.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | // from pytorch.aten
3 | #include "tensorview.h"
4 | namespace tv
5 | {
6 | namespace launch
7 | {
8 |
9 | template
10 | inline int DivUp(const T1 a, const T2 b) { return (a + b - 1) / b; }
11 |
12 | // Use 1024 threads per block, which requires cuda sm_2x or above
13 | constexpr int CUDA_NUM_THREADS = 1024;
14 | // CUDA: number of blocks for threads.
15 | inline int getBlocks(const int N)
16 | {
17 | TV_ASSERT_RT_ERR(N > 0, "CUDA kernel launch blocks must be positive, but got N=", N);
18 | return DivUp(N, CUDA_NUM_THREADS);
19 | }
20 | } // namespace launch
21 | } // namespace tv
22 |
--------------------------------------------------------------------------------
/mmdet3d/ops/voxel/__init__.py:
--------------------------------------------------------------------------------
1 | from .scatter_points import DynamicScatter, dynamic_scatter
2 | from .voxelize import Voxelization, voxelization
3 |
4 | __all__ = ['Voxelization', 'voxelization', 'dynamic_scatter', 'DynamicScatter']
5 |
--------------------------------------------------------------------------------
/mmdet3d/ops/voxel/src/voxelization.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include "voxelization.h"
3 |
4 | namespace voxelization {
5 |
6 | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
7 | m.def("hard_voxelize", &hard_voxelize, "hard voxelize");
8 | m.def("dynamic_voxelize", &dynamic_voxelize, "dynamic voxelization");
9 | m.def("dynamic_point_to_voxel_forward", &dynamic_point_to_voxel_forward, "dynamic point to voxel forward");
10 | m.def("dynamic_point_to_voxel_backward", &dynamic_point_to_voxel_backward, "dynamic point to voxel backward");
11 | }
12 |
13 | } // namespace voxelization
14 |
--------------------------------------------------------------------------------
/mmdet3d/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmcv.utils import Registry, build_from_cfg, print_log
3 |
4 | from .collect_env import collect_env
5 | from .logger import get_root_logger
6 |
7 | __all__ = [
8 | 'Registry', 'build_from_cfg', 'get_root_logger', 'collect_env', 'print_log'
9 | ]
10 |
--------------------------------------------------------------------------------
/mmdet3d/utils/collect_env.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | from mmcv.utils import collect_env as collect_base_env
3 | from mmcv.utils import get_git_hash
4 |
5 | import mmdet
6 | import mmdet3d
7 | import mmseg
8 |
9 |
10 | def collect_env():
11 | """Collect the information of the running environments."""
12 | env_info = collect_base_env()
13 | env_info['MMDetection'] = mmdet.__version__
14 | env_info['MMSegmentation'] = mmseg.__version__
15 | env_info['MMDetection3D'] = mmdet3d.__version__ + '+' + get_git_hash()[:7]
16 |
17 | return env_info
18 |
19 |
20 | if __name__ == '__main__':
21 | for name, val in collect_env().items():
22 | print(f'{name}: {val}')
23 |
--------------------------------------------------------------------------------
/mmdet3d/utils/logger.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) OpenMMLab. All rights reserved.
2 | import logging
3 | from mmcv.utils import get_logger
4 |
5 |
6 | def get_root_logger(log_file=None, log_level=logging.INFO, name='mmdet3d'):
7 | """Get root logger and add a keyword filter to it.
8 |
9 | The logger will be initialized if it has not been initialized. By default a
10 | StreamHandler will be added. If `log_file` is specified, a FileHandler will
11 | also be added. The name of the root logger is the top-level package name,
12 | e.g., "mmdet3d".
13 |
14 | Args:
15 | log_file (str, optional): File path of log. Defaults to None.
16 | log_level (int, optional): The level of logger.
17 | Defaults to logging.INFO.
18 | name (str, optional): The name of the root logger, also used as a
19 | filter keyword. Defaults to 'mmdet3d'.
20 |
21 | Returns:
22 | :obj:`logging.Logger`: The obtained logger
23 | """
24 | logger = get_logger(name=name, log_file=log_file, log_level=log_level)
25 |
26 | # add a logging filter
27 | logging_filter = logging.Filter(name)
28 | logging_filter.filter = lambda record: record.find(name) != -1
29 |
30 | return logger
31 |
--------------------------------------------------------------------------------
/mmdet3d/version.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) Open-MMLab. All rights reserved.
2 |
3 | __version__ = '0.17.2'
4 | short_version = __version__
5 |
6 |
7 | def parse_version_info(version_str):
8 | version_info = []
9 | for x in version_str.split('.'):
10 | if x.isdigit():
11 | version_info.append(int(x))
12 | elif x.find('rc') != -1:
13 | patch_version = x.split('rc')
14 | version_info.append(int(patch_version[0]))
15 | version_info.append(f'rc{patch_version[1]}')
16 | return tuple(version_info)
17 |
18 |
19 | version_info = parse_version_info(__version__)
20 |
--------------------------------------------------------------------------------
/model-index.yml:
--------------------------------------------------------------------------------
1 | Import:
2 | - configs/3dssd/metafile.yml
3 | - configs/centerpoint/metafile.yml
4 | - configs/dynamic_voxelization/metafile.yml
5 | - configs/fp16/metafile.yml
6 | - configs/free_anchor/metafile.yml
7 | - configs/h3dnet/metafile.yml
8 | - configs/imvotenet/metafile.yml
9 | - configs/mvxnet/metafile.yml
10 | - configs/nuimages/metafile.yml
11 | - configs/parta2/metafile.yml
12 | - configs/pointnet2/metafile.yml
13 | - configs/pointpillars/metafile.yml
14 | - configs/regnet/metafile.yml
15 | - configs/second/metafile.yml
16 | - configs/ssn/metafile.yml
17 | - configs/votenet/metafile.yml
18 | - configs/fcos3d/metafile.yml
19 | - configs/imvoxelnet/metafile.yml
20 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements/build.txt
2 | -r requirements/optional.txt
3 | -r requirements/runtime.txt
4 | -r requirements/tests.txt
5 |
--------------------------------------------------------------------------------
/requirements/build.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/requirements/build.txt
--------------------------------------------------------------------------------
/requirements/docs.txt:
--------------------------------------------------------------------------------
1 | docutils==0.16.0
2 | m2r
3 | myst-parser
4 | opencv-python
5 | -e git+https://github.com/open-mmlab/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme
6 | sphinx==4.0.2
7 | sphinx-copybutton
8 | sphinx_markdown_tables
9 | torch
10 |
--------------------------------------------------------------------------------
/requirements/mminstall.txt:
--------------------------------------------------------------------------------
1 | mmcv-full>=1.3.8,<=1.4.0
2 | mmdet>=2.14.0,<=3.0.0
3 | mmsegmentation>=0.14.1,<=1.0.0
4 |
--------------------------------------------------------------------------------
/requirements/optional.txt:
--------------------------------------------------------------------------------
1 | open3d
2 | waymo-open-dataset-tf-2-1-0==1.2.0
3 |
--------------------------------------------------------------------------------
/requirements/readthedocs.txt:
--------------------------------------------------------------------------------
1 | mmcv
2 | torch
3 | torchvision
4 |
--------------------------------------------------------------------------------
/requirements/runtime.txt:
--------------------------------------------------------------------------------
1 | lyft_dataset_sdk
2 | networkx>=2.2,<2.3
3 | # we may unlock the verion of numba in the future
4 | numba==0.48.0
5 | numpy<1.20.0
6 | nuscenes-devkit
7 | plyfile
8 | scikit-image
9 | # by default we also use tensorboard to log results
10 | tensorboard
11 | trimesh>=2.35.39,<2.35.40
12 |
--------------------------------------------------------------------------------
/requirements/tests.txt:
--------------------------------------------------------------------------------
1 | asynctest
2 | codecov
3 | flake8
4 | interrogate
5 | isort
6 | # Note: used for kwarray.group_items, this may be ported to mmcv in the future.
7 | kwarray
8 | pytest
9 | pytest-cov
10 | pytest-runner
11 | ubelt
12 | xdoctest >= 0.10.0
13 | yapf
14 |
--------------------------------------------------------------------------------
/resources/browse_dataset_mono.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/browse_dataset_mono.png
--------------------------------------------------------------------------------
/resources/browse_dataset_multi_modality.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/browse_dataset_multi_modality.png
--------------------------------------------------------------------------------
/resources/browse_dataset_seg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/browse_dataset_seg.png
--------------------------------------------------------------------------------
/resources/data_pipeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/data_pipeline.png
--------------------------------------------------------------------------------
/resources/loss_curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/loss_curve.png
--------------------------------------------------------------------------------
/resources/mmdet3d-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/mmdet3d-logo.png
--------------------------------------------------------------------------------
/resources/mmdet3d_outdoor_demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/mmdet3d_outdoor_demo.gif
--------------------------------------------------------------------------------
/resources/nuimages_demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/nuimages_demo.gif
--------------------------------------------------------------------------------
/resources/open3d_visual.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/open3d_visual.gif
--------------------------------------------------------------------------------
/resources/qq_group_qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/qq_group_qrcode.png
--------------------------------------------------------------------------------
/resources/zhihu_qrcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/resources/zhihu_qrcode.jpg
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | [yapf]
2 | BASED_ON_STYLE = pep8
3 | BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true
4 | SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true
5 |
6 | [isort]
7 | line_length = 79
8 | multi_line_output = 0
9 | known_standard_library = setuptools
10 | known_first_party = mmdet,mmseg,mmdet3d
11 | known_third_party = cv2,imageio,indoor3d_util,load_scannet_data,lyft_dataset_sdk,m2r,matplotlib,mmcv,nuimages,numba,numpy,nuscenes,pandas,plyfile,pycocotools,pyquaternion,pytest,pytorch_sphinx_theme,recommonmark,scannet_utils,scipy,seaborn,shapely,skimage,tensorflow,terminaltables,torch,trimesh,waymo_open_dataset
12 | no_lines_before = STDLIB,LOCALFOLDER
13 | default_section = THIRDPARTY
14 |
--------------------------------------------------------------------------------
/tests/data/kitti/a.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/a.bin
--------------------------------------------------------------------------------
/tests/data/kitti/kitti_dbinfos_train.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/kitti_dbinfos_train.pkl
--------------------------------------------------------------------------------
/tests/data/kitti/kitti_gt_database/0_Pedestrian_0.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/kitti_gt_database/0_Pedestrian_0.bin
--------------------------------------------------------------------------------
/tests/data/kitti/kitti_infos_mono3d.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/kitti_infos_mono3d.pkl
--------------------------------------------------------------------------------
/tests/data/kitti/kitti_infos_train.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/kitti_infos_train.pkl
--------------------------------------------------------------------------------
/tests/data/kitti/mono3d_sample_results.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/mono3d_sample_results.pkl
--------------------------------------------------------------------------------
/tests/data/kitti/mono3d_sample_results2d.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/mono3d_sample_results2d.pkl
--------------------------------------------------------------------------------
/tests/data/kitti/training/image_2/000000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/training/image_2/000000.png
--------------------------------------------------------------------------------
/tests/data/kitti/training/image_2/000007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/training/image_2/000007.png
--------------------------------------------------------------------------------
/tests/data/kitti/training/velodyne/000000.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/training/velodyne/000000.bin
--------------------------------------------------------------------------------
/tests/data/kitti/training/velodyne_reduced/000000.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/kitti/training/velodyne_reduced/000000.bin
--------------------------------------------------------------------------------
/tests/data/lyft/lidar/host-a017_lidar1_1236118886501000046.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/lidar/host-a017_lidar1_1236118886501000046.bin
--------------------------------------------------------------------------------
/tests/data/lyft/lidar/host-a017_lidar1_1236118886701083686.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/lidar/host-a017_lidar1_1236118886701083686.bin
--------------------------------------------------------------------------------
/tests/data/lyft/lidar/host-a017_lidar1_1236118886901125926.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/lidar/host-a017_lidar1_1236118886901125926.bin
--------------------------------------------------------------------------------
/tests/data/lyft/lyft_infos.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/lyft_infos.pkl
--------------------------------------------------------------------------------
/tests/data/lyft/lyft_infos_val.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/lyft_infos_val.pkl
--------------------------------------------------------------------------------
/tests/data/lyft/sample_results.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/sample_results.pkl
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/maps/map_raster_palo_alto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/lyft/v1.01-train/maps/map_raster_palo_alto.png
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/category.json:
--------------------------------------------------------------------------------
1 | [{"description": "", "token": "8eccddb83fa7f8f992b2500f2ad658f65c9095588f3bc0ae338d97aff2dbcb9c", "name": "car"}, {"description": "", "token": "73e8de69959eb9f5b4cd2859e74bec4b5491417336cad63f27e8edb8530ffbf8", "name": "pedestrian"}, {"description": "", "token": "f81f51e1897311b55c0c6247c3db825466733e08df687c0ea830b026316a1c12", "name": "animal"}, {"description": "", "token": "a8619a81f5acc7da2a2f034420db2b2f43a015c8c689822e5295b5d6f7a5d8d6", "name": "other_vehicle"}, {"description": "", "token": "7ea5868735dc408109bfa74fd139bd8c5aa3767b52e054b8e792cabcf309c6f4", "name": "bus"}, {"description": "", "token": "1248d937c7a1a2eb1022ba9e806ebd5183b6c20c7f5703d8a7320600f1caad27", "name": "motorcycle"}, {"description": "", "token": "8af78d27e148a8f544f4c86b2a3f4bd6192b975d1065dd932ebdb8879778e275", "name": "truck"}, {"token": "c4e92c2b854fb03382838643c36d01a349f5624a11f184042d91d916d19acdbd", "description": "", "name": "emergency_vehicle"}, {"description": "", "token": "8c07dfa7af0da0191d59a2db50dc26ad1528be1fad483f17e2586309482d81bd", "name": "bicycle"}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/instance.json:
--------------------------------------------------------------------------------
1 | [{"last_annotation_token": "3cffa3d43e4f0c5b46839b849f2f346b12cc91c8b63b5ce6a86cb666fc7ebe95", "category_token": "8eccddb83fa7f8f992b2500f2ad658f65c9095588f3bc0ae338d97aff2dbcb9c", "token": "d0c8471d3d3d7743101948261a6f380127926d56a45efaca60feb46eef9554f2", "first_annotation_token": "12b93cc7454a2f23ab8b4f1835a81861f241fddd73df2328100cdb68d7a039f6", "nbr_annotations": 103}, {"last_annotation_token": "99a594f9c82a5c5931d80aaa9ae4328e45220a8159a5c5aa1f7fb8e7edda181e", "category_token": "8eccddb83fa7f8f992b2500f2ad658f65c9095588f3bc0ae338d97aff2dbcb9c", "token": "8ea7e34e19c0c4f798c4635618e40abdb45a1f3eed35e6027be2e3db6a58a3aa", "first_annotation_token": "64060c717ab2a6ed28f2b048c6e8c3c6cde99b8436e58bffbd68586c10e177bd", "nbr_annotations": 125}, {"last_annotation_token": "ab63547070c539d13d091f25989b4bab80e1b03557091f3f5d2b8e5ec833f35f", "category_token": "8eccddb83fa7f8f992b2500f2ad658f65c9095588f3bc0ae338d97aff2dbcb9c", "token": "99dbde4395408209738538a4a6a04d7c67824ce454a858057c29ddc4330c09a2", "first_annotation_token": "b045969b0899b9393f0200f1d8e0a5f39d01295c11479ce4766f08d3f70d6340", "nbr_annotations": 126}, {"last_annotation_token": "8c1f56554f4ffb696feaad773b3e11918229db5c46d698c381796e710912784a", "category_token": "8eccddb83fa7f8f992b2500f2ad658f65c9095588f3bc0ae338d97aff2dbcb9c", "token": "9a0abe5b2b13aad45262f06461914db4484e34d4df889872a389212bc404b9c3", "first_annotation_token": "073e78c06d592651bdc2e0a8f27510ed497cd2956639e79b2569fad4b7ece280", "nbr_annotations": 126}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/log.json:
--------------------------------------------------------------------------------
1 | [{"date_captured": "2019-05-01", "location": "Palo Alto", "token": "9d0166ccd4af9c089738587f6e3d21cd9c8b6102787427da8c3b4f64161160c5", "vehicle": "a101", "logfile": ""}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/map.json:
--------------------------------------------------------------------------------
1 | [{"log_tokens": ["9d0166ccd4af9c089738587f6e3d21cd9c8b6102787427da8c3b4f64161160c5"], "token": "53992ee3023e5494b90c316c183be829", "filename": "maps/map_raster_palo_alto.png", "category": "semantic_prior"}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/sample.json:
--------------------------------------------------------------------------------
1 | [{"next": "b8625b49ee4b7679cb81c50895bb918c98800c274e1bca22cd3208770bd3aaa1", "prev": "da683bff4f51b8073ef139476f5ad745711527a7bc7d83b20fcb871f32f9eda6", "token": "199e3146d98e6a2047bafbc222b92f5b67c4640a69b0d1d35b710242de816679", "scene_token": "9d0166ccd4af9c089738587f6e3d21cd9c8b6102787427da8c3b4f64161160c5", "timestamp": 1556675185903083.2}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/scene.json:
--------------------------------------------------------------------------------
1 | [{"description": "", "log_token": "9d0166ccd4af9c089738587f6e3d21cd9c8b6102787427da8c3b4f64161160c5", "name": "host-a101-lidar0-1240710366399037786-1240710391298976894", "first_sample_token": "0ebe3320a4049a1efe2af53c2094d102971a6269b70a72e127eaeabcbff9445d", "last_sample_token": "154956ad6f00a7c5e7058da67cca30b130ba0f3ea27dab72cd2ee802fa1f58cb", "nbr_samples": 126, "token": "9d0166ccd4af9c089738587f6e3d21cd9c8b6102787427da8c3b4f64161160c5"}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/sensor.json:
--------------------------------------------------------------------------------
1 | [{"modality": "camera", "channel": "CAM_FRONT_LEFT", "token": "f7dad6bb70cb8e6245f96e5537e382848335872e6e259218b0a80cc071d162c4"}, {"modality": "lidar", "channel": "LIDAR_FRONT_LEFT", "token": "629da739ea3a0814b9d79ffc3b99cdbc8bdbb6f97abf139f1ad33bd12f8fa94d"}, {"modality": "camera", "channel": "CAM_FRONT", "token": "eb9e8f60a3d6e3328d7512b9f8e6800127fe91f4d62bc8e48a0e6a7cb116cc60"}, {"modality": "lidar", "channel": "LIDAR_TOP", "token": "25bf751d7e35f295393d8a418731474b21c1f702e878c4553f112397caa48c08"}, {"modality": "camera", "channel": "CAM_BACK_LEFT", "token": "c84592e22beb2c0f14d5159245ce8d6678431b879e940eed580651c09cc7d2f1"}, {"modality": "lidar", "channel": "LIDAR_FRONT_RIGHT", "token": "953faed96fd3d2fae3ec03cd2838b312b8c1a9bb7a0629481982870cb28acb67"}, {"modality": "camera", "channel": "CAM_BACK", "token": "172a55e2b50f18a6b6d545369a457003c2f3b438d0180b2b4c7819ca29b3f6ab"}, {"modality": "camera", "channel": "CAM_BACK_RIGHT", "token": "8e0259a868ddbfe589c2ce9c8bfb34a9e6c19c108b882c45433c76b70a2491a2"}, {"modality": "camera", "channel": "CAM_FRONT_ZOOMED", "token": "286718e1fbc8c8f0ca441969d91c36a8a809666e049e54ce121636100b520946"}, {"modality": "camera", "channel": "CAM_FRONT_RIGHT", "token": "de29f3ebb9d96988ac2c5913022c3102a51134e950284aac2e8511f83aff9a81"}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/v1.01-train/v1.01-train/visibility.json:
--------------------------------------------------------------------------------
1 | [{"level": "v60-80", "description": "visibility of whole object is between 60 and 80%", "token": "3"}, {"level": "v0-40", "description": "visibility of whole object is between 0 and 40%", "token": "1"}, {"level": "v40-60", "description": "visibility of whole object is between 40 and 60%", "token": "2"}, {"level": "v80-100", "description": "visibility of whole object is between 80 and 100%", "token": "4"}]
2 |
--------------------------------------------------------------------------------
/tests/data/lyft/val.txt:
--------------------------------------------------------------------------------
1 | host-a101-lidar0-1240710366399037786-1240710391298976894
2 |
--------------------------------------------------------------------------------
/tests/data/nuscenes/mono3d_sample_results.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/mono3d_sample_results.pkl
--------------------------------------------------------------------------------
/tests/data/nuscenes/nus_info.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/nus_info.pkl
--------------------------------------------------------------------------------
/tests/data/nuscenes/samples/CAM_BACK_LEFT/n015-2018-07-18-11-07-57+0800__CAM_BACK_LEFT__1531883530447423.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/samples/CAM_BACK_LEFT/n015-2018-07-18-11-07-57+0800__CAM_BACK_LEFT__1531883530447423.jpg
--------------------------------------------------------------------------------
/tests/data/nuscenes/samples/LIDAR_TOP/n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470948018.pcd.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/samples/LIDAR_TOP/n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470948018.pcd.bin
--------------------------------------------------------------------------------
/tests/data/nuscenes/sweeps/LIDAR_TOP/n008-2018-09-18-12-07-26-0400__LIDAR_TOP__1537287083900561.pcd.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/sweeps/LIDAR_TOP/n008-2018-09-18-12-07-26-0400__LIDAR_TOP__1537287083900561.pcd.bin
--------------------------------------------------------------------------------
/tests/data/nuscenes/sweeps/LIDAR_TOP/n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470898274.pcd.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/nuscenes/sweeps/LIDAR_TOP/n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470898274.pcd.bin
--------------------------------------------------------------------------------
/tests/data/ops/features_for_fps_distance.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/ops/features_for_fps_distance.npy
--------------------------------------------------------------------------------
/tests/data/ops/fps_idx.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/ops/fps_idx.npy
--------------------------------------------------------------------------------
/tests/data/s3dis/instance_mask/Area_1_office_2.bin:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/tests/data/s3dis/points/Area_1_office_2.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/s3dis/points/Area_1_office_2.bin
--------------------------------------------------------------------------------
/tests/data/s3dis/s3dis_infos.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZJULearning/SRDet/12d9302fad742f64ca3c8e05cd601d7dca1bf81e/tests/data/s3dis/s3dis_infos.pkl
--------------------------------------------------------------------------------
/tests/data/s3dis/semantic_mask/Area_1_office_2.bin:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/tests/data/scannet/instance_mask/scene0000_00.bin:
--------------------------------------------------------------------------------
1 | 8
2 | # +
3 | ( ! 8
4 | , 5 % ! !
5 | @ 9 .
6 | %
7 |
8 |
9 | 8 &