andyzeng / 3dmatch-toolbox

3DMatch - a 3D ConvNet-based local geometric descriptor for aligning 3D meshes and point clouds.
http://3dmatch.cs.princeton.edu/
BSD 2-Clause "Simplified" License
843 stars 188 forks source link

Some problems of dependencies #2

Closed hanghoo closed 7 years ago

hanghoo commented 7 years ago

Hi, Andy. Thanks for your code. I don't know whether your code could run in my platform which is CUDA 8.0, cuDNN 5.1.5 and OpenCV 3.2. If don't, how can I make it run properly by modifying it on this platform. I do the Demo: Align Two Point Clouds with 3DMatch experiment, following I run ./compile.sh. Then, the errors occurred:

hoo104@amax-1080:~/3dmatch-toolbox/core$ ./compile.sh nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). utils.hpp(15): error: namespace "std" has no member "random_device"

utils.hpp(16): error: namespace "std" has no member "mt19937"

utils.hpp(17): error: namespace "std" has no member "uniform_real_distribution"

utils.hpp(17): error: type name is not allowed

utils.hpp(17): error: identifier "dist" is undefined

5 errors detected in the compilation of "/tmp/tmpxft_00001e7b_00000000-9_demo.cpp1.ii".

1

andyzeng commented 7 years ago

Sounds like you might be missing C++11. Try updating your GCC so that it's C++11 compliant.

hanghoo commented 7 years ago

I add #include <random> in utils.hpp , then the problems are solved.

hanghoo commented 7 years ago

GAPS library is essential to the whole experiment? gaps8

hanghoo commented 7 years ago

The output of the compiled information is very long. So, I output it to a log file. out.log.zip

andyzeng commented 7 years ago

GAPS is only used to convert from meshes to TDF voxel grids. It is only necessary if you're trying to do just that. We used GAPS to convert the mesh models from Shape2Pose dataset into TDF voxel grids (for the mesh correspondence experiment).

Your compile error suggests that there's a problem with compiling the app pfm2pfm. In GAPS, you can remove that directory gaps/apps/pfm2pfm and also edit gaps/apps/Makefile by removing the line cd pfm2pfm; $(MAKE) $(TARGET).

andyzeng commented 7 years ago

In the latest commit, I've added a working version of GAPs to the repository and updated the install instructions in the README. Let me know if you run into any other problems.

hanghoo commented 7 years ago

I do the Training 3DMatch from RGB-D Reconstructions experiment. I run ./marvin train net.json When the Iteration is 4250, I find the "lr_stepsize":10000000,"max_iter": 10000000. It's so large. So I stop the running. Then, I modify the lr_stepsize and max_iter to 10000. I would like to follow the previous training data to run, and I find the 3dmatch_train_snapshot_4000.marvin. How do I use it?

andyzeng commented 7 years ago

One way to use your trained model (3dmatch_train_snapshot_4000.marvin) is to replace the model we used for the demo (3dmatch-weights-snapshot-137000.marvin), so that you can align point clouds with your own model.

hanghoo commented 7 years ago

If I want to train on the basis of the 3dmatch_train_snapshot_4000.marvin, how to do that.

andyzeng commented 7 years ago

Oh I see what you meant. Try ./marvin train net.json 3dmatch_train_snapshot_4000.marvin

hanghoo commented 7 years ago

Hi, In paper 3DMatch: Learning Local Geometric Descriptors from RGB-D Reconstructions, the method to find keypoints is random. And in demo experiment: there is a chance that alignment may fail on the first try of this demo due to bad keypoints, which are selected randomly by default. Is there any way to solve this problem?

hanghoo commented 7 years ago

In paper 3.1 Generating Training Correspondences, I have some questions. 1.

We then extract two local 3D patches around the interest point from two of these RGB-D frames, and use them as a matching pair.

How to extract two local 3D patches around the interest point from RGB-D frames? Why they are a matching pair?

2.

To find correspondences for an interest point, we map its 3D position in the reconstruction into all RGB-D frames for which the 3D point lies within the frame's camera view frustum and is not occluded.

Why we need map its 3D position in the reconstruction into all RGB-D frames.

andyzeng commented 7 years ago

You can use 3D Harris keypoints, which works well.

Given registered RGB-D frames, you can find which surface points correspond to each other from different camera views. Their respective local regions are the "matching pairs" that we used to train the network. I recommend looking at our data layer for training 3DMatch here.

hanghoo commented 7 years ago

Hi In getKeyptsAndDesc.m, I don't understand which code compute intermediate data

% System call to C++/CUDA code to compute intermediate data
        returnPath = pwd;
        cd ../../core;
        system(sprintf('export PATH=$PATH:%s',cudaBinPath));
        system(sprintf('unset LD_LIBRARY_PATH; export LD_LIBRARY_PATH=LD_LIBRARY_PATH:%s:%s; ./demo %s %s',cudaLibPath,cudnnLibPath,cloudName,'test'));
andyzeng commented 7 years ago

The code snippet navigates to 3dmatch-toolbox/core and does a system call to the ./demo executable to compute intermediate data. You may need to uncomment a chunk of code at the end of demo.cu if you want to save out the TDF voxel grid data.