Ceres Solver:无法禁用日志记录(google glog)

时间:2014-01-28 16:16:00

标签: c++ least-squares glog ceres-solver

我正在使用ceres解算器进行项目,当我调用ceres::Solve函数时,库开始输出这样的行:

iterative_schur_complement_solver.cc:88 No parameter blocks left in the schur complement.
wall_time.cc:74 

IterativeSchurComplementSolver::Solve
                                   Delta   Cumulative
                           Total :    0.00001      0.00001

我试图禁用这些中间步骤的记录,但到目前为止我没有成功。我在我班级的构造函数中调用这一行:

google::InitGoogleLogging("my-project");

调用求解器时设置的选项是:

ceres::Solver::Options options;
options.preconditioner_type = ceres::SCHUR_JACOBI;
options.linear_solver_type = ceres::ITERATIVE_SCHUR;
options.logging_type = SILENT;
options.minimizer_progress_to_stdout = false;
ceres::Solver::Summary summary;
ceres::Solve(options, &problem, &summary);

在我看来,有效地禁用了ceres日志记录,但其依赖库(即:SuiteSparse)的日志记录却没有。

有人知道如何禁用这个恼人的日志吗?

2 个答案:

答案 0 :(得分:2)

我首先要验证你是在使用glog而不是miniglog(在建立ceres时检查CMake的输出),因为两者混合不好。然后你应该能够使用glog的command line flags设置详细程度。

另外,我认为SILENT应该是范围的,即options.logging_type = ceres::SILENT;

我正在使用miniglog,我也看到了这些消息。

修改:This recent patch也可以为您提供帮助。

答案 1 :(得分:0)

尝试添加以下行:

#define MAX_LOG_LEVEL -100
文件 logging.h 中的

就在#ifdef MAX_LOG_LEVEL

之上

确保将等级设置为 -100 不是100
这很棒!