wentaoyuan / deepgmr Goto Github PK
View Code? Open in Web Editor NEWPyTorch implementation of DeepGMR: Learning Latent Gaussian Mixture Models for Registration (ECCV 2020 spotlight)
Home Page: https://wentaoyuan.github.io/deepgmr
License: Other
PyTorch implementation of DeepGMR: Learning Latent Gaussian Mixture Models for Registration (ECCV 2020 spotlight)
Home Page: https://wentaoyuan.github.io/deepgmr
License: Other
When I run the code again, I have some confusion. Here is my personal opinion:
In my opinion, there are some problems in the calculation of errors, which are as follows:
class DeepGMR(nn.Module):
def __init__(self, args):
....
def regis_err(self, T_gt, reverse=False):
....
self.r_err = rotation_error( self.T_12[:3, :3], T_gt[:3, :3] )
self.t_err = translation_error(self.T_12[:3, 3], T_gt[:3, 3])
self.rmse = rmse(self.pts1[:, :100], self.T_12, T_gt)
I think the bold text should be calculated as follows:
self.r_err = rotation_error(self.T_12[:, :3, :3], T_gt[:, :3, :3])
self.t_err = translation_error(self.T_12[:, :3, 3], T_gt[:, :3, 3])
At the same time, I think the following calculation also has problems:
def evaluate(model, loader, save_results=False, results_dir=None):
for step, (pts1, pts2, T_gt) in enumerate(tqdm(loader, leave=False)):
...
N += pts1.shape[0]
start = time()
with torch.no_grad():
loss, r_err, t_err, rmse = model(pts1, pts2, T_gt)
inference_time += time() - start
losses += loss.item()
r_errs += r_err.mean().item()
t_errs += t_err.mean().item()
rmses += rmse.mean().item()
...
log_str = log_fmt.format(
inference_time / N, preprocess_time / N,
losses / N, r_errs / N, t_errs / N, rmses / N
)
I don't think we should divide by N at the end. Because the previous calculation has averaged the error of each batch. So this should be divided by the final step number. Or use the one you used in the previous training np.mean Methods.
If there are any mistakes, please criticize and correct them
Thanks for the great work and sharing the code for other researchers. I am wondering if you have tested this algorithm on registering partially occluded point clouds with templates. Most 3D scanners are only able to get the 3D information of the front-facing surface of the target object. While we normally have full 3D meshes of the target objects. The distribution matching seems to be based on the assumption that the distribution of two related point clouds are the same. Will this matching of two distribution still generate optimal solution in this case?
Thanks,
Lei
I observed the source code for the training and testing data set is a.h5 file, I observed the internal composition, I also created a copy of the.h5 file, but the following error occurs at runtime:
Source training and test data set.h5 file composition:
I copied the.h5 file in the source code to generate my own test data set file as follows:
I think 2464 is the number of training/test data sets, 5000 is the number of points after downsampling, 3 is three-dimensional coordinate data, and the bottom transform is the coarse registration coordinate transformation matrix. So I also copied a.h5 file according to this composition, but there was an error at runtime. How to solve this problem?
Hi,I‘ve read this paper. And I just want to say the idea is really brilliant!
Then I try to run this code ,however I have got a distinctive result.
here is the picture of the training process I run:
In your paper ,you said the epoch is 100 and I trained for more than a half (50-60 epoch), but the rotation error and the translation error remained at a high level.
just like this:
Epoch 060 Step 246/276 Train: batch time 0.15, data time 0.1, loss 0.4664, rotation error 82.85, translation error 0.2303, RSME 0.4916
So should I increase the training epoch? Or I do somthing wrong?
Besides,when I download the pretrained model and use the test data to test the model, it report an error:
that seems the checkpoints is (64,80,1) but the test data is (64,3,1)
It would be great If you could give some directions.
Thanks for your reading.
Hello, when i tried to train the model, i meet with this error. Do you konw how to deal with this?
Traceback (most recent call last):
File "train.py", line 174, in
train_one_epoch(epoch, model, train_loader, writer, args.log_freq, args.plot_freq)
File "train.py", line 41, in train_one_epoch
loss, r_err, t_err, rmse = model(pts1, pts2, T_gt)
File "/home/lthach/anaconda3/envs/mink/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/lthach/deepgmr-master/model.py", line 177, in forward
self.T_12 = gmm_register(self.pi1, self.mu1, self.mu2, self.sigma2)
File "/home/lthach/deepgmr-master/model.py", line 46, in gmm_register
U, _, V = torch.svd(Ms)
RuntimeError: svd_cuda: the updating process of SBDSDC did not converge (error: 2)
Hi authors! Thanks for the great work!
I'm wondering if I can use your pretrained models to test on custom datasets.
Look forward to your reply.
I cant run the test.py and train.py, errors are as follows:
RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)
How to fix this?
Hi, I’m interested in your great work.Thanks for sharing the code and the datasets.
I want to reproduce your results, but when I follow the readme file and download data to train the model on ModelNet unseen, I could not find the ‘modelnet20.h5’. I return to the download link and make sure that the ‘modelnet20.h5’ is not in the ‘data/train’ fold. I am wondering could you share that dataset as well?
Thanks a lot!
Hello, can your approach make registration between the point clouds, which captured by sensor from different view (that means the two point cloud have overlapped with each other to some degree).IF ok could you write a tutorial on how to use your code quickly to register unseen real point cloud, when given two point clouds with the format .ply or .pcd.
Hi, thanks for sharing the code and the datasets, this is a nice work.
In the supplementary material of the paper, you performed experiments on partial point cloud pairs generated from ModelNet40, I am wondering could you share that dataset as well (like what you did for ModelNet40 Clean and ModelNet40 Noisy) so that I can run other algorithms on the dataset?
Thanks!
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.