分享好友 最新动态首页 最新动态分类 切换频道
Ceres求解优化问题
2024-12-27 04:42

Ceres Solver是专门用于求解非线性最小二乘问题的C++开源库,研究SLAM方向不过滤波和优化两个技术路线,因此常用Ceres库解决实际项目中的优化问题,当然还有g2o同样可用,但就说明文档而言,Ceres对新用户更友好,g2o提供不多的文档,更多是需要参考其它开源项目使用,所以笔者目前更加喜欢使用Ceres.
本文更多的站在一个SLAMer的角度讲解Ceres的基本使用方法,如需要了解更多细节功能,请直接跳转下面的官方文档:

Ceres求解优化问题

  • Ceres官方文档-英文
  • Ceres说明文档-中文

首先我们使用Ceres目的是解决最小二乘问题,所以必须创建一个最小乘问题的对象

 

然后,要定义一个最小二乘问题无非就是需要两部分内容:

  • 待优化变量
  • 误差(cost function)

对应于图优化其实就是图顶点和边,这是使用Ceres最关键的部分.

添加边在Ceres中就是添加cost function.首先我们需要定义一个Cost Function类.这时候你需要考虑一个问题,自己推导雅可比矩阵还是使用Ceres的自动推导:

  • 自动求导
  • 解析导数

2.2.1 使用自动求导的Cost Function

自动导数只需提供误差的计算方式即可

 

细心的读者已经发现一个细节,重载的是一个模板函数,Ceres正是使用这个模板类完成自动求导,其实现非常妙~关于自动求导的实现请往下阅读.
对于使用自动求导的cost Function到此已经完成定义,下一步只需要添加到问题中即可:

 

这里解析一下的模板参数:

  • 第一个模板参数为误差的维度
  • 后续第n+1个模板参数分别对应第n个顶点(待优化变量)的维度

最后便是使用添加Cost Function即可.

2.2.2 使用解析导数的Cost Function

如果使用解析导数的方式,定义Cost Function时除了需要提供误差的计算方式,当然还需要告知Ceres误差关于待优化变量的雅可比计算方式.具体使用时需要构造一个继承的子类,并重载,将提供返回误差结果和雅可比结果,下面是官方的使用例子:

 

值得注意的是:

  1. 的模板函数和自动求导中的类似,第一个模板参数对应误差的维度,后面第n个分别对应第n个顶点的维度;
  2. 注意是指针的指针,表示指向所有顶点参数数组的地址,表示指向第i个顶点参数数组的地址,表示第i个顶点参数数组的第j个参数.注意上面的写法,要对和加以判断,这说明Ceres在调用这个成员函数时并一定需要计算雅可比,不加这个判断会导致程序段错误.

最后同样只需要添加至problem即可

 
 

不同于g2o,Ceres在实现上没有将顶点和边完全分离,具体而言是,在定义边时已经关联了顶点,一般情况无须自己定义顶点.但是Ceres考虑到用户不同的需求,比如SLAM中常见的优化位姿问题,不同于普通向量空间,李群不能使用普通加减法,且由于自由度冗余不适合直接用于优化,因此Ceres向用户提供了.

 

使用最基本需要重载4个成员方法:

  1. 需返回全局空间(不知道这么表达是否正确)的维度,对于SO3一般使用李代数表示,所以是4,对于SE3就是7,;
  2. 需返回局部空间的维度,对于位姿就是流型的切空间维度,即对于so3的维度是3,对于se3的维度6;
  3. 需提供全局空间的加法操作,上面提到之所以使用就是因为这类待优化变量不能使用普通的加法,所以这一步告知Ceres如何对变量进行更新;
  4. 需提供全局空间关于局部空间的雅可比矩阵,不难猜测Ceres进行优化时先调用误差中计算误差关于全局空间的雅可比,再调用这里的得到全局空间关于局部空间的雅可比,根据链式法则两个直接相乘得到的就是误差关于局部空间的雅可比.

这里先简单介绍自定义待优化变量的使用,后文将以SLAM中常见的位姿优化问题为例介绍如何编写和.

到此已经自定义完成待优化变量,后面同样只需要将其添加到即可,如

 

上面的7自然代表就是SE3的维度.

现在定义好了误差和待优化变量,即确定了最小二乘问题,理论上可以进行优化了,但事实上还需要解决一个实际计算的问题,那便是如何求解线性方程:

显然求 的逆是最直接的方法,但直接求逆是十分低效的手段;另外SLAM的优化问题一般具有稀疏性,为了更高效地求解上面的线性方程组,Ceres提供了多个选项.这里就直接引用博客:ceres solver里的线性求解器的解释:

  1. : 用于小规模最小二乘问题的求解
  2. &:cholesky分解,用于具有稀疏性的大规模非线性最小二乘问题求解
  3. : SCHUR分解,用于BA问题求解
  4. : 使用共轭梯度schur求解BA问题
  5. : 使用共轭梯度法求解稀疏方程

用户只需要通过选择哪种求解器即可,例如使用:

 

笔者目前而言没有深入了解上面各个求解方法在实际应用中所带来差异,但想在此强调的是要根据实际的优化问题合理选择所需的求解器,例如SLAM中的Bundle Adjustment问题中 具有明显的稀疏性,使用SCHUR消元再求解可以极大提高计算效率,具体详看<视觉SLAM十四讲-ch10>.

最后只需要将上面构建的最小二乘和配置好的传入函数即可,另外可以输出优化信息,具体如下:

 
 

2.6.1 损失函数

上面例子中的第二个参数为即使用默认的二范数作为损失函数,为了避免一些异常值对优化的影响可以选用其它损失函数,例如:

 

2.6.2 堆内存

细心的读者可能发现,上面的实例代码中边和顶点都使用了堆内存来实例化,那计算完之后还需要主动吗?看官方的例程后结论是不需要,说明自己在析构时会对其内存进行释放.

上面讲解了如何使用解决一个实际的优化问题,根据以上的步骤能够解决大多数的问题.然而,对于位姿到底如何自定义?自动求导又为何看起来如此"智能"?下面继续深入一点讨论.

上面提到对于位姿这种流型空间的优化问题,以重投影误差(看到这里我相信读者也是做SLAM或相关,重投影误差就不再多说了)为例介绍其边的定义,待优化变量使用了四元数加位移的方法表达SE3,其中四元数放在前面,即 , 增量se3则是

 

雅可比的计算和<视觉SLAM14讲>一模一样,唯一不同是这里由于旋转放在位移的前面,所以矩阵的前3列和后3列调换了.

1.维度成员方法

 

和正如前面提到的分别对应SE3的维度和se3点维度,所以分别是7和6.

2.待优化变量更新成员方法

 

操作提供了SE3点更新方法,注意:

  • :应的是7维的SE3,即 ;
  • 就是解线性方程后得到的se3增量, 即 ;
  • 对应更新后的SE3;
  • 实现了se3到SE3指数映射过程,具体可以参考F-LOAM

不难发现上面实则实现的左乘的更新操作:

3.待优化变量的全局关于局部的雅可比成员方法:

 

看到这里我想大部分人都会疑惑,这一步似乎啥都没做啊?
的确,这里根本没做任何"有用"的操作,只是将前6维取出来,这是因为前面边的雅可比中已经完成了误差关于se3点求导计算,但是维度是2x7,我们只需要在这一步取出前6维即可得到最终的2x6维度.
或许有人会质疑,为啥实现得如此不直观?
事实上笔者已经从好几个优秀的开源项目中看到过类似的实现,包括上面的实现其实出自F-LOAM;另一个方面,笔者作为从<视觉SLAM14讲>入门的学生来说,直接对se3求导似乎更容易,反而要让笔者计算关于四元数的雅可比会令我不知所措.
当然按照Ceres设计那样分别提供 误差关于SE3点雅可比 以及 SE3关于se3的雅可比 也绝对没问题,想要了解该实现的欢迎跳转笔者另一篇博客Ceres姿态优化.

自动求导的理论依据是引入了二元数(Jet),可以将其理解为一个复数,有一个无穷小的分量:

以平方操作为例:

只保留一阶无穷小则

可见 正是 在 处的导数.不加证明地说(事实这个有点类似扰动,它的思想就是代入一个微小的扰动,取其系数代表该扰动对函数的影响程度),这个方法对于其它操作同样适用,那么只要我们实现了二元数的各种运算操作(包括加减乘除指数幂)即可对大部分计算进行自动求导.
Ceres正是实现了二元数(Jet)这一种类:


最新文章
阿里云助力易点天下实现程序化广告+AI多维度效率提升
  12月12日,在第十二届中国企业全球形象高峰论坛现场,联合阿里云正式发布了在程序化广告领域的多项重要突破,这些成果主要基于阿里云平台PAI、通义大模型以及阿里云+云原生技术生成。  市场研究机构MAGNA最新发布的《全球广告预测》
观山湖区第一高级中学环境好不好
摘要:观山湖区第一高级中学的环境综合评价涵盖了校园设施、教学资源、师资力量等多个方面。小编从升学规划师的角度出发,深入分析学校环境对学长和教育质量的重要性,探讨该校在各方面的表现及其对学生未来发展的潜在影响。观山湖区第一高
遇到纠纷不用慌,“人民调解”帮你忙!“解纷芜优”指引来了
生活中可能遇到矛盾纠纷,如果闹上法庭,不仅要花时间和金钱,还会伤害人与人之间的和气……那么,如何更加妥善高效处理矛盾纠纷呢?快随小编来看看“人民调解”如何省时省心帮助纠纷双方解决问题吧现在可以通过“解纷芜优”在线申请调解啦
甲骨文谈存储:其实一开始我们就是认真的
当人们谈到iPhone的成功最大的因素之一就是软件与硬件最强大的结合。雷军也表示软硬件结合互联网是小米成功的核心。今天甲骨文高调宣布其存储设备并向业 内发出最强音---甲骨文的软件加上甲骨文的存储设备,就是要为企业级数据市场提供最好
青年小店,让城市未来这YOUNG出彩丨青年小店榜样计划(浙江杭州站)圆满举行
杭州,一座创新活力之城、青年友好之城,吸引着大批年轻人前来生活与创业,为大批怀揣梦想与激情的年轻人提供了创业沃土,也承载着不少年轻人的诗和远方。近年来,杭州市积极践行青年优先发展理念,全力支持青年创新创业,吸引众多有志青年
淘宝直播店抽免单如何配置?
抽免单工具是淘宝直播平台提供给商家和主播的一种玩法工具,用户通过对指定商品下单参与活动,可以赢取免单福利,主播可以通过该工具进行直播间福利发放,亦可通过该工具提升成交爆发系数,欢迎各位商家和主播伙伴使用~注意:抽免单工具202
面容即密码!人脸识别签到助参会者快速入场
在数字化技术不断发展的今天,人脸识别签到技术正逐渐成为各类活动入场管理的热门之选,以其卓越的智能化特性重塑着传统签到模式。人脸识别:精准验证的奥秘人脸识别签到,是一种依托先进的图像识别技术与深度学习算法的身份验证方式。它通
用AI绘画生成诱人美女,简单几步打造个人专属女神
在科技越来越发达的今天,AI绘画逐渐走入了我们的生活。作为一位AI工具科普博主,今天我想和家人们分享的是,如何使用AI生成超逼真的美女写真。你是否想过,为你的社交平台增添一些引人注目的照片,或者为自己创造一个独特的人物形象?人工
高清美女写真就这样轻松生成!用AI工具打造你的数位女神
在主页上,挑选一款你喜欢的美女写真模板,工具内提供了众多预设风格,可以让你眼花缭乱。步骤三:自定义设计根据你的喜好,调整肤色、发型、眼睛等细节。你会发现,镜头下的她越来越符合你心中的那个完美形象。步骤四:生成并预览完成调整
近八成受访大学生认为需要减少对算法推荐的依赖
  视觉中国供图  就读于西北师范大学的刘昊冉觉得算法无处不在,有时仅仅是和同学聊天谈到某个话题,打开手机就会发现相关推荐已经出现在各类软件里了。刘昊冉对这样的推荐不太满意,感觉隐私在算法面前暴露无遗。  近日,中国青年报
相关文章
推荐文章
发表评论
0评