Git Product home page Git Product logo

ceres-solver / ceres-solver Goto Github PK

View Code? Open in Web Editor NEW
3.6K 100.0 1.0K 31.15 MB

A large scale non-linear optimization library

Home Page: http://ceres-solver.org/

License: Other

CMake 3.18% C++ 95.45% C 0.35% Python 0.63% Shell 0.08% Starlark 0.32%
c-plus-plus numerical-optimization nonlinear-optimization-algorithms nonlinear-programming nonlinear-least-squares bundle-adjustment bfgs levenberg-marquardt gauss-newton trust-region

ceres-solver's Introduction

Android Linux macOS Windows

Ceres Solver

Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. It is a feature rich, mature and performant library which has been used in production at Google since 2010. Ceres Solver can solve two kinds of problems.

  1. Non-linear Least Squares problems with bounds constraints.
  2. General unconstrained optimization problems.

Please see ceres-solver.org for more information.

ceres-solver's People

Contributors

ahojnnes avatar alessandro-gentilini avatar alexkaratarakis avatar alexsmac avatar arnaudgelas avatar austinschuh avatar bjornpiltz avatar csukuangfj avatar darglein avatar dmitriykorchemkin avatar drigz avatar huangqinjin avatar johannesbeck avatar joydeep-b avatar keir avatar maximsmolskiy avatar neroburner avatar nikolausdemmel avatar nocnokneo avatar pablospe avatar petters avatar pmoulon avatar robotsaurus avatar s-o-t avatar sandwichmaker avatar sergeyvfx avatar sergiud avatar siri3us avatar sweeneychris avatar tobischluter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ceres-solver's Issues

Generalize the visibility based preconditioning idea to general sparse problems

Original issue 12 created by sandwichmaker on 2012-05-05T18:04:28.000Z:

The key idea of visibility based preconditioning can be generalized to general sparse least squares problem by treating the sparsity structure of the jacobian as "visibility". Two things are needed. A fast clustering/reordering algorithm and then a simple and fast outer product algorithm that can be used for computing the entries of the preconditioner before it is factorized. This code can probably be pulled out of schur_eliminator_impl.h

Fix warnings about signed/unsigned comparison in fixed_array.h

Original issue 42 created by sandwichmaker on 2012-06-05T17:18:53.000Z:

When compiling a program using AutoDiffCostFunction, gcc emitted several warnings about signed/unsigned comparison. These originated from fixed_array.h. Changing a loop counter from int to FixedArray::size_type and explicitly casting a 0 to size_type mutes gcc.

Support dumping problems to non-protocol buffer formats.

Original issue 14 created by sandwichmaker on 2012-05-05T19:49:23.000Z:

The current support for dumping problems to disk only supports logging to the console or writing to protocol buffers. This makes debugging using linear algebra tools like matlab/octave hard.

A more flexible mechanism should be implemented.

Add a benchmark framework

Original issue 40 created by sandwichmaker on 2012-05-30T04:11:48.000Z:

Currently we have no benchmark framework. Without one it is difficult to evaluate how changes in the solver affect performance.

Make tests work again by default

Original issue 18 created by sandwichmaker on 2012-05-08T03:35:28.000Z:

Tests currently require an extra flag to be passed to the cmake file, and without it, it claims that there are no tests to build.

add path when looking for gflags and glog

Original issue 7 created by sandwichmaker on 2012-05-03T06:53:05.000Z:

add path when looking for gflags and glog.

The list of paths has to be extended to cover all cases, or a Findglags.cmake and Findglog.cmake may be useful for this one?

SCHUR_JACOBI should not depend on CHOLMOD

Original issue 11 created by sandwichmaker on 2012-05-05T17:59:38.000Z:

The SCHUR_JACOBI preconditioner reuses a bunch of infrastructure from visibility based preconditioners, which means it requires CHOLMOD. But this dependency is not really needed, implemented right, we should just be able to use Eigen to implement this preconditioner.

failed to test on ubuntu 12.04

Original issue 43 created by sandwichmaker on 2012-06-10T02:57:02.000Z:

The system_test fails on ceres-solver 1.2.0
It doesn't occur on 1.1.1

Operating system: Ubuntu 12.04 (32bit, 64bit)
glog: 3.2.0
gflags: 2.0

The following is the output of the test suite.

Running tests...
/usr/bin/ctest --force-new-ctest-process -j1
Test project /build/buildd/ceres-solver-1.2.0/obj-x86_64-linux-gnu
Start 1: array_utils_test
1/42 Test # 1: array_utils_test .......................... Passed 0.06 sec
Start 2: autodiff_test
2/42 Test # 2: autodiff_test ............................. Passed 0.05 sec
Start 3: autodiff_cost_function_test
3/42 Test # 3: autodiff_cost_function_test ............... Passed 0.04 sec
Start 4: block_random_access_dense_matrix_test
4/42 Test # 4: block_random_access_dense_matrix_test ..... Passed 0.08 sec
Start 5: block_random_access_sparse_matrix_test
5/42 Test # 5: block_random_access_sparse_matrix_test .... Passed 0.09 sec
Start 6: block_sparse_matrix_test
6/42 Test # 6: block_sparse_matrix_test .................. Passed 0.07 sec
Start 7: canonical_views_clustering_test
7/42 Test # 7: canonical_views_clustering_test ........... Passed 0.05 sec
Start 8: compressed_row_sparse_matrix_test
8/42 Test # 8: compressed_row_sparse_matrix_test ......... Passed 0.07 sec
Start 9: conditioned_cost_function_test
9/42 Test # 9: conditioned_cost_function_test ............ Passed 0.06 sec
Start 10: corrector_test
10/42 Test # 10: corrector_test ............................ Passed 0.20 sec
Start 11: dense_sparse_matrix_test
11/42 Test # 11: dense_sparse_matrix_test .................. Passed 2.24 sec
Start 12: evaluator_test
12/42 Test # 12: evaluator_test ............................ Passed 0.11 sec
Start 13: gradient_checking_cost_function_test
13/42 Test # 13: gradient_checking_cost_function_test ...... Passed 0.09 sec
Start 14: graph_test
14/42 Test # 14: graph_test ................................ Passed 0.06 sec
Start 15: graph_algorithms_test
15/42 Test # 15: graph_algorithms_test ..................... Passed 0.06 sec
Start 16: implicit_schur_complement_test
16/42 Test # 16: implicit_schur_complement_test ............ Passed 0.14 sec
Start 17: iterative_schur_complement_solver_test
17/42 Test # 17: iterative_schur_complement_solver_test .... Passed 0.22 sec
Start 18: jet_test
18/42 Test # 18: jet_test .................................. Passed 0.06 sec
Start 19: levenberg_marquardt_strategy_test
19/42 Test # 19: levenberg_marquardt_strategy_test ......... Passed 0.09 sec
Start 20: local_parameterization_test
20/42 Test # 20: local_parameterization_test ............... Passed 0.14 sec
Start 21: loss_function_test
21/42 Test # 21: loss_function_test ........................ Passed 0.04 sec
Start 22: normal_prior_test
22/42 Test # 22: normal_prior_test ......................... Passed 0.05 sec
Start 23: numeric_diff_cost_function_test
23/42 Test # 23: numeric_diff_cost_function_test ........... Passed 0.07 sec
Start 24: parameter_block_test
24/42 Test # 24: parameter_block_test ...................... Passed 0.10 sec
Start 25: partitioned_matrix_view_test
25/42 Test # 25: partitioned_matrix_view_test .............. Passed 0.07 sec
Start 26: problem_test
26/42 Test # 26: problem_test .............................. Passed 0.17 sec
Start 27: residual_block_test
27/42 Test # 27: residual_block_test ....................... Passed 0.07 sec
Start 28: residual_block_utils_test
28/42 Test # 28: residual_block_utils_test ................. Passed 0.04 sec
Start 29: rotation_test
29/42 Test # 29: rotation_test ............................. Passed 0.71 sec
Start 30: runtime_numeric_diff_cost_function_test
30/42 Test # 30: runtime_numeric_diff_cost_function_test ... Passed 0.27 sec
Start 31: schur_complement_solver_test
31/42 Test # 31: schur_complement_solver_test .............. Passed 0.16 sec
Start 32: schur_eliminator_test
32/42 Test # 32: schur_eliminator_test ..................... Passed 79.75 sec
Start 33: schur_ordering_test
33/42 Test # 33: schur_ordering_test ....................... Passed 0.05 sec
Start 34: solver_impl_test
34/42 Test # 34: solver_impl_test .......................... Passed 0.21 sec
Start 35: suitesparse_test
35/42 Test # 35: suitesparse_test .......................... Passed 0.07 sec
Start 36: symmetric_linear_solver_test
36/42 Test # 36: symmetric_linear_solver_test .............. Passed 0.15 sec
Start 37: triplet_sparse_matrix_test
37/42 Test # 37: triplet_sparse_matrix_test ................ Passed 0.05 sec
Start 38: trust_region_minimizer_test
38/42 Test # 38: trust_region_minimizer_test ............... Passed 0.01 sec
Start 39: unsymmetric_linear_solver_test
39/42 Test # 39: unsymmetric_linear_solver_test ............ Passed 0.03 sec
Start 40: visibility_test
40/42 Test # 40: visibility_test ........................... Passed 0.01 sec
Start 41: visibility_based_preconditioner_test
41/42 Test # 41: visibility_based_preconditioner_test ...... Passed 0.20 sec
Start 42: system_test
42/42 Test # 42: system_test ...............................***Exception: Other321.06 sec
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from SystemTest
[ RUN ] SystemTest.PowellsFunction
[ OK ] SystemTest.PowellsFunction (3 ms)
[ RUN ] SystemTest.BundleAdjustmentProblem
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite
CHOLMOD warning: matrix not positive definite

98% tests passed, 1 tests failed out of 42

Total Test time (real) = 408.66 sec

The following tests FAILED:
42 - system_test (OTHER_FAULT)
Errors while running CTest
make[1]: *** [test] Error 8

Code review request

Original issue 22 created by sandwichmaker on 2012-05-10T19:22:26.000Z:

Branch name: matlab

Purpose of code changes on this branch:

Write out the script that allows loading the problem into MATLAB/octave. I tested the script on my mac. It works fine.

After the review, I'll merge this branch into:
/master

add .gitignore

Original issue 6 created by sandwichmaker on 2012-05-03T06:51:39.000Z:

add .gitignore file

CMake bug searching for Eigen on Ubuntu (and probably others)

Original issue 1 created by sandwichmaker on 2012-05-01T23:45:55.000Z:

What steps will reproduce the problem?

  1. Install Eigen 3 in /usr/include/eigen3 (default location in Ubuntu 10.04-12.04)

What is the expected output? What do you see instead?

Expected: cmake finds Eigen 3 successfully.
Instead:
-- Check for Eigen 3.0
CMake Error at CMakeLists.txt:199 (MESSAGE):
Can't find Eigen. Try passing -DEIGEN_INCLUDE=...

What version of the product are you using? On what operating system?

git commit 17fbc8e, Ubuntu 12.04.

Please provide any additional information below.

There's a typo in CMakeLists.txt. Patch below, assuming you actually did want to check in /usr/include/eigen2 if none of the others work. It's possible that the eigen2 line doesn't belong in there at all; certainly ceres-solver will not compile with Eigen 2.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a9cecc..1aeee00 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -191,10 +191,10 @@ SET(EIGEN_SEARCH_HEADERS
/usr/include/eigen3 # Ubuntu 10.04's default location.
/usr/local/include
/usr/local/include/eigen3,

  • /opt/local/var/macports/software/eigen3/opt/local/include/eigen3/)
    -FIND_PATH(EIGEN_INCLUDE NAMES Eigen/Core PATHS
  •      /usr/include/eigen2
    
  •      )
    
  • /opt/local/var/macports/software/eigen3/opt/local/include/eigen3/
  • /usr/include/eigen2
  • )
    +FIND_PATH(EIGEN_INCLUDE NAMES Eigen/Core PATHS ${EIGEN_SEARCH_HEADERS} )
    IF (NOT EXISTS ${EIGEN_INCLUDE})
    MESSAGE(FATAL_ERROR "Can't find Eigen. Try passing -DEIGEN_INCLUDE=...")
    ENDIF (NOT EXISTS ${EIGEN_INCLUDE})

A second take at a more robust cmake

Original issue 20 created by sandwichmaker on 2012-05-10T04:11:57.000Z:

Branch name:
build-simpler

Purpose of code changes on this branch:
I simplified the SuiteSparse code some more. The old build branch is gone.
After the review, I'll merge this branch into:
/master

Code review request

Original issue 26 created by sandwichmaker on 2012-05-14T05:25:36.000Z:

Branch name: linear_solver

Purpose of code changes on this branch:

Constant sparsity is always true and various other bits of cleanup all around.

After the review, I'll merge this branch into:
/master

VS2010 error C2888: 'std::hash<ceres::internal::ParameterBlock*>' : symbol cannot be defined within namespace 'tr1' in internal\ceres\schur_ordering.cc

Original issue 49 created by sandwichmaker on 2012-06-16T22:35:44.000Z:

Steps to reproduce.

  1. svn checkout of https://svn.blender.org/svnroot/bf-blender/trunk/blender, https://svn.blender.org/svnroot/bf-blender/trunk/lib/windows, https://svn.blender.org/svnroot/bf-blender/trunk/lib/win64, in proper locations.
  2. cmake yourself a build directory.
  3. build.
    call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64
    cd cmake-build
    devenv Blender.sln /Build Debug /CLEAN
    devenv Blender.sln /Build Debug /Project INSTALL

When I try building using VS2010 SP1, I get the following error:
Error 4 error C2888: 'std::hash<ceres::internal::ParameterBlock*>' : symbol cannot be defined within namespace 'tr1'

This error stops the output of '....\lib\Debug\extern_ceres.lib', breaking my blender build...

I am using trunk of blender, which now includes ceres-solver within.
blender\extern\libmv\third_party\ceres\internal\ceres\schur_ordering.cc

I am running windows 7 ultimate sp1 x64.

The line in ceres solver git master is the same code...
http://code.google.com/searchframe#p04j-_jDSBE/internal/ceres/schur_ordering.cc&amp;q=schur_ordering.cc%20package:ceres-solver%5C.googlecode%5C.com&amp;l=45

Great work on the library! I enjoyed the youtube street fitting demonstration. http://www.youtube.com/watch?v=z00ORu4bU-A

Thoughts?

Thanks.
--dave
http://dave.thehorners.com/

PROTOBUF_PROTOC_EXECUTABLE-NOTFOUND: not found

Original issue 5 created by sandwichmaker on 2012-05-02T16:23:30.000Z:

Hi,
Thank you very much for open sourcing Ceres. I'm currently attempting
to build the library. All external libraries have been correctly
detected. However the build fails (please see below). Thank you in
advance for any suggestions!

cmake ../ceres_solver/ -DEIGEN_INCLUDE=/usr/include/eigen3 -
DGFLAGS_INCLUDE=/project/sean/code/gflags/include/gflags/ -
DGFLAGS_LIB=/project/sean/code/gflags/lib/ -DGLOG_INCLUDE=/project/
sean/code/glog/include/glog/ -DGLOG_LIB=/project/sean/code/glog/lib/
-- Found AMD library: /usr/lib/libamd.so
-- Found AMD header in: /usr/include/suitesparse
-- Check for CAMD
-- Found CAMD library: /usr/lib/libcamd.so
-- Found CAMD header in: /usr/include/suitesparse
-- Check for COLAMD
-- Found COLAMD library: /usr/lib/libcolamd.so
-- Found COLAMD header in: /usr/include/suitesparse
-- Check for CCOLAMD
-- Found CCOLAMD library: /usr/lib/libccolamd.so
-- Found CCOLAMD header in: /usr/include/suitesparse
-- Check for CHOLMOD
-- Found CHOLMOD library: /usr/lib/libcholmod.so
-- Found CHOLMOD header in: /usr/include/suitesparse
-- Check for METIS (optional)
Can't find METIS; disabling. (part of suitesparse.)
-- Check for LAPACK
-- Found LAPACK library: /usr/lib/liblapack.so
-- Google Flags disabled; no tests or tools will be built!
-- Check for Google Log
-- Found Google Log library: /project/sean/code/glog/lib
-- Found Google Log header in: /project/sean/code/glog/include/glog
-- Check for Eigen 3.0
-- Found Eigen 3.0: /usr/include/eigen3
-- Found OpenMP.
-- Configuring done
make -j3
[ 1%] Running C++ protocol buffer compiler on matrix.proto
[ 2%] [ 3%] /bin/sh: PROTOBUF_PROTOC_EXECUTABLE-NOTFOUND: not found
make[2]: *** [internal/ceres/matrix.pb.cc] Error 127
make[1]: *** [internal/ceres/CMakeFiles/ceres.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
Building CXX object internal/ceres/CMakeFiles/test_util.dir/
test_util.o
Building CXX object internal/ceres/CMakeFiles/gtest.dir/gmock_main.o
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:34:26:
error: glog/logging.h: No such file or directory
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc:33:27:
error: gflags/gflags.h: No such file or directory
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc:34:26:
error: glog/logging.h: No such file or directory
/project/sean/code/ceres_solver/internal/ceres/test_util.cc: In
function ‘bool ceres::internal::ExpectClose(double, double, double)’:
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:50: error:
‘VLOG’ was not declared in this scope
/project/sean/code/ceres_solver/internal/ceres/test_util.cc: In
function ‘void ceres::internal::ExpectArraysCloseUptoScale(int, const
double_, const double_, double)’:
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:62: error:
‘CHECK_GT’ was not declared in this scope
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:63: error:
‘CHECK’ was not declared in this scope
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:85: error:
‘CHECK_NE’ was not declared in this scope
/project/sean/code/ceres_solver/internal/ceres/test_util.cc: In
function ‘void ceres::internal::ExpectArraysClose(int, const double_,
const double_, double)’:
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:100:
error: ‘CHECK_GT’ was not declared in this scope
/project/sean/code/ceres_solver/internal/ceres/test_util.cc:101:
error: ‘CHECK’ was not declared in this scope
make[2]: *** [internal/ceres/CMakeFiles/test_util.dir/test_util.o]
Error 1
make[1]: ** [internal/ceres/CMakeFiles/test_util.dir/all] Error 2
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc:41:
error: expected constructor, destructor, or type conversion before ‘(’
token
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc: In
function ‘int main(int, char
)’:
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc:55:
error: ‘google’ has not been declared
/project/sean/code/ceres_solver/internal/ceres/gmock_main.cc:56:
error: ‘google’ has not been declared
make[2]: *
* [internal/ceres/CMakeFiles/gtest.dir/gmock_main.o] Error
1
make[1]: *** [internal/ceres/CMakeFiles/gtest.dir/all] Error 2
make: *** [all] Error 2

undefined reference when make ceres

Original issue 19 created by sandwichmaker on 2012-05-08T16:51:36.000Z:

What steps will reproduce the problem?

  1. install suitesparse with or without metis
  2. after successfully cmake the ceres, and then make
    3.

What version of the product are you using? On what operating system?
Ubuntu 10.04

Please provide any additional information below.

/usr/local/lib/libcholmod.a(cholmod_colamd.o): In function cholmod_colamd': cholmod_colamd.c:(.text+0x173): undefined reference tocolamd_recommended'
cholmod_colamd.c:(.text+0x18d): undefined reference to colamd_set_defaults' cholmod_colamd.c:(.text+0x1eb): undefined reference tocolamd_printf'
cholmod_colamd.c:(.text+0x4f9): undefined reference to colamd' /usr/local/lib/libcholmod.a(cholmod_amd.o): In functioncholmod_amd':
cholmod_amd.c:(.text+0x2df): undefined reference to amd_malloc' cholmod_amd.c:(.text+0x2ed): undefined reference toamd_free'
cholmod_amd.c:(.text+0x2fb): undefined reference to amd_calloc' cholmod_amd.c:(.text+0x309): undefined reference toamd_realloc'
cholmod_amd.c:(.text+0x314): undefined reference to amd_printf' cholmod_amd.c:(.text+0x3b5): undefined reference toamd_2'
collect2: ld returned 1 exit status

system_test times out

Original issue 9 created by sandwichmaker on 2012-05-03T06:56:04.000Z:

$ ctest

[...]

39/39 Test # 35: system_test ...............................***Timeout 300.09 sec

Should it take longer than that?

Typo CCOLCAMD in CMakeList.txt

Original issue 30 created by sandwichmaker on 2012-05-18T11:57:00.000Z:

Commit daa9824... introduced a typo in internal/ceres/CMakeLists.txt
(CCOLCAMD instead of CCOLAMD)
This results in linking errors due to the missing CCOLAMD library.

Patch attached.

What steps will reproduce the problem?

  1. checkout latest master
  2. compile with SuiteSparse static libraries

What is the expected output? What do you see instead?
Expected: everything builds correctly
Result: Linking iterative_schur_complement_solver_test fails with missing ccolamd symbols.

What version of the product are you using? On what operating system?
latest master

Please provide any additional information below.

fixed cost evaluation has floating point issues

Original issue 29 created by sandwichmaker on 2012-05-17T04:52:35.000Z:

Currently the way the fixed part of the cost is evaluated, is by doing a full eval outside the solver followed by a partial eval inside the solver -- using the residual blocks that are active and taking their difference. This leads to floating point errors of about 1e-13 in relative magnitude.

The right way to deal with this is to estimate the fixed cost in solver_impl.cc by evaluating the inactive residual block.

Preconditioners should have their own interface

Original issue 17 created by sandwichmaker on 2012-05-07T04:21:03.000Z:

Right now the various preconditioners are spread all around as custom linear operators. They should have a consistent interface and should be constructed along with the LinearSolver before LevenbergMarquardt algorithm starts doing anything.

This will also require pulling out the Jacobian construction out of the Minimizer -- and perhaps doing away with the Minimizer interface completely.

some tests are failed on debian unstable and ubuntu 12.10 (unreleased) (i386)

Original issue 44 created by sandwichmaker on 2012-06-12T14:44:10.000Z:

The following errors occur on Debian unstable and Ubuntu 12.10 (unreleased) (i386)

These distributions have gcc-4.7 and g++-4.7 and they are used as default one.
When it is configured with CC=gcc-4.6 CXX=g++-4.6, autodiff_test throws "Exception: SegFault" and rotation_test is passed.

  Start  2: autodiff_test

2/42 Test # 2: autodiff_test .............................***Failed 0.01 sec
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from AutoDiff
[ RUN ] AutoDiff.ProjectiveCameraModel
/build/buildd/ceres-solver-1.2.0/internal/ceres/autodiff_test.cc:188: Failure
Value of: b_x[i]
Actual: 0.937321
Expected: fd_x[i]
Which is: 0.937321
[ FAILED ] AutoDiff.ProjectiveCameraModel (1 ms)
[ RUN ] AutoDiff.Metric
[ OK ] AutoDiff.Metric (0 ms)
[ RUN ] AutoDiff.VaryingNumberOfResidualsForOneCostFunctorType
[ OK ] AutoDiff.VaryingNumberOfResidualsForOneCostFunctorType (0 ms)
[----------] 3 tests from AutoDiff (1 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (1 ms total)
[ PASSED ] 2 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] AutoDiff.ProjectiveCameraModel

1 FAILED TEST

==== snip ====

29/42 Test # 29: rotation_test .............................***Failed 38.15 sec
[==========] Running 32 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 25 tests from Rotation
[ RUN ] Rotation.ZeroAngleAxisToQuaternion
[ OK ] Rotation.ZeroAngleAxisToQuaternion (0 ms)

==== snip ====

[ RUN ] Quaternion.MultiplicationIsAssociative
[ OK ] Quaternion.MultiplicationIsAssociative (0 ms)
[----------] 3 tests from Quaternion (1 ms total)

[----------] 2 tests from AngleAxis
[ RUN ] AngleAxis.RotatePointGivesSameAnswerAsRotationMatrix
/build/buildd/ceres-solver-1.2.0/internal/ceres/rotation_test.cc:869: Failure
The difference between rotation_matrix_rotated_p[k] and angle_axis_rotated_p[k] is 4.8572257327350599e-15, which exceeds kTolerance, where
rotation_matrix_rotated_p[k] evaluates to 0.20736379587646864,
angle_axis_rotated_p[k] evaluates to 0.20736379587647349, and
kTolerance evaluates to 2.2204460492503131e-15.
p: 0.62684068625180078 0.2684996133989187 0.56501614189008997 angle_axis: -46.865001952191413 11.791397347707568 3.1415926535897931
/build/buildd/ceres-solver-1.2.0/internal/ceres/rotation_test.cc:869: Failure
The difference between rotation_matrix_rotated_p[k] and angle_axis_rotated_p[k] is 2.5701663020072374e-14, which exceeds kTolerance, where
rotation_matrix_rotated_p[k] evaluates to 0.44503886649343843,
angle_axis_rotated_p[k] evaluates to 0.44503886649346414, and
kTolerance evaluates to 2.2204460492503131e-15.
p: 0.73560060641523484 -0.55003317424563369 -0.79165624351783481 angle_axis: -390.39518008088459 -171.79049495707383 -3.1415926535897931

....

computing the covariance matrix of best fit parameters

Original issue 21 created by sandwichmaker on 2012-05-10T08:39:34.000Z:

Hi,

Sorry that i dont know where to post enquires instead of issues, so i put it here. Kindly let me know if i was doing wrong.

Can ceres perform computing the covariance matrix of best fit parameters, just like the gsl_multifit_covar?

Thanks.
ZQ

Make use of CTest

Original issue 8 created by sandwichmaker on 2012-05-03T06:54:11.000Z:

CTest allows to set a timeout for all tests and to make more analysis (dynamic, coverage) for each test.

TrustRegionStrategy's destructor is not declared virtual

Original issue 47 created by sandwichmaker on 2012-06-15T21:28:25.000Z:

The TrustRegionStrategy destructor is declared non-virtual, but objects of derived classes are deleted through pointers to TrustRegionStrategy.

(While debugging I found that valgrind reported about a megabyte of definitely lost memory when running bundle_adjuster on problem-16-22106-pre.txt (2 blocks of roughly 500k), which was caused by the two Vector members of LevenbergMarquardtStrategy not being destroyed properly)

Code review request

Original issue 10 created by sandwichmaker on 2012-05-03T17:46:59.000Z:

Branch name: development

Purpose of code changes on this branch:
Clean up the cmake file and disable dashboard stuff.

When reviewing my code changes, please focus on:

After the review, I'll merge this branch into: master

Use CSparse when SuiteSparse is not available.

Original issue 31 created by sandwichmaker on 2012-05-21T14:27:01.000Z:

CSParse is lightweight sparse linear algebra library which has many of the same features as SuiteSparse, but is much smaller and can be compiled much more easily.

Refactor the linear solver internals to support CSparse when so desired instead of SuiteSparse.

Only reevaluate the jacobian if the step is large enough

Original issue 38 created by sandwichmaker on 2012-05-30T04:08:54.000Z:

When near the optimum, it is not always profitable from a runtime perspective to reevaluate the jacobian; for example, in Blender's new Ceres-based planar tracker.

Implement a hook or other system to allow reusing the jacobian on each TR step.

SetParameterBlockConstant makes MinParameterBlock function to fail

Original issue 28 created by sandwichmaker on 2012-05-14T19:25:22.000Z:

When trying to set constant a specific block using the function SetParameterBlockConstant, I’m getting the function “MinParameterBlock” in solver_impl.cc to fail.

The problem can be reproduced by adding the following line:

problem.SetParameterBlockConstant(bal_problem.mutable_camera_for_observation(2));

right after the loop where the residual blocks are added in simple_bundle_adjuster.cc. I'm using the prodived dataset.

On systems where BLAS is a separate library, check for it and link with it

Original issue 3 created by sandwichmaker on 2012-05-02T00:39:42.000Z:

What steps will reproduce the problem?

  1. On a system where BLAS and LAPACK are not in the same library (like Ubuntu 12.04), attempt to build ceres-solver using CMake.

What is the expected output? What do you see instead?

Expected: ceres-solver builds successfully.
Instead: Several objects and tests fail to link on account of unresolved references in libcholmod to libblas symbols.

Linking CXX executable levenberg_marquardt_test
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dsyrk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zherk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zherk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'zgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dtrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'zgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'ztrsv_'

What version of the product are you using? On what operating system?

git commit 17fbc8e, Ubuntu 12.04.

Please provide any additional information below.

It's possible that this is an artifact of my build environment, and libcholmod.a shouldn't depend on libblas.a, but on my system it does, and my build process for SuiteSparse was pretty vanilla.

Assuming there is a dependence, the current version will work fine on OS X because BLAS and LAPACK are contained in one library (vecLib), as noted in a comment in CMakeLists.txt. For Linux and others, the following patch sorts things out. In this patch, the BLAS check will only happen on non-APPLE platforms.

Once the patches from Issues 1-3 are applied, ceres-solver builds with no warnings on Ubuntu 12.04 using gcc/g++ 4.6.3.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a9cecc..43a500c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -137,6 +137,13 @@ IF (SUITESPARSE)
FIND_LIBRARY(LAPACK_LIB NAMES vecLib)
ELSE (APPLE)
FIND_LIBRARY(LAPACK_LIB NAMES lapack)

  • FIND_LIBRARY(BLAS_LIB NAMES blas)
  • IF (NOT EXISTS ${BLAS_LIB})
  • MESSAGE(FATAL_ERROR
  •        &quot;Can't find BLAS &quot;
    
  •        &quot;Please specify -DBLAS_LIB=...&quot;)
    
  • ENDIF (NOT EXISTS ${BLAS_LIB})
  • MESSAGE ("-- Found BLAS library: ${BLAS_LIB}")
    ENDIF (APPLE)

IF (NOT EXISTS ${LAPACK_LIB})
@@ -145,7 +152,6 @@ IF (SUITESPARSE)
"Please specify -DLAPACK_LIB=...")
ENDIF (NOT EXISTS ${LAPACK_LIB})
MESSAGE ("-- Found LAPACK library: ${LAPACK_LIB}")
ELSE (SUITESPARSE)
ADD_DEFINITIONS(-DCERES_NO_SUITESPARSE)
ENDIF (SUITESPARSE)
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 8c4023e..92b30ee 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -108,14 +108,15 @@ ADD_LIBRARY(ceres
${GLOG_LIB}
${GFLAGS_LIB}
${LAPACK_LIB}

  • ${BLAS_LIB}
    ${CAMD_LIB}
    ${AMD_LIB}
    ${CCOLAMD_LIB}

Linear solvers should always assume constant sparsity

Original issue 16 created by sandwichmaker on 2012-05-06T07:08:40.000Z:

There is unnecessary complexity in the linear solvers around having a single LinearSolver object handle objects with different sparsity. We thought we would need it but in practice it was not.

Remove the handling and assume constant sparsity in all linear solvers.

Compile failure with glog 0.3

Original issue 15 created by sandwichmaker on 2012-05-05T21:47:18.000Z:

TL;DR:

Doesn't compile with glog version 0.3 (unfortunately, the shipped version in Fedora 16).

Up to you what you do with this:

  1. Can close it as "won't fix": Fedora is shipping a seriously old glog, not your problem.
  2. Explicitly check for a glog version >= 0.3.1 which has the fix in it.
  3. Add a doc note.

Details:

What steps will reproduce the problem?

  1. Fedora 16
  2. system supplied glog-devel (0.3), eigen3-devel, gflags-devel

Get a compile error:

[ 2%] Building CXX object internal/ceres/CMakeFiles/ceres.dir/block_jacobian_writer.o
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc: In constructor ‘ceres::internal::BlockJacobianWriter::BlockJacobianWriter(const ceres::internal::Evaluator::Options&, ceres::internal::Program_)’:
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc:126:113: error: ‘GetReferenceableValue’ was not declared in this scope
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc:126:113: note: suggested alternative:
/usr/include/glog/logging.h:578:27: note: ‘google::GetReferenceableValue’
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc: In member function ‘ceres::internal::SparseMatrix_ ceres::internal::BlockJacobianWriter::CreateJacobian() const’:
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc:155:115: error: ‘GetReferenceableValue’ was not declared in this scope
/home/michael/projects/ceres-solver-1.0.0/internal/ceres/block_jacobian_writer.cc:155:115: note: suggested alternative:
/usr/include/glog/logging.h:578:27: note: ‘google::GetReferenceableValue’

Looks like a namespace issue in glog?

Hmm. Looks like glog is busted:

// In optimized mode, use CheckOpString to hint to compiler that
// the while condition is unlikely.

define CHECK_OP_LOG(name, op, val1, val2, log) \

while (google::CheckOpString _result =
google::Check##name##Impl(GetReferenceableValue(val1),
GetReferenceableValue(val2),
#val1 " " #op " " #val2))
log(FILE, LINE, _result).stream()

endif // STATIC_ANALYSIS, !NDEBUG

It's missing the google:: namespace prefix on GetReferenceableValue().

Hmm. For which a fix was checked into glog on Nov 11, 2009!

libcholmod should be passed to linker before its dependencies

Original issue 2 created by sandwichmaker on 2012-05-02T00:28:15.000Z:

What steps will reproduce the problem?

  1. Install all ceres dependencies besides lapack and blas from source (all static libraries)
  2. mkdir build && cd build && cmake .. && make

What is the expected output? What do you see instead?

Expected: make succeeds
Instead: Works until iterative_schur_complement_solver_test, then:

Linking CXX executable iterative_schur_complement_solver_test
/usr/local/lib/libcholmod.a(cholmod_colamd.o):cholmod_colamd.c:function cholmod_colamd: error: undefined reference to 'colamd_recommended'
/usr/local/lib/libcholmod.a(cholmod_colamd.o):cholmod_colamd.c:function cholmod_colamd: error: undefined reference to 'colamd_set_defaults'
/usr/local/lib/libcholmod.a(cholmod_colamd.o):cholmod_colamd.c:function cholmod_colamd: error: undefined reference to 'colamd_printf'
/usr/local/lib/libcholmod.a(cholmod_colamd.o):cholmod_colamd.c:function cholmod_colamd: error: undefined reference to 'colamd'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dsyrk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zherk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zherk_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_numeric.o):cholmod_super_numeric.c:function cholmod_super_numeric: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dtrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'dgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'ztrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_lsolve: error: undefined reference to 'zgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dtrsm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'dtrsv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'zgemm_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'zgemv_'
/usr/local/lib/libcholmod.a(cholmod_super_solve.o):cholmod_super_solve.c:function cholmod_super_ltsolve: error: undefined reference to 'ztrsv_'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_malloc'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_free'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_calloc'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_realloc'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_printf'
/usr/local/lib/libcholmod.a(cholmod_camd.o):cholmod_camd.c:function cholmod_camd: error: undefined reference to 'camd_2'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_malloc'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_free'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_calloc'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_realloc'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_printf'
/usr/local/lib/libcholmod.a(cholmod_amd.o):cholmod_amd.c:function cholmod_amd: error: undefined reference to 'amd_2'
/usr/local/lib/libcholmod.a(cholmod_ccolamd.o):cholmod_ccolamd.c:function cholmod_ccolamd: error: undefined reference to 'ccolamd_recommended'
/usr/local/lib/libcholmod.a(cholmod_ccolamd.o):cholmod_ccolamd.c:function cholmod_ccolamd: error: undefined reference to 'ccolamd_set_defaults'
/usr/local/lib/libcholmod.a(cholmod_ccolamd.o):cholmod_ccolamd.c:function cholmod_ccolamd: error: undefined reference to 'ccolamd'
/usr/local/lib/libcholmod.a(cholmod_csymamd.o):cholmod_csymamd.c:function cholmod_csymamd: error: undefined reference to 'ccolamd_set_defaults'
/usr/local/lib/libcholmod.a(cholmod_csymamd.o):cholmod_csymamd.c:function cholmod_csymamd: error: undefined reference to 'csymamd'
collect2: ld returned 1 exit status

What version of the product are you using? On what operating system?

git commit 17fbc8e, Ubuntu 12.04.

Please provide any additional information below.

I built SuiteSparse from source. By default, it builds static libraries for e.g. libcholmod, and these libraries depend on one another. If the libraries are not self-contained, you need to pass them to the linker such that all libraries that use a symbol are passed before libraries that define the symbol. libcholmod depends on a lot of the other libraries, so it needs to be much earlier in CERES_LIBRARY_DEPENDENCES in internal/ceres/CMakeLists.txt. The patch below solves most of the dependencies, but still errors out on undefined references to blas symbols. I'll file a separate issue to fix that.

diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 8c4023e..92b30ee 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -105,14 +105,15 @@ ADD_LIBRARY(ceres

TODO(keir): Make linking gomp optional for e.g. Windows.

SET(CERES_LIBRARY_DEPENDENCIES

  • ${CHOLMOD_LIB}
    ${GLOG_LIB}
    ${GFLAGS_LIB}
    ${LAPACK_LIB}
    ${CAMD_LIB}
    ${AMD_LIB}
    ${CCOLAMD_LIB}
  • ${COLAMD_LIB}
  • ${CHOLMOD_LIB})
  • ${COLAMD_LIB})

IF (EXISTS ${METIS_LIB})
SET(CERES_LIBRARY_DEPENDENCIES

compilation error in schur_eliminator_test

Original issue 4 created by sandwichmaker on 2012-05-02T14:34:50.000Z:

Hi,

On ubuntu (with cmake 2.8.7 and gcc 4.6.3), I get the following compilation error:

/home/ajg23/DEVEL/src/ceres-solver/internal/ceres/schur_eliminator_test.cc:50:15: error: expected constructor, destructor, or type conversion before ‘(’ token

Any idea?

Arnaud

Add high precision timers

Original issue 41 created by sandwichmaker on 2012-05-31T03:08:38.000Z:

The current iteration timers in Ceres are only second-granular; this is poor for small minimizations. Instead, use something with at least millisecond granularity.

Code review request

Original issue 25 created by sandwichmaker on 2012-05-11T21:42:03.000Z:

Branch name: check_linear_solver

After the review, I'll merge this branch into:
/amaster

Check the output of the linear solver for sanity

Original issue 24 created by sandwichmaker on 2012-05-10T20:58:36.000Z:

The linear solver (especially the dense ones) can sometime silently return nan when the matrices are rank deficient. Like the ResidualBlocks, we should also sanity check the output of the linear solver. This is a cheap operation and will increase robustness.

Lower bound on mu

Original issue 23 created by sandwichmaker on 2012-05-10T20:57:02.000Z:

What steps will reproduce the problem?

For some problems, mu, the LM regularization constant going below a certain value results in the Gauss Newton Hessian becoming rank deficient. This can lead to numerical failures as well as oscillations around the value of mu. Set a minimum value, and allow the user to tweak it for their applications.

Variable Projection

Original issue 32 created by sandwichmaker on 2012-05-22T15:26:35.000Z:

Add Golub and Pereyra's variable projection algorithm.

This requires variable elimination of the linear variables at the nonlinear loop level. One way to do this would be to generalize the support for num_eliminate_blocks, where the jacobian evaluator is aware of this structure.

The other would be to create a new costfunction object which wraps an entire problem object.

Wrong assertion in suitesparse.cc

Original issue 45 created by sandwichmaker on 2012-06-13T15:19:38.000Z:

What steps will reproduce the problem?

  1. Build latest revision (fa01519)
  2. Run bundle_adjuster -solver_type cholesky --input=../../data/problem-16-22106-pre.txt

What is the expected output? What do you see instead?

The program aborts after running into the following assertion:
F0613 17:03:53.814010 17742 suitesparse.cc:227] Check failed: it != row_block_starts.end()
*** Check failure stack trace: ***
@ 0x7fd732545ffd google::LogMessage::Fail()
@ 0x7fd732548757 google::LogMessage::SendToLog()
@ 0x7fd732545bfb google::LogMessage::Flush()
@ 0x7fd73254900d google::LogMessageFatal::~LogMessageFatal()
@ 0xa1ab8b ceres::internal::SuiteSparse::ScalarMatrixToBlockMatrix()
@ 0xa1a70d ceres::internal::SuiteSparse::BlockAMDOrdering()
[...]

If my understanding of the code is correct, this happens in code that tries to find the corresponding row block for an entry in a suitesparse matrix. The relevant assertion is triggered if the entry belongs to the last row block but is not the first row in this block. In this case the lower_bound call returns end(). (As a side note, I am not sure what happens if the entry in the first row of the block is precisely zero. Can this happen at all? Will there still be a corresponding entry in the suitesparse matrix?)

In my opinion the fix for the above problem is to simply continue if end() is returned, see the attached patch.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.