chrischoy / DeepGlobalRegistration

[CVPR 2020 Oral] A differentiable framework for 3D registration
Other
468 stars 85 forks source link

DGR with mke 0.5.1 in a docker #24

Open wboschmann opened 3 years ago

wboschmann commented 3 years ago

Hello together,

I was trying to run DGR with mke 0.5.1 and had to do some adaptions.

dockerfile ``` FROM pytorch/pytorch:1.7.0-cuda11.0-cudnn8-devel WORKDIR /app RUN apt update RUN apt-get install -y apt-utils RUN apt-get install -y\ build-essential \ ca-certificates \ wget \ git \ vim \ libopenblas-dev \ libssl-dev \ libgl1-mesa-glx \ libusb-1.0-0 \ locate \ python3.8-dev \ curl \ unzip \ unrar RUN export MAX_JOBS=1 #git checkout v0.5.1; \ COPY ./MinkowskiEngine /app/MinkowskiEngine RUN export CXX=c++; export CUDA_HOME=/usr/local/cuda-11.0; \ cd /app/MinkowskiEngine/; \ python setup.py install --blas=openblas --force_cuda COPY ./DeepGlobalRegistration/requirements.txt /tmp/DeepGlobalRegistration/requirements.txt RUN pip install -r /tmp/DeepGlobalRegistration/requirements.txt CMD [ "/bin/bash", "" ] ```
run & build docker .sh SCRIPT=$(readlink -f "$0") SCRIPTPATH=$(dirname "$SCRIPT") #DATAPATH= "/media/wboschmann/Work-Drive2/SRS-WORK/Data/" docker build -t dgr_docker:0.5.1 . docker rm -f dgr0 docker run --privileged -it \ --runtime nvidia \ --gpus all \ --shm-size 8G \ -v /path/to/data/:/app/Data \ -v $SCRIPTPATH/../fcgf_docker/FCGF/model_zoo:/app/model_zoo \ -v $SCRIPTPATH/DeepGlobalRegistration:/app/DeepGlobalRegistration \ -v $SCRIPTPATH/src:/app/src \ --name dgr0 \ --entrypoint /bin/bash \ dgr_docker:0.5.1
git diff ``` diff --git a/core/trainer.py b/core/trainer.py index b8ae434..87bd834 100644 --- a/core/trainer.py +++ b/core/trainer.py @@ -215,7 +215,7 @@ class WeightedProcrustesTrainer: # Inlier prediction with 6D ConvNet inlier_timer.tic() reg_sinput = ME.SparseTensor(reg_feats.contiguous(), - coords=reg_coords.int()).to(self.device) + coordinates=reg_coords.int(), device="cuda") reg_soutput = self.inlier_model(reg_sinput) inlier_timer.toc() @@ -396,7 +396,7 @@ class WeightedProcrustesTrainer: inlier_timer.tic() reg_sinput = ME.SparseTensor(reg_feats.contiguous(), - coords=reg_coords.int()).to(self.device) + coordinates=reg_coords.int(), device="cuda") reg_soutput = self.inlier_model(reg_sinput) inlier_timer.toc() @@ -630,10 +630,10 @@ class WeightedProcrustesTrainer: def generate_inlier_input(self, xyz0, xyz1, iC0, iC1, iF0, iF1, len_batch, pos_pairs): # pairs consist of (xyz1 index, xyz0 index) stime = time.time() - sinput0 = ME.SparseTensor(iF0, coords=iC0).to(self.device) + sinput0 = ME.SparseTensor(iF0, coordinates=iC0, device="cuda") oF0 = self.feat_model(sinput0).F - sinput1 = ME.SparseTensor(iF1, coords=iC1).to(self.device) + sinput1 = ME.SparseTensor(iF1, coordinates=iC1, device="cuda") oF1 = self.feat_model(sinput1).F feat_time = time.time() - stime diff --git a/dataloader/threedmatch_loader.py b/dataloader/threedmatch_loader.py index 99ba346..d45ad0d 100644 --- a/dataloader/threedmatch_loader.py +++ b/dataloader/threedmatch_loader.py @@ -75,8 +75,8 @@ class IndoorPairDataset(PairDataset): xyz0_th = torch.from_numpy(xyz0) xyz1_th = torch.from_numpy(xyz1) - sel0 = ME.utils.sparse_quantize(xyz0_th / self.voxel_size, return_index=True) - sel1 = ME.utils.sparse_quantize(xyz1_th / self.voxel_size, return_index=True) + _, sel0 = ME.utils.sparse_quantize(xyz0_th / self.voxel_size, return_index=True) + _, sel1 = ME.utils.sparse_quantize(xyz1_th / self.voxel_size, return_index=True) # Make point clouds using voxelized points pcd0 = make_open3d_point_cloud(xyz0[sel0]) diff --git a/model/pyramidnet.py b/model/pyramidnet.py index 8a0b9aa..0a643e3 100644 --- a/model/pyramidnet.py +++ b/model/pyramidnet.py @@ -15,7 +15,7 @@ from model.residual_block import get_block, conv, conv_tr, conv_norm_non class PyramidModule(ME.MinkowskiNetwork): NONLINEARITY = 'ELU' NORM_TYPE = 'BN' - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE def __init__(self, inc, @@ -93,7 +93,7 @@ class PyramidNet(ME.MinkowskiNetwork): DEPTHS = [1, 1, 1, 1] # None b1, b2, b3, btr3, btr2 # 1 2 3 -3 -2 -1 - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords diff --git a/model/residual_block.py b/model/residual_block.py index f933be5..02985cb 100644 --- a/model/residual_block.py +++ b/model/residual_block.py @@ -17,12 +17,12 @@ def conv(in_channels, kernel_size=3, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=0, dimension=3): if not isinstance(region_type, ME.RegionType): if region_type == 0: - region_type = ME.RegionType.HYPERCUBE + region_type = ME.RegionType.HYPER_CUBE elif region_type == 1: region_type = ME.RegionType.HYPERCROSS else: @@ -49,8 +49,8 @@ def conv_tr(in_channels, kernel_size, stride=1, dilation=1, - has_bias=False, - region_type=ME.RegionType.HYPERCUBE, + bias=False, + region_type=ME.RegionType.HYPER_CUBE, dimension=-1): assert dimension > 0, 'Dimension must be a positive integer' kernel_generator = ME.KernelGenerator( @@ -75,7 +75,7 @@ def conv_tr(in_channels, kernel_size=kernel_size, stride=stride, dilation=dilation, - has_bias=has_bias, + bias=bias, kernel_generator=kernel_generator, dimension=dimension) @@ -174,7 +174,7 @@ def conv_norm_non(inc, stride, dimension, bn_momentum=0.05, - region_type=ME.RegionType.HYPERCUBE, + region_type=ME.RegionType.HYPER_CUBE, norm_type='BN', nonlinearity='ELU'): return nn.Sequential( @@ -184,7 +184,7 @@ def conv_norm_non(inc, kernel_size=kernel_size, stride=stride, dilation=1, - has_bias=False, + bias=False, region_type=region_type, dimension=dimension), get_norm(norm_type, outc, bn_momentum=bn_momentum, dimension=dimension), diff --git a/model/resunet.py b/model/resunet.py index 831517f..136104a 100644 --- a/model/resunet.py +++ b/model/resunet.py @@ -18,7 +18,7 @@ class ResUNet(ME.MinkowskiNetwork): BLOCK_NORM_TYPE = 'BN' CHANNELS = [None, 32, 64, 128] TR_CHANNELS = [None, 32, 64, 64] - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords @@ -43,7 +43,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=conv1_kernel_size, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -61,7 +61,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -79,7 +79,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -97,7 +97,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3_tr = get_norm( NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -116,7 +116,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm2_tr = get_norm( NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -135,7 +135,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) # self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D) @@ -146,7 +146,7 @@ class ResUNet(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=True, + bias=True, dimension=D) def forward(self, x): @@ -185,8 +185,8 @@ class ResUNet(ME.MinkowskiNetwork): if self.normalize_feature: return ME.SparseTensor( out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8), - coords_key=out.coords_key, - coords_manager=out.coords_man) + coordinate_map_key=out.coords_key, + coordinate_manager=out.coords_man) else: return out @@ -202,7 +202,7 @@ class ResUNetBNF(ResUNet): class ResUNetBNFX(ResUNetBNF): - REGION_TYPE = ME.RegionType.HYPERCROSS + REGION_TYPE = ME.RegionType.HYPER_CROSS class ResUNetSP(ME.MinkowskiNetwork): @@ -213,7 +213,7 @@ class ResUNetSP(ME.MinkowskiNetwork): # None b1, b2, b3, btr3, btr2 # 1 2 3 -3 -2 -1 DEPTHS = [None, 1, 1, 1, 1, 1, None] - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords @@ -238,7 +238,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=conv1_kernel_size, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -260,7 +260,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -281,7 +281,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -302,7 +302,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3_tr = get_norm( NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -324,7 +324,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm2_tr = get_norm( @@ -346,7 +346,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) @@ -358,7 +358,7 @@ class ResUNetSP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=True, + bias=True, dimension=D) def forward(self, x): @@ -402,14 +402,14 @@ class ResUNetSP(ME.MinkowskiNetwork): if self.normalize_feature: return ME.SparseTensor( out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8), - coords_key=out.coords_key, - coords_manager=out.coords_man) + coordinate_map_key=out.coords_key, + coordinate_manager=out.coords_man) else: return out class ResUNetBNSPC(ResUNetSP): - REGION_TYPE = ME.RegionType.HYPERCROSS + REGION_TYPE = ME.RegionType.HYPER_CROSS class ResUNetINBNSPC(ResUNetBNSPC): @@ -421,7 +421,7 @@ class ResUNet2(ME.MinkowskiNetwork): BLOCK_NORM_TYPE = 'BN' CHANNELS = [None, 32, 64, 128, 256] TR_CHANNELS = [None, 32, 64, 64, 128] - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords @@ -445,7 +445,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=conv1_kernel_size, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -464,7 +464,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -483,7 +483,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -502,7 +502,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D) @@ -521,7 +521,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm4_tr = get_norm( @@ -541,7 +541,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm3_tr = get_norm( @@ -561,7 +561,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm2_tr = get_norm( @@ -581,7 +581,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) # self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D) @@ -592,7 +592,7 @@ class ResUNet2(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=True, + bias=True, dimension=D) def forward(self, x): @@ -643,8 +643,8 @@ class ResUNet2(ME.MinkowskiNetwork): if self.normalize_feature: return ME.SparseTensor( out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8), - coords_key=out.coords_key, - coords_manager=out.coords_man) + coordinate_map_key=out.coordinate_map_key, + coordinate_manager=out.coordinate_manager) else: return out @@ -666,7 +666,7 @@ class ResUNetBN2C(ResUNet2): class ResUNetBN2CX(ResUNetBN2C): - REGION_TYPE = ME.RegionType.HYPERCROSS + REGION_TYPE = ME.RegionType.HYPER_CROSS class ResUNetBN2D(ResUNet2): @@ -688,7 +688,7 @@ class ResUNetBN2F(ResUNet2): class ResUNetBN2FX(ResUNetBN2F): - REGION_TYPE = ME.RegionType.HYPERCROSS + REGION_TYPE = ME.RegionType.HYPER_CROSS class ResUNet2v2(ME.MinkowskiNetwork): @@ -699,7 +699,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): # None b1, b2, b3, b4, btr4, btr3, btr2 # 1 2 3 4,-4,-3,-2,-1 DEPTHS = [None, 1, 1, 1, 1, 1, 1, 1, None] - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords @@ -724,7 +724,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=conv1_kernel_size, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -743,7 +743,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -762,7 +762,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -781,7 +781,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D) @@ -800,7 +800,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm4_tr = get_norm( NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D) @@ -820,7 +820,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm3_tr = get_norm( NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -840,7 +840,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, dimension=D) self.norm2_tr = get_norm( NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -860,7 +860,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) # self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -871,7 +871,7 @@ class ResUNet2v2(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=True, + bias=True, dimension=D) self.weight_initialization() @@ -932,8 +932,8 @@ class ResUNet2v2(ME.MinkowskiNetwork): if self.normalize_feature: return ME.SparseTensor( out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8), - coords_key=out.coords_key, - coords_manager=out.coords_man) + coordinate_map_key=out.coords_key, + coordinate_manager=out.coords_man) else: return out @@ -977,7 +977,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): BLOCK_NORM_TYPE = 'BN' CHANNELS = [None, 32, 64, 128, 256] TR_CHANNELS = [None, 32, 64, 64, 128] - REGION_TYPE = ME.RegionType.HYPERCUBE + REGION_TYPE = ME.RegionType.HYPER_CUBE # To use the model, must call initialize_coords before forward pass. # Once data is processed, call clear to reset the model before calling initialize_coords @@ -1001,8 +1001,8 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=conv1_kernel_size, stride=1, dilation=1, - has_bias=False, - region_type=ME.RegionType.HYPERCUBE, + bias=False, + region_type=ME.RegionType.HYPER_CUBE, dimension=D) self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D) @@ -1021,7 +1021,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D) @@ -1041,7 +1041,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=1, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D) @@ -1061,8 +1061,8 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=1, dilation=1, - has_bias=False, - region_type=ME.RegionType.HYPERCUBE, + bias=False, + region_type=ME.RegionType.HYPER_CUBE, dimension=D) self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D) @@ -1071,7 +1071,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): CHANNELS[4], CHANNELS[4], bn_momentum=bn_momentum, - region_type=ME.RegionType.HYPERCUBE, + region_type=ME.RegionType.HYPER_CUBE, dimension=D) self.conv4_tr = conv_tr( @@ -1080,8 +1080,8 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, - region_type=ME.RegionType.HYPERCUBE, + bias=False, + region_type=ME.RegionType.HYPER_CUBE, dimension=D) self.norm4_tr = get_norm( NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D) @@ -1100,7 +1100,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm3_tr = get_norm( @@ -1120,7 +1120,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=3, stride=2, dilation=1, - has_bias=False, + bias=False, region_type=REGION_TYPE, dimension=D) self.norm2_tr = get_norm( @@ -1140,7 +1140,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=False, + bias=False, dimension=D) # self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D) @@ -1151,7 +1151,7 @@ class ResUNet2SP(ME.MinkowskiNetwork): kernel_size=1, stride=1, dilation=1, - has_bias=True, + bias=True, dimension=D) def forward(self, x): @@ -1205,8 +1205,8 @@ class ResUNet2SP(ME.MinkowskiNetwork): if self.normalize_feature: return ME.SparseTensor( out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8), - coords_key=out.coords_key, - coords_manager=out.coords_man) + coordinate_map_key=out.coords_key, + coordinate_manager=out.coords_man) else: return out @@ -1218,4 +1218,4 @@ class ResUNetBN2SPC(ResUNet2SP): class ResUNetBN2SPCX(ResUNetBN2SPC): - REGION_TYPE = ME.RegionType.HYPERCROSS + REGION_TYPE = ME.RegionType.HYPER_CROSS diff --git a/scripts/train_3dmatch.sh b/scripts/train_3dmatch.sh index 668a7ca..71a9cf0 100755 --- a/scripts/train_3dmatch.sh +++ b/scripts/train_3dmatch.sh @@ -64,8 +64,8 @@ python train.py \ $MISC_ARGS 2>&1 | tee -a $LOG # Test -python -m scripts.test_3dmatch \ - $MISC_ARGS \ - --threed_match_dir ${THREED_MATCH_DIR} \ - --weights ${OUT_DIR}/best_val_checkpoint.pth \ - 2>&1 | tee -a $LOG +#python -m scripts.test_3dmatch \ +# $MISC_ARGS \ +# --threed_match_dir ${THREED_MATCH_DIR} \ +# --weights ${OUT_DIR}/best_val_checkpoint.pth \ +# 2>&1 | tee -a $LOG root@3f73bd4901b9:/app/DeepGlobalRegistration# echo "" | tee -a $LOG root@3f73bd4901b9:/app/DeepGlobalRegistration# nvidia-smi | tee -a $LOG Tue Mar 2 12:10:42 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.102.04 Driver Version: 450.102.04 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 GeForce RTX 2070 Off | 00000000:08:00.0 Off | N/A | | 29% 31C P8 14W / 175W | 552MiB / 7981MiB | 5% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+ ```

Currently i am running into hardware bottlenecks but beside that it seems to work. Possibly its helpful for someone

Is there any way to reduce the hardware requirements of fcgf & dgr ?