Commit: 5933b2455c409963580ea616047f2f2ee332ff71 Author: Sergey Sharybin Date: Sun Dec 29 16:59:15 2013 +0600 https://developer.blender.org/rB5933b2455c409963580ea616047f2f2ee332ff71
Update Ceres to the latest upstream Summary: This brings up much easier termination type usage, which for us means we might use: ceres::Summary::IsSolutionUsable() instead of doing manual funky enum values check. Reviewers: keir Differential Revision: https://developer.blender.org/D153 =================================================================== M extern/libmv/libmv-capi.cc M extern/libmv/libmv/multiview/fundamental.cc M extern/libmv/libmv/multiview/homography.cc M extern/libmv/libmv/tracking/track_region.cc M extern/libmv/libmv/tracking/track_region.h M extern/libmv/third_party/ceres/ChangeLog M extern/libmv/third_party/ceres/include/ceres/solver.h M extern/libmv/third_party/ceres/include/ceres/types.h M extern/libmv/third_party/ceres/internal/ceres/compressed_row_sparse_matrix.cc M extern/libmv/third_party/ceres/internal/ceres/covariance_impl.cc M extern/libmv/third_party/ceres/internal/ceres/lapack.cc M extern/libmv/third_party/ceres/internal/ceres/lapack.h M extern/libmv/third_party/ceres/internal/ceres/line_search_minimizer.cc M extern/libmv/third_party/ceres/internal/ceres/linear_solver.h M extern/libmv/third_party/ceres/internal/ceres/minimizer.cc M extern/libmv/third_party/ceres/internal/ceres/problem_impl.cc M extern/libmv/third_party/ceres/internal/ceres/program.cc M extern/libmv/third_party/ceres/internal/ceres/program.h M extern/libmv/third_party/ceres/internal/ceres/solver.cc M extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc M extern/libmv/third_party/ceres/internal/ceres/solver_impl.h M extern/libmv/third_party/ceres/internal/ceres/sparse_normal_cholesky_solver.cc M extern/libmv/third_party/ceres/internal/ceres/suitesparse.cc M extern/libmv/third_party/ceres/internal/ceres/suitesparse.h M extern/libmv/third_party/ceres/internal/ceres/trust_region_minimizer.cc M extern/libmv/third_party/ceres/internal/ceres/types.cc =================================================================== diff --git a/extern/libmv/libmv-capi.cc b/extern/libmv/libmv-capi.cc index 95ac2ff..474501a 100644 --- a/extern/libmv/libmv-capi.cc +++ b/extern/libmv/libmv-capi.cc @@ -332,9 +332,7 @@ int libmv_trackRegion(const libmv_TrackRegionOptions *options, } /* TODO(keir): Update the termination string with failure details. */ - if (track_region_result.termination == libmv::TrackRegionResult::PARAMETER_TOLERANCE || - track_region_result.termination == libmv::TrackRegionResult::FUNCTION_TOLERANCE || - track_region_result.termination == libmv::TrackRegionResult::GRADIENT_TOLERANCE || + if (track_region_result.termination == libmv::TrackRegionResult::CONVERGENCE || track_region_result.termination == libmv::TrackRegionResult::NO_CONVERGENCE) { tracking_result = true; diff --git a/extern/libmv/libmv/multiview/fundamental.cc b/extern/libmv/libmv/multiview/fundamental.cc index 7a1433c..ea8594c 100644 --- a/extern/libmv/libmv/multiview/fundamental.cc +++ b/extern/libmv/libmv/multiview/fundamental.cc @@ -538,9 +538,7 @@ bool EstimateFundamentalFromCorrespondences( LG << "Final refined matrix:\n" << *F; - return !(summary.termination_type == ceres::DID_NOT_RUN || - summary.termination_type == ceres::NUMERICAL_FAILURE || - summary.termination_type == ceres::USER_ABORT); + return summary.IsSolutionUsable(); } } // namespace libmv diff --git a/extern/libmv/libmv/multiview/homography.cc b/extern/libmv/libmv/multiview/homography.cc index cbd3ec7..ce533a3 100644 --- a/extern/libmv/libmv/multiview/homography.cc +++ b/extern/libmv/libmv/multiview/homography.cc @@ -330,9 +330,7 @@ bool EstimateHomography2DFromCorrespondences( LG << "Final refined matrix:\n" << *H; - return !(summary.termination_type == ceres::DID_NOT_RUN || - summary.termination_type == ceres::NUMERICAL_FAILURE || - summary.termination_type == ceres::USER_ABORT); + return summary.IsSolutionUsable(); } /** diff --git a/extern/libmv/libmv/tracking/track_region.cc b/extern/libmv/libmv/tracking/track_region.cc index 9e0bf9a..ef6dac6 100644 --- a/extern/libmv/libmv/tracking/track_region.cc +++ b/extern/libmv/libmv/tracking/track_region.cc @@ -1331,9 +1331,7 @@ void TemplatedTrackRegion(const FloatImage &image1, // Of the things that can happen in the first pass, don't try the brute // pass (and second attempt) if the error is one of the terminations below. - if (result->termination == TrackRegionResult::PARAMETER_TOLERANCE || - result->termination == TrackRegionResult::FUNCTION_TOLERANCE || - result->termination == TrackRegionResult::GRADIENT_TOLERANCE || + if (result->termination == TrackRegionResult::CONVERGENCE || result->termination == TrackRegionResult::SOURCE_OUT_OF_BOUNDS || result->termination == TrackRegionResult::DESTINATION_OUT_OF_BOUNDS || result->termination == TrackRegionResult::INSUFFICIENT_PATTERN_AREA) { @@ -1488,7 +1486,7 @@ void TemplatedTrackRegion(const FloatImage &image1, // TODO(keir): Update the result statistics. // TODO(keir): Add a normalize-cross-correlation variant. - if (summary.termination_type == ceres::USER_ABORT) { + if (summary.termination_type == ceres::USER_FAILURE) { result->termination = TrackRegionResult::FELL_OUT_OF_BOUNDS; return; } @@ -1500,8 +1498,7 @@ void TemplatedTrackRegion(const FloatImage &image1, } // Avoid computing correlation for tracking failures. - HANDLE_TERMINATION(DID_NOT_RUN); - HANDLE_TERMINATION(NUMERICAL_FAILURE); + HANDLE_TERMINATION(FAILURE); // Otherwise, run a final correlation check. if (options.minimum_correlation > 0.0) { @@ -1520,13 +1517,11 @@ void TemplatedTrackRegion(const FloatImage &image1, // than Ceres's parameter tolerance, which operates on the raw parameter // values rather than the pixel shifts of the patch corners. if (summary.termination_type == ceres::USER_SUCCESS) { - result->termination = TrackRegionResult::PARAMETER_TOLERANCE; + result->termination = TrackRegionResult::CONVERGENCE; return; } - HANDLE_TERMINATION(PARAMETER_TOLERANCE); - HANDLE_TERMINATION(FUNCTION_TOLERANCE); - HANDLE_TERMINATION(GRADIENT_TOLERANCE); + HANDLE_TERMINATION(CONVERGENCE); HANDLE_TERMINATION(NO_CONVERGENCE); #undef HANDLE_TERMINATION }; diff --git a/extern/libmv/libmv/tracking/track_region.h b/extern/libmv/libmv/tracking/track_region.h index 58742ca..2ced9dd 100644 --- a/extern/libmv/libmv/tracking/track_region.h +++ b/extern/libmv/libmv/tracking/track_region.h @@ -110,12 +110,9 @@ struct TrackRegionOptions { struct TrackRegionResult { enum Termination { // Ceres termination types, duplicated; though, not the int values. - PARAMETER_TOLERANCE, - FUNCTION_TOLERANCE, - GRADIENT_TOLERANCE, + CONVERGENCE, NO_CONVERGENCE, - DID_NOT_RUN, - NUMERICAL_FAILURE, + FAILURE, // Libmv specific errors. SOURCE_OUT_OF_BOUNDS, diff --git a/extern/libmv/third_party/ceres/ChangeLog b/extern/libmv/third_party/ceres/ChangeLog index 2bd4206..854712f 100644 --- a/extern/libmv/third_party/ceres/ChangeLog +++ b/extern/libmv/third_party/ceres/ChangeLog @@ -1,3 +1,147 @@ +commit 2b16b0080b6e673eaaf9ed478c9e971d9fcd65de +Author: Sameer Agarwal <[email protected]> +Date: Fri Dec 20 15:22:26 2013 -0800 + + CompressedRowSparseMatrix::AppendRows and DeleteRows bugfix. + + CompressedRowSparseMatrix can store the row and column block structure + but the AppendRows and DeleteRows methods did not pay attention to them. + This meant that it was possible to get to a CompressedRowSparseMatrix + whose block structure did not match the contents of the matrix. + + This change fixes this problem. + + Change-Id: I1b3c807fc03d8c049ee20511e2bc62806d211b81 + +commit 27bb4a8589c47a65b5ea2c01872a903043d0ef74 +Author: Sameer Agarwal <[email protected]> +Date: Wed Dec 18 13:06:58 2013 -0800 + + Handle empty problems consistently. + + Until now Ceres was inconsistent in the way it handled a solve + call on an "empty" Problem. If the problem did not contain + any residual or parameter blocks, it failed. However, if after + constructing the reduced program, the problem was found to not + contain any modifiable parameter blocks, it was considered a valid + problem which had a constant objective function value. + + When creating problems automatically, it is often the case that + an empty problem is a corner case. This change makes handling this + corner case consistent with the rest of Ceres logic. + + Change-Id: Ia9da09fbf5d5cd7eae6b39a92c1976b8645db9fe + +commit dcee120bac04911bf01d8365bddca87c74ce2af9 +Author: Sameer Agarwal <[email protected]> +Date: Sat Dec 7 21:48:56 2013 -0800 + + Consolidate SolverTerminationType enum. + + 1. Rename SolverTerminationType to TerminationType. + 2. Consolidate the enum as + a. CONVERGENCE - subsumes FUNCTION_TOLERANCE, PARAMETER_TOLERANCE and GRADIENT_TOLERANCE + b. NO_CONVERGENCE + c. FAILURE - captures all kinds of failures including DID_NOT_RUN. + d. USER_SUCCESS + e. USER_FAILURE + 3. Solver::Summary::error is renamed to be Solver::Summary::message, to both + reduce confusion as well as capture its true meaning. + + Change-Id: I27a382e66e67f5a4750d0ee914d941f6b53c326d + +commit d1cf320bb4f032cb14b20114a29ce2d867307492 +Author: Sergey Sharybin <[email protected]> +Date: Thu Nov 28 23:11:11 2013 +0600 + + Made collections port compatible with MSVC2008 + + The issue was caused by the fact that in this version + of MSVC unordered_map class is defined in <unordered_map> + header file, but this file declares the class int std::tr1 + namespace. + + This confused existing assumption that if there's an + existing <unordered_map> file then class is declared + in std namespace. + + Added an extra check to CMake which detects whether + it's std or std::tr1 which actually contains class + of unordered_map. + + Change-Id: Ic5cf41913895a6ce8e791cc7602d7cf5492c34de + +commit 324eccb5f6ce2a1a0061ec9f3c40778a029a2d97 +Author: Sameer Agarwal <[email protected]> +Date: Tue Dec 3 09:28:14 2013 -0800 + + Restore the state of the Problem after a call to Evaluate. + + Calling Problem::Evaluate mutates the state of the parameter blocks. + In particular, depending on the set and order of parameter blocks + passed to the evaluate call, it will change the internal indexing + used by the Program object used by ProblemImpl. This needs to be + undone before Evaluate returns, otherwise the Problem object + is in an invalid state. + + To help with testing and debugging in the future, a new method + Program::IsValid has been added which checks whether the problem + has its parameter and residual blocks in the right state. + + Thanks to Stefan Leutenegger for reporting this. + + Change-Id: I209b486a31433f0cbb58b570047649eca6d42b56 + +commit 3b1ad31a1fe89fe0bd78e1fffdf22d47d43faaf5 +Author: Sameer Agarwal <[email protected]> +Date: Mon Dec 2 15:43:20 2013 -0800 + + Fix build breakage on old versions of SuiteSparse. + + Change-Id: I2a061615fc374abef2ed323c298359002a6fc5f1 + +commit 5fd480692b0a0c87e2af2f5a8754042a14f5f089 +Author: Sameer Agarwal <[email protected]> +Date: Mon Dec 2 12:16:53 2013 -0800 + + Add more documentation to the linear solver enums. + + Change-Id: Id57f76f73fa38043c0b6729972b1de8578ad7ede + +commit d73acd035359886dfa1c5762b01c6f6449edcab8 +Author: Sameer Agarwal <[email protected]> +Date: Mon Dec 2 12:02:03 2013 -0800 + + Lint cleanup from William Rucklidge. + + Change-Id: I8abcfd369f41b895ce746a21a35f250fe05c39d1 + +commit 3faac6a28cec4c99c41421d3f585f3786be443b3 +Author: Sameer Agarwal <[email protected]> +Date: Thu Nov 28 07:13:26 2013 -0800 + + More lint cleanups and breakage fixes. + + The previous CL was a premature submit due to lack of coffee. + + Change-Id: Id425d0ef332f569a954f0413e6b1ae6087f40f30 + +commit ed92366592a951041bd0367c24006101ef @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-blender-cvs
