已合并
Enable SparseConv3d on mmcv cnn conv layer #1841
nanjunjie创建于 2025年12月27日
Enable SparseConv3d on mmcv cnn conv layer #1841
已合并
nanjunjie创建于 2025年12月27日
共 4 个文件变更+44-7
@@ -3,6 +3,7 @@ __all__ = [
3 "SparseConv3d",3 "SparseConv3d",
4 "SparseInverseConv3d",4 "SparseInverseConv3d",
5 "SubMConv3d",5 "SubMConv3d",
6+ "SparseConvolution",
6 "SparseConvTensor",7 "SparseConvTensor",
7 "SparseModule",8 "SparseModule",
8 "SparseSequential",9 "SparseSequential",
@@ -75,7 +76,7 @@ import os
75import mx_driving._C76import mx_driving._C
76 77 
77from .modules.roi_point_pool_3d import RoIPointPool3d78from .modules.roi_point_pool_3d import RoIPointPool3d
78-from .modules.sparse_conv import SparseConv3d, SubMConv3d, SparseInverseConv3d79+from .modules.sparse_conv import SparseConv3d, SubMConv3d, SparseInverseConv3d, SparseConvolution
79from .modules.sparse_modules import SparseConvTensor, SparseModule, SparseSequential80from .modules.sparse_modules import SparseConvTensor, SparseModule, SparseSequential
80from .modules.voxelization import Voxelization81from .modules.voxelization import Voxelization
81from .ops.assign_score_withk import assign_score_withk82from .ops.assign_score_withk import assign_score_withk
@@ -58,7 +58,7 @@ __all__ = [
58# Some patches in mmengine_patch are applied on mmcv module but organized in mmengine_patch58# Some patches in mmengine_patch are applied on mmcv module but organized in mmengine_patch
59from mx_driving.patcher.mmengine_patch import stream, ddp, optimizer_hooks, optimizer_wrapper 59from mx_driving.patcher.mmengine_patch import stream, ddp, optimizer_hooks, optimizer_wrapper
60 60 
61-from mx_driving.patcher.mmcv_patch import dc, mdc, msda, patch_mmcv_version 61+from mx_driving.patcher.mmcv_patch import dc, mdc, msda, patch_mmcv_version, spconv3d
62from mx_driving.patcher.mmdet_patch import pseudo_sampler, resnet_add_relu, resnet_maxpool, resnet_fp1662from mx_driving.patcher.mmdet_patch import pseudo_sampler, resnet_add_relu, resnet_maxpool, resnet_fp16
63from mx_driving.patcher.mmdet3d_patch import nuscenes_dataset, nuscenes_metric63from mx_driving.patcher.mmdet3d_patch import nuscenes_dataset, nuscenes_metric
64from mx_driving.patcher.numpy_patch import numpy_type64from mx_driving.patcher.numpy_patch import numpy_type
@@ -69,9 +69,9 @@ from mx_driving.patcher.patcher import Patch, Patcher, PatcherBuilder
69 69 
70default_patcher_builder = (70default_patcher_builder = (
71 PatcherBuilder()71 PatcherBuilder()
72- .add_module_patch("mmcv", Patch(msda), Patch(dc), Patch(mdc), Patch(stream), Patch(ddp))72+ .add_module_patch("mmcv", Patch(msda), Patch(dc), Patch(mdc), Patch(stream), Patch(ddp), Patch(spconv3d))
73 .add_module_patch("torch", Patch(index), Patch(batch_matmul))73 .add_module_patch("torch", Patch(index), Patch(batch_matmul))
74 .add_module_patch("numpy", Patch(numpy_type))74 .add_module_patch("numpy", Patch(numpy_type))
75 .add_module_patch("mmdet", Patch(pseudo_sampler), Patch(resnet_add_relu), Patch(resnet_maxpool))75 .add_module_patch("mmdet", Patch(pseudo_sampler), Patch(resnet_add_relu), Patch(resnet_maxpool))
76 .add_module_patch("mmdet3d", Patch(nuscenes_dataset), Patch(nuscenes_metric))76 .add_module_patch("mmdet3d", Patch(nuscenes_dataset), Patch(nuscenes_metric))
77-)77+)
@@ -72,4 +72,40 @@ def mdc(mmcv: ModuleType, options: Dict):
72 mmcv.ops.modulated_deform_conv.modulated_deform_conv2d = modulated_deform_conv2d72 mmcv.ops.modulated_deform_conv.modulated_deform_conv2d = modulated_deform_conv2d
73 else:73 else:
74 raise AttributeError("In mmcv.ops.modulated_deform_conv, ModulatedDeformConv2dFunction or modulated_deform_conv not found")74 raise AttributeError("In mmcv.ops.modulated_deform_conv, ModulatedDeformConv2dFunction or modulated_deform_conv not found")
75- 75+ 
76+ 
77+def spconv3d(mmcv: ModuleType, options: Dict):
78+ mxd = importlib.import_module("mx_driving")
79+ if ({"ops"}).issubset(mmcv.__dir__()):
80+ ops = importlib.import_module(f"{mmcv.__name__}.ops")
81+ ops.SparseConvTensor = mxd.SparseConvTensor
82+ ops.sparse_structure.SparseConvTensor = mxd.SparseConvTensor
83+ ops.SparseSequential = mxd.SparseSequential
84+ ops.sparse_modules.SparseSequential = mxd.SparseSequential
85+ ops.SparseModule = mxd.SparseModule
86+ ops.sparse_modules.SparseModule = mxd.SparseModule
87+ ops.SparseConvolution = mxd.SparseConvolution
88+ ops.sparse_conv.SparseConvolution = mxd.SparseConvolution
89+ ops.SubMConv3d = mxd.SubMConv3d
90+ ops.sparse_conv.SubMConv3d = mxd.SubMConv3d
91+ ops.SparseConv3d = mxd.SparseConv3d
92+ ops.sparse_conv.SparseConv3d = mxd.SparseConv3d
93+ ops.SparseInverseConv3d = mxd.SparseInverseConv3d
94+ ops.sparse_conv.SparseInverseConv3d = mxd.SparseInverseConv3d
95+ 
96+ # support mmcv version 1.7.2
97+ if ({"cnn"}).issubset(mmcv.__dir__()):
98+ cnn = importlib.import_module(f"{mmcv.__name__}.cnn")
99+ if hasattr(cnn, "CONV_LAYERS"):
S
Ssunshun-yuan2025年12月30日

mmcv 2.2.0不适配

likedislike
100+ cnn.CONV_LAYERS.module_dict['SubMConv3d'] = mxd.SubMConv3d
101+ cnn.CONV_LAYERS.module_dict['SparseConv3d'] = mxd.SparseConv3d
102+ cnn.CONV_LAYERS.module_dict['SparseInverseConv3d'] = \
103+ mxd.SparseInverseConv3d
104+ # support mmcv version 2.0.0 or above
105+ if importlib.util.find_spec("mmengine.registry") is not None:
106+ registry = importlib.import_module("mmengine.registry")
107+ if hasattr(registry, "MODELS"):
108+ registry.MODELS.module_dict['SubMConv3d'] = mxd.SubMConv3d
109+ registry.MODELS.module_dict['SparseConv3d'] = mxd.SparseConv3d
110+ registry.MODELS.module_dict['SparseInverseConv3d'] = \
111+ mxd.SparseInverseConv3d
@@ -1,8 +1,8 @@
1import warnings1import warnings
2 2 
3-from .modules.sparse_conv import SparseConv3d, SubMConv3d, SparseInverseConv3d3+from .modules.sparse_conv import SparseConv3d, SubMConv3d, SparseInverseConv3d, SparseConvolution
4from .modules.sparse_modules import SparseConvTensor, SparseModule, SparseSequential4from .modules.sparse_modules import SparseConvTensor, SparseModule, SparseSequential
5 5 
6warnings.warn(6warnings.warn(
7 "This package is deprecated and will be removed in future. Please use `mx_driving.api` instead.", DeprecationWarning7 "This package is deprecated and will be removed in future. Please use `mx_driving.api` instead.", DeprecationWarning
8-)8+)