vlar-group / growsp Goto Github PK
View Code? Open in Web Editor NEWπ₯GrowSP in PyTorch (CVPR 2023)
π₯GrowSP in PyTorch (CVPR 2023)
Hi,Thanks for your code.
I did not see the visual code when I ran the eval code, you can share the subsequent visual code, which will help me a lot, thank you very much
Thanks this meaningful research!
I want to known, if posible, how authors render the GIF for visualization as shown in README.
/home/gj/anaconda3/envs/growsp/bin/python /home/gj/GrowSP-main/train_S3DIS.py
/home/gj/anaconda3/envs/growsp/lib/python3.8/site-packages/MinkowskiEngine-0.5.4-py3.8-linux-x86_64.egg/MinkowskiEngine/init.py:36: UserWarning: The environment variable OMP_NUM_THREADS
not set. MinkowskiEngine will automatically set OMP_NUM_THREADS=16
. If you want to set OMP_NUM_THREADS
manually, please export it on the command line before running a python script. e.g. export OMP_NUM_THREADS=12; python your_program.py
. It is recommended to set it below 24.
warnings.warn(
/home/gj/anaconda3/envs/growsp/lib/python3.8/site-packages/sklearn/utils/linear_assignment_.py:18: FutureWarning: The linear_assignment_ module is deprecated in 0.21 and will be removed from 0.23. Use scipy.optimize.linear_sum_assignment instead.
warnings.warn(
--- Logging error ---
Traceback (most recent call last):
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 1085, in emit
msg = self.format(record)
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 929, in format
return fmt.format(record)
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 668, in format
record.message = record.getMessage()
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 373, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/home/gj/GrowSP-main/train_S3DIS.py", line 306, in
main(args, logger)
File "/home/gj/GrowSP-main/train_S3DIS.py", line 70, in main
logger.info('Training Areas', training_areas)
Message: 'Training Areas'
Arguments: (['Area_1', 'Area_2', 'Area_3', 'Area_4', 'Area_6'],)
--- Logging error ---
Traceback (most recent call last):
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 1085, in emit
msg = self.format(record)
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 929, in format
return fmt.format(record)
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 668, in format
record.message = record.getMessage()
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/logging/init.py", line 373, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/home/gj/GrowSP-main/train_S3DIS.py", line 306, in
main(args, logger)
File "/home/gj/GrowSP-main/train_S3DIS.py", line 70, in main
logger.info('Training Areas', training_areas)
Message: 'Training Areas'
Arguments: (['Area_1', 'Area_2', 'Area_3', 'Area_4', 'Area_6'],)
Res16FPN18(
(conv0p1s1): MinkowskiConvolution(in=6, out=32, kernel_size=[5, 5, 5], stride=[1, 1, 1], dilation=[1, 1, 1])
(bn0): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(conv1p1s2): MinkowskiConvolution(in=32, out=32, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block1): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv2p2s2): MinkowskiConvolution(in=32, out=32, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block2): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=32, out=64, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv3p4s2): MinkowskiConvolution(in=64, out=64, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn3): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block3): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=64, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=64, out=128, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv4p8s2): MinkowskiConvolution(in=128, out=128, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn4): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block4): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=128, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=128, out=256, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(delayer1): MinkowskiLinear(in_features=256, out_features=128, bias=False)
(delayer2): MinkowskiLinear(in_features=128, out_features=128, bias=False)
(delayer3): MinkowskiLinear(in_features=64, out_features=128, bias=False)
(delayer4): MinkowskiLinear(in_features=32, out_features=128, bias=False)
(relu): MinkowskiReLU()
)
computing point feats ....
computing pseduo labels...
labelled points ratio 0.84 clustering time: 48.50s
Superpoints oAcc 93.18 IoUs| mIoU 81.46 | 94.94 91.99 85.66 86.60 74.83 78.93 77.80 88.35 84.25 88.16 88.72 37.30
Primitives oAcc 59.55 IoUs| mIoU 22.61 | 57.05 46.03 53.70 1.13 0.00 18.02 23.56 19.41 30.60 0.00 21.87 0.00
Train Epoch: 1 [20/21 (95%)]20, Loss: 5.6270502567, lr: 9.982e-02, Elapsed time: 10.4020s(20 iters)
Train Epoch: 2 [20/21 (95%)]41, Loss: 5.5789418936, lr: 9.963e-02, Elapsed time: 9.9852s(20 iters)
Train Epoch: 3 [20/21 (95%)]62, Loss: 5.5750957489, lr: 9.944e-02, Elapsed time: 10.0892s(20 iters)
Train Epoch: 4 [20/21 (95%)]83, Loss: 5.5687583208, lr: 9.925e-02, Elapsed time: 9.9891s(20 iters)
Train Epoch: 5 [20/21 (95%)]104, Loss: 5.5683251858, lr: 9.906e-02, Elapsed time: 10.4144s(20 iters)
Train Epoch: 6 [20/21 (95%)]125, Loss: 5.5693419456, lr: 9.887e-02, Elapsed time: 10.3591s(20 iters)
Train Epoch: 7 [20/21 (95%)]146, Loss: 5.5645267963, lr: 9.869e-02, Elapsed time: 9.8720s(20 iters)
Train Epoch: 8 [20/21 (95%)]167, Loss: 5.5651976585, lr: 9.850e-02, Elapsed time: 10.2304s(20 iters)
Train Epoch: 9 [20/21 (95%)]188, Loss: 5.5588910818, lr: 9.831e-02, Elapsed time: 10.5668s(20 iters)
Train Epoch: 10 [20/21 (95%)]209, Loss: 5.5650004387, lr: 9.812e-02, Elapsed time: 10.0282s(20 iters)
Merging Primitives
Epoch: 10, oAcc 52.05 mAcc 22.16 IoUs| mIoU 15.79 | 85.25 37.50 42.24 0.02 0.00 1.10 0.64 11.51 3.31 0.03 7.89 0.00
computing point feats ....
computing pseduo labels...
labelled points ratio 0.84 clustering time: 48.08s
Superpoints oAcc 93.18 IoUs| mIoU 81.46 | 94.94 91.99 85.66 86.60 74.83 78.93 77.80 88.35 84.25 88.16 88.72 37.30
Primitives oAcc 75.04 IoUs| mIoU 34.88 | 87.34 83.06 65.95 11.11 0.00 26.08 34.00 37.87 41.50 2.70 28.98 0.00
Train Epoch: 11 [20/21 (95%)]230, Loss: 4.6528557539, lr: 9.793e-02, Elapsed time: 10.1864s(20 iters)
Train Epoch: 12 [20/21 (95%)]251, Loss: 4.6018107891, lr: 9.774e-02, Elapsed time: 10.6370s(20 iters)
Train Epoch: 13 [20/21 (95%)]272, Loss: 4.6047326326, lr: 9.755e-02, Elapsed time: 9.9426s(20 iters)
Train Epoch: 14 [20/21 (95%)]293, Loss: 4.5702477932, lr: 9.736e-02, Elapsed time: 10.1286s(20 iters)
Train Epoch: 15 [20/21 (95%)]314, Loss: 4.5666304827, lr: 9.717e-02, Elapsed time: 10.1867s(20 iters)
Train Epoch: 16 [20/21 (95%)]335, Loss: 4.5555877209, lr: 9.698e-02, Elapsed time: 10.0583s(20 iters)
Train Epoch: 17 [20/21 (95%)]356, Loss: 4.5542288780, lr: 9.679e-02, Elapsed time: 10.3939s(20 iters)
Train Epoch: 18 [20/21 (95%)]377, Loss: 4.5525953531, lr: 9.660e-02, Elapsed time: 10.1124s(20 iters)
Train Epoch: 19 [20/21 (95%)]398, Loss: 4.5360535145, lr: 9.641e-02, Elapsed time: 10.4379s(20 iters)
Train Epoch: 20 [20/21 (95%)]419, Loss: 4.5468521357, lr: 9.622e-02, Elapsed time: 10.1236s(20 iters)
Merging Primitives
Epoch: 20, oAcc 67.55 mAcc 31.43 IoUs| mIoU 24.90 | 83.22 85.89 58.02 0.03 0.58 5.07 0.85 29.90 24.17 1.51 9.55 0.03
computing point feats ....
computing pseduo labels...
labelled points ratio 0.84 clustering time: 46.09s
Superpoints oAcc 93.18 IoUs| mIoU 81.46 | 94.94 91.99 85.66 86.60 74.83 78.93 77.80 88.35 84.25 88.16 88.72 37.30
Primitives oAcc 77.39 IoUs| mIoU 38.31 | 89.22 87.58 66.09 17.49 0.00 25.00 29.24 49.12 55.40 2.18 38.37 0.00
Traceback (most recent call last):
File "/home/gj/GrowSP-main/train_S3DIS.py", line 306, in
main(args, logger)
File "/home/gj/GrowSP-main/train_S3DIS.py", line 93, in main
train(train_loader, logger, model, optimizer, loss, epoch, scheduler, classifier)
File "/home/gj/GrowSP-main/train_S3DIS.py", line 212, in train
loss_sem = loss(logits * 3, pseudo_labels_comp).mean()
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1110, in _call_impl
return forward_call(*input, **kwargs)
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 1163, in forward
return F.cross_entropy(input, target, weight=self.weight,
File "/home/gj/anaconda3/envs/growsp/lib/python3.8/site-packages/torch/nn/functional.py", line 2996, in cross_entropy
return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index, label_smoothing)
ValueError: Expected input batch_size (316986) to match target batch_size (316985).
Process finished with exit code 1
Can I try this on my own dataοΌAnd I take it that If I would use the kitti data,I have to add the labels.Is the labels obligatory condition?Thank you for your brilliant work
"I've trained a model using the S3DIS dataset and obtained a model file (.pth) along with logs stored in the ./ckpt/S3DIS directory. How can I apply this trained model to another dataset for inference or evaluation purposes? What steps or modifications should I make in the code to load this trained model and use it with a different dataset
Hi this is a unique project as it is an unsupervised approach, the result looks promising, great work! I have some questions and really appreciate if you can help to provide some suggestions:
I have some point cloud in (x,y,z, intensity) format, Is it possible I can run my custom data using this project? if yes, which script should I start with? should I prepare some thing and run scripts under data_prepare
as well?
I assume this unsupervised model, essentially cluster approach, but then what is the meaning of training
in this project ? Can I directly run my dataset without training? what is the extra value of do the training here?
I successfully run : ``CUDA_VISIBLE_DEVICES=0, python train_SemanticKITTI.py` , how to interpret the output? where the result files stored ?
Thank you,
Chui,
I can run traing script on my our dataset,but after several epoches(total 400) ,sometimes 260,sometimes 280.It throws an exceptionοΌ
computing pseduo labels...
Traceback (most recent call last):
File "train_Custom.py", line 308, in
main(args, logger)
File "train_Custom.py", line 121, in main
train(train_loader, logger, model, optimizer, loss, epoch, scheduler, classifier)
File "train_Custom.py", line 220, in train
scheduler.step()
File "/home/hanson/anaconda3/envs/growsp2/lib/python3.8/site-packages/torch/optim/lr_scheduler.py", line 152, in step
values = self.get_lr()
File "/home/hanson/anaconda3/envs/growsp2/lib/python3.8/site-packages/torch/optim/lr_scheduler.py", line 1571, in get_lr
raise ValueError("Tried to step {} times. The specified number of total steps is {}"
ValueError: Tried to step 60002 times. The specified number of total steps is 60000
How can I fix it
Thanks for your excellent work, your masterpiece impressed me a lot.
I read your paper in CVPR Open Access version, however I can't see the appendix in it which you mention "Implementation details are in Appendix".
Thanks a lot.
Hi! Thanks for yuo great work. I would like to know how long it will take to train the whole process?
I am trying to mimic the S3DIS dataset using my own dataset, which consists of point cloud data from building facades. However, when I run the code, I encounter the following problem:
(growsp) ome13@DESKTOP-6SSAF8Q:~/GrowSP$ python train_S3DIS.py
/home/ome13/miniconda3/envs/growsp/lib/python3.8/site-packages/sklearn/utils/linear_assignment_.py:18: FutureWarning: The linear_assignment_ module is deprecated in 0.21 and will be removed from 0.23. Use scipy.optimize.linear_sum_assignment instead.
warnings.warn(
Training Areas: ['Area_1', 'Area_2', 'Area_3', 'Area_4', 'Area_6']
Res16FPN18(
(conv0p1s1): MinkowskiConvolution(in=6, out=32, kernel_size=[5, 5, 5], stride=[1, 1, 1], dilation=[1, 1, 1])
(bn0): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(conv1p1s2): MinkowskiConvolution(in=32, out=32, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block1): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=32, out=32, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv2p2s2): MinkowskiConvolution(in=32, out=32, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn2): MinkowskiBatchNorm(32, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block2): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=32, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=32, out=64, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=64, out=64, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv3p4s2): MinkowskiConvolution(in=64, out=64, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn3): MinkowskiBatchNorm(64, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block3): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=64, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=64, out=128, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=128, out=128, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(conv4p8s2): MinkowskiConvolution(in=128, out=128, kernel_size=[2, 2, 2], stride=[2, 2, 2], dilation=[1, 1, 1])
(bn4): MinkowskiBatchNorm(128, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
(block4): Sequential(
(0): BasicBlock(
(conv1): MinkowskiConvolution(in=128, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
(downsample): Sequential(
(0): MinkowskiConvolution(in=128, out=256, kernel_size=[1, 1, 1], stride=[1, 1, 1], dilation=[1, 1, 1])
(1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.02, affine=True, track_running_stats=True)
)
)
(1): BasicBlock(
(conv1): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm1): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): MinkowskiConvolution(in=256, out=256, kernel_size=[3, 3, 3], stride=[1, 1, 1], dilation=[1, 1, 1])
(norm2): MinkowskiBatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): MinkowskiReLU()
)
)
(delayer1): MinkowskiLinear(in_features=256, out_features=128, bias=False)
(delayer2): MinkowskiLinear(in_features=128, out_features=128, bias=False)
(delayer3): MinkowskiLinear(in_features=64, out_features=128, bias=False)
(delayer4): MinkowskiLinear(in_features=32, out_features=128, bias=False)
(relu): MinkowskiReLU()
)
computing point feats ....
[Open3D WARNING] [KDTreeFlann::SetRawData] Failed due to no data.
Traceback (most recent call last):
File "train_S3DIS.py", line 307, in <module>
main(args, logger)
File "train_S3DIS.py", line 93, in main
classifier = cluster(args, logger, cluster_loader, model, epoch, start_grow_epoch, is_Growing)
File "train_S3DIS.py", line 143, in cluster
feats, labels, sp_index, context = get_sp_feature(args, cluster_loader, model, current_growsp)
File "/home/ome13/GrowSP/lib/utils.py", line 94, in get_sp_feature
pfh = torch.cat(pfh, dim=0)
NotImplementedError: There were no tensor arguments to this function (e.g., you passed an empty list of Tensors), but no fallback function is registered for schema aten::_cat. This usually means that this function requires a non-empty list of Tensors, or that you (the operator writer) forgot to register a fallback function. Available functions are [CPU, CUDA, QuantizedCPU, BackendSelect, Python, Named, Conjugate, Negative, ADInplaceOrView, AutogradOther, AutogradCPU, AutogradCUDA, AutogradXLA, AutogradLazy, AutogradXPU, AutogradMLC, AutogradHPU, AutogradNestedTensor, AutogradPrivateUse1, AutogradPrivateUse2, AutogradPrivateUse3, Tracer, UNKNOWN_TENSOR_TYPE_ID, Autocast, Batched, VmapMode].
CPU: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/build/aten/src/ATen/RegisterCPU.cpp:18433 [kernel]
CUDA: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/build/aten/src/ATen/RegisterCUDA.cpp:26496 [kernel]
QuantizedCPU: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/build/aten/src/ATen/RegisterQuantizedCPU.cpp:1068 [kernel]
BackendSelect: fallthrough registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/core/BackendSelectFallbackKernel.cpp:3 [backend fallback]
Python: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/core/PythonFallbackKernel.cpp:47 [backend fallback]
Named: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/core/NamedRegistrations.cpp:7 [backend fallback]
Conjugate: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/ConjugateFallback.cpp:18 [backend fallback]
Negative: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/native/NegateFallback.cpp:18 [backend fallback]
ADInplaceOrView: fallthrough registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/core/VariableFallbackKernel.cpp:64 [backend fallback]
AutogradOther: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradCPU: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradCUDA: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradXLA: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradLazy: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradXPU: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradMLC: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradHPU: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradNestedTensor: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradPrivateUse1: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradPrivateUse2: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
AutogradPrivateUse3: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/VariableType_3.cpp:10141 [autograd kernel]
Tracer: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/torch/csrc/autograd/generated/TraceType_3.cpp:11560 [kernel]
UNKNOWN_TENSOR_TYPE_ID: fallthrough registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/autocast_mode.cpp:466 [backend fallback]
Autocast: fallthrough registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/autocast_mode.cpp:305 [backend fallback]
Batched: registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/BatchingRegistrations.cpp:1016 [backend fallback]
VmapMode: fallthrough registered at /opt/conda/conda-bld/pytorch_1639180588308/work/aten/src/ATen/VmapModeRegistrations.cpp:33 [backend fallback]
(growsp) ome13@DESKTOP-6SSAF8Q:~/GrowSP$ python train_S3DIS.py
/home/ome13/miniconda3/envs/growsp/lib/python3.8/site-packages/sklearn/utils/linear_assignment_.py:18: FutureWarning: The linear_assignment_ module is deprecated in 0.21 and will be removed from 0.23. Use scipy.optimize.linear_sum_assignment instead.
warnings.warn(
Training Areas: ['Area_1', 'Area_2', 'Area_3', 'Area_4', 'Area_6']
Traceback (most recent call last):
File "train_S3DIS.py", line 307, in <module>
main(args, logger)
File "train_S3DIS.py", line 74, in main
train_loader = DataLoader(trainset, batch_size=args.batch_size, shuffle=True, collate_fn=cfl_collate_fn(), num_workers=args.workers, pin_memory=True, worker_init_fn=worker_init_fn(seed))
File "/home/ome13/miniconda3/envs/growsp/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 268, in __init__
sampler = RandomSampler(dataset, generator=generator)
File "/home/ome13/miniconda3/envs/growsp/lib/python3.8/site-packages/torch/utils/data/sampler.py", line 102, in __init__
raise ValueError("num_samples should be a positive integer "
ValueError: num_samples should be a positive integer value, but got num_samples=0
My data structure is like this:
S3DIS
βββ ZHC_Building_Facade
β βββ Area_1
β β βββ buildings_1
β β β βββ Annotations
β β β βββ advboard_1.txt
β β β βββ clutter_1.txt
β β β βββ clutter_7.txt
β β β βββ column_7.txt
β β β βββ wall_11.txt
β β β βββ wall_9.txt
β β β βββ window_17.txt
β β β βββ window_25.txt
β β β βββ window_6.txt
β β βββ buildings_2
β β βββ ...
β βββ Area_2
β βββ Area_3
β βββ Area_4
β βββ Area_5
β βββ Area_6
β βββ Area_7
βββ initial_superpoints
β βββ Area_1_buildings_10_superpoint.npy
β βββ Area_2_buildings_7_superpoint.npy
β βββ Area_4_buildings_2_superpoint.npy
β βββ Area_5_buildings_8_superpoint.npy
β βββ ...
βββ input
βββ Area_1_buildings_1.ply
βββ Area_2_buildings_2.ply
βββ Area_3_buildings_8.ply
βββ Area_4_buildings_9.ply
βββ ...
Hi, thanks for your interesting work and for sharing your code.
I just read your paper and have a question regarding the evaluation procedure.
The paper explains in 3.4. Implementation that the evaluation procedure relies on K-means with K=C the number of classes, followed by a Hungarian Matching step. So far this is clear to me. In section 4.5. Comparison with Self-supervised Learning, the paper proposes to compare the expressivity of the learnt point features with the features from other self-supervized learning methods. Two evaluation procedures are proposed: the K-Means+Hungarian Matching, and linear probing. This sounds clear to me too. However, when comparing S3DIS Area 5 performance communicated in Table 1 and Table 8, I am inclined to believe that the evaluation procedure used in Table 1 is actually linear probing.
Can you please clarify this for me ? If I am mistaken, what would be the reason for the performance drop of your method with K-means+Hungarian Matching in Table 8 ?
Thanks in advance !
HiοΌI have a try on our custom data.Every frame point cloud is bigger than semantic kitti(two times).It works on semantic kitti with batch-size 8 (My GPU is 3090 12GB mem).But if I use my data,Even though I reduce the batch size to 1 it throws exception:
**RuntimeError: CUDA out of memory. Tried to allocate 5.07 GiB (GPU 0; 11.75 GiB total capacity; 5.80 GiB already allocated; 3.20 GiB free; 6.41
GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF**
Can I change other hyperparameters to make it work?
Hi! Thanks for sharing your code.
I tried it for S3DIS dataset and am facing the following error when I ran the CUDA_VISIBLE_DEVICES=0, python train_S3DIS.py command:
RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)
.
Thank you in advance for your help.
Hi! Thanks for sharing your code.
May I ask from which part of the code you can get the set of points contained in each superpointοΌ
Look forward to hearing from you soon.
Hi, thank you very much for your code, I would like to know how much GPU memory is needed to train it, and how long does the GrowSP take to complete a training?
Hello, thank you for your work. I would like to ask why there are large black areas in the visualization results when I use my own dataset (ancient building data) to construct initial superpoints. I think it may be unrecognized areas. So, for the hyperparameters in VCCS and region growing algorithms, how should I adjust them to achieve the expected results? Looking forward to your prompt reply!
Hi,thank you very much for you code,when I encounter issues while executing the command "pip install -U MinkowskiEngine --install-option="--blas=openblas" -v --no-deps"γThe error message is as follows:
ERROR: Command errored out with exit status 1: /home/zhaojing/anaconda3/envs/growsp/bin/python3.8 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7uu6ivt6/minkowskiengine_3133980132d24dbc9b1e9acdc4503d1e/setup.py'"'"'; file='"'"'/tmp/pip-install-7uu6ivt6/minkowskiengine_3133980132d24dbc9b1e9acdc4503d1e/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-9majr4b7/install-record.txt --single-version-externally-managed --compile --install-headers /home/zhaojing/anaconda3/envs/growsp/include/python3.8/MinkowskiEngine --blas=openblas Check the logs for full command output.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.