Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
mmdetection3d
Commits
76e351a7
"vscode:/vscode.git/clone" did not exist on "4c51afce2a3e26de31db10174906a2f6db5cc9e0"
Unverified
Commit
76e351a7
authored
May 01, 2022
by
Wenwei Zhang
Committed by
GitHub
May 01, 2022
Browse files
Release v1.0.0rc2
parents
5111eda8
4422eaab
Changes
137
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
74 additions
and
43 deletions
+74
-43
mmdet3d/models/losses/paconv_regularization_loss.py
mmdet3d/models/losses/paconv_regularization_loss.py
+1
-1
mmdet3d/models/losses/uncertain_smooth_l1_loss.py
mmdet3d/models/losses/uncertain_smooth_l1_loss.py
+1
-1
mmdet3d/models/middle_encoders/sparse_encoder.py
mmdet3d/models/middle_encoders/sparse_encoder.py
+7
-1
mmdet3d/models/middle_encoders/sparse_unet.py
mmdet3d/models/middle_encoders/sparse_unet.py
+8
-1
mmdet3d/models/necks/dla_neck.py
mmdet3d/models/necks/dla_neck.py
+1
-1
mmdet3d/models/necks/imvoxel_neck.py
mmdet3d/models/necks/imvoxel_neck.py
+1
-1
mmdet3d/models/necks/pointnet2_fp_neck.py
mmdet3d/models/necks/pointnet2_fp_neck.py
+1
-1
mmdet3d/models/necks/second_fpn.py
mmdet3d/models/necks/second_fpn.py
+1
-1
mmdet3d/models/roi_heads/bbox_heads/h3d_bbox_head.py
mmdet3d/models/roi_heads/bbox_heads/h3d_bbox_head.py
+1
-2
mmdet3d/models/roi_heads/bbox_heads/parta2_bbox_head.py
mmdet3d/models/roi_heads/bbox_heads/parta2_bbox_head.py
+4
-6
mmdet3d/models/roi_heads/bbox_heads/point_rcnn_bbox_head.py
mmdet3d/models/roi_heads/bbox_heads/point_rcnn_bbox_head.py
+7
-10
mmdet3d/models/roi_heads/h3d_roi_head.py
mmdet3d/models/roi_heads/h3d_roi_head.py
+1
-2
mmdet3d/models/roi_heads/mask_heads/pointwise_semantic_head.py
...3d/models/roi_heads/mask_heads/pointwise_semantic_head.py
+1
-2
mmdet3d/models/roi_heads/mask_heads/primitive_head.py
mmdet3d/models/roi_heads/mask_heads/primitive_head.py
+1
-2
mmdet3d/models/roi_heads/part_aggregation_roi_head.py
mmdet3d/models/roi_heads/part_aggregation_roi_head.py
+1
-2
mmdet3d/models/roi_heads/point_rcnn_roi_head.py
mmdet3d/models/roi_heads/point_rcnn_roi_head.py
+1
-2
mmdet3d/models/roi_heads/roi_extractors/single_roiaware_extractor.py
...els/roi_heads/roi_extractors/single_roiaware_extractor.py
+1
-1
mmdet3d/models/roi_heads/roi_extractors/single_roipoint_extractor.py
...els/roi_heads/roi_extractors/single_roipoint_extractor.py
+1
-1
mmdet3d/models/segmentors/encoder_decoder.py
mmdet3d/models/segmentors/encoder_decoder.py
+2
-2
mmdet3d/ops/norm.py
mmdet3d/ops/norm.py
+32
-3
No files found.
mmdet3d/models/losses/paconv_regularization_loss.py
View file @
76e351a7
...
@@ -3,8 +3,8 @@ import torch
...
@@ -3,8 +3,8 @@ import torch
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.ops
import
PAConv
,
PAConvCUDA
from
mmdet3d.ops
import
PAConv
,
PAConvCUDA
from
mmdet.models.builder
import
LOSSES
from
mmdet.models.losses.utils
import
weight_reduce_loss
from
mmdet.models.losses.utils
import
weight_reduce_loss
from
..builder
import
LOSSES
def
weight_correlation
(
conv
):
def
weight_correlation
(
conv
):
...
...
mmdet3d/models/losses/uncertain_smooth_l1_loss.py
View file @
76e351a7
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
import
torch
import
torch
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet.models.builder
import
LOSSES
from
mmdet.models.losses.utils
import
weighted_loss
from
mmdet.models.losses.utils
import
weighted_loss
from
..builder
import
LOSSES
@
weighted_loss
@
weighted_loss
...
...
mmdet3d/models/middle_encoders/sparse_encoder.py
View file @
76e351a7
# Copyright (c) OpenMMLab. All rights reserved.
# Copyright (c) OpenMMLab. All rights reserved.
from
mmcv.ops
import
SparseConvTensor
,
SparseSequential
from
mmcv.runner
import
auto_fp16
from
mmcv.runner
import
auto_fp16
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.ops
import
SparseBasicBlock
,
make_sparse_convmodule
from
mmdet3d.ops
import
SparseBasicBlock
,
make_sparse_convmodule
from
mmdet3d.ops.spconv
import
IS_SPCONV2_AVAILABLE
from
..builder
import
MIDDLE_ENCODERS
from
..builder
import
MIDDLE_ENCODERS
if
IS_SPCONV2_AVAILABLE
:
from
spconv.pytorch
import
SparseConvTensor
,
SparseSequential
else
:
from
mmcv.ops
import
SparseConvTensor
,
SparseSequential
@
MIDDLE_ENCODERS
.
register_module
()
@
MIDDLE_ENCODERS
.
register_module
()
class
SparseEncoder
(
nn
.
Module
):
class
SparseEncoder
(
nn
.
Module
):
...
...
mmdet3d/models/middle_encoders/sparse_unet.py
View file @
76e351a7
# Copyright (c) OpenMMLab. All rights reserved.
# Copyright (c) OpenMMLab. All rights reserved.
import
torch
import
torch
from
mmcv.ops
import
SparseConvTensor
,
SparseSequential
from
mmdet3d.ops.spconv
import
IS_SPCONV2_AVAILABLE
if
IS_SPCONV2_AVAILABLE
:
from
spconv.pytorch
import
SparseConvTensor
,
SparseSequential
else
:
from
mmcv.ops
import
SparseConvTensor
,
SparseSequential
from
mmcv.runner
import
BaseModule
,
auto_fp16
from
mmcv.runner
import
BaseModule
,
auto_fp16
from
mmdet3d.ops
import
SparseBasicBlock
,
make_sparse_convmodule
from
mmdet3d.ops
import
SparseBasicBlock
,
make_sparse_convmodule
...
...
mmdet3d/models/necks/dla_neck.py
View file @
76e351a7
...
@@ -6,7 +6,7 @@ from mmcv.cnn import ConvModule, build_conv_layer
...
@@ -6,7 +6,7 @@ from mmcv.cnn import ConvModule, build_conv_layer
from
mmcv.runner
import
BaseModule
from
mmcv.runner
import
BaseModule
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet.models
.builder
import
NECKS
from
.
.builder
import
NECKS
def
fill_up_weights
(
up
):
def
fill_up_weights
(
up
):
...
...
mmdet3d/models/necks/imvoxel_neck.py
View file @
76e351a7
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
from
mmcv.cnn
import
ConvModule
from
mmcv.cnn
import
ConvModule
from
torch
import
nn
from
torch
import
nn
from
mmdet.models
import
NECKS
from
..builder
import
NECKS
@
NECKS
.
register_module
()
@
NECKS
.
register_module
()
...
...
mmdet3d/models/necks/pointnet2_fp_neck.py
View file @
76e351a7
...
@@ -3,7 +3,7 @@ from mmcv.runner import BaseModule
...
@@ -3,7 +3,7 @@ from mmcv.runner import BaseModule
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.ops
import
PointFPModule
from
mmdet3d.ops
import
PointFPModule
from
mmdet.models
import
NECKS
from
..builder
import
NECKS
@
NECKS
.
register_module
()
@
NECKS
.
register_module
()
...
...
mmdet3d/models/necks/second_fpn.py
View file @
76e351a7
...
@@ -5,7 +5,7 @@ from mmcv.cnn import build_conv_layer, build_norm_layer, build_upsample_layer
...
@@ -5,7 +5,7 @@ from mmcv.cnn import build_conv_layer, build_norm_layer, build_upsample_layer
from
mmcv.runner
import
BaseModule
,
auto_fp16
from
mmcv.runner
import
BaseModule
,
auto_fp16
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet.models
import
NECKS
from
..builder
import
NECKS
@
NECKS
.
register_module
()
@
NECKS
.
register_module
()
...
...
mmdet3d/models/roi_heads/bbox_heads/h3d_bbox_head.py
View file @
76e351a7
...
@@ -7,11 +7,10 @@ from torch.nn import functional as F
...
@@ -7,11 +7,10 @@ from torch.nn import functional as F
from
mmdet3d.core.bbox
import
DepthInstance3DBoxes
from
mmdet3d.core.bbox
import
DepthInstance3DBoxes
from
mmdet3d.core.post_processing
import
aligned_3d_nms
from
mmdet3d.core.post_processing
import
aligned_3d_nms
from
mmdet3d.models.builder
import
build_loss
from
mmdet3d.models.builder
import
HEADS
,
build_loss
from
mmdet3d.models.losses
import
chamfer_distance
from
mmdet3d.models.losses
import
chamfer_distance
from
mmdet3d.ops
import
build_sa_module
from
mmdet3d.ops
import
build_sa_module
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.models
import
HEADS
@
HEADS
.
register_module
()
@
HEADS
.
register_module
()
...
...
mmdet3d/models/roi_heads/bbox_heads/parta2_bbox_head.py
View file @
76e351a7
...
@@ -3,17 +3,15 @@ import numpy as np
...
@@ -3,17 +3,15 @@ import numpy as np
import
torch
import
torch
from
mmcv.cnn
import
ConvModule
,
normal_init
from
mmcv.cnn
import
ConvModule
,
normal_init
from
mmcv.ops
import
SparseConvTensor
,
SparseMaxPool3d
,
SparseSequential
from
mmcv.ops
import
SparseConvTensor
,
SparseMaxPool3d
,
SparseSequential
from
mmcv.ops
import
nms_bev
as
nms_gpu
from
mmcv.ops
import
nms_normal_bev
as
nms_normal_gpu
from
mmcv.runner
import
BaseModule
from
mmcv.runner
import
BaseModule
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.core.bbox.structures
import
(
LiDARInstance3DBoxes
,
from
mmdet3d.core.bbox.structures
import
(
LiDARInstance3DBoxes
,
rotation_3d_in_axis
,
xywhr2xyxyr
)
rotation_3d_in_axis
,
xywhr2xyxyr
)
from
mmdet3d.models.builder
import
build_loss
from
mmdet3d.core.post_processing
import
nms_bev
,
nms_normal_bev
from
mmdet3d.models.builder
import
HEADS
,
build_loss
from
mmdet3d.ops
import
make_sparse_convmodule
from
mmdet3d.ops
import
make_sparse_convmodule
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.models
import
HEADS
@
HEADS
.
register_module
()
@
HEADS
.
register_module
()
...
@@ -582,9 +580,9 @@ class PartA2BboxHead(BaseModule):
...
@@ -582,9 +580,9 @@ class PartA2BboxHead(BaseModule):
torch.Tensor: Selected indices.
torch.Tensor: Selected indices.
"""
"""
if
use_rotate_nms
:
if
use_rotate_nms
:
nms_func
=
nms_
gpu
nms_func
=
nms_
bev
else
:
else
:
nms_func
=
nms_normal_
gpu
nms_func
=
nms_normal_
bev
assert
box_probs
.
shape
[
assert
box_probs
.
shape
[
1
]
==
self
.
num_classes
,
f
'box_probs shape:
{
str
(
box_probs
.
shape
)
}
'
1
]
==
self
.
num_classes
,
f
'box_probs shape:
{
str
(
box_probs
.
shape
)
}
'
...
...
mmdet3d/models/roi_heads/bbox_heads/point_rcnn_bbox_head.py
View file @
76e351a7
...
@@ -3,17 +3,15 @@ import numpy as np
...
@@ -3,17 +3,15 @@ import numpy as np
import
torch
import
torch
from
mmcv.cnn
import
ConvModule
,
normal_init
from
mmcv.cnn
import
ConvModule
,
normal_init
from
mmcv.cnn.bricks
import
build_conv_layer
from
mmcv.cnn.bricks
import
build_conv_layer
from
mmcv.ops
import
nms_bev
as
nms_gpu
from
mmcv.ops
import
nms_normal_bev
as
nms_normal_gpu
from
mmcv.runner
import
BaseModule
from
mmcv.runner
import
BaseModule
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.core.bbox.structures
import
(
LiDARInstance3DBoxes
,
from
mmdet3d.core.bbox.structures
import
(
LiDARInstance3DBoxes
,
rotation_3d_in_axis
,
xywhr2xyxyr
)
rotation_3d_in_axis
,
xywhr2xyxyr
)
from
mmdet3d.models.builder
import
build_loss
from
mmdet3d.core.post_processing
import
nms_bev
,
nms_normal_bev
from
mmdet3d.models.builder
import
HEADS
,
build_loss
from
mmdet3d.ops
import
build_sa_module
from
mmdet3d.ops
import
build_sa_module
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.core
import
build_bbox_coder
,
multi_apply
from
mmdet.models
import
HEADS
@
HEADS
.
register_module
()
@
HEADS
.
register_module
()
...
@@ -239,7 +237,7 @@ class PointRCNNBboxHead(BaseModule):
...
@@ -239,7 +237,7 @@ class PointRCNNBboxHead(BaseModule):
rcnn_reg
=
self
.
conv_reg
(
x_reg
)
rcnn_reg
=
self
.
conv_reg
(
x_reg
)
rcnn_cls
=
rcnn_cls
.
transpose
(
1
,
2
).
contiguous
().
squeeze
(
dim
=
1
)
rcnn_cls
=
rcnn_cls
.
transpose
(
1
,
2
).
contiguous
().
squeeze
(
dim
=
1
)
rcnn_reg
=
rcnn_reg
.
transpose
(
1
,
2
).
contiguous
().
squeeze
(
dim
=
1
)
rcnn_reg
=
rcnn_reg
.
transpose
(
1
,
2
).
contiguous
().
squeeze
(
dim
=
1
)
return
(
rcnn_cls
,
rcnn_reg
)
return
rcnn_cls
,
rcnn_reg
def
loss
(
self
,
cls_score
,
bbox_pred
,
rois
,
labels
,
bbox_targets
,
def
loss
(
self
,
cls_score
,
bbox_pred
,
rois
,
labels
,
bbox_targets
,
pos_gt_bboxes
,
reg_mask
,
label_weights
,
bbox_weights
):
pos_gt_bboxes
,
reg_mask
,
label_weights
,
bbox_weights
):
...
@@ -483,7 +481,7 @@ class PointRCNNBboxHead(BaseModule):
...
@@ -483,7 +481,7 @@ class PointRCNNBboxHead(BaseModule):
local_roi_boxes
[...,
0
:
3
]
=
0
local_roi_boxes
[...,
0
:
3
]
=
0
rcnn_boxes3d
=
self
.
bbox_coder
.
decode
(
local_roi_boxes
,
bbox_pred
)
rcnn_boxes3d
=
self
.
bbox_coder
.
decode
(
local_roi_boxes
,
bbox_pred
)
rcnn_boxes3d
[...,
0
:
3
]
=
rotation_3d_in_axis
(
rcnn_boxes3d
[...,
0
:
3
]
=
rotation_3d_in_axis
(
rcnn_boxes3d
[...,
0
:
3
].
unsqueeze
(
1
),
(
roi_ry
)
,
axis
=
2
).
squeeze
(
1
)
rcnn_boxes3d
[...,
0
:
3
].
unsqueeze
(
1
),
roi_ry
,
axis
=
2
).
squeeze
(
1
)
rcnn_boxes3d
[:,
0
:
3
]
+=
roi_xyz
rcnn_boxes3d
[:,
0
:
3
]
+=
roi_xyz
# post processing
# post processing
...
@@ -492,7 +490,6 @@ class PointRCNNBboxHead(BaseModule):
...
@@ -492,7 +490,6 @@ class PointRCNNBboxHead(BaseModule):
cur_class_labels
=
class_labels
[
batch_id
]
cur_class_labels
=
class_labels
[
batch_id
]
cur_cls_score
=
cls_score
[
roi_batch_id
==
batch_id
].
view
(
-
1
)
cur_cls_score
=
cls_score
[
roi_batch_id
==
batch_id
].
view
(
-
1
)
cur_box_prob
=
cls_score
[
batch_id
]
cur_box_prob
=
cur_cls_score
.
unsqueeze
(
1
)
cur_box_prob
=
cur_cls_score
.
unsqueeze
(
1
)
cur_rcnn_boxes3d
=
rcnn_boxes3d
[
roi_batch_id
==
batch_id
]
cur_rcnn_boxes3d
=
rcnn_boxes3d
[
roi_batch_id
==
batch_id
]
keep
=
self
.
multi_class_nms
(
cur_box_prob
,
cur_rcnn_boxes3d
,
keep
=
self
.
multi_class_nms
(
cur_box_prob
,
cur_rcnn_boxes3d
,
...
@@ -524,7 +521,7 @@ class PointRCNNBboxHead(BaseModule):
...
@@ -524,7 +521,7 @@ class PointRCNNBboxHead(BaseModule):
merging these two functions in the future.
merging these two functions in the future.
Args:
Args:
box_probs (torch.Tensor): Predicted boxes probabi
til
ies in
box_probs (torch.Tensor): Predicted boxes probabi
lit
ies in
shape (N,).
shape (N,).
box_preds (torch.Tensor): Predicted boxes in shape (N, 7+C).
box_preds (torch.Tensor): Predicted boxes in shape (N, 7+C).
score_thr (float): Threshold of scores.
score_thr (float): Threshold of scores.
...
@@ -537,9 +534,9 @@ class PointRCNNBboxHead(BaseModule):
...
@@ -537,9 +534,9 @@ class PointRCNNBboxHead(BaseModule):
torch.Tensor: Selected indices.
torch.Tensor: Selected indices.
"""
"""
if
use_rotate_nms
:
if
use_rotate_nms
:
nms_func
=
nms_
gpu
nms_func
=
nms_
bev
else
:
else
:
nms_func
=
nms_normal_
gpu
nms_func
=
nms_normal_
bev
assert
box_probs
.
shape
[
assert
box_probs
.
shape
[
1
]
==
self
.
num_classes
,
f
'box_probs shape:
{
str
(
box_probs
.
shape
)
}
'
1
]
==
self
.
num_classes
,
f
'box_probs shape:
{
str
(
box_probs
.
shape
)
}
'
...
...
mmdet3d/models/roi_heads/h3d_roi_head.py
View file @
76e351a7
# Copyright (c) OpenMMLab. All rights reserved.
# Copyright (c) OpenMMLab. All rights reserved.
from
mmdet3d.core.bbox
import
bbox3d2result
from
mmdet3d.core.bbox
import
bbox3d2result
from
mmdet.models
import
HEADS
from
..builder
import
HEADS
,
build_head
from
..builder
import
build_head
from
.base_3droi_head
import
Base3DRoIHead
from
.base_3droi_head
import
Base3DRoIHead
...
...
mmdet3d/models/roi_heads/mask_heads/pointwise_semantic_head.py
View file @
76e351a7
...
@@ -5,9 +5,8 @@ from torch import nn as nn
...
@@ -5,9 +5,8 @@ from torch import nn as nn
from
torch.nn
import
functional
as
F
from
torch.nn
import
functional
as
F
from
mmdet3d.core.bbox.structures
import
rotation_3d_in_axis
from
mmdet3d.core.bbox.structures
import
rotation_3d_in_axis
from
mmdet3d.models.builder
import
build_loss
from
mmdet3d.models.builder
import
HEADS
,
build_loss
from
mmdet.core
import
multi_apply
from
mmdet.core
import
multi_apply
from
mmdet.models
import
HEADS
@
HEADS
.
register_module
()
@
HEADS
.
register_module
()
...
...
mmdet3d/models/roi_heads/mask_heads/primitive_head.py
View file @
76e351a7
...
@@ -6,11 +6,10 @@ from mmcv.runner import BaseModule
...
@@ -6,11 +6,10 @@ from mmcv.runner import BaseModule
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
torch.nn
import
functional
as
F
from
torch.nn
import
functional
as
F
from
mmdet3d.models.builder
import
build_loss
from
mmdet3d.models.builder
import
HEADS
,
build_loss
from
mmdet3d.models.model_utils
import
VoteModule
from
mmdet3d.models.model_utils
import
VoteModule
from
mmdet3d.ops
import
build_sa_module
from
mmdet3d.ops
import
build_sa_module
from
mmdet.core
import
multi_apply
from
mmdet.core
import
multi_apply
from
mmdet.models
import
HEADS
@
HEADS
.
register_module
()
@
HEADS
.
register_module
()
...
...
mmdet3d/models/roi_heads/part_aggregation_roi_head.py
View file @
76e351a7
...
@@ -6,8 +6,7 @@ from torch.nn import functional as F
...
@@ -6,8 +6,7 @@ from torch.nn import functional as F
from
mmdet3d.core
import
AssignResult
from
mmdet3d.core
import
AssignResult
from
mmdet3d.core.bbox
import
bbox3d2result
,
bbox3d2roi
from
mmdet3d.core.bbox
import
bbox3d2result
,
bbox3d2roi
from
mmdet.core
import
build_assigner
,
build_sampler
from
mmdet.core
import
build_assigner
,
build_sampler
from
mmdet.models
import
HEADS
from
..builder
import
HEADS
,
build_head
,
build_roi_extractor
from
..builder
import
build_head
,
build_roi_extractor
from
.base_3droi_head
import
Base3DRoIHead
from
.base_3droi_head
import
Base3DRoIHead
...
...
mmdet3d/models/roi_heads/point_rcnn_roi_head.py
View file @
76e351a7
...
@@ -5,8 +5,7 @@ from torch.nn import functional as F
...
@@ -5,8 +5,7 @@ from torch.nn import functional as F
from
mmdet3d.core
import
AssignResult
from
mmdet3d.core
import
AssignResult
from
mmdet3d.core.bbox
import
bbox3d2result
,
bbox3d2roi
from
mmdet3d.core.bbox
import
bbox3d2result
,
bbox3d2roi
from
mmdet.core
import
build_assigner
,
build_sampler
from
mmdet.core
import
build_assigner
,
build_sampler
from
mmdet.models
import
HEADS
from
..builder
import
HEADS
,
build_head
,
build_roi_extractor
from
..builder
import
build_head
,
build_roi_extractor
from
.base_3droi_head
import
Base3DRoIHead
from
.base_3droi_head
import
Base3DRoIHead
...
...
mmdet3d/models/roi_heads/roi_extractors/single_roiaware_extractor.py
View file @
76e351a7
...
@@ -3,7 +3,7 @@ import torch
...
@@ -3,7 +3,7 @@ import torch
from
mmcv
import
ops
from
mmcv
import
ops
from
mmcv.runner
import
BaseModule
from
mmcv.runner
import
BaseModule
from
mmdet.models.builder
import
ROI_EXTRACTORS
from
mmdet
3d
.models.builder
import
ROI_EXTRACTORS
@
ROI_EXTRACTORS
.
register_module
()
@
ROI_EXTRACTORS
.
register_module
()
...
...
mmdet3d/models/roi_heads/roi_extractors/single_roipoint_extractor.py
View file @
76e351a7
...
@@ -4,7 +4,7 @@ from mmcv import ops
...
@@ -4,7 +4,7 @@ from mmcv import ops
from
torch
import
nn
as
nn
from
torch
import
nn
as
nn
from
mmdet3d.core.bbox.structures
import
rotation_3d_in_axis
from
mmdet3d.core.bbox.structures
import
rotation_3d_in_axis
from
mmdet.models.builder
import
ROI_EXTRACTORS
from
mmdet
3d
.models.builder
import
ROI_EXTRACTORS
@
ROI_EXTRACTORS
.
register_module
()
@
ROI_EXTRACTORS
.
register_module
()
...
...
mmdet3d/models/segmentors/encoder_decoder.py
View file @
76e351a7
...
@@ -5,8 +5,8 @@ from torch import nn as nn
...
@@ -5,8 +5,8 @@ from torch import nn as nn
from
torch.nn
import
functional
as
F
from
torch.nn
import
functional
as
F
from
mmseg.core
import
add_prefix
from
mmseg.core
import
add_prefix
from
mmseg.models
import
SEGMENTORS
from
..builder
import
(
SEGMENTORS
,
build_backbone
,
build_head
,
build_loss
,
from
..builder
import
build_backbone
,
build_head
,
build_loss
,
build_neck
build_neck
)
from
.base
import
Base3DSegmentor
from
.base
import
Base3DSegmentor
...
...
mmdet3d/ops/norm.py
View file @
76e351a7
...
@@ -53,11 +53,27 @@ class NaiveSyncBatchNorm1d(nn.BatchNorm1d):
...
@@ -53,11 +53,27 @@ class NaiveSyncBatchNorm1d(nn.BatchNorm1d):
# TODO: make mmcv fp16 utils handle customized norm layers
# TODO: make mmcv fp16 utils handle customized norm layers
@
force_fp32
(
out_fp16
=
True
)
@
force_fp32
(
out_fp16
=
True
)
def
forward
(
self
,
input
):
def
forward
(
self
,
input
):
"""
Args:
input (tensor): Has shape (N, C) or (N, C, L), where N is
the batch size, C is the number of features or
channels, and L is the sequence length
Returns:
tensor: Has shape (N, C) or (N, C, L), has same shape
as input.
"""
assert
input
.
dtype
==
torch
.
float32
,
\
assert
input
.
dtype
==
torch
.
float32
,
\
f
'input should be in float32 type, got
{
input
.
dtype
}
'
f
'input should be in float32 type, got
{
input
.
dtype
}
'
if
dist
.
get_world_size
()
==
1
or
not
self
.
training
:
using_dist
=
dist
.
is_available
()
and
dist
.
is_initialized
()
if
(
not
using_dist
)
or
dist
.
get_world_size
()
==
1
\
or
not
self
.
training
:
return
super
().
forward
(
input
)
return
super
().
forward
(
input
)
assert
input
.
shape
[
0
]
>
0
,
'SyncBN does not support empty inputs'
assert
input
.
shape
[
0
]
>
0
,
'SyncBN does not support empty inputs'
is_two_dim
=
input
.
dim
()
==
2
if
is_two_dim
:
input
=
input
.
unsqueeze
(
2
)
C
=
input
.
shape
[
1
]
C
=
input
.
shape
[
1
]
mean
=
torch
.
mean
(
input
,
dim
=
[
0
,
2
])
mean
=
torch
.
mean
(
input
,
dim
=
[
0
,
2
])
meansqr
=
torch
.
mean
(
input
*
input
,
dim
=
[
0
,
2
])
meansqr
=
torch
.
mean
(
input
*
input
,
dim
=
[
0
,
2
])
...
@@ -76,7 +92,10 @@ class NaiveSyncBatchNorm1d(nn.BatchNorm1d):
...
@@ -76,7 +92,10 @@ class NaiveSyncBatchNorm1d(nn.BatchNorm1d):
bias
=
self
.
bias
-
mean
*
scale
bias
=
self
.
bias
-
mean
*
scale
scale
=
scale
.
reshape
(
1
,
-
1
,
1
)
scale
=
scale
.
reshape
(
1
,
-
1
,
1
)
bias
=
bias
.
reshape
(
1
,
-
1
,
1
)
bias
=
bias
.
reshape
(
1
,
-
1
,
1
)
return
input
*
scale
+
bias
output
=
input
*
scale
+
bias
if
is_two_dim
:
output
=
output
.
squeeze
(
2
)
return
output
@
NORM_LAYERS
.
register_module
(
'naiveSyncBN2d'
)
@
NORM_LAYERS
.
register_module
(
'naiveSyncBN2d'
)
...
@@ -107,9 +126,19 @@ class NaiveSyncBatchNorm2d(nn.BatchNorm2d):
...
@@ -107,9 +126,19 @@ class NaiveSyncBatchNorm2d(nn.BatchNorm2d):
# TODO: make mmcv fp16 utils handle customized norm layers
# TODO: make mmcv fp16 utils handle customized norm layers
@
force_fp32
(
out_fp16
=
True
)
@
force_fp32
(
out_fp16
=
True
)
def
forward
(
self
,
input
):
def
forward
(
self
,
input
):
"""
Args:
Input (tensor): Feature has shape (N, C, H, W).
Returns:
tensor: Has shape (N, C, H, W), same shape as input.
"""
assert
input
.
dtype
==
torch
.
float32
,
\
assert
input
.
dtype
==
torch
.
float32
,
\
f
'input should be in float32 type, got
{
input
.
dtype
}
'
f
'input should be in float32 type, got
{
input
.
dtype
}
'
if
dist
.
get_world_size
()
==
1
or
not
self
.
training
:
using_dist
=
dist
.
is_available
()
and
dist
.
is_initialized
()
if
(
not
using_dist
)
or
\
dist
.
get_world_size
()
==
1
or
\
not
self
.
training
:
return
super
().
forward
(
input
)
return
super
().
forward
(
input
)
assert
input
.
shape
[
0
]
>
0
,
'SyncBN does not support empty inputs'
assert
input
.
shape
[
0
]
>
0
,
'SyncBN does not support empty inputs'
...
...
Prev
1
2
3
4
5
6
7
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment