TEASER-plusplus
TEASER-plusplus copied to clipboard
[QUESTION] Segmentation fault (core dumped)
Have you read the documentation?
- [x] Yes
Post your theoretical questions / usage questions here. I have run the example, but I use my point cloud, but I have get the result blew:
================================================== TEASER++ Python registration example
Starting scale solver. Segmentation fault (core dumped)
So I don't know what wrong with my code ?
solver_params = teaserpp_python.RobustRegistrationSolver.Params()
solver_params.cbar2 = 1
solver_params.noise_bound = NOISE_BOUND
solver_params.estimate_scaling = False
solver_params.inlier_selection_mode = teaserpp_python.RobustRegistrationSolver.INLIER_SELECTION_MODE.PMC_HEU
solver_params.rotation_estimation_algorithm = teaserpp_python.RobustRegistrationSolver.ROTATION_ESTIMATION_ALGORITHM.GNC_TLS
solver_params.rotation_gnc_factor = 1.4
solver_params.rotation_max_iterations = 100
solver_params.rotation_cost_threshold = 1e-12
solver_params.kcore_heuristic_threshold = 0.3
above is my solver params
@powerm Can you share the arguments you supplied to CMake for building TEASER++? Did you enable BUILD_TEASER_FPFH?
I have the same problem. How to solve?
@Liys0558 please open a new issue with the exact steps you used to build TEASER++ & run the example. Thank you.
I am was having similar issues and resolved this by calling the executable with the prefix OMP_NUM_THREADS=12
, example: OMP_NUM_THREADS=12 ./teaser_cpp_ply
.
Is there any way to make this work with more than 12 threads?
@chris9182 The bug is in the PMC library we are currently using for max clique finding. I'm still working on a fix (and by fix I mean actually locating the bug :) ), but currently OMP_NUM_THREADS=12 is the only solution.
I am having the same issue while running the python example. Is there is a way to fix it for python ? the cpp version works in my case without setting OMP_NUM_THREADS
Does anyone know a workaround for the python binding?
I have tried setting os.environ['OMP_NUM_THREADS'] = "12"
but I still run into segmentation faults.
Quick update:
- I'm quite sure that the segmentation fault was caused by the PMC library, since setting the INLIER_SELECTION_MODE to NONE fixed the segmentation faults.
- I was iterating over a list of point clouds to register. I first created the teaserpp_solver object and then iterated over the list to solve the problems, always reusing the same teaserpp_solver, and after solving 4 problems segmentation fault happened. I was able to register all my point clouds by recreating the teaserpp_solver at each iteration. While not the ideal solution it's a decent temporary workaround.
I am was having similar issues and resolved this by calling the executable with the prefix
OMP_NUM_THREADS=12
, example:OMP_NUM_THREADS=12 ./teaser_cpp_ply
. Is there any way to make this work with more than 12 threads?
This reply works well for me. Thank you
@fdila sorry for the late response, but I have fixed the seg fault issue caused by mis-allocating lists by using the incorrect number of threads in my fork of the PMC library. In addition, after each solve, you need to call reset()
on the solver before running again.
If you pull from the latest develop
branch, clear all CMake cache and rebuild it should work without using OMP_NUM_THREADS=12.