智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波

在这里我们主要完成卡尔曼滤波器进行跟踪的相关内容的实现。

  • 初始化:卡尔曼滤波器的状态变量和观测输入
  • 更新状态变量
  • 根据状态变量预测目标的边界框
  1. 初始化:

    状态量x的设定是一个七维向量:

分别表示目标中心位置的x,y坐标,面积s和当前目标框的纵横比,最后三个则是横向,纵向,面积的变化速率,其中速度部分初始化为0,其他根据观测进行输入。

初始化卡尔曼滤波器参数,7个状态变量和4个观测输入,运动形式和转换矩阵的确定都是基于匀速运动模型,状态转移矩阵F根据运动学公式确定:

 量测矩阵H是4*7的矩阵,将观测值与状态变量相对应:

 

以及相应的协方差参数的设定,根据经验值进行设定。

# 内部使用KalmanFilter,7个状态变量和4个观测输入def __init__(self,bbox):"""初始化边界框和跟踪器:param bbox:"""#等速模型#卡尔曼滤波:状态转移矩阵:7,观测输入矩阵:4self.kf = KalmanFilter(dim_x=7,dim_z=4) #初始化卡尔曼滤波器# F:状态转移/状态变化矩阵 7*7 用当前的矩阵预测下一次的估计self.kf.F = np.array([[1, 0, 0, 0, 1, 0, 0],[0, 1, 0, 0, 0, 1, 0],[0, 0, 1, 0, 0, 0, 1],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 0, 1]])#H:量测矩阵/观测矩阵:4*7self.kf.H = np.array([[1, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0]])#R:测量噪声的协方差,即真实值与测量值差的协方差self.kf.R[2:,2:] *= 10#P:先验估计的协方差self.kf.P[4:,4:] *= 1000 #give high uncertainty to the unobservable initial velocities 对不可观测的初始速度给予高度不确定性self.kf.P *= 10#Q:过程激励噪声的的协方差self.kf.Q[-1,-1] *= 0.01self.kd.Q[4:,4:] *= 0.01#X:观测结果、状态估计self.kf.x[:4] = convert_bbox_to_z(bbox)#参数的更新self.time_since_update = 0self.id = KalmanBoxTracker.countKalmanBoxTracker.count += 1self.history=[]self.hits = 0self.hit_streak = 0self.age = 0
  1. 更新状态变量

    使用观测到的目标框更新状态变量

#使用观测到的目标框更新状态变量def update(self,bbox):"""使用观察到的目标框更新状态向量。filterpy.kalman.KalmanFilter.update 会根据观测修改内部状态估计self.kf.x。重置self.time_since_update,清空self.history。:param bbox:目标框:return:"""#重置部分参数self.time_since_update = 0#清空self.history = []#hitsself.hits += 1self.hit_streak += 1#根据观测结果修改内部状态xself.kf.update(convert_bbox_to_z(bbox))
  1. 进行目标框的预测

    推进状态变量并返回预测的边界框结果

#进行目标框的预测:推进状态变量并返回预测的边界框结果def predict(self):"""推进状态向量并返回预测的边界框估计。将预测结果追加到self.history。由于 get_state 直接访问 self.kf.x,所以self.history没有用到:return:"""#状态变量if(self.kf.x[6] + self.kf.x[2]) <= 0:self.kf.x[6] *= 0# 进行预测self.kf.predict()#卡尔曼滤波的预测次数self.age += 1#若过程中未进行更新,则将hit_streak置为0if self.time_since_update > 0:self.hit_streak=0self.time_since_update += 1#将预测结果追加到hietory中self.history.append(convert_x_to_bbox(self.kf.x))return self.history[-1]

整个代码如下所示:

class KalmanBoxTracker(object):count = 0"""初始化边界框和跟踪器:param bbox:"""#等速模型#卡尔曼滤波:状态转移矩阵:7,观测输入矩阵:4self.kf = KalmanFilter(dim_x=7,dim_z=4) #初始化卡尔曼滤波器# F:状态转移/状态变化矩阵 7*7 用当前的矩阵预测下一次的估计self.kf.F = np.array([[1, 0, 0, 0, 1, 0, 0],[0, 1, 0, 0, 0, 1, 0],[0, 0, 1, 0, 0, 0, 1],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 0, 1]])#H:量测矩阵/观测矩阵:4*7self.kf.H = np.array([[1, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0]])#R:测量噪声的协方差,即真实值与测量值差的协方差self.kf.R[2:,2:] *= 10#P:先验估计的协方差self.kf.P[4:,4:] *= 1000 #give high uncertainty to the unobservable initial velocities 对不可观测的初始速度给予高度不确定性self.kf.P *= 10#Q:过程激励噪声的的协方差self.kf.Q[-1,-1] *= 0.01self.kd.Q[4:,4:] *= 0.01#X:观测结果、状态估计self.kf.x[:4] = convert_bbox_to_z(bbox)#参数的更新self.time_since_update = 0self.id = KalmanBoxTracker.countKalmanBoxTracker.count += 1self.history=[]self.hits = 0self.hit_streak = 0self.age = 0#使用观测到的目标框更新状态变量def update(self,bbox):"""使用观察到的目标框更新状态向量。filterpy.kalman.KalmanFilter.update 会根据观测修改内部状态估计self.kf.x。重置self.time_since_update,清空self.history。:param bbox:目标框:return:"""#重置部分参数self.time_since_update = 0#清空self.history = []#hitsself.hits += 1self.hit_streak += 1#根据观测结果修改内部状态xself.kf.update(convert_bbox_to_z(bbox))
#进行目标框的预测:推进状态变量并返回预测的边界框结果def predict(self):"""推进状态向量并返回预测的边界框估计。将预测结果追加到self.history。由于 get_state 直接访问 self.kf.x,所以self.history没有用到:return:"""#状态变量if(self.kf.x[6] + self.kf.x[2]) <= 0:self.kf.x[6] *= 0# 进行预测self.kf.predict()#卡尔曼滤波的预测次数self.age += 1#若过程中未进行更新,则将hit_streak置为0if self.time_since_update > 0:self.hit_streak=0self.time_since_update += 1#将预测结果追加到hietory中self.history.append(convert_x_to_bbox(self.kf.x))return self.history[-1]#获取到当前的边界框的预测结果def get_state(self):"""返回当前边界框估计值:return:"""return convert_x_to_bbox(self.kf.x)

总结

  1. 了解初始化,卡尔曼滤波器的状态变量和观测输入

  2. 更新状态变量update()

  3. 根据状态变量预测目标的边界框predict()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python或anaconda下安装opencv提示Error:No matching distribution found for opencv

python或anaconda下安装opencv提示Error&#xff1a;No matching distribution found for opencv 错误提示&#xff1a; ERROR: Could not find a version that satisfies the requirement python-opencv (from versions: none) ERROR: No matching distribution found for p…

iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”(转)

转载自&#xff1a;文&#xff0f;戴仓薯&#xff08;简书作者&#xff09;原文链接&#xff1a;http://www.jianshu.com/p/6cbde1b8b922症状 iOS 10 之后&#xff0c;陆陆续续地有用户联系我们&#xff0c;说新机第一次安装、第一次启动的时候&#xff0c;app 首屏一片空白&am…

智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波(汇总)

from __future__ import print_function from numba import jit import numpy as np from scipy.optimize import linear_sum_assignment from filterpy.kalman import KalmanFilter#计算IOU&#xff08;交并比&#xff09; jit def iou(bb_test,bb_gt):"""在两…

Redis入门指南(第2版) Redis设计思路学习与总结

https://www.qcloud.com/community/article/222 宋增宽&#xff0c;腾讯工程师&#xff0c;16年毕业加入腾讯&#xff0c;从事海量服务后台设计与研发工作&#xff0c;现在负责QQ群后台等项目&#xff0c;喜欢研究技术&#xff0c;并思考技术演变&#xff0c;专注于高并发业务架…

智慧交通day02-车流量检测实现07:匈牙利算法

匈牙利算法&#xff08;Hungarian Algorithm&#xff09;与KM算法&#xff08;Kuhn-Munkres Algorithm&#xff09;是用来解决多目标跟踪中的数据关联问题&#xff0c;匈牙利算法与KM算法都是为了求解二分图的最大匹配问题。 有一种很特别的图&#xff0c;就做二分图&#xff0…

非线性回归(Non-linear Regression)学习笔记

非线性回归&#xff08;Non-linear Regression&#xff09; 1.概率: 1.1定义概率Probability:对一件事情发生的可能性的衡量 1.2范围 0<P<1 1.3计算方法: 1.3.1根据个人置信 1.3.2根据历史数据 1.3.3根据模拟数据 1.4条件概率:&#xff08;A发生的条件下B发生的概率&…

智慧交通day02-车流量检测实现08:目标跟踪中的数据关联(将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配)

# 将YOLO模型的检测框和卡尔曼滤波的跟踪框进行匹配 def associate_detection_to_tracker(detections,trackers,iou_threshold0.3):"""将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配:param detections:检测框:param trackers:跟踪框&#xff0c;即跟踪目标:p…

回归中的相关度和R平方值 学习笔记

回归中的相关度和R平方值 自变量x和因变量y的相关度 1.皮尔逊相关系数(Pearson Correlation Coefficient): 1.1衡量两个值线性相关强度的量 1.2取值范围[-1,1]: 正向相关: >0,负向相关: <0,无相关性: 0 公式&#xff1a;correlation&#xff0c; correlationvariance(Co…

智慧交通day02-车流量检测实现09:SORT/deepSORT

SORT和DeepSORT是多目标跟踪中两个知名度比较高的算法。DeepSORT是原团队对SORT的改进版本。现在来解析一下SORT和DeepSORT的基本思路。 1.SORT SORT核心是卡尔曼滤波和匈牙利匹配两个算法。流程图如下所示&#xff0c;可以看到整体可以拆分为两个部分&#xff0c;分别是匹配…

素数环 与 算法 全排列

在说起全排列前&#xff0c;先说一下昨天碰到的一个题目&#xff08;答案不是我做出来的&#xff0c;但是我感觉有好多个亮点&#xff0c;贴出来方便日后的学习&#xff09;&#xff1a; 素数环 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;…

简单线性回归(Simple Linear Regression)和多元线性回归(Multiple Regression)学习笔记

简单线性回归(Simple Linear Regression) 0.前提介绍: 为什么需要统计量? 统计量:描述数据特征 0.1集中趋势衡量 0.1.1均值(平均数&#xff0c;平均值) (mean)&#xff1a;&#xff08;求和除以个数&#xff0c;Ex也可以表示x求均值&#xff09; 0.1.2中位数(median) : 将数…

智慧交通day02-车流量检测实现10:多目标追踪实现

在这里我们主要实现了一个多目标跟踪器&#xff0c;管理多个卡尔曼滤波器对象&#xff0c;主要包括以下内容&#xff1a; 初始化&#xff1a;最大检测数&#xff0c;目标未被检测的最大帧数 目标跟踪结果的更新&#xff0c;即跟踪成功和失败的目标的更新 初始化 def __init_…

智慧交通day02-车流量检测实现11:yoloV3模型

yoloV3以V1&#xff0c;V2为基础进行的改进&#xff0c;主要有&#xff1a;利用多尺度特征进行目标检测&#xff1b;先验框更丰富&#xff1b;调整了网络结构&#xff1b;对象分类使用logistic代替了softmax,更适用于多标签分类任务。 1.算法简介 YOLOv3是YOLO (You Only Loo…

bzoj1992鬼谷子的钱袋(二分乱搞 二进制)

1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3223 Solved: 2333Descriptio 鬼谷子非常聪明&#xff0c;正因为这样&#xff0c;他非常繁忙&#xff0c;经常有各诸侯车的特派员前来向他咨询时政。有一天&#xff0c;他在咸阳游历的时候&…

聚类(Clustering): K-means算法

聚类(Clustering): K-means算法 1.归类: 聚类(clustering)属于非监督学习(unsupervised learning) 无类别标记( class label) 3. K-means 算法&#xff1a; 3.1 Clustering 中的经典算法&#xff0c;数据挖掘十大经典算法之一 3.2 算法接受参数 k &#xff1b;然后将事先输入…

智慧交通day02-车流量检测实现12:基于yoloV3的目标检测

在本章节代码编写中&#xff0c;发现之前的代码所处的环境是python3&#xff0c;因此导致了cv2.dnn.readNetFromDarknet()在代码运行中导致了i[0]的获值失败&#xff0c;故总结如下&#xff1a; cv2.dnn.readNetFromDarknet()在python3上遇到的问题_李大狗的读研日记-CSDN博客…

cv2.dnn.readNetFromDarknet()在python3上遇到的问题

问题描述&#xff1a; 代码如下 net cv2.dnn.readNetFromDarknet(configPath,weightsPath) #获取YOLO每一层的名称 #getLayerNames&#xff08;&#xff09;&#xff1a;获取网络所有层的名称。 ln net.getLayerNames() # 获取输出层的名称: [yolo-82,yolo-94,yolo-106] # …

智慧交通day02-车流量检测实现13:基于虚拟线圈法的车辆统计+视频中的车流量统计原理解析

1.基于虚拟线圈法的车辆统计 基于虚拟线圈的车流量统计算法原理与交通道路上的常见的传统的物理线圈类似&#xff0c;由于物理线圈需要埋设在路面之下&#xff0c;因此会有安装、维护费用高&#xff0c;造成路面破坏等问题&#xff0c;而采用基于视频的虚拟线圈的车辆计数方法…

ubuntu 12.04 eclipse 安装

方法二&#xff1a;(优点是安装内容清爽&#xff0c;缺点是配置麻烦) 1、安装JDK&#xff0c;参考 Ubuntu 12.04 下安装 JDK 7 2、下载 Eclipse 从 http://www.eclipse.org/downloads/index-developer.php下载合适版本&#xff0c;如&#xff1a;Eclipse IDE for C/C Develope…

智慧交通day02-车流量检测实现14:代码汇总+问题修正

代码权重文件资源https://download.csdn.net/download/qq_39237205/43072746https://download.csdn.net/download/qq_39237205/43072746 环境要求&#xff1a;python2.7 环境配置&#xff1a;见文末requirements.txt 1.YOLO.py # encoding:utf-8 import imutils import tim…