精华内容
下载资源
问答
  • 2021-10-05 21:15:11

    卡尔曼滤波在目标跟踪中的运用


    一、算法简述

      卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。可在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。在连续变化的系统中,使用卡尔曼滤波是非常理想的,它具有占用内存小的优点,并且速度很快,很适合用于实时问题和嵌入式系统。
      在目标跟踪应用中,使用卡尔曼滤波器对系统进行预测,可以有效地解决目标移动过程中出现遮挡导致目标丢失的情况。
      算法主要流程如下图所示:
    请添加图片描述
      接下来,我们使用python基于卡尔曼滤波算法进行对鼠标移动的跟踪。

    二、算法实践


    1. 手写卡尔曼滤波器

    参数解释:

    X(k):k时刻系统状态
    A:状态转移矩阵,对应opencv里kalman滤波器的transitionMatrix矩阵
    B:控制输入矩阵,对应opencv里kalman滤波器的controlMatrix矩阵
    U(k):k时刻对系统的控制量
    Z(k):k时刻的测量值
    H:系统测量矩阵,对应opencv里kalman滤波器的measurementMatrix矩阵
    Q:过程噪声协方差矩阵,对应opencv里的kalman滤波器的processNoiseCov矩阵
    R:观测噪声协方差矩阵,对应opencv里的kalman滤波器的measurementNoiseCov矩阵
    P: 状态估计协方差矩阵

    状态和参数初始化

    # 状态初始化
    last_mes = current_mes = np.zeros((4, 1), np.float32)
    last_pre = current_pre = np.zeros((4, 1), np.float32)
    # 状态转移矩阵,上一时刻的状态转移到当前时刻
    A = np.array([[1, 0, 1, 0],
                  [0, 1, 0, 1],
                  [0, 0, 1, 0],
                  [0, 0, 0, 1]], np.float32)
    # 状态观测矩阵
    H = np.eye(4)
    # 过程噪声协方差矩阵Q,p(w)~N(0,Q),噪声来自真实世界中的不确定性,
    # 在跟踪任务当中,过程噪声来自于目标移动的不确定性(突然加速、减速、转弯等)
    Q = np.eye(4) * 0.1
    # 观测噪声协方差矩阵R,p(v)~N(0,R)
    # 观测噪声来自于检测框丢失、重叠等
    R = np.eye(4) * 1
    # 控制输入矩阵B
    B = None
    # 状态估计协方差矩阵P初始化
    P = np.eye(4)
    P_posterior = np.array(P)
    

    (1)计算先验状态估计值

    # -----计算先验状态估计值-------------
    X_prior = np.dot(A, last_pre)
    

    (2)计算先验误差协方差

    # -----计算先验误差协方差矩阵P--------
    P_prior_1 = np.dot(A, P_posterior)
    P_prior = np.dot(P_prior_1, A.T) + Q
    

    (3)计算修正矩阵

    # ------计算修正矩阵-----------------
    k1 = np.dot(P_prior, H.T)
    k2 = np.dot(np.dot(H, P_prior), H.T) + R
    K = np.dot(k1, np.linalg.inv(k2))
    

    (4)更新观测值

    # ------更新观测值------------
    current_pre_1 = current_mes - np.dot(H, X_prior)
    current_pre = X_prior + np.dot(K, current_pre_1)
    

    (5)更新误差协方差

    # ------更新误差协方差矩阵P-----
    P_posterior_1 = np.eye(4) - np.dot(K, H)
    P_posterior = np.dot(P_posterior_1, P_prior)
    

    完整代码如下:

    import cv2
    import numpy as np
    
    frame = np.zeros((800, 800, 3), np.uint8)
    
    # 状态初始化
    last_mes = current_mes = np.zeros((4, 1), np.float32)
    last_pre = current_pre = np.zeros((4, 1), np.float32)
    # 状态转移矩阵,上一时刻的状态转移到当前时刻
    A = np.array([[1, 0, 1, 0],
                  [0, 1, 0, 1],
                  [0, 0, 1, 0],
                  [0, 0, 0, 1]], np.float32)
    # 状态观测矩阵
    H = np.eye(4)
    # 过程噪声协方差矩阵Q,p(w)~N(0,Q),噪声来自真实世界中的不确定性,
    # 在跟踪任务当中,过程噪声来自于目标移动的不确定性(突然加速、减速、转弯等)
    Q = np.eye(4) * 0.1
    # 观测噪声协方差矩阵R,p(v)~N(0,R)
    # 观测噪声来自于检测框丢失、重叠等
    R = np.eye(4) * 1
    # 控制输入矩阵B
    B = None
    # 状态估计协方差矩阵P初始化
    P = np.eye(4)
    P_posterior = np.array(P)
    
    
    def mousemove(event, x, y, s, p):
        global frame, current_mes, last_mes, current_pre, last_pre, P_posterior
        last_pre = current_pre
        last_mes = current_mes
        dx = x - last_pre[0]
        dy = y - last_pre[1]
        current_mes = np.array([[x], [y], [dx], [dy]], np.float32)
    
        '''predict'''
        # -----计算先验状态估计值-------------
        X_prior = np.dot(A, last_pre)
        # -----计算先验误差协方差矩阵P--------
        P_prior_1 = np.dot(A, P_posterior)
        P_prior = np.dot(P_prior_1, A.T) + Q
    
        '''correct'''
        # ------计算修正矩阵-----------------
        k1 = np.dot(P_prior, H.T)
        k2 = np.dot(np.dot(H, P_prior), H.T) + R
        K = np.dot(k1, np.linalg.inv(k2))
        # ------更新观测值------------
        current_pre_1 = current_mes - np.dot(H, X_prior)
        current_pre = X_prior + np.dot(K, current_pre_1)
        # ------更新误差协方差矩阵P-----
        P_posterior_1 = np.eye(4) - np.dot(K, H)
        P_posterior = np.dot(P_posterior_1, P_prior)
    
        lmx, lmy = last_mes[0], last_mes[1]
        lpx, lpy = last_pre[0], last_pre[1]
        cmx, cmy = current_mes[0], current_mes[1]
        cpx, cpy = current_pre[0], current_pre[1]
        cv2.line(frame, (lmx, lmy), (cmx, cmy), (255, 255, 255))	# 白色线为测量值
        cv2.line(frame, (lpx, lpy), (cpx, cpy), (0, 0, 255))		# 红色线为预测值
    
    
    cv2.namedWindow("kalman_mouse_tracker")
    cv2.setMouseCallback("kalman_mouse_tracker", mousemove)
    
    while (True):
        cv2.imshow('kalman_mouse_tracker', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cv2.destroyAllWindows()
    

    2. 调用opencv自带的卡尔曼滤波器

    初始化参数

    kalman = cv2.KalmanFilter(4, 2)  # 4:状态数,包括(x,y,dx,dy)坐标及速度(每次移动的距离);2:观测量,能看到的是坐标值
    kalman.measurementMatrix = np.array([[1, 0, 0, 0], [0, 1, 0, 0]], np.float32)  # 系统测量矩阵
    kalman.transitionMatrix = np.array([[1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]], np.float32)  # 状态转移矩阵
    kalman.processNoiseCov = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]],np.float32) * 0.003  # 系统过程噪声协方差
    

    预测和校准

    kalman.correct(current_measurement)    # 用当前测量来校正卡尔曼滤波器
    current_prediction = kalman.predict()  # 计算卡尔曼预测值,作为当前预测
    

    完整代码如下:

    import cv2
    import numpy as np
    
    # 创建一个空帧,定义(700, 700, 3)画图区域
    frame = np.zeros((700, 1000, 3), np.uint8)
    
    # 初始化测量坐标和鼠标运动预测的数组
    last_measurement = current_measurement = np.array((2, 1), np.float32)
    last_prediction = current_prediction = np.zeros((2, 1), np.float32)
    
    
    # 定义鼠标回调函数,用来绘制跟踪结果
    def mousemove(event, x, y, s, p):
        global frame, current_measurement, last_measurement, current_prediction, last_prediction
        last_prediction = current_prediction  # 把当前预测存储为上一次预测
        last_measurement = current_measurement  # 把当前测量存储为上一次测量
        current_measurement = np.array([[np.float32(x)], [np.float32(y)]])  # 当前测量
        kalman.correct(current_measurement)  # 用当前测量来校正卡尔曼滤波器
        current_prediction = kalman.predict()  # 计算卡尔曼预测值,作为当前预测
    
        lmx, lmy = last_measurement[0], last_measurement[1]  # 上一次测量坐标
        cmx, cmy = current_measurement[0], current_measurement[1]  # 当前测量坐标
        lpx, lpy = last_prediction[0], last_prediction[1]  # 上一次预测坐标
        cpx, cpy = current_prediction[0], current_prediction[1]  # 当前预测坐标
    
        # 绘制从上一次测量到当前测量以及从上一次预测到当前预测的两条线
        cv2.line(frame, (lmx, lmy), (cmx, cmy), (255, 255, 255), 1)  # 白色线为测量值
        cv2.line(frame, (lpx, lpy), (cpx, cpy), (0, 0, 255))  	     # 红色线为预测值
        # cv2.circle(frame, (cpx, cpy), 2, (0, 255, 0), -1)
    
    
    # 窗口初始化
    cv2.namedWindow("kalman_mouse_tracker")
    
    # opencv采用setMouseCallback函数处理鼠标事件,具体事件必须由回调(事件)函数的第一个参数来处理,该参数确定触发事件的类型(点击、移动等)
    cv2.setMouseCallback("kalman_mouse_tracker", mousemove)
    
    kalman = cv2.KalmanFilter(4, 2)  # 4:状态数,包括(x,y,dx,dy)坐标及速度(每次移动的距离);2:观测量,能看到的是坐标值
    kalman.measurementMatrix = np.array([[1, 0, 0, 0], [0, 1, 0, 0]], np.float32)  # 系统测量矩阵
    kalman.transitionMatrix = np.array([[1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]], np.float32)  # 状态转移矩阵
    kalman.processNoiseCov = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]],np.float32) * 0.003  # 系统过程噪声协方差
    
    while True:
        cv2.imshow("kalman_mouse_tracker", frame)
        key = cv2.waitKey(1) & 0xFF
        if key == ord('q'):
            break
    cv2.destroyAllWindows()
    

    总结

      对于上述所介绍的卡尔曼滤波的预测和更新都是基于线性计算基础上的,只适用于线性系统。但是在现实中,大多数系统往往是非线性的。这时,需要引入适用于非线性问题的扩展卡尔曼滤波(EKF)。

    参考

    更多相关内容
  • 红外动目标跟踪与识别系统的输入信号是红外摄像机提供的模拟或数字视频信号。该系统通过基于C6X系列高速DSP的数字视频处理卡,实时的处理红外数字视频序列,完成对运动目标的搜索、捕获、跟踪、记忆。
  • 开发技术-硬件
  • 人工智能-目标检测-基于视频图像动态目标检测与跟踪算法的硬件实现研究.pdf
  • 它相当于系统的眼睛,智能机器人视觉系统有着执行自主定位、环境识别、障碍物检测、目标跟踪等仿生功能。但是传统的机器视觉系统存在着实时性差的问题,于是根据FPGA体积小、功耗低、速度快、配置灵活、移植方便等...

    硬件实现算法——基于FPGA的目标识别与跟踪设计

    参考文献:基于FPGA的嵌入式图像处理系统设计(第四章)

    引言

    硬件实现算法的关键不是移植一个已有的串行算法,而是将算法转化成可用的计算架构。
    在这里插入图片描述
    由上图可知,算法实现主要分为两步:分析算法和设计算法结构隐含的计算结构。

    分析算法:找出基本的算法结构——对算法整体分析且有印象,能去修改。

    • 在分析时,将基本算法进行转化,转化成更简单有效的形式,从而映射到硬件上实现。
      1、 尽可能多的采用流处理的方式,从而消除中间的帧缓冲器——任何采用窗口扫描处理数据的操作均可采用流处理的方式。
      2、迭代类型的操作可设计成并行的方式。
      3、学会简化处理顺序,比如说做灰度形态学滤波,后进行阈值处理,就完全可以等价于先进性阈值处理,然后二值形态学滤波,这样就可以减少硬件资源的消耗,缩短延迟的时间。
      4、还可对数据编码来降低数据量。

    设计算法结构隐含的计算结构。

    1、主要是对算法进行转化,从而能更有效的利用并行性,达到高效利用硬件资源的效果
    2、低级流水线和时序调整可用来减少组合延迟,以提高时钟速率
    3、要能选择合适的硬件结构,让它能与软件算法中用到的数据结构一致

    背景

    机器视觉应用领域广泛,在工业制造等场景中均扮演着重要的角色。它相当于系统的眼睛,智能机器人视觉系统有着执行自主定位、环境识别、障碍物检测、目标跟踪等仿生功能。但是传统的机器视觉系统(以计算机作为处理器)存在着实时性差的问题,于是根据FPGA体积小、功耗低、速度快、配置灵活、移植方便等突出优点,我们提出了基于FPGA的目标识别和跟踪。其中主要以FPGA和COMS图像传感器为核心平台来进行视觉系统硬件设计,以硬件描述语言为工具完成了常见经典的数字图像处理算法实现,起到算法加速的效果,最终完成了目标识别跟踪系统的应用开发。

    主要工作

    硬件系统平台搭建与模块化设计、图像预处理算法和目标提取算法的硬件化移植和加速、目标跟踪算法的硬件化实现。
    (1)模块化:摄像头采集、SDRAM存储、VGA显示。优化:乒乓操作。整体搭建成图像采集与显示的系统。
    (2)图像预处理算法的移植。包括原始图像-RGB图像-Ycbcr图像、快速排序的中值滤波算法、Sobel算子的边缘检测、3*3矩阵的生成以及模板的卷积运算、二值化处理。
    (3)对不断运动的目标检测和跟踪,将帧间差分算法用程序进行实现和移植,提取运动目标的边缘轮廓,选取运动目标的边缘特征完成基于特征匹配的跟踪算法,并计算运动目标的形心位置,对其所在位置进行实时跟踪。

    关于目标检测与跟踪

    运动目标检测:在采集视频图像的时候,将确定目标从背景区域中清晰地提取出来(帧间差分法),并进行分析处理。
    目标跟踪:在采集到的连续视频图像中,得到运动目标的位置和完整运动轨迹,并能实时的跟踪定位。

    图像预处理部分

    滤波操作(中值滤波、均值滤波、Sobel边缘检测等)

    颜色空间转换

    图像预处理算法适合在FPGA上完成,原理基础简单且需要快速处理,通常有中值滤波、均值滤波等,以及颜色空间转换算法。
    2.
    中值滤波算法(能尽可能保留原始图像的信息,减少噪声且保留边缘效果,主要处理椒盐噪声。):原理是排序。将目标图像中的任意像素点的周围像素点的灰度提取出来,进行中值计算,然后用中值代替该点的像素灰度值。W:模板
    在这里插入图片描述
    3.
    均值滤波算法:(高频信号被滤除,让图像平滑模糊,因为它能将突变点的灰度值平均到相邻像素点中,缺点:在像素点跨越连通区域便捷的时候,由于不同区域像素点参与运算,所以会破坏图像的细节,边界模糊)用任意像素点领域内的像素平均值来代替该像素点的灰度值。M:邻域内包含的总像素点的个数,mn邻域像素点到中心像素点横纵坐标距离的数值。
    在这里插入图片描述
    4.
    Sobel边缘检测:(处理具有大量噪声点的图像时效果也好)原理:

    对图像的局部像素点进行平均化计算,得到消除噪声和平滑图像的效果。/利用梯度信息来对边缘进行检测,通过阈值判断像素点是否属于边缘点。

    边缘信息(携带很多轮廓信息):图像中灰度值出现跳变或者间断的像素点所携带的信息,即局部像素点发生更为明显变化的像素点集合。
    目标边缘提取的方式:sobel、roberts、prewitt、神经网络。

    Sobel算子包含两个3*3矩阵,即横向算子和纵向算子,两个算子分别与图像做卷积运算,得到横向灰度值和纵向灰度值。

    在这里插入图片描述
    在这里插入图片描述
    5.
    颜色空间的转换:灰度图像是一种特殊的彩色图像(R=G=B的彩色图像)

    灰度化处理目的:RGB色彩空间数据计算量大,每一个通道颜色分量都需要计算,另外它不能全面的描绘图像的轮廓特征,只能形成各种各样的颜色。灰度图像可以描述图像轮廓特征且计算数据量小。

    灰度化的方法:(1)三种色彩分量平均化
    在这里插入图片描述
    (2)RGB–Ycbcr
    在这里插入图片描述
    在这里插入图片描述

    运动目标检测算法原理

    背景减法

    帧间差分法

    光流法

    将确定的运动目标从所在的图像背景区域中清晰的分离,并且进行分析处理。
    算法主要有:背景减除法、帧间差分法、光流法、边缘特征提取法、各类角点提取法
    (1)背景减除法:通常用于背景不发生变化的场景。原理:将没有运动的目标图像作为背景进行保存,然后利用存在运动目标的新一帧图像与之前的保存背景进行差分运算,即可得到目标。运算快且颜色差异明显时候效果很好,但是背景图像缓存会消耗更多的存储空间。
    在这里插入图片描述
    在这里插入图片描述
    T阈值,将t时刻的帧图像和背景图像做差,发生变化比较大的像素点相当于目标像素点,比较小的相当于没有发生变化的背景。

    (2)帧间差分法:原理:在有运动目标的视频图像中,对不同针的图像进行分析处理,各帧图像中对应像素点发生相对变化,则这个变化的像素点集合就被看作运动目标的像素点集合,然后获取连续的两帧图像,前一阵图像 - 后一帧图像 = 运动目标。如果相同位置像素点特征差小于设定阈值,则为背景,反之为运动目标。

    在这里插入图片描述
    在这里插入图片描述
    将ti和ti+1时刻的图像做差
    这个延迟相当于运动速度,太快太慢效果都有影响。慢:两帧图像变化较小,差分效果不好。快:容易出现伪目标现象。此外难免减除有效目标点/变化小且色泽相近的情况下不适用
    (3)光流法:(很难保证复杂背景下计算的正确性)
    原理:利用图像中背景的光流特性和目标的光流特性差异来提取目标。
    图像光流不连续说明存在运动目标,反之不存在,于是这就是用来分割运动目标的依据。
    在这里插入图片描述

    目标跟踪算法原理和分类

    原理:匹配连续多帧图像中运行目标的过程。匹配选择的对象是运动目标的某些特征,可减少计算量。
    方法:
    (1)基于区域匹配的跟踪算法:认为确定出带有运动目标的模板,模板大于运动模板的矩形区域,然后将模板与每一帧图像进行相同位置像素点的匹配,最后选择出匹配好的像素点集合,为运动目标。
    (2)基于特征匹配的跟踪算法:进行特征提取操作,提取运动目标的显著特征,然后进行匹配。通常:角点特征、颜色特征、边缘特征
    (3)基于模型的跟踪算法:确定目标状态的先验概率,进行跟踪建模,在新的观测值下,计算后验概率,实现实时更新匹配模板,实现目标状态的估计。简言之,通过目标的物体形状或者姿态等进行建模,并预测运动的位置和诡异,不断缩小查询区域,匹配到目标后的样本值,并不断的优化模型。
    (4)基于变形模板的跟踪算法:利用目标边缘信息来假设其轮廓,轮廓是可变化的,也就是变形模板,得到模板后,不断的优化匹配,最后可分割出运动目标。

    展开全文
  • 本文基于xilinx公司的ARTIX-7系列芯片xc7a35t和cmos摄像头ov7725以及VGA显示屏搭建了一套硬件平台用以动态目标的检测跟踪。使用vivado软件设计了各个系统模块的功能,本系统主要由5个模块构成:ov7725视频图像数据...
  • 本文以KCF算法为核心,提出并设计了一种基于DSP的目标跟踪系统.硬件方面,本文设计实现了一套完整独立的硬件平台;软件方面,本文提出一系列针对DSP的算法优化方法,使优化后的KCF算法能够满足重要的工程指标要求....
  • FPGA图像识别与目标跟踪系统.pdf
  • FPGA的图像识别与目标跟踪系统设计.pdf
  • 开发技术-硬件
  • 基于FPGA的目标跟踪系统设计与实现.pdf
  • 运动目标跟踪综述

    千次阅读 2022-01-07 09:53:56
    运动目标跟踪综述 运动目标跟踪技术是近几年来新兴的一个研究方向,它通过分析视频序列,在视频序列的每一帧中定位出目标,包括计算出目标的大小、位置等信息。其难点在于运动目标在视频图像跟踪过程中可能会发生的...

    运动目标跟踪综述

    运动目标跟踪技术是近几年来新兴的一个研究方向,它通过分析视频序列,在视频序列的每一帧中定位出目标,包括计算出目标的大小、位置等信息。其难点在于运动目标在视频图像跟踪过程中可能会发生的旋转、遮挡、尺度变化等比较复杂的变化,以及一些客观因素的影响,比如各类噪声、出现遮挡等等。它是视频监控技术应用的关键,也是计算机视觉研究领域的一个重要分支。

    1.运动目标跟踪方法和模型

    过去几十年,目标跟踪方法经历了从卡尔曼滤波等经典跟踪方法,到基于相关滤波方法,再到深度学习相关方法的演变历程。根据建模方式的不同,可以将目标跟踪方法分为生成式模型方法、判别式模型方法。

    (1)生成式模型方法

    生成式模型方法是提取目标特征构建表现模型,在图像中搜索与模型最匹配的区域作为跟踪结果。生成式模型不论采用全局特征还是局部特征,其本质是在目标表示的高维空间中,找到与目标模型最相邻的候选目标作为当前估计。该类方法缺陷在于只关注目标信息,而忽略了背景信息。比较经典的算法有卡尔曼滤波、粒子滤波、均值漂移等。
    卡尔曼滤波(Kalmanfilter,KF) 算法是解决线性高斯问题的经典算法,而实际目标跟踪场景中多为非线性非高斯问题。国内外学者为了实现卡尔曼滤波在实际场景中的应用,也提出了很多改进算法。
    粒子滤波(particlefilter,PF) 算法由Isard等引入到目标跟踪问题中.与KF相关算法相比,PF算法能够更有效地解决强非线性非高斯系统问题,但由于算法本身存在粒子退化、计算量大等问题,当跟踪目标具有较强机动性时,PF算法跟踪效果较差。
    均值漂移(meanshift) 算法是经典的基于概率密度分布的方法,由Comaniciu等引入目标跟踪领域,通过最小化目标和候选目标的概率密度函数之间的距离来跟踪目标.该算法实现简单,实时性强,具有一定的旋转不变性,但当目标被遮挡或背景杂乱时,易造成局部极大值点,使算法收敛于错误目标。

    (2)判别式模型方法

    判别式模型将跟踪问题作为分类或回归问题,目的是寻找一个判别函数,将目标从背景中分离出来,从而实现对目标的跟踪。判别式模型方法又可分为基于相关滤波的跟踪算法和基于深度学习的跟踪算法。

    基于相关滤波的跟踪算法

    相关滤波跟踪算法是一种在线学习方法,其基本思想是设计一个滤波模板,利用该模板与目标候选区域做相关运算,最大输出响应的位置即为当前帧的目标位置,能够及时对模型进行更新,来适应目标的变化。同时,为了简化运算,降低计算复杂度,相关滤波算法在滤波器求解过程中,将求解运算转换到频率域进行,显著提高了目标跟踪的速度,使算法能够达到实时跟踪的效果。基于相关滤波的跟踪算法求解过程主要可分为3个阶段:训练阶段、模型更新阶段和检测阶段。针对以上三步求解过程,学者们也提出了很多改进的相关滤波跟踪算法,来解决目标跟踪过程中出现的由运动模糊、尺度变化、物体遮挡等因素造成的跟踪漂移问题。其代表算法有:最小输出误差平方和(MOSSE)跟踪算法、核相关滤波(KCF)跟踪算法、判别尺度空间(DSST)跟踪算法、空间正则相关滤波(SRDCF)跟踪算法、时空正则相关滤波(STRCF)跟踪算法、背景感知相关滤波(BACF)跟踪算法等。

    基于深度学习的跟踪算法

    近年来,基于深度学习的目标跟踪算法在网络架构、骨干网络、特征融合、算法更新方式、目标搜索策略等方面均进行了大量研究,以使跟踪器学习丰富的表示形式并能有效地从目标中提取复杂和抽象的特征。相比于相关滤波跟踪算法,该算法能够获得更高的跟踪准确度,且研究者们期望能够提供通用的深度学习跟踪算法,同时在精度、速度和鲁棒性上获得更好的效果。深度目标跟踪算法对硬件配置是有要求的,需要有GPU的支持,且在有GPU的环境下,各算法均能达到实时跟踪的效果.为了提高跟踪精度,各算法的主干网络逐渐由简单的AlexNet向复杂的ResNet、Inception等网络过渡。
    单目标跟踪方面,有如全卷积孪生网络(SiamFC)跟踪算法, 孪生候选区域生成网络(SiamRPN)跟踪算法, 改进全卷积孪生网络(SiamRPN++)跟踪算法等代表算法。基于Siamese的神经网络算法在跟踪性能和效率之间达到了很好的平衡,该网络设计的初衷就是为了使算法变得更快更准,实现算法在工业领域的应用,是目前目标跟踪领域较有前景的网络结构。
    多目标跟踪方面,目前主要有三种主流的跟踪框架,分别是Tracking-by-detection,代表算法如SORT、DeepSORT;基于检测和跟踪联合,代表算法如JDE、FairMOT、CenterTrack、ChainedTracker等;基于注意力机制,代表算法如TransTrack、TrackFormer等。

    2.运动目标跟踪评价标准

    单目标跟踪方面,分为两种数据集,OTB与VOT,分别有不同的评价指标。
    OTB,
    (1)精确度图(Precision Plot)主要反映中心位置误差小于给定阈值的视频帧的百分比曲线;
    (2)成功率图(Success Plot)主要反映边框重叠率大于给定阈值的视频帧的百分比曲线;
    (3)时间鲁棒性(Temporal Robustness Evaluation);
    (4)空间鲁棒性(Spatial Robustness Evaluation)。
    VOT,
    (1)准确率(Accuracy),即在单个测试序列下的平均重叠率;
    (2)鲁棒性(Robustness);
    (3)等效滤波操作(Equivalent Filter Operations),用于衡量跟踪速度;
    (4)平均重叠期望(Expected Average Overlap),反映序列长度与平均准确率的关系,同时考虑准确率和鲁棒性。
    多目标跟踪方面,评估指标有MOTA(多目标跟踪准确度)、MOTP(多目标跟踪精度)、MT(跟踪到的轨迹,即一条轨迹被跟踪到80%)、ML(丢失的轨迹,即一条轨迹被跟踪到不足20%)、IDF1(正确识别的检测与真实数和计算检测的平均数之比)、IDSw.(ID切换总数)、FAF(每帧的平均误报警数)、FP(误报总数)、FN(未命中目标的总数)、Frag(轨迹碎片化的总次数)、Hz(频率)。其中主要的是MOTA和MOTP,计算公式分别为如下所示
    在这里插入图片描述
    在这里插入图片描述

    参考文献:Li X,Zha Y F,Zhang T Z,Cui Z,Zuo W M,Hou Z Q,Lu H C and Wang H Z. 2019. Survey of visual object tracking algorithms based
    on deep learning. Journal of Image and Graphics,24( 12) : 2057-2080( 李玺,查宇飞,张天柱,崔振,左旺孟,侯志强,卢湖川,王菡子. 2019. 深度学习
    的目标跟踪算法综述. 中国图象图形学报,24( 12) : 2057-2080) [DOI: 10. 11834 /jig. 190

    展开全文
  • 网络游戏-适用于硬件的高速卷积神经网络目标跟踪方法和装置.zip
  • 机器视觉——目标跟踪

    千次阅读 2022-03-02 21:39:28
    随着研究人员不断地深入研究,视觉目标跟踪在近十几年里有了突破性的进展,使得视觉跟踪算法不仅仅局限于传统的机器学习方法,更是结合了近些年人工智能热潮—深度学习(神经网络)和相关滤波器等方法,并取得了鲁棒...

    摘    要

     视觉跟踪技术是计算机视觉领域(人工智能分支)的一个重要课题,有着重要的研究意义;且在军事制导、视频监控、机器人视觉导航、人机交互、以及医疗诊断等许多方面有着广泛的应用前景。随着研究人员不断地深入研究,视觉目标跟踪在近十几年里有了突破性的进展,使得视觉跟踪算法不仅仅局限于传统的机器学习方法,更是结合了近些年人工智能热潮—深度学习(神经网络)和相关滤波器等方法,并取得了鲁棒(robust)、精确、稳定的结果。

    视觉目标跟踪是指对图像序列中的运动目标进行检测、提取、识别和跟踪,获得运动目标的运动参数,如位置、速度、加速度和运动轨迹等,从而进行下一步的处理与分析,实现对运动目标的行为理解,以完成更高一级的检测任务。根据跟踪目标的数量可以将跟踪算法分为单目标跟踪与多目标跟踪。相比单目标跟踪而言,多目标跟踪问题更加复杂和困难。多目标跟踪问题需要考虑视频序列中多个独立目标的位置、大小等数据,多个目标各自外观的变化、不同的运动方式、动态光照的影响以及多个目标之间相互遮挡、合并与分离等情况均是多目标跟踪问题中的难点。

    本次内容主要研究的内容基于目标跟踪下的:Opencv-python七种自带的跟踪算法以及:背景减除法、帧差法、混合高斯模型、卡尔曼滤波、粒子滤波、

    光流估计发、sift。

    绪论

    目标跟踪划分为五项主要的研究内容:

    运动模型(Motion Model):如何生成众多有效的候选框,生成候选样本的速度与质量直接决定了跟踪系统表现的优劣。常用的有两种方法:粒子滤波(Particle Filter)和滑动窗口(Sliding Window)。粒子滤波是一种序贯贝叶斯推断方法,通过递归的方式推断目标的隐含状态。而滑动窗口是一种穷举搜索方法,它列出目标附近的所有可能的样本作为候选样本。

    特征提取(Feature Extractor): 利用何种特征表示目标,鉴别性的特征表示是目标跟踪的关键之一。根据目标的情况选择不同的特征表示,常用的特征被分为两种类型:手工设计的特征(Hand-crafted feature)和深度特征(Deep feature)。常用的手工设计的特征有灰度特征(Gray),方向梯度直方图(HOG),哈尔特征(Haar-like),尺度不变特征(SIFT)等。与人为设计的特征不同,深度特征是通过大量的训练样本学习出来的特征,它比手工设计的特征更具有鉴别性。因此,利用深度特征的跟踪方法通常很轻松就能获得一个不错的效果。

    观测模型(Observation Model):为候选框打分(置信分数),大多数的跟踪方法主要集中在这一块的设计上。为候选框打分根据不同的思路,观测模型可分为两类:生成式模型(Generative Model)和判别式模型(Discriminative Model). 生成式模型通常寻找与目标模板最相似的候选作为跟踪结果,这一过程可以视为模板匹配。常用的理论方法包括:子空间,稀疏表示,字典学习等。而判别式模型通过训练一个分类器去区分目标与背景,选择置信度最高的候选样本作为预测结果。判别式方法已经成为目标跟踪中的主流方法,因为有大量的机器学习方法可以利用。常用的理论方法包括:逻辑回归,岭回归,支持向量机,多示例学习,相关滤波等。

    模型更新(Model Update): 更新观测模型使其适应目标的变化,防止跟踪过程发生漂移。模型更新没有一个统一的标准,通常认为目标的表观连续变化,所以常常会每一帧都更新一次模型。但也有人认为目标过去的表观对跟踪很重要,连续更新可能会丢失过去的表观信息,引入过多的噪音,因此利用长短期更新相结合的方式来解决这一问题。

    集成方法(Ensemble Method): 集成方法有利于提高模型的预测精度,也常常被视为一种提高跟踪准确率的有效手段。可以把集成方法笼统的划分为两类:在多个预测结果中选一个最好的,或是利用所有的预测加权平均。

    在本次研究中使用环境如下:

    pycharm64

    nimpy-1.19.0rc1

    opencv-contrib-python-4.3.0.36

    matplotlib-3.1.3

    硬件环境:

    CPU:I7-7700HQ

    GPU:GTX1050Ti

    视频数据:

    来源:网站下载

    图像大小:768*576

    时长:00:01:19

    帧速率:10.00帧/秒

    第2章 背景建模

    2.1  帧差法

    由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。

     

    帧差法非常简单,但是会引入噪音和空洞问题。

    2.2 混合高斯模型

    2.2.1 混合高斯模型的建立

    在进行前景检测前,先对背景进行训练,对图像中每个背景采用一个混合高斯模型进行模拟,每个背景的混合高斯的个数可以自适应。然后在测试阶段,对新来的像素进行GMM匹配,如果该像素值能够匹配其中一个高斯,则认为是背景,否则认为是前景。由于整个过程GMM模型在不断更新学习中,所以对动态背景有一定的鲁棒性。最后通过对一个有树枝摇摆的动态背景进行前景检测,取得了较好的效果。背景的实际分布应当是多个高斯分布混合在一起,每个高斯模型也可以带有权重。

    混合高斯模型学习方法

    1.首先初始化每个高斯模型矩阵参数。

    2.取视频中T帧数据图像用来训练高斯混合模型。来了第一个像素之后用它来当做第一个高斯分布。

    3.当后面来的像素值时,与前面已有的高斯的均值比较,如果该像素点的值与其模型均值差在3倍的方差内,则属于该分布,并对其进行参数更新。

    4.如果下一次来的像素不满足当前高斯分布,用它来创建一个新的高斯分布。

    混合高斯模型测试方法

    在测试阶段,对新来像素点的值与混合高斯模型中的每一个均值进行比较,如果其差值在2倍的方差之间的话,则认为是背景,否则认为是前景。将前景赋值为255,背景赋值为0。这样就形成了一副前景二值图。

    代码:

    第一步:使用cv2.VideoCapture() 构造读取模型

    第二步:使用cv2.getStructureElement(cv2.MORPH_ELLIPSE, (3, 3)) # 构造形态学使用的kernel,即np.ones((3, 3), np.uint8)

    第三步:构造cv2.createBackgroundSubtractorMOG2() 实例化混合高斯模型

    第四步:cap.read()从视频中读取文件,并使用model.apply(frame) 使用上混合高斯模型

    第五步:使用cv2.morpholyEx(image, cv2.MORPH_OPEN, kernel) 使用开运算进行噪音的去除

    第六步:cv2.findCountours找出图片中的轮廓,对其进行循环

    第七步:对于周长大于188的轮廓,使用cv2.boundingRect计算外接矩阵,使用cv2.rectangle画出外接矩阵,作为人

    第八步:使用cv2.imshow()展示图片,使用cv2.waitkey(150) & 0xff == 27来延长放映的时间

    2.2.2 结果展示

     

    2.3 背景减除法

    2.3.1 基本原理

    背景减除法是一种有效的运动对象检测算法,基本思想是利用背景的参数模型来近似背景图像的像素值,将当前帧与背景图像进行差分比较实现对运动区域的检测,其中区别较大的像素区域被认为是运动区域,而区别较小的像素区域被认为是背景区域。背景减除法必须要有背景图像,并且背景图像必须是随着光照或外部环境的变化而实时更新的,因此背景减除法的关键是背景建模及其更新。针对如何建立对于不同场景的动态变化均具有自适应性的背景模型,减少动态场景变化对运动分割的影响,研究人员已提出了许多背景建模算法,但总的来讲可以概括为非回归递推和回归递推两类。非回归背景建模算法是动态的利用从某一时刻开始到当前一段时间内存储的新近观测数据作为样本来进行背景建模。

    2.3.2 结果展示

     

    光流估计

    3.1 基本原理

    光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如目标跟踪。

    亮度恒定:同一点随着时间的变化,其亮度不会发生改变。

    小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数。

    空间一致:一个场景上邻近的点投影到图像上也是邻近点,且邻近点速度一致。因为光流法基本方程约束只有一个,而要求x,y方向的速度,有两个未知变量。所以需要连立n多个方程求解。

     

    cv2.calcOpticalFlowPyrLK():

    参数:

    prevImage 前一帧图像

    nextImage 当前帧图像

    prevPts 待跟踪的特征点向量

    winSize 搜索窗口的大小

    maxLevel 最大的金字塔层数

    返回:

    nextPts 输出跟踪特征点向量

    status 特征点是否找到,找到的状态为1,未找到的状态为0

    3.2 结果展示

     

    光流法的主要任务就是计算光流场,即在适当的平滑性约束条件下,根据图像序列的时空梯度估算运动场,通过分析运动场的变化对运动目标和场景进行检测与分割。通常有基于全局光流场和特征点光流场两种方法。最经典的全局光流场计算方法是L-K(Lueas&Kanada)法和H-S(Hom&Schunck)法,得到全局光流场后通过比较运动目标与背景之间的运动差异对运动目标进行光流分割,缺点是计算量大。特征点光流法通过特征匹配求特征点处的流速,具有计算量小、快速灵活的特点,但稀疏的光流场很难精确地提取运动目标的形状。总的来说,光流法不需要预先知道场景的任何信息,就能够检测到运动对象,可处理背景运动的情况,但噪声、多光源、阴影和遮挡等因素会对光流场分布的计算结果造成严重影响;而且光流法计算复杂,很难实现实时处理。

    卡尔曼滤波

    4.1 基本原理

    卡尔曼滤波的核心就是:预测+测量反馈。

    卡尔曼滤波的前提:状态在定义域内具有正态高斯分布规律。

    卡尔曼滤波——利用线性系统的状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计可看着是滤波的过程。

    卡尔曼滤波主要分为两个过程:

    1、时间更新,先验估计。2、测量更新,后验估计。而当前卡尔曼过程的后验估计不仅可以作为本次的最终结果,还能作为下一次的先验估计的初始值。

    预测过程是利用系统模型(状态方程)预测状态的先验概率密度,也就是通过已有的先验知识对未来的状态进行猜测更新过程则利用最新的测量值对先验概率密度进行修正,得到后验概率密度,对之前猜测进行修正。

     

     

    我们将这五个公式分成预测组和更新组。预测组总是根据前一个状态来估计当前状态。更新组则根据观测信息来对预测信息进行修正,以期达到最优估计之目的。

    公式和opencv对应关系的讲解:

    首先对于离散控制过程的系统,其系统状态和系统测量值可进行以下表示:

    X(k): k时刻系统状态

    A:   状态转移矩阵,对应opencv里kalman滤波器的transitionMatrix矩阵(关于opencv kalman滤波器详细定义会在2中给出)

    B:   控制输入矩阵,对应opencv里kalman滤波器的controlMatrix矩阵

    U(k):k时刻对系统的控制量

    Z(k): k时刻的测量值

    H:   系统测量矩阵,对应opencv里kalman滤波器的measurementMatrix矩阵

    W(k):系统过程噪声,为高斯白噪声,协方差为Q,对应opencv里的kalman滤波器的processNoiseCov矩阵

    V(k): 测量噪声,也为高斯白噪声,协方差为R,对应opencv里的kalman滤波器的measurementNoiseCov矩阵

     第一部分:预测值的计算

    式(1):计算基于k-1时刻状态对k时刻系统状态的预测值

    X(k|k-1):    基于k-1时刻状态对k时刻状态的预测值,对应opencv里kalman滤波器的predict()输出,即statePre矩阵

    X(k-1|k-1):k-1时刻状态的最优结果,对应opencv里kalman滤波器的上一次状态的statePost矩阵

    U(k):    k时刻的系统控制量,无则为0

    A:  状态转移矩阵,对应opencv里kalman滤波器的transitionMatrix矩阵

    B:  控制输入矩阵,对应opencv里kalman滤波器的controlMatrix矩阵

    式(2):计算X(k|k-1)对应的协方差的预测值

    P(k|k-1):  基于k-1时刻的协方差计算k时刻协方差的预测值,对应opencv里kalman滤波器的errorCovPre矩阵

    P(k-1|k-1):k-1时刻协方差的最优结果,对应opencv里kalman滤波器的上一次状态的errorCovPost矩阵

    Q: 系统过程噪声协方差,对应opencv里kalman滤波器的processNoiseCov矩阵

    第二部分:

    式(3):增益的计算

    Kg(k):k时刻的kalman增益,为估计量的方差占总方差(估计量方差和测量方差)的比重,对应opencv里kalman滤波器的gain矩

    H: 系统测量矩阵,对应opencv里kalman滤波器的measurementMatrix矩阵

    R:测量噪声协方差,对应opencv里的kalman滤波器的measurementNoiseCov矩阵

    第三部分:

    式(4)--(5):k时刻的更新

    式(4):计算k时刻系统状态最优值

    X(k|k):k时刻系统状态的最优结果,对应opencv里kalman滤波器的k时刻状态的statePost矩阵

    Z(k):k时刻系统测量值

    式(5):计算k时刻系统最优结果对应的协方差

    P(k|k):k时刻系统最优结果对应的协方差,对应opencv里kalman滤波器的errorCovPost矩阵

    结果展示

     

    SIFT算法

    5.1 概述

    SIFT算法实现物体识别主要有三大工序:

    1.提取关键点

    2.对关键点附加详细的信息(特征向量)

    3.通过两方特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点

    特征向量的生成算法总共包括四步:

    1.检测尺度空间极值点,初步确定关键点位置和所在尺度。

    2.精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点,以增强匹配稳定性、提高抗噪声能力。

    3.为每个关键点指定方向参数,使算子具备旋转不变性。

    4.关键点描述子的生成,即生成SIFT特征向量。

    5.2 具体说明

    1.构建高斯模板

    2.高斯金字塔

    设输入图像经过s次卷积后可以得到高斯卷积函数为G(x,y,2σ) 的输出图像,所有从σ到2σ的图像构成一个组octave,每个octave 固定有s个平面。每一层Ip= G(x,y,ksσ)*I , s=1,2,…,p. 而kp=2在同一阶中相邻两层的尺度因子比例系数是k,则第1阶第2层的尺度因子是kσ, 然后其它层以此类推;

    第2阶的第1层由第一阶的中间层尺度图像进行降采样获得, 其尺度因子是k2σ,然后第2阶的第2层的尺度因子是第1层的k倍即k3σ;

    第3阶的第1层由第2阶的中间层尺度图像进行降采样获得。其它阶的构成以此类推。

    降采样时,高斯金字塔上一组图像的初始图像(底层图像)是由前一组图像的倒数第三张图像隔点采样得到的。

    3.构建高斯差分金字塔(通过高斯金字塔中相邻尺度空间函数相减获得)

    4.空间极值点检测

    在DOG尺度空间金字塔中,为了检测到DOG空间的最大值和最小值, DOG尺度空间中中间层(最底层和最顶层除外)的每个像素点需要跟同一层的相邻8个像素点以及它上一层和下一层的9个相邻像素点总共26个相邻像素点进行比较,以确保在尺度空间和二维图像空间都检测到局部极值。标记为叉号的像素若比相邻26个像素的DOG值都大或都小,则该点将作为一个局部极值点,记下它的位置和对应尺度。

    5.关键点定位

    检测到的极值点是离散空间的极值点,

    通过拟合三维二次函数来精确确定关键点的位置和尺度;

    由于DOG算子会产生较强的边缘响应还需去除低对比度的关键点和不稳定的边缘响应点,以增强匹配稳定性、提高抗噪声能力。

    关键点尺度: σ = σ0 * pow( 2.0, s/S)

    式中: σ为关键点的尺度,

    s 为关键点在高斯差分金字塔中所处于的层数

    S 为每组的层数

    6.关键点方向分配

    为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在DOG金字塔中检测出的关键点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。

    7.关键点特征描述

    SIFT描述子是关键点邻域高斯图像梯度统计结果的表示。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

    128维关键点描述子生成步骤

    ① 确定计算描述子的图像区域,计算关键点主方向

    描述子梯度方向直方图由关键点所在尺度的模糊图像计算产生。

    Lowe实验结果表明:描述子采用4×4×8=128维向量表征,综合效果最优(不变性与独特性)。

     种子点由8×8单元组成。每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值

    在4×4的窗口内计算8个方向的梯度方向直方图。绘制每个梯度方向的累加可形成一个种子点,一个关键点由4个种子点的信息组成。

    计算关键点周围的16*16的窗口中每一个像素的梯度,描述子使用在关键点尺度空间内4*4的窗口中计算8个方向的梯度信息,共4*4*8=128维向量表征。

    8.特征向量匹配

    首先进行相似性度量。

    所谓相似性度量是指用什么来确定待匹配特征之间的相似性,它通常是某种代价函数或者是距离函数的形式,一般采用各种距离函数作为特征的相似性度量,如欧氏距离、马氏距离等。

    其次消除错配。

    无论采用何种特征描述符和相似性判定度量,错配难以避免。这一步主要做的就是根据几何或光度的约束信息去除候选匹配点中的错配。一般利用RANSAC随机抽样一致性算法去除错误的匹配点对,得到最佳匹配点。通过对最佳匹配点的特征向量进行匹配,最后得到图像特征向量的匹配。

    9.关键点匹配

    分别对模板图(参考图,reference image)和实时图(观测图,observation image)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。

    5.3 结果展示

     

    粒子滤波

    6.1 基本理论

    粒子滤波通过非参数化的蒙特卡洛 (Monte Carlo) 模拟方法来实现递推贝叶斯滤波,适用 于任何能用状态空间模型描述的非线性系统,精度可以逼近最优估计。粒子滤波器具有简单、易于实现等特点,它为分析非线性动态系统提供了一种有效的解决方法,从而引起 目标跟踪、信号处理以及自动控制等领域的广泛关注。首先概述用于求解目标状态后验概率的贝叶斯滤波理论 随后介绍具有普遍适用性的粒子滤波器,最后针对当前粒子滤波器存在的粒子 多样性丧失问题,提出了一种量子进化粒子滤波算法。

     

    标准的粒子滤波算法流程为:

    蒙特卡洛方法一般可以归纳为以下三个步骤:

    构造概率模型。对于本身具有随机性质的问题,主要工作是正确地描述和模拟这个概 率过程。对于确定性问题,比如计算定积分、求解线性方程组、偏微分方程等问题,采 用蒙特卡洛方法求解需要事先构造一个人为的概率过程,将它的某些参量视为问题的解。

    从指定概率分布中采样。产生服从己知概率分布的随机变量是实现蒙特卡洛方法模拟 试验的关键步骤。

    建立各种估计量的估计。一般说来,构造出概率模型并能从中抽样后,便可进行现模 拟试验。随后,就要确定一个随机变量,将其作为待求解问题的解进行估计。

    6.2 结果展示

     

    opencv自带算法

    7.1 算法

            tracker = cv2.TrackerBoosting_create()

            tracker = cv2.TrackerMIL_create()

            tracker = cv2.TrackerKCF_create()

            tracker = cv2.TrackerTLD_create()

            tracker = cv2.TrackerMedianFlow_create()

            tracker = cv2.TrackerCSRT_create()

            tracker = cv2.TrackerMOSSE_create()

    Boosting是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。他可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器,在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的识别率。

    MIL算法基于boosting的思想,从M个特征对应的M个弱分类器中选择出K个弱分类器(对应K个特征,组成新的外观模型),然后组合成强分类器,并告诉我们在这个正样本袋里哪一个实例才是最正确的。

    在KCF的算法中,训练样本的生成都是基于循环矩阵形式来构建的,其中基样本为正样本,其他都是虚构出的负样本,这样的样本集具有很好的特性,可以很方便的利用快速傅里叶变换和傅里叶对角化的性质来进行计算,而不需要得知负样本的具体形式,算法将有关负样本的计算都转换到了频域进行求解。这样,采用了循环矩阵的性质对输入图像的搜索区域进行密集采样之后,使得进行跟踪器训练时缺少样本的问题迎刃而解。因此,整个KCF算法对跟踪器进行训练的目的就是利用生成的这些样本,生成一个滤波器,使得其作用于这些样本时会生成我们期望的分布形式

    TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间(long term tracking)跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。同时,通过一种改进的在线学习机制不断更新跟踪模块的“显著特征点”和检测模块的目标模型及相关参数,从而使得跟踪效果更加稳定、鲁棒、可靠。简单来说,TLD算法由三部分组成:跟踪模块、检测模块、学习模块

    MedianFlow算法属于TLD跟踪算法中的Tracking部分。。它基于LK光流跟踪算法,并使用FB(正向/反向评估点追踪质量的一种方法)、NCC交叉验证进行反馈。

    分类与回归树(classification and regression tree, CART)模型是应用广泛的决策树学习方法,同样由特征选择、树的生成和剪枝组成,既可以用于分类也可以用于回归。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支

    MOSSE算法的创新的在于,它是第一篇将相关滤波引入到目标跟踪的领域的论文。其思想是构造一个滤波模板 h,使用该模板与图像序列帧 f(f指的是输入图像中框定的目标区域,也称为目标窗口,并非整个图像帧)做卷积运算,根据得到的响应输出g来确定目标在新的一帧图像中的位置。

    7.2 结果展示

    按照上述顺序

     

     

     

     

     

     

     

    7.3 结果对比

    BOOSTING:算法原理类似于Haar cascades (AdaBoost),是一种很老的算法。这个算法速度慢并且不是很准。

    MIL:比BOOSTING准一点。

    KCF:速度比BOOSTING和MIL更快,与BOOSTING和MIL一样不能很好地处理遮挡问题。

    CSRT:比KCF更准一些,但是速度比KCF稍慢。

    MedianFlow:对于快速移动的目标和外形变化迅速的目标效果不好。

    TLD:会产生较多的false-positives。

    MOSSE:算法速度非常快,但是准确率比不上KCF和CSRT。在一些追求算法速度的场合很适用。

     

     

     

    展开全文
  • 基于DSP和FPGA的多目标跟踪系统,刘金凤,,为了解决空中多目标跟踪中数据存储量、运算量大与实时处理之间的矛盾,本文先采用适合硬件移植的自适应分割算法和自适应中小目标
  • 本文在深入分析实时成像跟踪系统发展现状和趋势的基础上,为了提高现有 实时成像跟踪系统实时性和跟踪精度...法的实时成像跟踪系统软硬件平台,实现了相应的目标跟踪算法,完成了对复杂 地面背景下的目标进行有效跟踪。
  • 一文详解目标跟踪中的相关滤波

    千次阅读 2021-06-09 00:30:15
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达本文来源:AI干货知识库/导读/目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事转播、安防监控和无人机、无人车、机器...
  • 日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 3.1. 目标追踪 ...多目标跟踪,即MOT(Multi-Object Tracking),也就是在一段视频中同时跟踪...
  • 目标跟踪综述

    千次阅读 2021-01-26 07:00:00
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达01目标跟踪简介目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事转播、安防监控和无人机、无人车、机器人等领域。下面是一...
  • Census立体匹配算法的硬件实现.pdf
  • 采用FPGA搭建图像处理系统,通过硬件算法实现图像的流水线及并行处理,实现了对具有特定颜色的物体的识别与跟踪。整个系统工作于像素频率,避免了算法的程序跑飞现象,使系统的可靠性大为提高,较好地保持了系统的低...
  • 摘 要:本文介绍了一种基于双TMS320VC5416处理器的实时图像搜索跟踪处理系统,详细阐述了该系统的硬件设计思想,并结合一种跟踪算法实例叙述了基于DSP的图像搜索与跟踪处理系统软件设计的一般流程。该系统是一种...
  • 概述: 本设计是基于英飞凌的四轴航拍平台。以英飞凌为控制核心,四轴飞行器为载体,辅以云台的航拍系统。硬件上由飞控电路,电源管理,通信模块,动力系统,机架,云台伺服系统组成。...四轴目标跟踪器PCB图展示:
  • TerrapinTracker 该项目( )的目标是开发一种轻巧,低功耗的跟踪器,该跟踪器可用于相对较小(> 200 g)的动物。 跟踪器的主要组件是用于... 我们希望该项目将发展成为一个对开放式硬件和软件开发以及跟踪动物的解
  • 在琳琅满目的视觉应用中,对车辆、行人、飞行器等快速移动的物体进行实时跟踪及...但要实现又快又准的持续跟踪,往往面临被检目标多、相互遮挡、图像扭曲变形、背景杂乱、视角差异大、目标小且运动速度快等产业难题。
  • 本文介绍了一种基于双TMS320VC5416处理器的实时图像搜索跟踪处理系统,详细阐述了该系统的硬件设计思想,并结合一种跟踪算法实例叙述了基于DSP的图像搜索与跟踪处理系统软件设计的一般流程。该系统是一种优良的图像...
  • 针对海上目标红外图像采集工作中硬件噪声与海面背景杂波带来的影响,以海上无人船视频导航避障系统为背景,对海上红外目标跟踪工作系统噪声进行分析,设计了一种相关去噪算法,完成了系统建模,并对参数进行了改进。...
  • 基于DSP和FPGA水下目标主动跟踪系统硬件设计
  • 这种技术不但可以进行目标跟踪,实施监视目标的行动路线,还可以预测目标的前进轨迹,这些都是传统的摄像监控系统不能做到的。这种定位系统从底层硬件到上层软件涉及到非常的技术,本文只针对无线定位部分的软硬件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,399
精华内容 33,759
关键字:

多目标跟踪硬件