yuxng / DA-RNN

Semantic Mapping with Data Associated Recurrent Neural Networks
MIT License
170 stars 72 forks source link

Pangolin v.05 does not provide an namespace picojson / undefined reference to pangolin #7

Open kevinkit opened 7 years ago

kevinkit commented 7 years ago

Hello,

When trying to compile the kinect_fusion with the suggested version from #2 , I found out that all the data code in camera relies on the namespace "picojson", while the version picojson v.0.5 does not provide this namepsace, it is "pangolin::json" instead, like described in here: picojson.h

This change is in the master-branch under Namespace-Change

So, I have the following questions(s): Was Pangolin v.0.5 used or a newer version that uses the new namespaces?

We checkout the tag v0.5 to get the version 0.5 - however this results in the mentioned error, but when we use the newest versin an unresolved symbol error gets thrown from kinect_fusion.cpp, stating that it cannot find some Pangolin functions - which I assume are just in the 0.5 version.

So can you please tell us the correct version / branch / git commit number ?

Thank you really much for your help

yuxng commented 7 years ago

I see. I downloaded a new version sometime ago and upgraded the code. The SHA1 ID of Pangolin I am using: 7bab0ae6b3e0971ae16e872ef8f5637d571ac2ac

kevinkit commented 7 years ago

Thank you really much for your help. Now the namespace erros are gone, but the unresolved symbol errors stays.

When trying to build the kinect_fusion.cpp The error gets thrown:

undefined reference to 'pangolin::CreateWindowAndBInd(std::string, int, int, pangolin::Params const&)

The Same happens with some other functions relying on Pangolin. In some other functions from render_kinect.cpp, too. But all these functions have one thing in common: They all have a string as an argument, do you have any idea where the problem may origins?

Have you changed the code from Pangolin in any way?

Maybe Pangolin does not like to be in a Docker image and needs to be set free to work with the correct frame buffers and so on?

Thank you for your advice

yuxng commented 7 years ago

No, I have not changed the Pangolin code.

mafan commented 7 years ago

@kevinkit Hi, I met the same error undefined reference to 'pangolin::CreateWindowAndBInd(std::string, int, int, pangolin::Params const&) when compiling the kinect_fusion, have you found the solution?

kevinkit commented 7 years ago

No, not really.

Are you on a virtual machine or on a docker image?

When you go the build folder of Pangolin, then into examples and try to run the SimpleHelloPangolin example, what does it say?

In my case it says that it needs a GLX version greater than 1.3 , which is currently not available on the machine where the docker image runs.

However if you are on a native linux-machine it should work, or maybe try to update GLX.

mafan commented 7 years ago

@kevinkit Thanks for your reply. I have tried, and all examples of Pangolin could work...

kevinkit commented 7 years ago

Maybe check where your libpangolin.so is located and if the LD_LIBRARY_PATH includes it

Am 13.07.2017 13:03 schrieb "mafan" notifications@github.com:

@kevinkit https://github.com/kevinkit Thanks for your reply. I have tried, and all examples of Pangolin could work...

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yuxng/DA-RNN/issues/7#issuecomment-315046286, or mute the thread https://github.com/notifications/unsubscribe-auth/AGhecT7K3OEL1_0nQZEK1CQemboVsPTuks5sNflygaJpZM4OQquU .

yuxng commented 7 years ago

Hi guys, have the problem fixed? I am not sure what's wrong with the Pangolin here

kevinkit commented 7 years ago

@mafan can you please check your glxversion? you can do so by running "glxinfo". To install glxinfo you need to install mesa-utils. If it is smaller than 1.3, than this might be the problem.

We made the assumption that this specific pangolin requires OpenGL acceleration (not pure OpenGL but opengl accelerated) which cannot be done through any kind of remote desktop connection. Thus, the code will only work on a native machine.

We will report back once we have tested our theory on new hardware.

yuxng commented 7 years ago

That's correct. If you want to run the KinectFusion module, you need to have a window open locally. You can not run it remotely. If you just want to use the segmentation, you can disable the KinectFusion and run it remotely.

kevinkit commented 7 years ago

Ah thank your for this information, however how can I just use the segmentation and disable the Kinectfusion? As far as I understood, the kinect-fusion is only for showing the results, or does it provide any further information needed for the inference?

Again, thank you really much for your advice

yuxng commented 7 years ago

You can add the flag "--kfusion 0" to the testing script in order to disable KinectFusion. KinectFusion provides data association to the RNN during the inference. If it is disabled, the code would use the ground truth camera poses to compute the data association. Check our paper for details.

mafan commented 7 years ago

@kevinkit The glversion is 1.4, and I am using a native machine.

JackHenry1992 commented 7 years ago

hi, @yuxng , as you said " If it is disabled, the code would use the ground truth camera poses to compute the data association", do you mean that kinect-fusion is use to calculating camera poses? In your paper , I see that kinect-fusion also do somethings like 3D pointclouds fusion ( C. Joint 3D Mapping and Semantic Labeling -- Semantic Fusion), Is it needed to run your kinectfusion code if I want to execute 3D pointclouds fusion

Another question about resnet50 . I've downloaded pretrained-model vgg16.npy and trained your code successfully. Does it needs to download your pretrained-model of resnet50 if training with resnet50?

kevinkit commented 7 years ago

@mafan @yuxng regarding this error, - I just want to get basic errors out of the way, so I might ask a little naive question here: Does the kinect-fusion reads data provided or does it need a Kinect plugged into the PC ?

yuxng commented 7 years ago

@JackHenry1992 Yes, if you want to 3D point cloud fusion, you need to run KinectFusion. resnet50 is not very well tested in the code. I do not plan to support it in the near future.

@kevinkit The KinectFusion reads data from files in the code.

yuxng commented 7 years ago

If you still have problems with Pangolin, try add the flag "-D_GLIBCXX_USE_CXX11_ABI=0" to the C/C++ compiler when compiling Pangolin with cmake.

JackHenry1992 commented 7 years ago

Hi, @yuxng , is main() in your kinect_fusion.cpp used in your DA-RNN system? I see that lib/fcn/test.py doesn't need this main() function and direct use feed_data API in test.py as follows image

Can I just comment video_input of main() cause I got error about pangolin when built kinectfusion.

kevinkit commented 7 years ago

We werer able to fix this problem by adding the following line to the CMakeList.txt from Pangolin:

add_definiton(-D_GLIBCXX_USE_CXX11_ABI=0)

However, we also installed all (everything you can get with apt-get) dependencies and further applications that are listed in Pangolin , in the https://github.com/stevenlovegrove/Pangolin/blob/master/README.md However, we had to run the make file for the kinect fusion kit twice ...

@JackHenry1992 @mafan can you check if this solves the issue for you? If it does I will close the issue, if not I will leave it open.

Also we had to do all the steps mentioned by #10 , especially copying of the eigen files.

yuxng commented 7 years ago

main() in your kinect_fusion.cpp is NOT used. The python code in testing directly calls other functions, but not the main().

JackHenry1992 commented 7 years ago

Yes, this issue can be closed

mafan commented 7 years ago

@kevinkit @yuxng That solution is good! Thanks!