Ceres-Solver学习笔记(1)
来源:互联网 发布:mac 上的page键 编辑:程序博客网 时间:2024/06/15 03:01
Ceres-Solver是google出的解决非线性最小二乘问题的库,非线性最小二乘问题具有如下形式:
ρi(∥fi(xi1,…,xik)∥2)是我们所说的残差,fi(⋅)在Ceres中叫做CostFunction,ρi(⋅)叫做LossFunction,用来剔除异常值影响。
Ceres最简单的应用,其他博主的博客中已经有很好的说明, Ceres-Solver库入门
这里做一个小的总结:
对于AutoDiffCostFunction类型的CostFunction,我们构造一个结构体,重写template operator(),注意类型为模板类型,重新定义了()函数,将结构体作为AutoDiffCostFunction的参数。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
对于NumericDiffCostFunction类型的CostFunction,与AutoDiffCostFunction类似,只不过将结构体的接收类型不再是模板类型,用double类型代替了模板类型。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
谷歌推荐类型为AutoDiffCostFunction,C++模板的使用使得AutoDiff效率更高,而数值的差花费更多,容易出现数字错误,导致收敛速度变慢。
在有些情况下,不使用AutoDiffCostFunction,例如我们用近似的方式计算导数,而不是用AutoDiff的链式法则,我们需要自己的残差和Jacobin计算。这时我们定义一个CostFunction或者SizedCostFunction的子类。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
SimpleCostFunction::Evaluate 提供一个 parameters 数组作为输入, 输出 residuals 数组作为残差 ,输出数组 jacobians来显示Jacobians. jacobians是一个可选项,Evaluate检查他是否为 non-null,如果非空,就用残差方程的导数来填充他,因为残差方程是线性的,所以jacobians是常数。(输出惨差和jacobians怎么用? 如何构建CostFunction?)
对于有多个残差的情况,我们可以构建多个AutoDiffCostFunction,例如
f1(x)f2(x)f3(x)f4(x)F(x)=x1+10x2=5√(x3−x4)=(x2−2x3)2=10−−√(x1−x4)2=[f1(x), f2(x), f3(x), f4(x)] - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
AddResidualBlock函数是一个模板函数,模板参数为”CostFunction,LossFunction,param1,param2,…”,LossFunction可以为NULL,表示不使用LossFunction,param最多有10个。
接下来会对Ceres例程做一下学习。
- Ceres-Solver学习笔记(1)
- Ceres-Solver学习笔记(1)
- ceres solver 学习笔记
- Ceres-Solver学习笔记(2)
- Ceres-Solver学习笔记(3)
- Ceres-Solver学习笔记(4)
- Ceres-Solver学习笔记(5)
- Ceres-Solver学习笔记(6)
- Ceres-Solver学习笔记(7)
- Ceres-Solver学习笔记(8)
- Ceres-Solver学习笔记(9)
- Ceres-Solver学习笔记(2)
- Ceres solver
- Ceres-Solver库入门
- Ceres solver tutorial
- Windows 配置 Ceres-solver
- VS2013 ceres-solver编译
- ceres-solver拟合椭球
- Python的使用总结-1
- IT忍者神龟之Linux Redis安装,Linux如何安装Redis,Linux Redis自动启动,Redis开机启动
- (四)spring cloud云服务架构代码结构详细讲解
- 代理模式(java实现)
- Spring Boot报错Whitelabel Error Page
- Ceres-Solver学习笔记(1)
- CCNA基础-OSI七层模型
- GCD HDU
- 读懂 MySQL 执行计划
- Django发邮件
- IT忍者神龟之Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动
- Kotlin学习
- https
- bootstrap-fileinput自动上传