)]}' { "commit": "487c1aa51fee4fa3edb149392c92faebc0d537b1", "tree": "1d740314b431c4149ae8e7121dd90a858c7dc552", "parents": [ "bf709ecac2e0acc57e37d02243f51031403ededc" ], "author": { "name": "Sameer Agarwal", "email": "sameeragarwal@google.com", "time": "Wed Jul 10 04:41:46 2019 +0200" }, "committer": { "name": "Sameer Agarwal", "email": "sameeragarwal@google.com", "time": "Fri Jul 12 16:08:36 2019 +0200" }, "message": "Expose SubsetPreconditioner in the API\n\nhttps://github.com/ceres-solver/ceres-solver/issues/270\n\nDetailed list of changes:\n\n1. Add SUBSET to the PreconditionerType enum.\n2. Add Solver::Options::residual_blocks_for_subset_preconditioner\n3. Integrate SubsetPreconditioner into the CGNR solver.\n4. Add the reordering logic needed for this to TrustRegionPreprocessor.\n5. Expect CreateJacobianBlockTranspose to take the starting row block\n so that we can work with subparts of the Jacobian matrix.\n6. Extend the denoising example to use this preconditioner.\n\nAs an illustration of its performance, we consider the performance of\ndenoising -input ../data/ceres_noisy.pgm --foe_file ../data/5x5.foe\n\ntl;dr\n\nFor the same cost,\n\nSPARSE_NORMAL_CHOLESKY - 81s\nCGNR + JACOBI - 718s\nCGNR + SUBSET - 57s\n\nSPARSE_NORMAL_CHOLESKY\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nCost:\nInitial 2.317806e+05\nFinal 2.232323e+04\nChange 2.094574e+05\n\nMinimizer iterations 10\nSuccessful steps 10\nUnsuccessful steps 0\n\nTime (in seconds):\nPreprocessor 2.999746\n\n Residual only evaluation 2.306811 (10)\n Jacobian \u0026 residual evaluation 7.421727 (10)\n Linear solver 65.517273 (10)\nMinimizer 78.731011\n\nPostprocessor 0.026079\nTotal 81.756836\n\nTermination: CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.573046e-04 \u003c\u003d 1.000000e-03)\n\nCGNR + JACOBI\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCost:\nInitial 2.317806e+05\nFinal 2.232344e+04\nChange 2.094572e+05\n\nMinimizer iterations 10\nSuccessful steps 10\nUnsuccessful steps 0\n\nTime (in seconds):\nPreprocessor 0.648814\n\n Residual only evaluation 2.297607 (10)\n Jacobian \u0026 residual evaluation 7.327886 (10)\n Linear solver 699.601248 (10)\nMinimizer 712.419493\n\nPostprocessor 0.024014\nTotal 713.092321\n\nTermination: CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.528538e-04 \u003c\u003d 1.000000e-03)\n\nCGNR + SUBSET (random 20% residuals used for the preconditioner)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCost:\nInitial 2.317806e+05\nFinal 2.232327e+04\nChange 2.094574e+05\n\nMinimizer iterations 10\nSuccessful steps 10\nUnsuccessful steps 0\n\nTime (in seconds):\nPreprocessor 1.472743\n\n Residual only evaluation 2.428315 (10)\n Jacobian \u0026 residual evaluation 7.367796 (10)\n Linear solver 42.585999 (10)\nMinimizer 55.664459\n\nPostprocessor 0.024098\nTotal 57.161301\n\nTermination: CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.538277e-04 \u003c\u003d 1.000000e-03)\n\nChange-Id: Ifb011408bd53edbb9439b0b7345649a38f999e18\n", "tree_diff": [ { "type": "modify", "old_id": "3a2ac01f49109e13af33c1f8e5fa00fdc20b5f2d", "old_mode": 33188, "old_path": "docs/source/nnls_solving.rst", "new_id": "d03e62ec84be998a7b8c39a58d235eaafe2fe1ef", "new_mode": 33188, "new_path": "docs/source/nnls_solving.rst" }, { "type": "modify", "old_id": "e64d70fd93fd0e16f4e8147320bba0ee262dcd44", "old_mode": 33188, "old_path": "examples/denoising.cc", "new_id": "9b0773565f7454d3d6c46ca111676310cb2cc672", "new_mode": 33188, "new_path": "examples/denoising.cc" }, { "type": "modify", "old_id": "1e479ae908efabfe1f0dc52feb3ec149ef82b042", "old_mode": 33188, "old_path": "include/ceres/solver.h", "new_id": "ab7e9c22d38ccc1c593cbd6e397ef287bfd673b2", "new_mode": 33188, "new_path": "include/ceres/solver.h" }, { "type": "modify", "old_id": "fec3cea7da175d448ca526bff3838ed1d74f1fc0", "old_mode": 33188, "old_path": "include/ceres/types.h", "new_id": "ed448b2d4545a0c9c7bd7dc62936057e3dd5a9d3", "new_mode": 33188, "new_path": "include/ceres/types.h" }, { "type": "modify", "old_id": "463fbbdd3f5ac05ecd4c900b905c8a44ee85c2c5", "old_mode": 33188, "old_path": "internal/ceres/cgnr_solver.cc", "new_id": "9dba1cfb4a8fe9b0c809a87690bfb17e69c6e697", "new_mode": 33188, "new_path": "internal/ceres/cgnr_solver.cc" }, { "type": "modify", "old_id": "24c245dc30e1c6893d9c34ad315983ab54f9db67", "old_mode": 33188, "old_path": "internal/ceres/linear_solver.h", "new_id": "cb624b372dd7d742096e4aace46744fe9407d433", "new_mode": 33188, "new_path": "internal/ceres/linear_solver.h" }, { "type": "modify", "old_id": "fa3fbf102e29c3e53e6d1da8772f228ee6c9de09", "old_mode": 33188, "old_path": "internal/ceres/program.cc", "new_id": "3a8f0e3ba934a2ccf899597abb2d5b201e227e9c", "new_mode": 33188, "new_path": "internal/ceres/program.cc" }, { "type": "modify", "old_id": "297be65cf32b6fa438b50ceabf9e6c34f141989d", "old_mode": 33188, "old_path": "internal/ceres/program.h", "new_id": "dc544c257906e90063db5176981d66d73cbe097d", "new_mode": 33188, "new_path": "internal/ceres/program.h" }, { "type": "modify", "old_id": "6cb8e9e4ed1e7c72501134249fa70685f2fbfba8", "old_mode": 33188, "old_path": "internal/ceres/program_test.cc", "new_id": "99379c031d2bd4aeafcca3570e5f95fd74fb3533", "new_mode": 33188, "new_path": "internal/ceres/program_test.cc" }, { "type": "modify", "old_id": "3ad2a5f60962300fa4d689375367183db5b1b603", "old_mode": 33188, "old_path": "internal/ceres/reorder_program.cc", "new_id": "45dbbc479ef2ac9b452a73d917d9d8304fa6ac46", "new_mode": 33188, "new_path": "internal/ceres/reorder_program.cc" }, { "type": "modify", "old_id": "36e5d1637a995c83c4255b63600cfd88e2cf1b4e", "old_mode": 33188, "old_path": "internal/ceres/reorder_program.h", "new_id": "88cbee3af21acccc500c72282d4afb4089a5b85b", "new_mode": 33188, "new_path": "internal/ceres/reorder_program.h" }, { "type": "modify", "old_id": "cf3e9f6ef8ad9632710825d8d6bfb17cb9355bf3", "old_mode": 33188, "old_path": "internal/ceres/reorder_program_test.cc", "new_id": "a3e2c788c1d9fb811f2a5c0d758cac04994fb190", "new_mode": 33188, "new_path": "internal/ceres/reorder_program_test.cc" }, { "type": "modify", "old_id": "84a5e5a0b602d2805516a162a37ca4521538f6d9", "old_mode": 33188, "old_path": "internal/ceres/solver.cc", "new_id": "b22a5e17769485e0ac376a39200982f5d656f91e", "new_mode": 33188, "new_path": "internal/ceres/solver.cc" }, { "type": "modify", "old_id": "865c5f13f3075186e18f0cad9558989db023c515", "old_mode": 33188, "old_path": "internal/ceres/subset_preconditioner.cc", "new_id": "7c24ae9f288c7aca7df9ec43c7b605fa10b82d08", "new_mode": 33188, "new_path": "internal/ceres/subset_preconditioner.cc" }, { "type": "modify", "old_id": "77c3d91277f9f37fa4e0952b032312af1650a7ec", "old_mode": 33188, "old_path": "internal/ceres/subset_preconditioner.h", "new_id": "afd370432362860048562213a4f07405a8dd2b31", "new_mode": 33188, "new_path": "internal/ceres/subset_preconditioner.h" }, { "type": "modify", "old_id": "dbeb3e5993e411e20c149c1d09d75466e0fd99de", "old_mode": 33188, "old_path": "internal/ceres/trust_region_preprocessor.cc", "new_id": "498752b5afa6a53be45bb9075e1749a49fab3b43", "new_mode": 33188, "new_path": "internal/ceres/trust_region_preprocessor.cc" }, { "type": "modify", "old_id": "469141452577ea8a6bb3ed657fc1b8c95dd0fc78", "old_mode": 33188, "old_path": "internal/ceres/types.cc", "new_id": "93c4cfcb027a57b2dc20a57a51282df64aa3cd5e", "new_mode": 33188, "new_path": "internal/ceres/types.cc" } ] }