dlib :: find_min_bobyqa的参数

时间:2019-02-04 12:16:31

标签: dlib

我正在研究Matt Zucker的Page dewarping的C ++版本。到目前为止,一切正常,但我在优化方面存在问题。在Github repo的第748行中,Matt使用了Scipy的optimize函数。我的C ++等效项是dlib.net中的find_min_bobyqa。代码是:

auto f = [&](const column_vector& ppts) { return objective( dstpoints, ppts, keypoint_index); };
dlib::find_min_bobyqa(f,
               params,
               2 * params.nr() + 1,    // npt - number of interpolation points: x.size() + 2 <= npt && npt <= (x.size()+1)*(x.size()+2)/2
               dlib::uniform_matrix<double>(params.nr(), 1, -2),  // lower bound constraint
               dlib::uniform_matrix<double>(params.nr(), 1, 2),   // upper bound constraint
               1,    // initial trust region radius
               1e-5,  // stopping trust region radius
               4000    // max number of objective function evaluations
);

在我的具体示例中,params是一个dlib::column_vector,具有双值和length =189。params的每个元素均小于2.0且大于-2.0。函数objective()返回双精度值,并且“独立”函数正常工作,因为我得到的值与Python版本相同。但是运行fin_min_bobyqa函数后,通常会收到以下消息:

  

在抛出'dlib:bobyqa_failure'实例后调用终止,由于目标函数被调用了max_f_evals次,因此从BOBYQA返回。

我将max_f_evals设置为相当大的值,以查看其是否完全优化,但并非如此。我做了一些参数调整,但效果不佳。我应该如何设置find_min_bobyqa的参数以获得正确的解决方案?

2 个答案:

答案 0 :(得分:1)

我对这个问题也很感兴趣。扎克(Zucker)的工作经过很小的调整,非常适合拉直活页乐谱图像,当我遇到您的问题时,我一直在寻找在移动平台上实现它的方法。

到目前为止,我的研究表明BOBYQA并不等同于鲍威尔的方法。 BOBYQA受到约束,但没有约束。

有关更多信息,请参见这些链接,以及编译正确的支持库的可能方法-我会尝试使用UOBYQA或NEWUOA。

https://github.com/jacobwilliams/PowellOpt https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#rdd2e1855725e-3 (请参阅“注释”部分) 编辑:在这里看到C版本: https://github.com/emmt/Algorithms/tree/master/newuoa

我想发表此评论,但我的观点不够。

我对您的进步很感兴趣。如果愿意,请随时通知我。

答案 1 :(得分:0)

我终于解决了这个问题。我使用了PRAXIS库,因为它不需要派生信息并且速度很快。 我根据自己的需要修改了代码,现在它比用Python编写的原始版本快几秒钟。

相关问题