DoubleFusion实现的关键要点

ShapePoseOptimizer是一切的基石 

          也即一个好的NodeGraph,不重叠,好的NodeGraph可以生成好的KNN。实际中可以采取顶点数从1000到击200个点都可以用于表达人体的局部旋转场,比如下图是由998个点,

NodeGraph构成HesssianReg,并且会决定最终系统矩阵的条件数

   

    

NodeGraph 节点图在腿部不是很好可以额外加一个顶点  

       updateTwist时候注意采用严格的se3,虽然在旋转和平移都比较小的时候,se3中的\rho与平移项t近似相同,但是在旋转项较大时候就不同了,需要用准确的SE3变换,其中平移项计算公式如下: \large t=Jacobian_{left}(\phi)*\rho

       \large Jacobian_{left}= \frac{sin\theta}{\theta}I+(1-\frac{cos\theta}{\theta})aa^{^}+(1-\frac{cos\theta}{\theta})aa^{^}

       如果\large \theta增大时候,左雅克比矩阵会变小,导致对应平移项减少或者产生改变,改变本来的移动位置,提高系统的稳定性。 

 

 

从smpl生成NodeGraph和NodeGraph计算各种项能量的公式如图所示: 

 

 

            

此时条件数大约为10^7.3253;

 

而正常情况下,如果全身1:5:end 的顶点只取五分之一,均匀分布,则最终的系统矩阵的条件数大约为10^5.6857

    

条件数为 10^5.6857

如果这时候采用6*6的block来求解系统方程: 

      

                  6*6block                                                    3*3block 

论速度还是6*6更快,但是3*3的收敛比较平稳。 

 

如果条件数过大时候,会出现求解不稳定的情况!!!!!!!!!!!!尤其是6*6block时候。 

 

如果条件数低于特定值时候,对角线可以求解出来,

 

          ShapePoseOptimization是关键,一个坏的形状估计和初始姿态估计会影响后续的fusion,可能造成一些身体的变形,但是其实影响没有想象中的那么大,只要两腿不要估计

 

       SMPL人体模板的关节链求解采用线性化最好的方式来做;(这一点没有严格证明过)。 

        就是于涛在bodyfusio上提出来的Taylor展开形式。扰动法或是求导法的效果都要差一些。

         DBQ/Fusionn等等各个环节都不能有问题

       

       每个关节点的twist都应该单独提取出公共旋转和平移,这样对于Reg矩阵有帮助,可以降低整体Hessian矩阵的条件数,提高数值求解的稳定性和精度,提取出来的方式从L1 reg那篇文章看,应该是在CPU上进行的。 

        Reg项的数值大小、鲁棒惩罚函数的参数等都是实现的要点。 

高效运行的要点:

         此外对于整体的实现来说: GPU、CPU混合程序并不比纯GPU弱,因为有很多操作很难并行,或者并行的收益不大,比如链式求导之类的,尤其是数据量不大,并不适合GPU做,可以在CPU算完拷贝到GPU上面。 

         此外高效算法的基石是稀疏化,比如Fusion时候是Hash,TSDF是Hash表示,系统矩阵是CSR表示,这样可以最高效的实现Fusion和warpField的求解之类的操作。 可以提高10倍左右的速度。 

 

          将公共旋转平移提取出来应该也可以极大地提高求解的效率,比如减少GS迭代次数之类的。 

 

可以参考

https://github.com/chenguowen/NodeGraphMake-NodeGraph 

https://github.com/chenguowen/HessianTest-NodeGraphConditionNumber

这是两个文件  

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值