izhengfan.github.io
izhengfan.github.io copied to clipboard
四元数矩阵与 so(3) 左右雅可比 疑问
博主你好。我在读文章的时候产生了一个疑惑。
求雅各比矩阵的时候你是针对扰动求的雅各比,可是我个人理解是如果求解非线性最小二乘问题,雅各比矩阵应该是针对我们想求解的状态的。即我觉得求导应该针对q而不是delta_alpha。
拿ceres里的例子来讲,比如它的field_of_experts.cc里Evaluate()函数中residual等于
residuals[0] += filter_[i] * parameters[i][0];
之后jacobian就等于
jacobians[i][0] = filter_[i];
这很明显残差求导的对象是参数paramter[i][0]。对应到你的博客中,残差error求导的对象应该是q,因为q是传入的parameter。
还请博主指正我的理解是否有误!谢谢!
你好,建议你读一下 g2o 的论文,会了解这个问题的理论本质。
「求解非线性最小二乘问题,雅各比矩阵应该是针对我们想求解的状态的」,这句话既对也不对。在图优化里,Jacobian 最终就应该是 w.r.t. 增量的。因为在求解Gauss-Newton系统 ( H dx = b) 时,待解量是增量。但是呢,Ceres 里没有这种直接求 w.r.t增量的 Jacobian 的途径(g2o 就有);所以,实际你在 Ceres 实现图优化时,解析形式的 Jacobians 需要给两个:error w.r.t. State & State w.r.t. incremental, Ceres 在优化时会把这两个 Jacobians 乘起来(真是脱裤子放屁)。
关于 Ceres 这个问题请参考我的另一篇 blog:https://fzheng.me/2018/01/23/ba-demo-ceres/
你好 谢谢你的回复! 我看了一下g2o的论文,它正好把我的疑惑的地方写出来了。 论文5式下面,写到: "J_ij s the Jacobian of eij(x)computed in x" 也就是说这里的Jacobian是相对于State的,即pose什么的。但是式21的Jacobian是相对于增量的。我能理解由于SO(3)群的原因我们不能直接对State求导了。但是问题是要解决的问题是同一个问题,无论怎么说,把本来该对x本身求导的Jacobian转换为对增量求导,能产生相同的结果吗? 我可能换个说法更好一些,假如不考虑SO(3)的情况,遇到一个普通least square的问题,我们可以直接对想要求解的量x求Jacobian,这时候我不这么做,而去对增量求Jacobian,这样算法本身就改变了呀,根本就不是一个Jacobian,我还能得到我想要的收敛了的x_min吗? 这里我把论文放在附件里您不用再去上网找了。 如果还有时间回复我万分感谢!
On Wed, Jun 12, 2019 at 10:53 PM ZHENG Fan [email protected] wrote:
你好,建议你读一下 g2o 的论文,会了解这个问题的理论本质。
「求解非线性最小二乘问题,雅各比矩阵应该是针对我们想求解的状态的」,这句话既对也不对。在图优化里,Jacobian 最终就应该是 w.r.t. 增量的。因为在求解Gauss-Newton系统是,待解量是增量。但是呢,Ceres 里没有这种直接求 w.r.t增量的 Jacobian 的途径(g2o 就有);所以,实际你在 Ceres 实现图优化时,解析形式的 Jacobians 需要给两个:error w.r.t. State & State w.r.t. incremental, Ceres 在优化时会把这两个 Jacobians 乘起来(真是脱裤子放屁)。
关于 Ceres 这个问题请参考我的另一篇 blog:https://fzheng.me/2018/01/23/ba-demo-ceres/
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/izhengfan/izhengfan.github.io/issues/9?email_source=notifications&email_token=AGDJ7HTJLRJ4QQADP4UY7LDP2HHGDA5CNFSM4HSA5SE2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXSQHWA#issuecomment-501547992, or mute the thread https://github.com/notifications/unsubscribe-auth/AGDJ7HSRF7PMJRBQNZGVM6TP2HHGDANCNFSM4HSA5SEQ .
你想得很深入了,不过你说「遇到一个普通least square的问题,我们可以直接对想要求解的量x求Jacobian,这时候我不这么做,而去对增量求Jacobian,这样算法本身就改变了呀,根本就不是一个Jacobian」,其实你不妨想一想,在线性的情况下,对 x 和对 dx 求导真的不是一个 Jacobian 吗?
假如对 dx 求导,那就是 J = d e(x+dx) / d dx; 假如对 x 求导,那就是 J = d e(x) / d x; 其实是同一个哦。因为 d e(x) / dx = lim_{dx ->0} [ e(x+dx) - e(x) ] / dx
可以再想深一点。我前面说,在图优化里,Jacobian 最终就应该是 w.r.t. 增量的;因为求解Gauss-Newton系统 ( H dx = b) 时,待解量是增量。
优化问题是干什么呢?是为了找一个增量,这个增量使代价函数变小,也就是使 e(x) 变小。e(x) 对 dx 的Jacobian 又是什么呢?是 e(x) 随 dx 增加的变化率。让 dx 一直朝向使 e(x) 小的方向走,这就是图优化迭代的过程。所以说,Jacobian 最终就应该是 w.r.t. 增量的。
非常感谢,结合你的说明我自己再推导了一下,现在理解了!
On Sun, Jun 16, 2019 at 10:50 PM ZHENG Fan [email protected] wrote:
可以再想深一点。我前面说,在图优化里,Jacobian 最终就应该是 w.r.t. 增量的;因为求解Gauss-Newton系统 ( H dx = b) 时,待解量是增量。
优化问题是干什么呢?是为了找一个增量,这个增量使代价函数变小,也就是使 e(x) 变小。e(x) 对 dx 的Jacobian 又是什么呢?是 e(x) 随 dx 增加的变化率。让 dx 一直朝向使 e(x) 小的方向走,这就是图优化迭代的过程。所以说,Jacobian 最终就应该是 w.r.t. 增量的。
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/izhengfan/izhengfan.github.io/issues/9?email_source=notifications&email_token=AGDJ7HV2G2TLI45O7VE5QD3P24JZ5A5CNFSM4HSA5SE2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODX2A2WI#issuecomment-502533465, or mute the thread https://github.com/notifications/unsubscribe-auth/AGDJ7HUV37FQ4THF3AOWMH3P24JZ5ANCNFSM4HSA5SEQ .