Ceres使用经验之柯西核函数

2023-05-16

原理

在优化中,经常会遇见有异常值的情况.如在直线拟合中,可能会出现若干个不在直线上点,此时如果每一个点的权重一样,就会导致求得的直线方程不理想.
为了增强优化过程中对异常值的鲁棒性,一种比较可行的办法是使用鲁邦和函数,常见的鲁邦和函数有:柯西核函数,huber核函数.以下以柯西核函数为例说明;
在标准的最小二乘中, r i r_i ri是残差项,一般最小化如下目标函数:
m i n 1 / 2 Σ i r i 2 min 1/2\Sigma_i r_i^2 min1/2Σiri2
以应用柯西核函数如下:
m i n Σ c 2 2 l o g ( 1 + ( r i c ) 2 ) min \Sigma \frac{c^2}{2}log(1+(\frac{r_i}{c})^2) minΣ2c2log(1+(cri)2)
与普通的最小二乘目标函数相比,采用柯西核函数之后,使得当r_i过大时,其对应的目标函数不至于过大,从而起到抑制异常值的作用.

实例

举一个简单的例子.拟合一条y=x的直线,现在出现一个(0,10)的outlier, 根据标准最小二乘,其目标函数为:
f l e a s t s q u a r e = 50 f_{leastsquare} = 50 fleastsquare=50
假设c=1, 柯西核函数目标函数值:
f c a u c h y = 1 / 2 l o g ( 101 ) = 2.3 f_{cauchy} = 1/2log(101) = 2.3 fcauchy=1/2log(101)=2.3
可以看出使用柯西核函数之后,该点对整个系统的影响明显减小了.当然使用柯西核函数也有其缺点:

  1. 可能会导致有无数个无法观测的解."With a descending first derivative, such a function has a
    tendency to yield erroneous solutions in a way which can not be observed"
    在Ceres中,只需要在增加残差项时指定柯西核函数:
optimize_problem.AddResidualBlock(cost_function, new ceres::CauchyLoss(0.5), pose_params.data());

同时还需要制定柯西函数的c值,可以通过对目标函数求导,看出c值对目标函数值的影响:
∂ O ∂ r = c 2 2 1 1 + ( r / c ) 2 = r 1 + ( r / c ) 2 \frac{\partial O}{\partial r} = \frac{c^2}{2} \frac{1}{1+(r/c)^2} = \frac{r}{1+(r/c)^2} rO=2c21+(r/c)21=1+(r/c)2r
可以看出当c增大,目标函数的一阶导数越小,即异常值对目标函数影响越小.

参考

  1. Parameter Estimation Techniques: A Tutorial with Application to Conic Fitting, Zhengyou Zhang
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ceres使用经验之柯西核函数 的相关文章

  • win10安装ceres环境

    ceres是一个开源的c 43 43 库 xff0c 在windows上安装有点复杂 xff0c 它依赖其他三个库 Eigen gflags glog 好在这些依赖都可以通过源码安装 在windows上进行源码编译安装 xff0c 需要对应
  • G2o,GTSAM,Ceres,Tensorflow优化器的方法比较(转载)

    转载自 xff1a https blog csdn net ziliwangmoe article details 86561157
  • SLAM本质剖析-Ceres

    转载自 xff1a https mp weixin qq com s fKlG9LWlPI52wStUAv18iw SLAM本质剖析 Ceres 原创 lovely yoshino 古月居 今天 在了解SLAM的原理 流程后 xff0c 个
  • ceres-solver和g2o性能比较

    前言 ceres solver 和 g2o 是slam领域常见的优化器 xff0c 其中ceres solver被vins mono使用 xff0c 而g2o被orb slam3使用 xff0c 因此到底哪个优化器更适合于在slam算法开发
  • 记录Ceres优化中遇到的一个奇怪问题

    笔者在学习视觉SLAM十四讲的第6讲非线性优化时 xff0c 运行使用Ceres拟合曲线的例程 xff0c 发现当生成数据为如下代码时 vector lt double gt x data y data 数据 for int i 61 0
  • Ceres 自动求导解析-从原理到实践

    Ceres 自动求导解析 从原理到实践 文章目录 Ceres 自动求导解析 从原理到实践1 0 前言2 0 Ceres求导简介3 0 Ceres 自动求导原理3 1 官方解释3 2 自我理解 4 0 实践4 1 Jet 的实现4 2 多项式
  • Ubuntu 20.04.05安装ceres-1.14.0

    1 安装Ceres1 14 0 链接 Ubuntu20 04安装Ceres1 14 0 3 cmake编译ceres遇到的问题 xff08 1 xff09 TBB 问题描述 xff1a Did not find Intel TBB libr
  • G2o,GTSAM,Ceres,Tensorflow优化器的方法比较

    首先是一些背景知识 xff1a 最速梯度下降法 xff08 GD xff09 和牛顿法可以用来优化所有种类的函数 牛顿高斯和基于牛顿高斯的LM法只能用来优化非线性最小二乘 SGD是最速梯度下降法的改进 xff0c 也就是每次迭代随即选取一些
  • Ceres-solver安装(win10+vs2015)

    Ceres solver安装 Vs2015 43 win10 文件已经上传至 永久有效 网盘 xff1a https pan baidu com s 1Vj n2Nbp9WFVlbjuXV OxQ 密码 xff1a 3rvo 1 将网盘里的
  • Ceres Solver使用说明

    官方文档 xff1a http www ceres solver org nnls tutorial html robust curve fitting 参考文章 xff1a 一文助你Ceres 入门 Ceres Solver新手向全攻略
  • 非线性优化库学习资料:Ceres Gtsam G2o

    其中 Ceres 资料最完善也相对稳定 xff0c 是谷歌的非线性优化库 xff0c Google Cartographer 就是调用了该库 http www ceres solver org tutorial html 既可以作为 Cer
  • slam优化eigen,ceres,g2o,gtsam,pcl

    eigen SLAM本质剖析 Eigen 古月居 ceres https guyuehome com 34633 g2o SLAM本质剖析 G2O 古月居 gtsam SLAM本质剖析 GTSAM 古月居 pcl https www guy
  • Building ceres-solver fail with eigen3 "error: no type named ‘Literal’ in ‘struct Eigen::NumTraits"

    以前编译ceres solver没有出现过问题 xff0c 最近在编译时报出一个问题 xff1a 75 Building CXX object internal ceres CMakeFiles jet test dir jet test
  • ceres 拟合曲线

    假设有一条满足以下方程的曲线 xff1a 其中a b c为曲线的参数 xff0c w为高斯噪声 这是一个非线性模型 假设我们有N个关于x y的观测数据点 xff0c 想根据这些数据点求出曲线的参数 那么 xff0c 可以求解下面的最小二乘问
  • Ceres 详解(一) Problem类

    引言 Ceres 是由Google开发的开源C 43 43 通用非线性优化库 xff08 项目主页 xff09 xff0c 与g2o并列为目前视觉SLAM中应用最广泛的优化算法库 xff08 VINS Mono中的大部分优化工作均基于Cer
  • 安装kalibr踩坑2:fatal error: ceres/rotation.h: No such file or directory #include “ceres/rotation.h“

    fatal error ceres rotation h No such file or directory include 34 ceres rotation h 34 ceres没有装好 xff0c 需要重装 xff0c 安装方法如下
  • cartographer之ceres编译

    1 首先下载ceres xff1b 2 进入ceres目录 xff1b 3 mkdir build amp amp cd build 4 cmake DEIGENSPARSE 5 make 6 sudo make install
  • Ceres的自动求导实现原理剖析

    目录 数学原理实现原理总结 首先注意数值求导和自动求导在使用的时候的不同之处 实际上 xff0c 正是自动求导这个地方使用了类模板 xff0c 导致它不仅可以传入参数 xff0c 还可以传入Jet类型的数据 xff0c 从而实现了参数的雅可
  • Ceres 自动求导解析-从原理到实践

    Ceres 自动求导解析 从原理到实践 文章目录 Ceres 自动求导解析 从原理到实践1 0 前言2 0 Ceres求导简介3 0 Ceres 自动求导原理3 1 官方解释3 2 自我理解 4 0 实践4 1 Jet 的实现4 2 多项式
  • ubuntu 20.04 安装 ceres库

    文章目录 一 安装依赖项二 下载源码 xff1a 三 编译并且安装1 进入正确位置 xff1a 2 建立build xff0c 并进入3 编译4 安装 安装完成后是下面这个界面 xff1a 一 安装依赖项 sudo apt span cla

随机推荐

  • FreeRTOS 任务间通信与同步总结

    FreeRTOS 任务任务同步与数据传递 xff08 通信 xff09 总结 概述 本章主要介绍了 RTOS 系统中数据传递的机制 根据数据传递的目的 xff0c 可以分为同步 消息通信两种 其中同步是指协调程序运行的先后顺序 xff0c
  • RTOS 中 Task 之间资源共享示例

    RTOS 中 Task 之间资源共享示例 什么是共享资源 大型项目往往需要创建多个任务 xff0c 任务之间协同合作完成一个大型的功能 在前述的章节中 xff0c 我们讲述了任务间的同步与通信 xff0c 但合作与竞争总是相辅相成的 任务
  • RTOS共享资源保护-优先级反转与解决策略

    RTOS 中的优先级反转与解决策略 概述 上节讲述了可以使用二值信号量实现任务 任务之间的共享资源的保护 二值信号量的确完成了保护共享资源的任务 但在一些情况下 这种策略会带来副作用 即优先级反转 优先级反转是如何产生的 理想情况下 按照我
  • RTOS 驱动开发篇-通过 RTOS 组件实现按键驱动-优化1

    RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动 优化1 概述 一个好的驱动程序需要数据关系清晰 代码可复用性高 并且便于维护 如在 RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动1 中所述的那样 当前的按键驱动代码只是为了让
  • RTOS 驱动开发篇-通过 RTOS 组件实现按键驱动-优化2

    RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动 优化2 概述 一个好的驱动程序需要数据关系清晰 代码可复用性高 并且便于维护 如在 RTOS 驱动开发篇 通过 RTOS 组件实现按键驱动1 中所述的那样 基础版本的按键驱动代码只是为
  • 物联网应用选择 RTOS 还是 Linux?

    物联网应用选择 RTOS 还是 Linux Linux VS RTOS xff0c 我该选哪个 xff1f 引言 在开发设备或系统时 xff0c 您需要做出的最早和最关键的决定之一就是决定它将运行哪种类型的操作系统 操作系统是基于特定硬件的
  • 嵌入式编程中的 __attribute__ 到底是什么

    嵌入式编程中的 attribute 到底是什么 相信阅读嵌入式代码的老铁经常看到一些类型定义 变量 函数有 attribute 标识符 xff0c 这个标识符号到底是做什么的 xff1f 有哪些用法 xff0c 咱们今天就来聊一聊 attr
  • opengl之glTranslatef()函数和glRotatef()函数和glLoadIdentity()函数

    glLoadIdentity 将当前的用户坐标系的原点移到了屏幕中心 xff1a 类似于一个复位操作 1 X坐标轴从左至右 xff0c Y坐标轴从下至上 xff0c Z坐标轴从里至外 2 OpenGL屏幕中心的坐标值是X和Y轴上的0 0f点
  • 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs

    大端 小端 字节序 MSB LSB MSBs LSBs 5分钟完全理解上述嵌入式 物联网开发中很扯蛋的几个被玩坏概念 MSB LSB 对于涉及 bit 流的概念中 MSB xff08 Most Significant Bit xff09 x
  • 飞控串口通信接入linux

    1 串口设置 2 串口接入 3 消息传输 4 消息透传 5 mavlink解析 1 mavlink库 将mavlink库添加至项目包含目录 2 常用mavlink消息 mavlink heartbeat t 心跳包 mavlink atti
  • python的函数修改外部传入的参数的问题

    span class token keyword def span span class token function test span span class token punctuation span df span class to
  • 树莓派笔记8:UDP传输视频帧

    因为我在自己笔记本电脑上没能成功安装OpenCV Contrib模块 xff0c 因此不能使用人脸识别等高级功能 xff0c 不过已经在树莓派上安装成功了 xff0c 所以我想实现把树莓派上采集的视频帧传输到PC的功能 xff0c 这样可以
  • 15.linux中的源码安装,SRPM包安装,rpmbild,spec详解

    前言 本小节会详细讲解在linux中如何进行源码编译安装 xff0c SRPM包的两种安装方式 xff0c rpmbuild spec的使用方法 文章目录 前言源码安装和卸载源码安装介绍安装gcc安装源码包Linux源码包卸载 SRPM包的
  • zephyr中消息队列和邮箱的主要区别点

    简单列一下而已 xff0c 想到什么就列了什么 xff1a 1 邮箱既可以同步也可以异步 xff0c 消息队列只可以异步 xff1b 2 邮箱包含Send和Recv两个消息队列 xff0c 消息队列仅仅包含一个用于消息传输的队列 3 邮箱不
  • Windows/Linux客户端挂载NFS共享存储

    Windows Linux客户端挂载NFS共享存储 1 Linux搭建NFS共享存储1 1 NFS概述1 2 安装并配置NFS Server1 3 启动并验证NFS Server 2 客户端挂载NFS共享存储2 1 Windows操作系统挂
  • WIN10源码编译安装QGC-V3.4

    WIN10源码编译安装QGC V3 4 20190228更新 整个安装过程的流程为 xff0c 先安装VS2015 xff0c 再安装Git 用Git来下载qgroundcontrol代码 xff0c 最后下载Qt 用Qt对qgroundc
  • ESP8266简介

    ESP8266 是一款适用于物联网和家庭自动化项目的 Wi Fi 模块 ESP8266 是一个 10元人名币的 Wi Fi 模块 它允许您像使用 Arduino 一样控制输入和输出 xff0c 但它带有 Wi Fi 因此 xff0c 它非常
  • 多任务操作系统是如何切换进程

    多任务操作系统在并行执行多任务时 xff0c 实际上是不断地在任务间进行切换的 xff0c 也就是切换上文 首先要保存前一个进程的上下文 xff0c 然后调度一个就绪的进程 xff0c 并载入该进程的上下文 xff0c cpu开始执行该进程
  • python爬虫爬取淘宝网页

    首先进行相关的分析 要想爬取相关的信息 xff0c 必须指导如下信息 xff1a 1 访问接口 2 翻页操作 首先进行搜索 xff0c 得到相关的网址 xff1a https s taobao com search q 61 书包 amp
  • Ceres使用经验之柯西核函数

    原理 在优化中 xff0c 经常会遇见有异常值的情况 xff0e 如在直线拟合中 xff0c 可能会出现若干个不在直线上点 xff0c 此时如果每一个点的权重一样 xff0c 就会导致求得的直线方程不理想 xff0e 为了增强优化过程中对异