dazinovic / neural-rgbd-surface-reconstruction

Official implementation of the CVPR 2022 Paper "Neural RGB-D Surface Reconstruction"

Home Page:https://dazinovic.github.io/neural-rgbd-surface-reconstruction/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

evaluation on scene0005

chensjtu opened this issue · comments

Thanks for your wonderful work! I have got the reconed mesh as:
image

So I wonder: Are the wired blocks around the scene proposed? If so, how can I alleviate their effects in the evaluation period? I have tried code from retrieval-fuse. While I get the metric with: Iou: 0.5294117647058824,chamferL1:0.21610536071424724, normals_correctness:0.7708863087762083, f-score1:0.8835909549382578, f-score-1.5:0.9605475835329947

looking forward to your kind reply!

In the appendix: ''Specifically, I noticed that we subdivide all meshes to have a maximum edge length of below 1.5 cm and use the ground truth trajectory to detect vertices visible in at least one camera. Triangles which have no visible vertices, either due to not being in any of the viewing frusta or due to being occluded by other geometry, are culled.''
Can you share the code with culling vertices so that we can re-perform your results in the paper?

commented

Hi chensjtu,

Unfortunately, I won't have time to clean up the code and push it to the repo in the next few days, so for now I'll share the scripts I used: http://kaldir.vc.in.tum.de/neural_rgbd/frustum_culling.zip

You need to align the results with the GT mesh by using the transform_mesh script. Then you can cull with cull_mesh.py. Let me know if anything is missing/unclear there.

there is a func called "load_poses_nan" refed in transform_mesh.py as well as cull_mesh, which is not in dataloader_util.py, maybe this func is similar to ``load_poses''?

from dataloader_util import load_poses_nan

def load_poses(posefile):
    file = open(posefile, "r")
    lines = file.readlines()
    file.close()
    poses = []
    valid = []
    lines_per_matrix = 4
    for i in range(0, len(lines), lines_per_matrix):
        if 'nan' in lines[i]:
            valid.append(False)
            poses.append(np.eye(4, 4, dtype=np.float32).tolist())
        else:
            valid.append(True)
            pose_floats = [[float(x) for x in line.split()] for line in lines[i:i+lines_per_matrix]]
            poses.append(pose_floats)

    return poses, valid
commented

Yeah, it's identical to load_poses.

I've gotten similar while slightly lower than the results of the paper; thanks for your kindly instruction!

Anyone please help me to run this code on ScanNet. Struggling for last two weeks.

commented

Anyone please help me to run this code on ScanNet. Struggling for last two weeks.

I have the same