7

我正在为一个项目使用 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)的日志记录却没有。

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

4

2 回答 2

3

我将首先验证您使用的是 glog 而不是 miniglog(在构建 ceres 时检查 CMake 的输出),因为两者不能很好地混合。然后您应该能够使用 glog 的命令行标志设置详细程度。

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

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

编辑:这个最近的补丁也可以帮助你。

于 2014-01-28T23:01:30.253 回答
0

尝试添加该行:

#define MAX_LOG_LEVEL -100

在上面的文件logging.h中#ifdef MAX_LOG_LEVEL

确保将级别设置为-100不是 100
这很好用!

于 2014-02-26T12:55:15.620 回答