Ceres-Solver学*笔记(1)

发布时间:2021-12-03 11:57:00

Ceres-Solver是google出的解决非线性最小二乘问题的库,非线性最小二乘问题具有如下形式:

ρi(∥fi(xi1,…,xik)∥2)是我们所说的残差,fi(?)在Ceres中叫做CostFunction,ρi(?)叫做LossFunction,用来剔除异常值影响。


Ceres最简单的应用,其他博主的博客中已经有很好的说明, Ceres-Solver库入门


这里做一个小的总结:


    对于AutoDiffCostFunction类型的CostFunction,我们构造一个结构体,重写template operator(),注意类型为模板类型,重新定义了()函数,将结构体作为AutoDiffCostFunction的参数。

    // struct
    struct CostFunctor {
    template
    bool operator()(const T* const x, T* residual) const {
    residual[0] = T(10.0) - x[0];
    return true;
    }
    };
    // make CostFunction
    CostFunction* cost_function =
    new AutoDiffCostFunction(new CostFunctor);
    problem.AddResidualBlock(cost_function, NULL, &x);

    对于NumericDiffCostFunction类型的CostFunction,与AutoDiffCostFunction类似,只不过将结构体的接收类型不再是模板类型,用double类型代替了模板类型。

    // struct
    struct NumericDiffCostFunctor {
    bool operator()(const double* const x, double* residual) const {
    residual[0] = 10.0 - x[0];
    return true;
    }
    };
    // make CostFunction
    CostFunction* cost_function =
    new NumericDiffCostFunction(
    new NumericDiffCostFunctor);
    problem.AddResidualBlock(cost_function, NULL, &x);

    谷歌推荐类型为AutoDiffCostFunction,C++模板的使用使得AutoDiff效率更高,而数值的差花费更多,容易出现数字错误,导致收敛速度变慢。

    在有些情况下,不使用AutoDiffCostFunction,例如我们用*似的方式计算导数,而不是用AutoDiff的链式法则,我们需要自己的残差和Jacobin计算。这时我们定义一个CostFunction或者SizedCostFunction的子类。

    class QuadraticCostFunction : public ceres::SizedCostFunction<1, 1> {
    public:
    virtual ~QuadraticCostFunction() {}
    virtual bool Evaluate(double const* const* parameters,
    double* residuals,
    double** jacobians) const {
    const double x = parameters[0][0];
    residuals[0] = 10 - x;

    // Compute the Jacobian if asked for.
    if (jacobians != NULL && jacobians[0] != NULL) {
    jacobians[0][0] = -1;
    }
    return true;
    }
    };

    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)]

    // struct
    /* struct F1 F2 F3 is omited */
    struct F4 {
    template
    bool operator()(const T* const x1, const T* const x4, T* residual) const {
    residual[0] = T(sqrt(10.0)) * (x1[0] - x4[0]) * (x1[0] - x4[0]);
    return true;
    }
    };
    // make CostFunction
    problem.AddResidualBlock(
    new AutoDiffCostFunction(new F1), NULL, &x1, &x2);
    problem.AddResidualBlock(
    new AutoDiffCostFunction(new F2), NULL, &x3, &x4);
    problem.AddResidualBlock(
    new AutoDiffCostFunction(new F3), NULL, &x2, &x3)
    problem.AddResidualBlock(
    new AutoDiffCostFunction(new F4), NULL, &x1, &x4);

    AddResidualBlock函数是一个模板函数,模板参数为”CostFunction,LossFunction,param1,param2,…”,LossFunction可以为NULL,表示不使用LossFunction,param最多有10个。


接下来会对Ceres例程做一下学*。

相关文档

  • 微微怎么更换聊天背景?
  • 铜业熔炼厂工人先锋号事迹材料
  • 冷笑话加脑筋急转弯
  • java 根据当天时间 获取前7天之间的时间 和后多少天的查询时间,获娶近几周 周一的日期
  • 高三的历史复习记忆的方法详情
  • 我的航天梦作文500字-我的航天梦想象作文650字
  • 如何彻底删除SystemVolumeInformation
  • 烟雨故城简谱
  • 办理卫生许可证流程
  • 跟小姐结婚亲戚朋友知道怎么办
  • 岳西之旅
  • 智能网联汽车信息安全体系建设-原创
  • 分治法寻找序列中的最大和最小值
  • 关于自己不够好的忧伤心情说说_自己不够优秀的句子说说
  • 珍惜时间有关名人名言
  • 石化专业自荐书求职信范文3篇
  • 游西安世园会作文「精选」
  • golang emoji表情处理
  • 证券从业资格考试通过了怎么拿到证书
  • 难道
  • 决不容许"法轮功"干扰破坏教育事业
  • 长治有什么好吃的?
  • MSP430G2553与MSP430F5336系列单片机总结[2]??定时器与捕捉比较器以及中断介绍
  • 解约申请书实用范本参考
  • 四年级语文人教版下册期中复习资料
  • 百合什么季节种植合适
  • 般若波罗蜜多心经全文书法
  • 不用重装系统即可安装sql server,sqlserver卸载步骤
  • 高一地理复习计划范文3篇
  • 学习矢量量化-LVQ
  • 猜你喜欢

  • 2019初中数学十大常见解题方法精品教育.doc
  • 赞赏老师的名言
  • 3.1 进气系统的检查与维护
  • 《神笔马良》的优秀教案设计
  • unit 1 句子种类1
  • macbook安装win10后改变滚动手势方向
  • 【推荐】2020九年级物理全册 19.1家庭电路练*(含解析)(新版)新人教版
  • 企业药品经营管理中的内部控制措施研究
  • 歌颂祖国的诗歌5篇.doc
  • 欢迎订阅_欢迎订阅《中国教育技术装备》
  • ta-a1es 耳机
  • 最新五年级奥数*面几何图形的面积计算
  • 培训扩展资料之工厂企业班组长能力培训
  • 浅析建国初期思想政治理论课程教材建设的基本特点
  • 化工企业冬季安全措施
  • 苏州昶翔微电子科技有限公司企业信用报告-天眼查
  • 深圳高交会相关材料归纳
  • 三八妇女节教师演讲稿-演讲致辞模板
  • 性传播疾病和艾滋病ppt课件
  • DSP的CMD文件解读
  • 《博弈论与信息经济学》*题库
  • 信息技术课堂应注重学生表达能力的培养
  • 宝塔线应用技巧
  • 2018年中国漆雾过滤纸行业分析报告-市场深度分析与发展前景预测(目录)
  • 对初中语文阅读教学中设疑提问的若干思考
  • 信息技术等级考试考点工作总结
  • 惊险的五分钟_小学作文
  • 春天的情景作文300字
  • 技术架构大迁徙时代来临,10个关键点读懂数字化转型
  • 大自然风光优美诗句
  • js 数组API
  • 九年级英语全册 Unit 6 When was it invented(第3课时)Section A(Grammar Focus)课件 (新版)人教新目
  • 配套K12重庆市大学城第一中学校高中数学培优补差练*2 理(无答案)
  • 山东蔚蓝绿源生物科技有限公司(企业信用报告)- 天眼查
  • 检验试用期个人工作总结(多篇范文)与棚户区(危旧房)改造工作总结汇编
  • 国网公司十八项反事故措施18防止交通事故
  • 凤翔县惠民工程建设管理有限责任公司企业信用报告-天眼查
  • 祖国,我终于回来了
  • 成功而稳定的植物群落配植来源
  • 新形势下烟草企业人力资源管理现状及提升策略
  • 格力螺杆式水冷冷水机组安装使用说明书
  • 小区物业费标准中包括了哪些项目
  • 电脑版