当前位置:网站首页>ceres-solver和g2o性能比较
ceres-solver和g2o性能比较
2022-07-07 01:53:00 【chennuo0125-HIT】
前言
ceres-solver 和 g2o 是slam领域常见的优化器,其中ceres-solver被vins-mono使用,而g2o被orb-slam3使用,因此到底哪个优化器更适合于在slam算法开发中使用?
测试
分别基于这两种优化器实现BA过程,然后针对同一个仿真数据集进行测试,测试程序链接: https://github.com/chennuo0125-HIT/test/tree/main/ceres_g2o_comparer,按readme进行编译运行可得如下结果:
************** solve ba by g2o ***************
# Using EigenSparseCholesky poseDim 6 landMarkDim 3 blockordering 1
Performing full BA:
iteration= 0 chi2= 238086189.574891 time= 0.00782969 cumTime= 0.00782969 edges= 9135 schur= 1 lambda= 5991.771138 levenbergIter= 1
iteration= 1 chi2= 12982651.993440 time= 0.00342487 cumTime= 0.0112546 edges= 9135 schur= 1 lambda= 1997.257046 levenbergIter= 1
iteration= 2 chi2= 657425.312444 time= 0.00318212 cumTime= 0.0144367 edges= 9135 schur= 1 lambda= 665.752349 levenbergIter= 1
iteration= 3 chi2= 124163.255742 time= 0.00287256 cumTime= 0.0173092 edges= 9135 schur= 1 lambda= 221.917450 levenbergIter= 1
iteration= 4 chi2= 75275.286988 time= 0.00304911 cumTime= 0.0203584 edges= 9135 schur= 1 lambda= 73.972483 levenbergIter= 1
iteration= 5 chi2= 34439.999175 time= 0.00264852 cumTime= 0.0230069 edges= 9135 schur= 1 lambda= 24.657494 levenbergIter= 1
iteration= 6 chi2= 22057.399494 time= 0.00309912 cumTime= 0.026106 edges= 9135 schur= 1 lambda= 16.438330 levenbergIter= 1
iteration= 7 chi2= 18344.890824 time= 0.00295518 cumTime= 0.0290612 edges= 9135 schur= 1 lambda= 5.479443 levenbergIter= 1
iteration= 8 chi2= 17868.574026 time= 0.00397518 cumTime= 0.0330364 edges= 9135 schur= 1 lambda= 7.305924 levenbergIter= 2
iteration= 9 chi2= 17333.014982 time= 0.00399876 cumTime= 0.0370351 edges= 9135 schur= 1 lambda= 9.741232 levenbergIter= 2
point error before optimize: 2.96158
point error after optimize: 0.462318
************** solve ba by ceres **************
Solver Summary (v 2.0.0-eigen-(3.3.7)-lapack-suitesparse-(5.7.1)-cxsparse-(3.2.0)-eigensparse-no_openmp)
Original Reduced
Parameter blocks 708 706
Parameters 2184 2170
Effective parameters 2169 2157
Residual blocks 9135 9135
Residuals 18270 18270
Minimizer TRUST_REGION
Sparse linear algebra library SUITE_SPARSE
Trust region strategy LEVENBERG_MARQUARDT
Given Used
Linear solver SPARSE_SCHUR SPARSE_SCHUR
Threads 1 1
Linear solver ordering AUTOMATIC 693,13
Schur structure 2,3,6 2,3,6
Cost:
Initial 1.217168e+09
Final 7.973251e+03
Change 1.217160e+09
Minimizer iterations 7
Successful steps 7
Unsuccessful steps 0
Time (in seconds):
Preprocessor 0.005044
Residual only evaluation 0.004244 (7)
Jacobian & residual evaluation 0.010863 (7)
Linear solver 0.034270 (7)
Minimizer 0.053454
Postprocessor 0.000078
Total 0.058576
Termination: CONVERGENCE (Function tolerance reached. |cost_change|/cost: 4.362464e-08 <= 1.000000e-06)
point error before optimize: 2.96158
point error after optimize: 0.0354349
************** cost time **************
g2o cost time: 68.4571 [ms]
ceres cost time: 63.1568 [ms]
结论
基于"说明"中的仿真数据集,可以初步确定ceres-solver在优化精度和耗时方面都优于g2o.
说明
- 测试程序中的仿真数据来源于 g2o 中的 ba_demo.cpp,g2o测试用例也是基于该程序改的。
- 该测试用例只使用了一组仿真数据集,不足以获得较全面的结论,如果大家有好的测试用例或者别的结论,可以保持交流,我的邮箱: [email protected]
边栏推荐
- Developers don't miss it! Oar hacker marathon phase III chain oar track registration opens
- Crudini profile editing tool
- Test the foundation of development, and teach you to prepare for a fully functional web platform environment
- C语言面试 写一个函数查找两个字符串中的第一个公共字符串
- Knight defeats demon king (Backpack & DP)
- 博士申请 | 上海交通大学自然科学研究院洪亮教授招收深度学习方向博士生
- Find duplicate email addresses
- VScode进行代码补全
- 生活中的开销,怎么记账合适
- 改变ui组件原有样式
猜你喜欢
C note 13
面试中有哪些经典的数据库问题?
jmeter 函数助手 — — 随机值、随机字符串、 固定值随机提取
生活中的开销,怎么记账合适
3531. 哈夫曼树
Experience sharing of contribution of "management world"
Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
[FPGA] EEPROM based on I2C
ETCD数据库源码分析——从raftNode的start函数说起
When we talk about immutable infrastructure, what are we talking about
随机推荐
一段程序让你明白什么静态内部类,局部内部类,匿名内部类
c语言面试写一个函数在字符串N中查找第一次出现子串M的位置。
Peripheral driver library development notes 43: GPIO simulation SPI driver
win系统下安装redis以及windows扩展方法
Test the foundation of development, and teach you to prepare for a fully functional web platform environment
Qt多线程的多种方法之一 QThread
JVM监控及诊断工具-命令行篇
jvm命令之 jcmd:多功能命令行
Dc-7 target
那些自损八百的甲方要求
雷特智能家居龙海祁:从专业调光到全宅智能,20年专注成就专业
Jinfo of JVM command: view and modify JVM configuration parameters in real time
Experience sharing of contribution of "management world"
"Parse" focalloss to solve the problem of data imbalance
改变ui组件原有样式
测试开发基础,教你做一个完整功能的Web平台之环境准备
面试中有哪些经典的数据库问题?
C语言整理(待更新)
You don't know the complete collection of recruitment slang of Internet companies
Find duplicate email addresses