Comments (11)
@Hugo-Pereira , I suggest a couple of things to try (some of this you may have tried already).
-
- Perhaps check to make sure the versions of Eigen are the same on your CI and your dev machine
-
- If they are the same but new(ish), try an older release of Eigen on both
-
- Analyze the compiler stack differences between your two machines -- try to get those two to converge to see if the problem stems from having slightly different environments (CMake version, gcc version)
-
- See if the results are different for a specific examples but the same for most, or are they different from most (may help to isolate the problem)
-
- Make triple-sure that the CI environment is reading inputs from the same paths, i.e. it's actually reading the same files / file versions
from cilantro.
I am using TruncatedDepthValueConverter.
The inputs are the same, and I am using docker so all libraries and dependencies are (should be? :) ) the same.
I am using Eigen 3.3.4.
I'll assemble a sample project and send it over as soon as I am able.
from cilantro.
Oops, I was reading the wrong memory addresses :\ Sorry for the confusion
The points of the point cloud match 100%. I am getting different results on the normals though, which by itself will cause the alignment to not match.
Is there a way around this? To force the results to be the same between machines
from cilantro.
Hi,
The flag only toggles behavior in cases that would be affected by the non-associativity of floating point arithmetic. If the results are consistent for a given machine, differences may be due to different hardware architectures. Which example is generating non-deterministic results?
from cilantro.
I have been running some tests, and it appears the results start differing on the output of cilantro::RGBDImagesToPointsNormalsColors. The last 6 points and colors have different values
The "example" I am talking about is from scans I am performing with an iPhone, not the ones on the repo, sorry.
This is the comparison between points on the cloud generated on my dev machine and on my CI machine.
I just confirmed the inputs I pass to RGBDImagesToPointsNormalsColors are exactly the same.
from cilantro.
If the results are consistent for a given machine, differences may be due to different hardware architectures.
Is this intended? I really need for the results to be the same across different hardware :\
from cilantro.
This is interesting. I would not be surprised by differences in the order of machine epsilon, but that does not seem to be the case here (e.g. 5th point). If input images are exactly the same, maybe you are using a custom depth converter that behaves non-deterministically? I can't think of anything else right now; all the function itself does is simple operations. If you could share a minimal example (code and data) that reproduces the problem, that would really help!
from cilantro.
Oh OK!
Regarding the normal computation, are you using single or double precision floats? I think differences look normal (no pun intended) for single precision. Are you using the NormalEstimation class or the image conversion utility?
from cilantro.
Single precision, I am using RGBDImagesToPointsNormalsColors
. I get the exact same results for the points and colors, but not for normals. Compiled cilantro with -DENABLE_NATIVE_BUILD_OPTIMIZATIONS=OFF
and -DENABLE_NON_DETERMINISTIC_PARALLELISM=OFF
from cilantro.
That function computes a cross product and normalizes it for each normal vector. Eigen's cross
product looks innocent, but it seems that the sqrt implementation used by .normalized()
uses platform-dependent intrinsics. You could try manually normalizing instead using std::sqrt
, although I'm not sure what guarantees that comes with!
Edit: This might also be worth checking:
https://eigen.tuxfamily.org/dox/TopicPreprocessorDirectives.html
It appears EIGEN_FAST_MATH
is defined by default!
from cilantro.
The thing is I am using Eigen for other stuff (like triangle mesh deformation, normals, etc), and the results are consistent between my dev machine and CI.
I'll look further into it
from cilantro.
Related Issues (20)
- how to use this library in my project? HOT 5
- A error in non_rigid_icp.cpp for Example 2: Compute a densely supported warp field HOT 1
- Can be used to create a surface from a point cloud? HOT 1
- Radius search using kdtree always returns sorted result. HOT 4
- complie smooth in ubuntu18.04,but not in win10 with VS2017 HOT 2
- transform rgbd image to point cloud
- have c# library? HOT 2
- TypeTraits.h HOT 1
- The old versions of ffmpeg libraries are not available on for Ubuntu20
- non-rigid registration speed
- Compilation issues in Win + VS HOT 3
- Questions about using this library HOT 6
- Releases
- ExternalProject and Linking, is Cilantro header-only library? HOT 8
- Add comparison to existing C++ libraries
- Interfacing to ROS
- Question about removal of the Center Of Mass in Symmetric Point-To-Plane ICP HOT 7
- Point Cloud Streams... OpenNI or something else? HOT 5
- Issues when trying to use cilantro in a different project HOT 3
- Minimal way to include cilantro in other project? HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cilantro.