ceres-solver / ceres-solver Goto Github PK
View Code? Open in Web Editor NEWA large scale non-linear optimization library
Home Page: http://ceres-solver.org/
License: Other
A large scale non-linear optimization library
Home Page: http://ceres-solver.org/
License: Other
Original issue 2 created by sandwichmaker on 2012-05-02T00:28:15.000Z:
What steps will reproduce the problem?
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
SET(CERES_LIBRARY_DEPENDENCIES
IF (EXISTS ${METIS_LIB})
SET(CERES_LIBRARY_DEPENDENCIES
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
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
Original issue 6 created by sandwichmaker on 2012-05-03T06:51:39.000Z:
add .gitignore file
Original issue 36 created by sandwichmaker on 2012-05-30T04:04:12.000Z:
It's missing.
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:
Details:
What steps will reproduce the problem?
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.
while (google::CheckOpString _result =
google::Check##name##Impl(GetReferenceableValue(val1),
GetReferenceableValue(val2),
#val1 " " #op " " #val2))
log(FILE, LINE, _result).stream()
It's missing the google:: namespace prefix on GetReferenceableValue().
Hmm. For which a fix was checked into glog on Nov 11, 2009!
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
....
Original issue 13 created by sandwichmaker on 2012-05-05T18:06:02.000Z:
and replaced with CGNR etc. Solver using conjugate gradients instantiate it directly.
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.
Original issue 35 created by sandwichmaker on 2012-05-30T03:32:52.000Z:
Function, Jacobian and solver timing breakdown.
Original issue 37 created by sandwichmaker on 2012-05-30T04:06:59.000Z:
This is worth investigating; Nocedal has a paper on this:
http://users.eecs.northwestern.edu/~nocedal/PDFfiles/yuan-nocedal.pdf
Original issue 45 created by sandwichmaker on 2012-06-13T15:19:38.000Z:
What steps will reproduce the problem?
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.
Original issue 19 created by sandwichmaker on 2012-05-08T16:51:36.000Z:
What steps will reproduce the problem?
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 to
colamd_recommended'
cholmod_colamd.c:(.text+0x18d): undefined reference to colamd_set_defaults' cholmod_colamd.c:(.text+0x1eb): undefined reference to
colamd_printf'
cholmod_colamd.c:(.text+0x4f9): undefined reference to colamd' /usr/local/lib/libcholmod.a(cholmod_amd.o): In function
cholmod_amd':
cholmod_amd.c:(.text+0x2df): undefined reference to amd_malloc' cholmod_amd.c:(.text+0x2ed): undefined reference to
amd_free'
cholmod_amd.c:(.text+0x2fb): undefined reference to amd_calloc' cholmod_amd.c:(.text+0x309): undefined reference to
amd_realloc'
cholmod_amd.c:(.text+0x314): undefined reference to amd_printf' cholmod_amd.c:(.text+0x3b5): undefined reference to
amd_2'
collect2: ld returned 1 exit status
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.
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.
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.
Original issue 48 created by sandwichmaker on 2012-06-15T23:01:50.000Z:
subject says it all.
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.
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
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.
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.
Original issue 46 created by sandwichmaker on 2012-06-14T18:38:03.000Z:
Currently there are no high-level tests that check that user callbacks get called with all the relevant information. This would have prevented the need for this change:
Original issue 34 created by sandwichmaker on 2012-05-29T17:47:05.000Z:
This is a crasher on 32 bit Windows, using the Blender fork of Ceres (which is just the winwdows branch with some files stripped out).
http://lists.blender.org/pipermail/bf-committers/2012-May/036927.html
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.
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
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
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.
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.
Original issue 39 created by sandwichmaker on 2012-05-30T04:10:48.000Z:
For example, Blender's new planar tracker does this:
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
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
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
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
Original issue 33 created by sandwichmaker on 2012-05-23T22:21:55.000Z:
Branch name: trust-region-review
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.
Original issue 1 created by sandwichmaker on 2012-05-01T23:45:55.000Z:
What steps will reproduce the problem?
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,
/usr/include/eigen2
)
Original issue 3 created by sandwichmaker on 2012-05-02T00:39:42.000Z:
What steps will reproduce the problem?
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)
"Can't find BLAS "
"Please specify -DBLAS_LIB=...")
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}
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
Creating an issue just to test the issue creation and closing process.
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.
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
Original issue 49 created by sandwichmaker on 2012-06-16T22:35:44.000Z:
Steps to reproduce.
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&q=schur_ordering.cc%20package:ceres-solver%5C.googlecode%5C.com&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/
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.
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?
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?
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.
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.
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)
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.
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?
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.