精华内容
下载资源
问答
  • 参数估计

    2018-06-19 22:36:00
    一、什么参数估计  参数通常用来表示一个量,可以是标量也可以是有值向量。按照时间变化,也可以分为时常参数时变参数。对于时常参数的估计称为参数估计。对于时变的参数估计称为状态估计,本文不研究。参数...

    简单的讨论一下参数估计理论

    一、什么是参数估计

      参数通常用来表示一个量,可以是标量也可以是有值向量。按照时间变化,也可以分为时常参数和时变参数。对于时常参数的估计称为参数估计。对于时变的参数估计称为状态估计,本文不研究。参数估计的包括两个主要的模型以及四个基本估计方法,如下图所示:

      贝叶斯学派和频率学派最大的不同、根上的不同,就是在于模型 y=wx+b 其中的 w 和 b 两个参数,频率学派认为参数是固定的、也就是上面的非随机模型,只要通过不停的采样、不停的观测训练,就能够估算参数 w 和 b,因为它们是固定不变的;而贝叶斯学派相反,他们认为这些参数是变量,它们是服从一定的分布的,也就是上面的随机模型,这是它最根本的差别。通常上面两种也被称为点估计和区间估计。

    二、四种基本的估计方法

    2.1  最大似然估计

      使得似然函数达到最大的x即为参数x的ML估计:

    2.2  最小二乘估计

    (我还是直接抄书吧。。。以下以上都来自《雷达数据处理及应用》)

     

    2.3  最大后验估计

      对于随机参数,由于已知其先验概率p(x),由贝叶斯准则:

      可以求得其后验概率密度函数,使后验概率密度函数最大的x被称为参数x的最大后验估计,即:

    2.4  最小均方误差估计

    三、最大似然估计和最小二乘估计的对比

      当模型是高斯分布时,最大似然估计和最小二乘估计是等价的。

     

    转载于:https://www.cnblogs.com/pinking/p/9201539.html

    展开全文
  • 本文的目的在于为大家介绍,基于MANO的手部姿态估计的流程:包括并不限于: 数据处理,MANO的推理流程(与论文对齐),手的解剖学生物学特点。 1. 什么是手部姿态估计? 我理解的 手部姿态估计(hand pose estimation...

    目前, 主流的手部姿态估计的技术方案是使用马普所于2017年提出的MANO参数化模型, 在此基础上回归3D坐标, 这是因为MANO有很合理的结构以及定义好的前向动力学树。本文的目的在于为大家介绍,基于MANO的手部姿态估计的流程:包括并不限于: 数据处理MANO的推理流程(与论文对齐)手的解剖学和生物学特点

    1. 什么是手部姿态估计?

    我理解的 手部姿态估计(hand pose estimation) 是:
    同人体姿态估计一样, 是给定一张手部特写图片,估计其姿态(2D/3D keypoint)的位置(通常是21个).

    下图是一个最经典的实现(无参数化模型):

    将一个手部特写图片(hand image)输入Encoder-Decoder结构中,从Decoder输出的特征图中,选取响应最大的位置,与ground truth生成2D landmark的热力图计算loss,目的是让Decoder生成的特征图在手部的不同位置有对应的响应,即从point of interest (PoI)变为构造一种regional of interest (RoI)的表示, 即让网络从关注某个确定的点,到关注一个范围, 以此扩大模型的泛化能力以及对复杂情况下的估计鲁棒性.

    这种方法在参数化模型MANO/SMPL出现之前,是姿态估计领域的主流叙事.
    在这里插入图片描述

    此图来自2018年,Olha CHERNYTSKA(毕业于乌克兰天主教大学)的硕士毕业论文[3].

    其中3D keypoint的坐标一般用相对坐标系表示, 对手部来说,一般会选择手腕(下图的0)/食指和手掌连接关节(下图5)作为局部坐标系的原点(0, 0, 0). 这种做法也叫做root-relative.

    在这里插入图片描述

    下图是以上图的节点5为原点的相对3D坐标表示,以下图为例, 我们想让节点5的坐标为(0, 0, 0),在实践中,大家的做法一般很简单(伪代码):

    img = cv2.imread("xxx.jpg")  # 1) 读取手部特写图片
    img = normalize(img)         # 2) 对图片进行处理(规则化等)
    pred_3d = Net(img)           # 3) 送入网络进行预测
    pred_3d -= pred_3d[5]        # 4) 将预测结果变为root-relative的方式.
    

    在这里插入图片描述

    红框就是节点5,可见其坐标为(0, 0, 0).

    2. MANO是什么?

    近年来, CVPR, ECCV, ICCV的手部姿态估计论文,基本或多或少的都是model-based, 即基于参数化模型的方案。而其中,最主流的参数化模型就是Javier Romero, Dimitrios Tzionas, Michael J. Black于2017年发表于Siggraph Asia的《Embodied Hands: Modeling and Capturing Hands and Bodies Together[1].

    这篇文章也是在马普所和工业光魔联合提出的《SMPL: A Skinned Multi-Person Linear Model(2015)[2]的基础上,提出了针对手部的参数化模型,其主要目的是:

    To cope with low-resolution, occlusion, and noise, we develop a
    new model called MANO (hand Model with Articulated and Non-rigid defOrmations).
    在这里插入图片描述 图来自[1].

    我的个人感受是,由于手势姿态估计的问题是:

    • 自遮挡: 以下图为例,中指到小指都被手背挡住了.
      在这里插入图片描述

    • 手抓握物体导致的遮挡:
      在这里插入图片描述

    • 分辨率低: 手部在整个构图中的所占像素比例非常小,对正确估计其手势增加了难度.

    确实,在全身/半身的时候, 手势相比整体来说所占的像素非常小 ,所以 难
    以分辨其动作 MANO这个模型,相当于在图片 ->3D pose中间加了一个过渡表示(或者说加上了强经验prior,从而能够预测遮挡和低分辨率的图像).
    在这里插入图片描述

    图来自Frankmocap仓库[4]

    用不带先验信息的方法,即model-free的方法,对于这些情况的姿态估计效果通常就会失败。而自从有了参数化模型MANO,由于MANO是由 “1000 high-resolution 3D scans of hands of 31 subjects in a wide variety of hand poses.” 得到,其中包括抓握,不良光照等场景。

    所以,根据18年以来的众多手部姿态分析工作表明:使用MANO参数化模型,对于估计出一个合理且准确的手部姿态,有至关重要的作用

    需要注意的是,由于手部是分段刚性的(articulated objects), 因此手部的建模还是有一定难度的,马普所用了来自美国亚特兰大的3dMD公司的扫描设备,估计花费不菲…, 至于MANO是怎么制作的,这里我不详细展开,有兴趣的朋友可以直接在文章下面问。

    在这里插入图片描述

    图来自中科大刘利刚老师的games102课程[5].

    那么,MANO作为一个 3D参数化模型,其参数都有哪些呢?

    • 778个vertices 1538个faces,并根据 16个 关键点 +从顶点中获取 5个
      手指指尖的点, 构成完整的手部链条,或者叫做前向动力学树 (forward kinematic tree).
      下图来自牛津大学的CVPR2019论文[7]《3D Hand Shape and Pose from Images in the Wild》.
      在这里插入图片描述

    (即图中的 ,16,17,18,19,20都是由变形后的 vertex中按照规定规则取到的 , 代码. 以节点9为例,其3D坐标可以在变形后的Mesh上,根据其所在顶点(vertex)去提取。在这里插入图片描述

    3. 手势3D pose estimation的MANO部分处理逻辑分析重点

    如下图所示, 手部的crop图片送入神经网络,预测得到 MANO所需的61个参数的值,其中包含 MANO所需的相机参数 (前 3个 ), θ(3-51), β(51:61),其中θ是MANO中用于控制pose的参数,β则是 MANO中用于控制shape的参数。
    在这里插入图片描述

    其中,神经网络的设计就比较简单,只要按照输入和输出的结构设计就行, 最经典的实现方案是UCB和马普所合作的CVPR2018论文: HMR[6], 其使用了auto-regressive的方式去优化预测的MANO所需的61个系数.

    • 输入(bs,3,224,224)
      为图像处理后得到的Tensor(NCHW,图像的分辨率可以按照自己的需求调整), bs是batch size.

    • 输出为(bs, 61)
      得到MANO所需的参数, 这些参数输入MANO, 我们就可以得到3D的pose estimation结果(相对坐标系下的21个关键点的xyz位置).

    3.1 MANO的计算逻辑

    下图来自CVPR2020的《Minimal-Hand》[8], 其把MANO的流程简单用两个公式概况了:
    在这里插入图片描述

    • T(β,θ)=T+Bs(β)+Bp(θ)T(\beta, \theta) = \overline{T} + B_s(\beta) + B_p(\theta)
      此公式是将shape的参数βR10\beta \in R^{10} 和pose的参数θR48\theta \in R^{48}进行变形,变形的实现通过Bs/pB_{s/p}实现。T\overline{T}表示一个标准的3D 手部mesh, 下图就是MANO的hand_mean T\overline{T}:

    可以看到, MANO的T\overline{T}是一个手掌摊平的姿势, 在动画领域,一般称为T型姿势(T-pose).
    在这里插入图片描述
    变形示意图:
    在这里插入图片描述
    在这里插入图片描述

    • M(β,θ)=W(T(θ,β),θ,β,W,J(θ))M(\beta, \theta) = \mathbf{W}(T(\theta, \beta), \theta, \beta, W, J(\theta))
      通过第①步,我们得到变形后的mesh: T(θ,β)T(\theta, \beta), 第②步的目的就是进行蒙皮操作(linear blend skinning), WW蒙皮权重J(θ)J(\theta)节点的位置.
      在这里插入图片描述

    3.2 MANO的实际计算流程

    好了,在了解了MANO的基本流程后,让我们回归正题,本篇文章的目的 是分析 MANO究竟是如何处理cam, shape, pose的参数,来得到 (21, 3)的 joint rotation(axis-angle表示)的?

    这里以下面的的rot_pose_beta_to_mesh函数为核心进行分析, 其中, rot_pose_beta_to_mesh接收3个入参, 拼起来正好是网络预测出来的61个参数:

    • rots R3\in R^{3}
      root节点(手腕CMC)的旋转axis-angle.
    • poses R45\in R^{45}
      除每个手指指尖外(除TIP这一排)和手腕外,所有的关键点的axis-angle (15*3=45), 下图来自ECCV2020 BMC[9]
      在这里插入图片描述

    手部的骨骼分为灰色的手腕(CMC), 黄色的MCP(手掌和各个手指的交界处), 绿色的PIP, 蓝色的DIP以及表示指尖位置的骨骼TIP。 可见,骨骼是“横着”来命名的…

    • betas R10\in R^{10}
      mano所需要的shape参数
    3.2.1 MANO的一些参与计算的重要参数
    • kintree_table, parent 等动力学与继承关系参数
      如下图所示,parent和 kintree_table组建了手势的链条
      在这里插入图片描述
      注意,kintree_table是 不包含指尖 的 !!(只有 16个 joints 15个手指的 joints+1个 wrist joint),也符合 MANO定义的结构形式,即没有上图的(4,8,12,16,20)这5个点.

    • hands_mean: 和 mesh_mu类似,这里的 hands_mean应该
      是rest的手的axis-angle, 其用法是用来加上网络预测的 pose (axis-angle),再对其进行处理。
      需要注意的是,这里的pose除了不包含TIP骨骼外,还不包括手腕.
      在这里插入图片描述

    • mesh_mu: 下图 (MANO2017[1])的公式 2的 T\overline{T}. 即平均 shape。
      在这里插入图片描述
      公式2的计算得到的TpT_p对应代码中的vposedv_{posed}:
      在这里插入图片描述

    • mesh_pca: 对应最大的 shape特征值的特征向量 , 因为 shape是根据pca取最大的 10维参数作为 shape的,这里的 mesh_pca根据其用法,是公式 4(MANO2017)里面的Sn。
      在这里插入图片描述
      对应代码:
      在这里插入图片描述

    • J_regressor: 对应 (SMPL2015)的公式10, 其目的是: 将mesh上的顶点 (vertices)变为节点 (joints).
      在这里插入图片描述

    • root_rot: 根节点, 是指手腕的那个点 即下图的 0点 ,我理解这里应该是用这种方式来计算相对的距离。
      在这里插入图片描述

    • posedirs: 根据之前的分析, posedirs就是MANO(2017)中公式3中的Pn, 表示pose的blend shape参数.
      在这里插入图片描述

    • weights: weights就是3.1中公式2M(β,θ)=W(T(θ,β),θ,β,W,J(θ))M(\beta, \theta) = \mathbf{W}(T(\theta, \beta), \theta, \beta, W, J(\theta))WW.

    3.2.2 旋转矩阵计算(Rodrigues)

    这里主要分析的是rodrigues函数,此函数的目的是把轴向角(axis-angle)变为旋转矩阵(rotation matrix)[10].
    在这里插入图片描述
    下面代码里的n等于下图(SMPL2015)的unit norm axis of rotation w\overline{w}, R

    R = I3 + torch.sin(theta).view(-1, 1, 1) * Sn \
        + (1. - torch.cos(theta).view(-1, 1, 1)) * torch.matmul(Sn, Sn)
    

    等于SMPL2015的公式 (1), S(n_)函数对应的就是上面的Skew(V).
    在这里插入图片描述

    def rodrigues(r):
        theta = torch.sqrt(torch.sum(torch.pow(r, 2), 1))
    
        def S(n_):
            ns = torch.split(n_, 1, 1)
            Sn_ = torch.cat([torch.zeros_like(ns[0]), -ns[2], ns[1], ns[2], torch.zeros_like(ns[0]), -ns[0], -ns[1], ns[0],
                             torch.zeros_like(ns[0])], 1)
            Sn_ = Sn_.view(-1, 3, 3)
            return Sn_
    
        n = r / (theta.view(-1, 1))
        Sn = S(n)
    
        # R = torch.eye(3).unsqueeze(0) + torch.sin(theta).view(-1, 1, 1)*Sn\
        #        +(1.-torch.cos(theta).view(-1, 1, 1)) * torch.matmul(Sn,Sn)
    
        I3 = Variable(torch.eye(3).unsqueeze(0).cuda())
    	
    	# R等于 公式 (1)---SMPL
        R = I3 + torch.sin(theta).view(-1, 1, 1) * Sn \
            + (1. - torch.cos(theta).view(-1, 1, 1)) * torch.matmul(Sn, Sn)
    
        Sr = S(r)
        theta2 = theta ** 2
        R2 = I3 + (1. - theta2.view(-1, 1, 1) / 6.) * Sr \
             + (.5 - theta2.view(-1, 1, 1) / 24.) * torch.matmul(Sr, Sr)
    
        idx = np.argwhere((theta < 1e-30).data.cpu().numpy())
    
        if (idx.size):
            R[idx, :, :] = R2[idx, :, :]
    
        return R, Sn
    
    
    3.2.3 get_poseweights (poses, bszie)

    此函数用于计算 pose_weights属性, 其 shape为 [bs, 135], 而 135=453135 = 45 * 3.
    在这里插入图片描述
    其分为 2步:

    • ① 先将 poses([bs, 16, 3])送 入3.2.2所介绍的rodrigues函数中, 按照SMPL2015的说法, 其目的是将每个joint的 axis-angle转为rotation matrix.
      pose_matrix为 [15xbs, 3, 3]
      在这里插入图片描述

    • ② pose_matrix 减去单位矩阵, 理解为 (MANO2017)公式 3的 Rn(θ)Rn(θ)R_n(θ)- R_n(θ^*):
      在这里插入图片描述

    在这里插入图片描述

    def get_poseweights(poses, bsize):
        # pose: batch x 24 x 3
        pose_matrix, _ = rodrigues(poses[:, 1:, :].contiguous().view(-1, 3))
        # pose_matrix, _ = rodrigues(poses.view(-1,3))
        pose_matrix = pose_matrix - Variable(torch.from_numpy(
            np.repeat(np.expand_dims(np.eye(3, dtype=np.float32), 0), bsize * (keypoints_num - 1), axis=0)).cuda())
        pose_matrix = pose_matrix.view(bsize, -1)
        return pose_matrix
    

    3.3 rot_pose_beta_to_mesh梳理

    ① 第一步 是 计算 posesv_shaped.

    ⚫ poses: poses是网络预测的axis angle + hand_mean (rest pose), 再加上 root_rot(wrist的位置, 代码里面写为 (0,0,0), 是相对位置, 构造root-relative的结果). [bs, 16, 3]

    ⚫ v_shaped: 对应 SMPL2015的公式10里面的T\overline{T}+ Bs部分. [bs, 778, 3]
    在这里插入图片描述

    对应代码:
    在这里插入图片描述

    ② 第 2步 是 计算 pose_weights, v_posedJ_posed.

    ⚫ pose_weights 是 通过

    pose_weights = get_poseweights(poses, batch_size)
    

    计算得到的。具体分析看 3.2.3的get_poseweights函数的介绍.

    ⚫ v_posed 是 <3D Hand Shape and Pose from Images in the wild, CVPR2019>的公式 2的 T(β,θ)T(β, θ), 也是 MANO2017的公式 2:
    在这里插入图片描述

    ⚫ J_posed 是 SMPL2015的 公式 10 其 作用 是 将 vertices变为 joints。([bs, 16, 3])
    在这里插入图片描述

    在这里插入图片描述
    ③ 第3步是 计算 results_global, 和 T, v.
    在这里插入图片描述

    ⚫ 从J_posed (bs, 16, 3)变为J_posed_split(16, bs, 3). 即这里的处理逻辑是按手指的节点去处理, 而非batch-wise维度的。

    ⚫ 同理, 有从poses得到的poses_split, 再由poses_split得到angle_matrix.

    results_global是根据 kinematic tree来计算的. 每个当前节点的joint location是根据其父节点以及当前节点的旋转矩阵进行矩阵相乘得到的.

    results_global也是16个手指节点的 3D xyz. [(bs ,4, 4), (bs, 4, 4), … , (bs ,4, 4)].
    在这里插入图片描述
    注意, 父节点只是当前节点的上面一个节点, 而非根节点哦~。之前有图解释过这个问题.
    在这里插入图片描述

    T是根据前面的results和weights相乘得到的,这里的 weights是蒙皮blend weights WW.
    在这里插入图片描述

    V是 经过蒙皮处理后的最终变形节点, Jtr是最终的手部节点 3D位置的集合, 需要注意的是,**指尖(TIP骨骼)**的5个joint的位置是根据 V得到 的.
    而且,
    VJtr是要再旋转 (根据root节点的旋转角)一下输出的才是最终正确结果.
    在这里插入图片描述

    ④ 最后一步,要从标准的MANO模型里,取TIP骨骼的joint的位置,
    这个取法需要手动的去MANO模型里看顶点,以大拇指为例,这里取得是745号顶点
    在这里插入图片描述
    然后,就把顶点v和节点Jtr都根据root节点(手腕)的旋转矩阵进行旋转。

    最后的最后,为了得到局部坐标系的3D坐标(root-relative),我们进行的处理是以节点5为(0, 0, 0),所以,把VJtr都要减去5号节点的位置。

    在这里插入图片描述

    在这里插入图片描述

    4. 总结

    根据上面的分析,我们最终得到了每个手部图像对应的21个关键点的3Dxyz(root-relative)和扭转后的所有778个顶点(MANO的手部模型有778个顶点)。

    有任何问题欢迎提问,交流~

    参考文献

    [1] MANO2017
    [2] SMPL2015
    [3] OlgaChernytska/3D-Hand-Pose-Estimation
    [4] Frankmocap Facebook
    [5] 《几何建模与处理基础》Geometry Modeling and Processing (GMP)
    [6] HMR CVPR2018
    [8] Minimal Hand CVPR2020
    [9] hand-biomechanical-constraints (ECCV2020)
    [10] 旋转矩阵(Rotation matrix):旋转轴与旋转角 ( axis and angle )

    展开全文
  • 估计、滤波、拟合等

    2020-08-26 11:36:32
    一、什么参数估计 参数通常用来表示一个量,可以是标量也可以是有值向量。按照时间变化,也可以分为时常参数时变参数。对于时常参数的估计称为参数估计。对于时变的参数估计称为状态估计,本文不研究。参数估计...

    一、什么是参数估计

    参数通常用来表示一个量,可以是标量也可以是有值向量。按照时间变化,也可以分为时常参数时变参数。对于时常参数的估计称为参数估计。对于时变的参数估计称为状态估计,本文不研究。参数估计的包括两个主要的模型以及四个基本估计方法,如下图所示:

    贝叶斯学派和频率学派最大的不同、根上的不同,就是在于模型 y=wx+b 其中的 w 和 b 两个参数,频率学派认为参数是固定的、也就是上面的非随机模型,只要通过不停的采样、不停的观测训练,就能够估算参数 w 和 b,因为它们是固定不变的;而贝叶斯学派相反,他们认为这些参数是变量,它们是服从一定的分布的,也就是上面的随机模型,这是它最根本的差别。通常上面两种也被称为点估计和区间估计。

    滤波估计的发展:最小二乘、维纳(wiener)滤波、卡尔曼(kalman)滤波、鲁棒滤波、粒子滤波。

    二、四种基本的估计方法

    来自《雷达数据处理及应用》
    2.1 最大似然估计

    2.2 最小二乘估计

    2.3 最大后验估计

    2.4 最小均方误差估计

    三、最大似然估计和最小二乘估计的对比

    当模型是高斯分布时,最大似然估计和最小二乘估计是等价的。

    四、基础知识

    均方误差,MSE(mean squared error),是预测值与真实值之差的平方和的平均值,即:

    在这里插入图片描述

    均方误差可用来作为衡量预测结果的一个指标

    均方差,也叫标准差(Standard Deviation),是方差的算术平方根。而方差是样本实际值与实际值的总体平均值之差的平方和的平均值。

    方差: 在这里插入图片描述

    均方差: 在这里插入图片描述

    五、卡尔曼滤波

    简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。卡尔曼滤波的本质是参数化的贝叶斯模型,通过对下一时刻系统的初步状态估计(即状态的先验估计)以及测量得出的反馈相结合,最终得到改时刻较为准确的的状态估计(即状态的后验估计),其核心思想即为预测+测量反馈,而这两者是通过一个变化的权值相联系使得最后的状态后验估计无限逼近系统准确的状态真值,这个权值即为大名鼎鼎的卡尔曼增益。可以说,卡尔曼滤波并不与传统的在频域的滤波相似,而是一种在时域的状态预测器,这就省去了时域频域的变换的步骤,而这种状态预测器不仅仅在工程上有很广的应用,在金融方面例如股票的走势等等方面也可以有很多的应用。

    卡尔曼滤波(KF)与扩展卡尔曼滤波(EKF)的一种理解思路及相应推导(1)

    例子:


    上面的例子我真没对应上,还看了下面的例子才理解了的(含程序)。
    非线性最小二乘和卡尔曼滤波拟合直线对比

    #include "ceres/ceres.h"
    #include <opencv2/core/core.hpp>
    #include<opencv2/opencv.hpp>
    using namespace std;
    int main(int argc, char** argv)
    {
      double a=1.0, b=0.0;         // 真实参数值
      int N=100;                          // 数据点
      double w_sigma=0.1;                 // 噪声Sigma值
      cv::RNG rng;                        // OpenCV随机数产生器
      double ab[1] = {0};            // abc参数的估计值
    
      vector<double> x_data, y_data;      // 数据
      cout<<"generating data: "<<endl;
      for ( int i=0; i<N; i++ )
      {
          double x = i/100.0;
          x_data.push_back ( x );
          y_data.push_back (a*x + b + rng.gaussian ( w_sigma ));
         // cout<<x_data[i]<<" "<<y_data[i]<<endl;
      }
      // Build the problem.
     double x_hat=0.01;
     double x_bar=0.01;
     double u_k=0;
    
     double P_bar=0;
     double P_hat=0;
     double R=w_sigma;
     double Q=w_sigma;
    
     double F=1;
     double H=x_bar;
     double K=0;
     for ( int i=0; i<N; i++ )
     {
         //1.predict
         x_bar=F*x_hat+u_k;
         P_bar=F*P_hat*F+R;
         //2.update
         H=x_bar;
         K=P_bar*H/(H*P_bar*H+Q);
         x_hat=x_bar+K*(y_data[i]-H*x_data[i]);
         P_hat=(1-K*H)*P_bar;
         std::cout<<"res_k"<<x_hat<<std::endl;
     }
     return 0;
    }
    

    目前,卡尔曼滤波已经有很多不同的实现.卡尔曼最初提出的形式现在一般称为简单卡尔曼滤波器。除此以外,还有施密特扩展滤波器、信息滤波器以及很多Bierman, Thornton 开发的平方根滤波器的变种。也许最常见的卡尔曼滤波器是锁相环,它在收音机、计算机和几乎任何视频或通讯设备中广泛存在。
      对传统卡尔曼滤波的改进算法:平方根滤波、UD分解滤波、奇异值分解滤波、H鲁棒滤波、联邦滤波等。

    六、改进卡尔曼滤波

    作为线性的解码器,Kalman Filter确实能找到观测变量和测量变量之间的关系,并用观测变量去纠正当前测量变量中的误差。但是涉及到非线性关系的时候,Kalman Filter的线性假设就不成立了。这时有两种优化的方法:

    1、如果已知这种非线性关系的公式,例如加速度和位置的关系等,那么可以把上述转换模型和观测模型换成已知的非线性模型,增加解码准确率。这种方法就是扩展卡尔曼滤波(Extend Kalman Filter)。这种方法的优点在于拟合更加准确,但是缺点也很明显。首先是计算量增加,如果非线性拟合涉及很复杂的模型,那么计算量比Kalman Filter增加很多。然后是非线性模型,并不是任何时候,这种模型都是已知的,如果不是已知的,那就需要进行非线性拟合,找到最合适的拟合模型,例如指数模型,高阶模型等,再次增加计算量。
    2、如果不知道这种非线性关系的公式,那么我们可以进行非线性拟合或者直接假设一个公式。但是我们观察Kalman Filter的计算过程,整个估计过程中,用到了当前时刻的值,以及协方差。而这两个量,我们是能通过采样的方式得到的,即,可以不需要直接计算非线性模型的协方差矩阵,直接通过采样估计,类似蒙特卡洛的方法。但是采样的计算量会更大,因为需要大样本才能得到准确的估计。目前有另外一种办法,能够用很少的采样点(几个)就得到准确的估计,这种方法是无迹变换(Unscented Transform),结合到Kalman Filter中,就是无迹卡尔曼滤波(Unscented Kalman Filter)。

    无迹卡尔曼滤波(Unscented Kalman Filter)。无迹卡尔曼滤波是对卡尔曼滤波的一种改进。这种改进主要是针对非线性的信号。因为在卡尔曼滤波中,预测模型以及测量空间对应的转换矩阵都是都是线性转换。但是在面对非线性信号时,会出现无法拟合的情况。所以就有了无迹卡尔曼滤波。这种方法的主要改进在于,不再用线性的模型去计算预测模型以及转换矩阵,而是通过采样和计算均值方法的方式,去估计样本的方差和均值。

    参考文献

    卡尔曼滤波系列——(一)标准卡尔曼滤波
    卡尔曼滤波系列——(二)扩展卡尔曼滤波
    卡尔曼滤波系列——(三)粒子滤波
    卡尔曼滤波系列——(四)无损卡尔曼滤波
    卡尔曼滤波系列——(五)奇异值鲁棒的卡尔曼滤波算法
    卡尔曼滤波系列——(六)卡尔曼平滑

    展开全文
  • 什么是假设检验?

    千次阅读 2020-12-03 17:03:23
    假设检验 在参数估计的区间估计中,我们提到置信区间的概念,有提到置信区间最主要的应用是用于... 假设检验与参数估计(包括点估计区间估计)是建立在中心极限定理抽样分布之上的推断统 计的两个重要基础方法,由这

    目录

    假设检验原理

    置信区间

    反证法

    小概率思想

    假设检验步骤

    假设检验的意义


    假设检验原理

    在参数估计的区间估计中,我们提到置信区间的概念,有提到置信区间最主要的应用是用于假设检验。(详情请见☞什么是参数估计

    那什么是假设检验?

    假设检验(test of bypothesis)是统计推断的一个重要内容,用于判断某个假设是否正确。在数据分析中,总体的参数始终是不可知的,只能由统计量推断总体的参数。在统计推断过程中,需要对参数提出一定的假设,然后对提出的假设进行假设检验。 假设检验与参数估计(包括点估计和区间估计)是建立在中心极限定理和抽样分布之上的推断统 计的两个重要基础方法,由这两个方法出发,生发出诸多有针对性的统计分析方法。

    假设检验涉及的范围非常广泛,几乎我们用到的所有统计分析方法都要用到它,如是否相关、 是否服从正态分布、两个总体均值是否相等、回归系数是否显著、过程是否稳定等等均运用了 假设检验。

    假设检验的原理:假设检验 显著性水平 小概率思想 反证法

    假设检验中引入了显著性水平的概念,要理解显著性水平α,就要复习下什么是置信区间了。

    置信区间

    区间估计(interval estimation)是从点估计值和抽样标准误出发,按给定的概率值建立包含待估计参数的区间。其中这个给定的概率值称为置信度或置信水平(confidence level),这个建立起来的包含待估计参数的区间称为置信区间(confidence interval),指总体参数值落在样本统计值某一区内的概率。

    什么是显著性水平?

    所谓置信水平就是给出一个区间的信心,这个信心以概率来表示,绝大多数情况下取 0.95,表示你对所估计的总体参数有95%的信心落在你所给的区间内。通常置信水平以1-α表 示α称为显著性水平

    置信区间的建立就与中心极限定理和抽样分布有关了,在给定置信度的条件下,置信区间的宽度决定于抽样分布。 建立置信区间的意思是在设定的置信水平(如取0.95)下,总体参数落在这个区间的概率为 0.95,大致的理解是如果抽100次样,建立100个置信区间,大约95个区间包含总体参数,约5个区间不包含总体参数(注意不是一定有5个,可能会多,也可能会少)。

    划定置信区间的两个数值分别称为置信下限(lower confidence limit,lcl)置信上限(upper confidence limit,ucl)

    反证法

    什么是反正法?

    反证法(Proof by Contradiction),又称为归谬法、背理法。在证明数学问题时,先假定命题结论的反面成立,在这个前提下,若推出的结果与定义、公理、定理相矛盾,或与命题中的已知条件相矛盾,或与假定相矛盾,从而证明命题结论的反面不可能成立,由此断定命题的结论成立。

    例如证明的结果是一个无理数

    反证法思想:设定与原假设相反的假设H,如果H被推翻,则原假设成立。

    第一步:我们假设是一个有理数,有理数可以表示为两个互质的整数的比值。

    第二步:=p/q,其中p和q是互质的整数

                   上式整理可得:2q^2=p^2,可知,p是偶数,令p=2r

                    故:q^2=2r^2,可知q也是偶数,这与p和q互质矛盾

    第三步:得出结论,假设H被推翻,原假设成立。

    小概率思想

    什么是小概率事件?

    如何判断抽样结果是不是不合理呢?费希尔老先生提出了p值这个概念,用来表示在原假设成立的条件下,抽样结果的不合理和更不合理的概率。他还给出了一个判决点,即0.05,p值小于1/20就足以拒绝原假设了。

    0.05是足够小的概率,一般认为,在一次抽样(试验)中,小概率事件几乎不可能发生,如果出现发生了,则说明事先的假设是错误的。但小概率事件并不是一定不会发生,当抽样次数足够多时,小概率事件是一定会发生的。这说明即使是一次抽样,小概率事件仍有可能发生,也就是说存在判断错误的可能性。

    假设检验步骤

    假设检验的意义

    假设检验是抽样推断中的一项重要内容。它是根据原资料作出一个总体指标是否等于某一个数值,某一随机变量是否服从某种概率分布的假设,然后利用样本资料采用一定的统计方法计算出有关检验的统计量,依据一定的概率原则,以较小的风险来判断估计数值与总体数值(或者估计分布与实际分布)是否存在显著差异,是否应当接受原假设选择的一种检验方法。用样本指标估计总体指标,其结论有的完全可靠,有的只有不同程度的可靠性,需要进一步加以检验和证实。通过检验,对样本指标与假设的总体指标之间是否存在差别作出判断,是否接受原假设。 这里必须明确,进行检验的目的不是怀疑样本指标本身是否计算正确,而是为了分析样本指标和总体指标之间是否存在显著差异。从这个意义上,假设检验又称为显著性检验。

     

     

    展开全文
  • 此外,对时钟模型参数(包括时钟偏移,时钟速度时钟漂移)进行分类,以确定新模型中的自适应因素。(CuiYang 2006;YangCui 2008)因此,可以更有效地区分具有不同特性的时钟跳变。(采用的是具有分类自适应因子的...
  • 参数估计:由样本相应指标推断总体相应指标,包括点估计区间估计。 点估计:把样本数据的特征直接作为总体的数据特征,但这种情况未考虑抽样误差,可能抽样数据有偏差,不能代表总体的情况。 区间估计:在由样本...
  •   卡尔曼滤波器以鲁道夫卡尔曼(Rudolf Kalman)命名,也就是卡尔曼理论的主要开发者,它是一种优化估算算法可以预测你需要的参数,例如位置、速度方向并且是在存在测量误差的情况下。卡尔曼滤波器的常见应用包括
  • 是研究如何通过样本数据推断总体特征的统计学方法,内容包括参数估计和假设性检验。 2、描述统计 是研究数据搜集、处理描述的统计学方法。内容包括如何获取研究所需要的数据,如何用图表形式对数据进行处理展示...
  • 1.4 什么是面向对象的分析设计 1.5 类比--组织MicroChaos公司的业务 1.5.1 MicroChaos公司正迅速发展壮大 1.5.2 什么是业务过程 1.5.3 组织中的角色是什么 1.5.4 谁该干什么?他们之间如何协作 ...
  • 线性回归

    2018-09-06 18:08:00
    传送门:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起...线性回归是一种回归分析技术,回归分析本质上就是一个函数估计的问题(函数估计包括参数估计和参数估计),就是找出因变...
  • 概率论于数理统计

    2021-02-18 08:18:16
    下面我用一篇短文来简单介绍统计在学习什么。需要掌握哪些知识。 在一开始我打算放一张图,让大家理解一下统计到底是在干什么,统计的基本...统计推断通常包括参数估计和假设检验两个内容:参数估计是指用样本指标推
  • 其实问题的答案是:训练集用于训练模型参数,测试集用于估计模型对样本的泛化误差,验证集用于“训练”模型的超参数什么是模型的参数 我们知道一个机器学习模型通常包括两个部分的参数:模型参数和超参数。其中超...
  • 多元统计:相关概念总结目录什么是多元统计分析多元正态分布的参数估计随机向量,密度函数边缘密度函数多元正态分布多元正态分布的参数估计多元正太分布均值向量协方差阵的检验三级目录三级目录三级目录三级目录...
  • Seed_Harvest_Modeling-源码

    2021-02-11 08:54:24
    根据植物类型分类来估算参数包括生长参数与生殖参数之间的相关性。 模拟真实示例的估计和可变性。 要从github下载,请使用devtools library(devtools) install_github("DenverBotanicGardens/...
  • Kalman filter toolbox for Matlab ...该工具箱为线性系统提供滤波、平滑和参数估计(用EM),本章包括 下载该工具箱 什么是kalman滤波器 kalman滤波平滑追踪的例子 关于非线性系统非高斯系统 其他kalman...
  • 推断统计:通过样本数据来推断总体特征,包括参数估计和假设检验;其中参数估计是用样本信息推断所关心的总体特征,而假设检验是利用样本信息判断对总体的某个假设是否成立。二、变量与数据类别变量(定性数据):...
  • 测量平差课后作业

    2020-03-12 12:41:30
    模型误差对参数估计的影响,对参数残差统计性质的影响;病态方程与控制网及其观测方案设计的关系。由于变形监测网参考点稳定性检验的需要,导致了自由网平差拟稳平差的出现发展。观测值粗差的研究促进了控制网...
  • LWF布鲁克90.jl Julia中LWF-BROOK90水文模型... 有效的参数估计(优化计算成本) 替代流程参数化的模型灵活性(可能导致) 图1:LWFBrook90.jl中使用的进程状态变量的摘要 可以在找到更多的模型描述。 致谢 LWFBro
  • “该材料包括卡尔曼滤波的基本技术背景更实际的应用方面:如何在数学模型中表示问题,分析系统设计参数函数的估计器性能,在数值稳定算法中实现力学方程,评估其性能计算要求,测试结果的有效性,监控滤波器的运行...
  • 附录 习题 第3章 随机变量的数字特征 3.1 数学期望(均值)与中位数 3.2 方差与矩 3.3 协方差与相关系数 3.2 方差与矩 3.3 协方差与相关系数 3.4 大数定理中心极限定理 习题第4章 参数估计 4.1 数理统计学的基本...
  • NN的优化:寻找NN上的一组参数,可显著降低代价函数,该代价函数通常包括整个训练集上的性能评估额外的正则化项。 1. 批量算法小批量算法 一般优化算法不同,ML算法的目标函数通常可分解为训练样本上的总和...
  • Q1 -- 什么是sba? sba是一个C/C++软件包对广义稀疏...假设给定一系列图像中观测到的一组对应点集相应的三维坐标的初始估计,以及关于每张图像的viewing参数的初始估计。光束法平差(BA)是一个大的最优化的问题,包括
  • 本书主要讲解随机微分方程(SDEs)在目标跟踪医疗技术等领域的应用,特别是它们在滤波、平滑、参数估计和机器学习等方法中的应用。还包括了一系列在物理电气工程中应用空间数据交换的例子。 因为受到这些应用场景...
  • NPEB是用于离散线性指数族中复合估计的非参数经验贝叶斯估计框架,其中包括现代大数据应用中经常出现的一类广泛的离散分布。 拟议的框架通过求解可扩展的凸规划,直接估计了广义罗宾斯公式中的贝叶斯收缩因子,该凸...
  • 1. 请你讲一下,HMM隐马尔可夫模型的参数估计方法是什么? 学习算法: 若训练数据包括观测序列状态序列,则HMM的学习非常简单,是监督学习; 若训练数据只有观测序列,则HMM的学习需要使用EM算法,是非监督学习...
  • 本文主要包括几个部分,面板门槛模型的是解决什么问题,面板门槛模型的估计方法,面板门槛模型如何检验其估计出来的参数时候显著地异于0,以及stata应用part 1 面板门槛模型是用来解决什么问题的呢?举一个例子,...
  • 近来对贝叶斯网十分感兴趣,按照博客《读懂概率图模型:你需要从基本概念和参数估计开始》给出的第一个例子,试着搭建了一个student网。 (1)点击绿F,对条件概率表予以输入(包括两个祖先节点difficulty...
  • 第10-14章介绍了计算机视觉领域主要的优化方法及思路等,包括迁移学习、网络架构及训练、网络优化技巧、超参数调整及模型的压缩加速等。本书凝聚了众多一线科研人员及工程师的经验,旨在培养读者发现问题、解决...
  • 模型的概念:当我们不能精确知道一些事情如何运作时,我们可以尝试使用模型来估计其运作方法,模型往往是一个算法,里面包括了可以调整的参数 改进模型的方法:基于模型已知真实示例之间的比较,得到模型偏移的...
  • 处理工具,例如负载,修剪,拟合(自动拟合),估计SNR,干净频谱 坡度计算 分类学分类 水化带分析 我们很快将提供新的参数化方法工具来处理光度数据成分建模! 依存关系 随着Python 2.7即将结束,我们更新了...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

参数估计包括什么和什么