Giter VIP home page Giter VIP logo

deepgmr's People

Contributors

wentaoyuan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deepgmr's Issues

Error calculation in the process of evaluating model

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

Performance on partially occluded point cloud registration

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

How to build your own training data set

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:
image
Source training and test data set.h5 file composition:
image
I copied the.h5 file in the source code to generate my own test data set file as follows:
image
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?

why the result seems not good

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:
f5a8cea8dafb7b72985f768e764eb1f
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.

svd did not converge

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)

Test on custom dataset

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.

Is it possible to provide the ModelNet unseen dataset?

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!

how to register two point clouds?

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.

Is it possible to provide the ModelNet40-Partial dataset?

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!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.