zoukankan      html  css  js  c++  java
  • 马氏距离+匈牙利算法+卡尔曼滤波-by wilson

    这一篇文章主要讲解马氏距离、匈牙利匹配算法、卡尔曼滤波等三个部分,是为了后续讲解Deep Sort多目标跟踪提供先验知识。

    一、马氏距离

      1⃣️ 马氏距离定义:
      马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法或者计算一个样本点与一个分布的距离。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。
      马氏距离可以衡量一个随机变量和一个分布之间的距离:
      对于一个均值为 、协方差矩阵为的多维随机变量:
     
      马氏距离为:

      马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量X与Y的差异程度:
     
      如果协方差矩阵为单位矩阵,则马氏距离简化为欧式距离;如果协方差矩阵为对角矩阵,也称为正规化的马氏距离。
      2⃣️ 马氏距离的重要意义
      (1)为什么要使变量去掉单位尺度?
      (2)为什么马氏距离是与尺度无关的?
      (3)协方差矩阵在马氏距离中的作用,为什么要使变量间线性无关?
     
    二、匈牙利算法——解决二分图匹配问题
      参考博文:匈牙利算法和带权重的匈牙利算法:https://zhuanlan.zhihu.com/p/62981901
      
      二分图:对于无向图G=(V,E),如果存在一个划分使V中的顶点分为两个互不相交的子集,且每个子集中任意两点间不存在边 ϵ∈E,则称图G为一个二分图。

      二分图如上图所示,黑线代表初步匹配的连线,因为需要1对1匹配,后续采用匈牙利匹配算法得到红线。
      1⃣️ 简介
      匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。美国数学家哈罗德·库恩于1955年提出该算法。此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家Dénes Kőnig和Jenő Egerváry的工作之上创建起来的。
      2⃣️ 匈牙利算法
      每次执行得到的结果不一样,和顺序有关,得到的解不一定是最优解。下面以一个简单的例子作为说明:

      (1) 给左1号分配女生,先从右1 开始,右1仍是单身,所以匹配上
      (2)给2号分配女生,从右2开始,能匹配上
      (3)给3号分配女生,从右1开始,右1被占,问右2,右2也被占,那就先问问右1能否换人,左1说我和右2有连接,我可以让给你,但是我先问问右2肯不肯和我匹配,右2被占,那右2说我问问左2,左2可以和右3进行匹配,那问题就迎刃而解,2-3,1-2,3-1匹配上。
      (4)给4号分配女生,从右3开始,依据上面的流程,发现1,2,3实在不能换人,所以4号就没法进行匹配。
      示意图如下:
     

    (1)              (2)              (3)

     (4)

      3⃣️ 带权值的匈牙利算法

      匈牙利算法认为上述每条线的重要性是等价的,但实际上每条线都有自己的重要性,所以引入带权值的匈牙利算法。

      匹配原则:匹配的原则是只和 权重与左边分数(顶标)相同的边 进行匹配,若找不到边匹配,对此条路径的所有左边顶点的顶标减d,所有右边顶点的顶标加d。参数d我们在这里取值为0.1。
      (1)给左侧右侧的结点进行标分: 

      

      (2)从左1开始,分数>=(左标+右标分数)的线先匹配上

      (3)到左2, 左2可以与右3链接

      (4)到左3,左3只能连接右1,但右1和左1存在连线,则冲突,则对冲突线的所有左边节点-d(取10),右边节点+d。得到:

      此时左3可以找到右2进行匹配,得到:

      (5)对左4进行匹配,冲突,-d得到0.1,再冲突-d得到0.0, 所以放弃对左4进行匹配。

      在引入权重后,分配多了依据,匹配成功率能够大大提高。

      三、kalman滤波

      参考博文:https://blog.csdn.net/baidu_38172402/article/details/82289998

      算法核心思想:根据当前的仪器“测量值”和上一时刻的“预测值”和“误差”,计算得到当前的最优量,在预测下一刻的值。kalman滤波的特点在于误差纳入计算,分为预测误差和测量误差两种。在一切的测量方法里,都可以使用kalman滤波来优化。  

      博文提供两个具体的例子:船位的测量和室内温度的测量。

      kalman滤波分为5个步骤:

      1⃣️ 一般形式的kalman filter:

      2⃣️ 便于理解的5个步骤:

      (1)由上一时刻的状态预测当前时刻的状态,得到预测值
      (2)由上一次时刻的误差协方差和过程噪声预测新的误差
      (3)计算kalman增益
      (4)结合测量量,对结果进行修正
      (5) 为下一步估计下一时刻的最优值进行更新操作
  • 相关阅读:
    一起谈.NET技术,验证.NET强命称的思路和实例 狼人:
    一起谈.NET技术,基于SQL Server 2008 Service Broker构建企业级消息系统 狼人:
    一起谈.NET技术,一句代码实现批量数据绑定[下篇] 狼人:
    一起谈.NET技术,晚绑定场景下对象属性赋值和取值可以不需要PropertyInfo 狼人:
    一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(六)流光追影 狼人:
    一起谈.NET技术,ASP.NET下用URLRewriter重写二级域名 狼人:
    这样覆写Object类的toString方法对吗
    【Cocos2DX 】初窥门径(7)无限地图滚动
    poj2975——Caesar密码
    [置顶] poi最简单易学解析xls代码
  • 原文地址:https://www.cnblogs.com/bupt213/p/11202728.html
Copyright © 2011-2022 走看看