ranahanocka / point2mesh

Reconstruct Watertight Meshes from Point Clouds [SIGGRAPH 2020]
MIT License
1.05k stars 121 forks source link

Temporary mesh not found #3

Closed sam598 closed 4 years ago

sam598 commented 4 years ago

The default examples crash after the first 1000 iterations. I'm not sure if this is because Manifold.exe is not running properly, or if this is a windows filepath issue.

Traceback (most recent call last):
  File "main.py", line 76, in <module>
    res=opts.manifold_res, simplify=True)
  File "C:\Users\UserName\point2mesh\utils.py", line 22, in manifold_upsample
    m_out = Mesh(tname, hold_history=True, device=mesh.device)
  File "C:\Users\UserName\point2mesh\models\layers\mesh.py", line 22, in __init__
    self.vs, self.faces = load_obj(file)
  File "C:\Users\UserName\point2mesh\utils.py", line 52, in load_obj
    f = open(file)
FileNotFoundError: [Errno 2] No such file or directory: '.\\checkpoints\\giraffe\\temp0e3d676a-1573-473a-b907-2f6acae22b06.obj'

Once it crashes there are only 3 objects in the checkpoints\giraffe folder:

opt.txt - 1kb recon_5000.obj - 159kb recon_iter - 0kb

OS: Windows 10 Python: 3.6.4 pytorch: 1.5.0 pytorch3D: 0.2.0

ranahanocka commented 4 years ago

Hi @sam598 ,

Generally speaking, the manifold.exe did not (for some reason) execute / save an upsampled mesh (and then the error happens when the code tries to load it). Can we try a couple things?

First, did you change line 6 in options.py to be the full windows path of the manifold/build location?

If the above is correct, try removing > /dev/null 2>&1 from lines 14/ 18. Are there errors printed?

If it still doesn't work, then set a break point at utils (line 15), and copy the cmd into windows bash terminal. Does it execute? If not, try to follow the example manifold code, and see if this works.

-Rana

sam598 commented 4 years ago

Ah okay. So it was a couple of different things.

I had built manifold in a sub folder of this project, so my initial path was: .\code\Manifold\build However visual studio built the executables into a release folder so it became: .\code\Manifold\build\Release However \b is a string operator so in the command line output: .\code\Manifoluild\Release\manifold So I simply placed both executrices in the .\code folder.

However I still had an issue with > /dev/null 2>&1 so removing that worked. But now I am getting a GPU out of memory exception after manifold is done processing.

RuntimeError: CUDA out of memory. Tried to allocate 448.00 MiB (GPU 0; 8.00 GiB total capacity; 5.04 GiB already allocated; 46.25 MiB free; 5.84 GiB reserved in total by PyTorch)

Is that a result of removing > /dev/null 2>&1? Or is it a result of the upsampling? I have an RTX2080 with 8GB of memory.

ranahanocka commented 4 years ago

Hi @sam598 ,

Great, so it seems that we have solved the manifold problem (your new error is related to GPU memory). Since your GPU only has 8GB of VRAM, you should modify the --faces-to-part flag. This specifies after how many faces to split the mesh into parts. Currently, up the default is --faces-to-part 8000 16000 20000, which means that the mesh is "split" into 1 "part" up to 8k faces, then between 8k-16k faces it uses 2 parts. It seems you have run out of memory likely right before the 8k faces (probably at the 7316 faces mark). So I think that --faces-to-part 7000 13000 20000 will probably work for your GPU.

About the old errors you fixed: the > /dev/null 2>&1 just suppresses the output of the manifold script, but I have removed it now in db930ac1f385a9f253fe9efcd73d5be14f4247ed so it will work on windows as well. About the \b, I think using raw string in the manifold build path will fix it, I pushed a fix for this as well here aeff7cf815fc74243a601ad4d26a7b47d39abc72, hopefully now it will work on your windows machine 'out-of-the-box'.

-Rana

sam598 commented 4 years ago

Yup, that now works perfectly out of the box.

Thank you so much for all of your help and for making such a great project. I'm excited to try it on some point cloud scans.