From d6818e0e4d908825425e406fcf6445af92a8835c Mon Sep 17 00:00:00 2001 From: Sun Jiahao <72679458+sunjiahao1999@users.noreply.github.com> Date: Wed, 1 Mar 2023 13:05:58 +0800 Subject: [PATCH 1/4] [Fix] Fix Auto import failed bug. (#2317) * fix polarmix UT * add location * fix base_inferencer scope * fix fail import --- mmdet3d/registry.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/mmdet3d/registry.py b/mmdet3d/registry.py index f63a102e8e..0278a765e1 100644 --- a/mmdet3d/registry.py +++ b/mmdet3d/registry.py @@ -34,15 +34,22 @@ # manage all kinds of runners like `EpochBasedRunner` and `IterBasedRunner` RUNNERS = Registry( - 'runner', parent=MMENGINE_RUNNERS, locations=['mmdet3d.engine.runner']) + # TODO: update the location when mmdet3d has its own runner + 'runner', + parent=MMENGINE_RUNNERS, + locations=['mmdet3d.engine']) # manage runner constructors that define how to initialize runners RUNNER_CONSTRUCTORS = Registry( 'runner constructor', parent=MMENGINE_RUNNER_CONSTRUCTORS, - locations=['mmdet3d.engine.runner']) + # TODO: update the location when mmdet3d has its own runner + locations=['mmdet3d.engine']) # manage all kinds of loops like `EpochBasedTrainLoop` LOOPS = Registry( - 'loop', parent=MMENGINE_LOOPS, locations=['mmdet3d.engine.runner']) + # TODO: update the location when mmdet3d has its own loop + 'loop', + parent=MMENGINE_LOOPS, + locations=['mmdet3d.engine']) # manage all kinds of hooks like `CheckpointHook` HOOKS = Registry( 'hook', parent=MMENGINE_HOOKS, locations=['mmdet3d.engine.hooks']) @@ -53,7 +60,8 @@ DATA_SAMPLERS = Registry( 'data sampler', parent=MMENGINE_DATA_SAMPLERS, - locations=['mmdet3d.datasets.samplers']) + # TODO: update the location when mmdet3d has its own data sampler + locations=['mmdet3d.datasets']) TRANSFORMS = Registry( 'transform', parent=MMENGINE_TRANSFORMS, @@ -77,22 +85,26 @@ OPTIMIZERS = Registry( 'optimizer', parent=MMENGINE_OPTIMIZERS, - locations=['mmdet3d.engine.optimizers']) + # TODO: update the location when mmdet3d has its own optimizer + locations=['mmdet3d.engine']) # manage optimizer wrapper OPTIM_WRAPPERS = Registry( 'optim wrapper', parent=MMENGINE_OPTIM_WRAPPERS, - locations=['mmdet3d.engine.optimizers']) + # TODO: update the location when mmdet3d has its own optimizer + locations=['mmdet3d.engine']) # manage constructors that customize the optimization hyperparameters. OPTIM_WRAPPER_CONSTRUCTORS = Registry( 'optimizer wrapper constructor', parent=MMENGINE_OPTIM_WRAPPER_CONSTRUCTORS, - locations=['mmdet3d.engine.optimizers']) + # TODO: update the location when mmdet3d has its own optimizer + locations=['mmdet3d.engine']) # mangage all kinds of parameter schedulers like `MultiStepLR` PARAM_SCHEDULERS = Registry( 'parameter scheduler', parent=MMENGINE_PARAM_SCHEDULERS, - locations=['mmdet3d.engine.schedulers']) + # TODO: update the location when mmdet3d has its own scheduler + locations=['mmdet3d.engine']) # manage all kinds of metrics METRICS = Registry( 'metric', parent=MMENGINE_METRICS, locations=['mmdet3d.evaluation']) From 7b6ce16779d4cb0125ccd070f1a10ffb3a97a3ff Mon Sep 17 00:00:00 2001 From: Xiang Xu Date: Wed, 1 Mar 2023 13:06:21 +0800 Subject: [PATCH 2/4] [Fix] fix UT for torch1.6 (#2318) --- mmdet3d/datasets/transforms/transforms_3d.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mmdet3d/datasets/transforms/transforms_3d.py b/mmdet3d/datasets/transforms/transforms_3d.py index ed5741b9df..4ab0bfb8da 100644 --- a/mmdet3d/datasets/transforms/transforms_3d.py +++ b/mmdet3d/datasets/transforms/transforms_3d.py @@ -2592,14 +2592,14 @@ def laser_mix_transform(self, input_dict: dict, mix_results: dict) -> dict: rho = torch.sqrt(points.coord[:, 0]**2 + points.coord[:, 1]**2) pitch = torch.atan2(points.coord[:, 2], rho) - pitch = torch.clip(pitch, self.pitch_angles[0] + 1e-5, - self.pitch_angles[1] - 1e-5) + pitch = torch.clamp(pitch, self.pitch_angles[0] + 1e-5, + self.pitch_angles[1] - 1e-5) mix_rho = torch.sqrt(mix_points.coord[:, 0]**2 + mix_points.coord[:, 1]**2) mix_pitch = torch.atan2(mix_points.coord[:, 2], mix_rho) - mix_pitch = torch.clip(mix_pitch, self.pitch_angles[0] + 1e-5, - self.pitch_angles[1] - 1e-5) + mix_pitch = torch.clamp(mix_pitch, self.pitch_angles[0] + 1e-5, + self.pitch_angles[1] - 1e-5) num_areas = np.random.choice(self.num_areas, size=1)[0] angle_list = np.linspace(self.pitch_angles[1], self.pitch_angles[0], From 8cf1acb26602cf64f168b1c3dc1a5ce68d863ace Mon Sep 17 00:00:00 2001 From: Sun Jiahao <72679458+sunjiahao1999@users.noreply.github.com> Date: Wed, 1 Mar 2023 13:08:45 +0800 Subject: [PATCH 3/4] [Fix] Fix to_tensor bug when array strides is negative (#2315) * fix polarmix UT * fix bug * fix img list --- mmdet3d/datasets/transforms/formating.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mmdet3d/datasets/transforms/formating.py b/mmdet3d/datasets/transforms/formating.py index 87661f7d93..477346a59b 100644 --- a/mmdet3d/datasets/transforms/formating.py +++ b/mmdet3d/datasets/transforms/formating.py @@ -147,10 +147,13 @@ def pack_single_results(self, results: dict) -> dict: if 'img' in results: if isinstance(results['img'], list): # process multiple imgs in single frame - imgs = [to_tensor(img) for img in results['img']] - imgs = torch.stack( - imgs, dim=0).permute(0, 3, 1, 2).contiguous() - results['img'] = to_tensor(imgs) + imgs = np.stack(results['img'], axis=0) + if imgs.flags.c_contiguous: + imgs = to_tensor(imgs).permute(0, 3, 1, 2).contiguous() + else: + imgs = to_tensor( + np.ascontiguousarray(imgs.transpose(0, 3, 1, 2))) + results['img'] = imgs else: img = results['img'] if len(img.shape) < 3: @@ -159,7 +162,12 @@ def pack_single_results(self, results: dict) -> dict: # `torch.permute()` rather than `np.transpose()`. # Refer to https://github.com/open-mmlab/mmdetection/pull/9533 # for more details - results['img'] = to_tensor(img).permute(2, 0, 1).contiguous() + if img.flags.c_contiguous: + img = to_tensor(img).permute(2, 0, 1).contiguous() + else: + img = to_tensor( + np.ascontiguousarray(img.transpose(2, 0, 1))) + results['img'] = img for key in [ 'proposals', 'gt_bboxes', 'gt_bboxes_ignore', 'gt_labels', From ae3c8f8043dba6f8f293c11de14b21d2183bb113 Mon Sep 17 00:00:00 2001 From: Xiang Xu Date: Wed, 1 Mar 2023 21:41:32 +0800 Subject: [PATCH 4/4] [Doc]: Update metafile.yml (#2322) --- configs/pointnet2/metafile.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/configs/pointnet2/metafile.yml b/configs/pointnet2/metafile.yml index 8a664a6a2c..1ac988ab05 100644 --- a/configs/pointnet2/metafile.yml +++ b/configs/pointnet2/metafile.yml @@ -17,7 +17,7 @@ Collections: Models: - Name: pointnet2_ssg_2xb16-cosine-200e_scannet-seg-xyz-only In Collection: PointNet++ - Config: configs/pointnet/pointnet2_ssg_2xb16-cosine-200e_scannet-seg-xyz-only.py + Config: configs/pointnet2/pointnet2_ssg_2xb16-cosine-200e_scannet-seg-xyz-only.py Metadata: Training Data: ScanNet Training Memory (GB): 1.9 @@ -30,7 +30,7 @@ Models: - Name: pointnet2_ssg_2xb16-cosine-200e_scannet-seg In Collection: PointNet++ - Config: configs/pointnet/pointnet2_ssg_2xb16-cosine-200e_scannet-seg.py + Config: configs/pointnet2/pointnet2_ssg_2xb16-cosine-200e_scannet-seg.py Metadata: Training Data: ScanNet Training Memory (GB): 1.9 @@ -43,7 +43,7 @@ Models: - Name: pointnet2_msg_2xb16-cosine-250e_scannet-seg-xyz-only In Collection: PointNet++ - Config: configs/pointnet/pointnet2_msg_2xb16-cosine-250e_scannet-seg-xyz-only.py + Config: configs/pointnet2/pointnet2_msg_2xb16-cosine-250e_scannet-seg-xyz-only.py Metadata: Training Data: ScanNet Training Memory (GB): 2.4 @@ -56,7 +56,7 @@ Models: - Name: pointnet2_msg_2xb16-cosine-250e_scannet-seg In Collection: PointNet++ - Config: configs/pointnet/pointnet2_msg_2xb16-cosine-250e_scannet-seg.py + Config: configs/pointnet2/pointnet2_msg_2xb16-cosine-250e_scannet-seg.py Metadata: Training Data: ScanNet Training Memory (GB): 2.4 @@ -69,7 +69,7 @@ Models: - Name: pointnet2_ssg_2xb16-cosine-50e_s3dis-seg In Collection: PointNet++ - Config: configs/pointnet/pointnet2_ssg_2xb16-cosine-50e_s3dis-seg.py + Config: configs/pointnet2/pointnet2_ssg_2xb16-cosine-50e_s3dis-seg.py Metadata: Training Data: S3DIS Training Memory (GB): 3.6 @@ -82,7 +82,7 @@ Models: - Name: pointnet2_msg_2xb16-cosine-80e_s3dis-seg In Collection: PointNet++ - Config: configs/pointnet/pointnet2_msg_2xb16-cosine-80e_s3dis-seg.py + Config: configs/pointnet2/pointnet2_msg_2xb16-cosine-80e_s3dis-seg.py Metadata: Training Data: S3DIS Training Memory (GB): 3.6