corecai163 / ODGNet

[AAAI24] Orthogonal Dictionary Guided Shape Completion Network for Point Cloud
13 stars 2 forks source link

Does ODGNet learn a single scale per object class #6

Closed saadehmd closed 1 week ago

saadehmd commented 1 month ago

Thanks a lot for publishing such awesome work as code. I quickly tried to run inference on generic car pointclouds (i.e.; Not those from the PCN dataset). I sampled these partial clouds from mesh models i found on internet. Now, it might be that these mesh models have slightly different scales than the models used while training PCN dataset, but i was hoping that wouldn't matter as the network would be pretty much scale-invariant. So i assumed, that the completed shapes of novel objects would be in the same scale as the novel object. But it seems like, the network predicts both coarse(seed points) and dense (output points) in the scale it learned during training. I am using the checkpoint pretrained on PCNDataset at the google drive link provided in the ReadMe

The following output shows Blue points as partial and red as predicted. Screenshot from 2024-08-13 13-11-46 ![Screenshot from 2024-08-13 13-12-02](https://github.com/user-attachments/asse Screenshot from 2024-08-13 13-12-27 ts/04c9e524-a366-4a2c-b1dd-5dbe18f550b1)

If i use a 'car.pcd' provided in the PCN test data , it looks like the predicted scale perfectly matches the partial-cloud scale. Screenshot from 2024-08-13 13-13-28

Am i getting a wrong understanding here, or is it true that network learns a single scale per category during training which is an average of the scales of all the samples of that object it has seen during training.

corecai163 commented 3 weeks ago

Hi saadehmd,

Thanks for your interest in our work. You are correct. The PCN and ShapeNet datasets are normalized before feeding into the network. For the ShapeNet dataset, it is normalized in line 46 in the ShapeNet55Dataset.py and for the PCN dataset, it is already normalized. To fit the input scale, one possible solution can be:

  1. normalize the input point cloud and obtain the scale and center of the normalization process.
  2. transform the output point cloud to its original size with the previous scale and center.

We also have the function to randomly ScalePoints in the data_transforms.py. It might be possible to obtain a better performance if you apply this random scaling function to the input point cloud during training.

To have a fair comparison with the previous point cloud completion works, we did not use random scaling and kept this part the same as the previous works.