目标跟踪之ECO代码运行及原理简介

2023-05-16

论文地址:https://arxiv.org/pdf/1611.09224.pdf
代码地址:https://github.com/martin-danelljan/ECO
ECO:(Efficient Convolution Operators for Tracking)是CVPR2017的一篇基于相关滤波的文章,本文主要对其matlab版本配置运行进行介绍,并简要分析其跟踪原理,分享自己的一些心得。

一、matlab代码运行

1、matconvnet下载

下载地址: https://github.com/vlfeat/matconvnet
下载后放置到external_libs/matconvnet/目录下
在这里插入图片描述

2、PDollar Toolbox下载

下载地址:https://github.com/pdollar/toolbox
下载后放置在external_libs/pdollar_toolbox/目录下
在这里插入图片描述

3、预训练模型imagenet-vgg-m-2048.mat下载

下载地址:https://www.vlfeat.org/matconvnet/pretrained/
在这里插入图片描述
如果点击出现乱码,无法下载,建议换个浏览器下载
在feature_extraction/目录下新建文件夹networks,并将下载的网络放置底下
在这里插入图片描述

4、运行install.m

如果是第一次在matlab运行matconvnet可能会比较麻烦点,CPU版本运行详解步骤可以参考我的上一篇博客CCOT代码运行,如果是GPU版本运行可以参考我的另一篇博客SiameseFC的运行两者是一样的流程。如果不想装visual studio,也可以参考这篇博客
运行成功显示如下
在这里插入图片描述

5、跟踪

作者给了好几个版本,都可以查看效果

  1. demo_ECO----CPU版本
  2. demo_ECO_gpu----GPU版本
  3. demo_ECO_HC----不使用CNN特征,只使用HOG+CN

三者跟踪速度差距较大,在我的matlab上跟踪速度如下:
在这里插入图片描述
跟踪效果如下
在这里插入图片描述

二、ECO算法简介

ECO是在CCOT的基础上进行改进的,两者也是出自同一作者,ECO主要是作者为解决CCOT过拟合、速度慢等问题进行的改进。

2.1背景

基于相关滤波的目标跟踪可以说是这几年的一个重要分支。为提高其跟踪的精度和鲁棒性,人们普遍采用1、多维度特征;2、目标尺寸预测;3、非线性核;4、对前几帧模型的存储;5、复杂的学习模型和6、减少边缘效应等手段,但这些方法都是以牺牲跟踪速度为前提的。
这些手段虽然提高了精度和跟踪鲁棒,但也带来了过拟合的风险。
为什么会过拟合?
目标跟踪通过第一帧来训练模型,训练数据相当有限,可是为了提高跟踪性能,滤波器模板越来越复杂(尤其是深度特征,数据量相当庞大),想利用有限的训练数据形成庞大复杂的训练模型,过分的训练少量的数据,导致复杂模型存在过拟合(以CCOT算法为例,每次更新模型需要改变800,000个参数)
总结起来,影响相关滤波速度的主要有
1、滤波器模型越来越大,不仅给计算带来负担,而且容易引起过拟合。
2、训练集越来越大,训练集主要用于保存之前每一帧的跟踪结果,所以每一次更新滤波器模型时,都要用到之前的样本,那么随着跟踪的进行,训练集保存的样本将越来越多,这明显不实际。一般都是丢弃老的样本,保存新的样本,但这种取舍导致模型更新过于依赖最近几帧目标的外观形状,但出现遮挡等现象,可能会污染模型,导致失败
3、模型更新策略,每帧更新模型不仅耗时,而且容易过拟合

2.2本文的三个贡献

本文主要是提出三个核心点,并解决了三个问题
1、Factorized Convolution Operator–特征的删减
先简要分析一下CCOT,CCOT的核心贡献在于将离散的feature map插值到连续域,解决了不同feature map的尺寸问题。
对离散feature map输入进行插值
在这里插入图片描述
b d {b_{d}} bd实际是一个sinc函数
x d [ n ] x^{d}[n] xd[n]第d维特征对应的离散输入
N d N^{d} Nd离散输入的数量,或者可以理解为feature map的分辨率
J d J^{d} Jd插值结果,第d维对应的连续的feature map
滤波器模型预测结果:
在这里插入图片描述
损失函数(共有M个训练样本)
在这里插入图片描述
变换到频域
在这里插入图片描述
对滤波器f求导,解的
在这里插入图片描述
A A A:块对角矩阵,实际就是训练样本组成的矩阵,每个对角块代表一个样本
Γ \Gamma Γ:包含每个训练样本权重 α j \alpha _{j} αj的矩阵
通过Conjugate Gradient(共轭梯度)迭代计算出使损失函数最小的 f ^ \hat{f} f^
CCOT在特征提取方面相当全面CNN+CN+HOG的组合使得其性能相当出色,但作者很快发现CCOT存在大量的过拟合,如下图
在这里插入图片描述
因此,ECO中,作者第一个贡献就是对CCOT特征提取的简化,对于CCOT,每一维特征都对应一个特定的滤波器,但通过观察可以发现,CCOT用到的滤波器很稀疏,如下图所示,绝大部分滤波器对跟踪定位没有帮助却占用计算时间,所以Factorized Convolution Operator就是为了保留对定位有重要贡献的滤波器。
在这里插入图片描述
具体步骤:
主要是引入一个常数矩阵P(尺寸为D×C),该矩阵的作用在于将高维特征进行删减,原来共有D维特征,加入P后只剩下C维(P对滤波器数量的删减可以理解为对提取特征维度的删减,因为一个滤波器对应一个特征)。
预测结果:
在这里插入图片描述
损失函数在频域中表现为:
在这里插入图片描述
这是一个非线性最小二乘问题,相比于CCOT,作者不仅用了Conjugate Gradient(共轭梯度),还引入高斯牛顿来对矩阵P,滤波器 f ^ \hat{f} f^进行展开
在这里插入图片描述
其中
在这里插入图片描述
其中高斯牛顿迭代了10次,共轭梯度迭代了20次,具体原理不明白可以不深究。
第一个贡献的效果:明显降低了滤波器的维度数量
在这里插入图片描述
2、Generative Sample Space Model----保持样本的多样性并减少其数量
这一贡献主要是针对训练集进行改进,正如上文所提,训练集数量庞大,而且简单的舍弃老样本(如下图的第二行Baseline所示)导致滤波器模型过于依赖最近几帧的目标外观模型,且存在大量冗余。
在这里插入图片描述
为此作者通过样本x和预期目标输出y的联合概率分布p(x,y),将目标函数完善为
在这里插入图片描述
原始的损失函数(公式3)只不过是 p ( x , y ) = ∑ j = 1 M α j δ x j , y j ( x , y ) p(x,y)=\sum_{j=1}^{M} \alpha _{j} \delta _{x_{j},y_{j}}(x,y) p(x,y)=j=1Mαjδxj,yj(x,y)的一个特例,另外预期目标输出y其实形状一致,只不过峰值位置发生平移,所以作者将y设置成一样,而峰值位置的平移放入x中进行考虑。所以只需要考虑p(x),此处引入高斯混合建模(GMM)

高斯混合模型,英文全称:​​Gaussian mixture model,简称GMM。高斯混合模型就是用高斯概率密度函数(二维时也称为:正态分布曲线)精确的量化事物,将一个事物分解为若干基于高斯概率密度函数行程的模型
高斯混合模型也​被视为一种聚类方法,是机器学习中对“无标签数据”进行训练得到的分类结果。其分类结果由概率表示,概率大者,则认为属于这一类。

对GMM模型的理解
类似于傅里叶变换,自然界任何复杂曲线都可以用无数个不同形状sin和cos曲线组成,高斯函数也是如此(如下图,摘自博客),只要数量够多,高斯函数可以表征任意复杂的曲线,换成高维空间也是一个道理。
在这里插入图片描述

总结一句话,通过多个不同形状的高斯函数(component对应上图中蓝色的单一高斯曲线),可以拟合任意曲线(GMM模型对应上图中红色的高斯叠加曲线)。

训练集采集样本步骤:

  1. 每来一帧新图片,使用 π m = γ \pi_{m}=\gamma πm=γ μ m = x j \mu_{m}=x_{j} μm=xj(训练样本输入)来初始化一个新component m
  2. 如果此时component的数量超过L(事先设定的值),开始简化GMM模型,反之,直接进行保存
  3. 简化GMM,比较GMM各个components的 μ m \mu_{m} μm,根据两者之间的距离 ∣ ∣ μ k − μ l ||\mu_{k}-\mu_{l} μkμl,找出距离最近的两个components,并将其合为一个component,该component的 μ \mu μ π \pi π由下可计算得
    在这里插入图片描述
  4. 持续更新,直到M个训练样本都结束完

损失函数为
在这里插入图片描述
相比原来的损失函数,滤波器由M减为L(文中L=M/8)
3、Model Update Strategy----每6帧更新一次模型
模型更新没什么难理解,每隔 N s = 6 N_{s}=6 Ns=6更新一次。
但这里有的需要注意得,那就是训练集样本component仍然是每帧更新的,但是GMM模型是每 N s N_{s} Ns更新一次

2.3跟踪效果

相比于CCOT,其精度更佳,速度更快,三个贡献都相当有效
在这里插入图片描述
参考博客
深度理解高斯混合模型(GMM)
目标跟踪算法二:ECO: Efficient Convolution Operators for Tracking(2016年11月)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标跟踪之ECO代码运行及原理简介 的相关文章

  • unsigned char* (uchar*) 转为QImage

    场景 xff1a 有一副图像 xff0c 事先已经因为各种需要被读取到了内存中 xff0c 且不可再根据路径读取 xff0c 只能读取内存中的数据转为QImage 百度过好久 xff0c 没有一个帖子说的特别详细 xff0c 解释的特别清楚
  • 卷积的含义-详解

    原文链接 xff1a 点击此处看知乎原文 最近需要用到卷积对图像进行处理 xff0c 不明白卷积的含义 xff0c 找资料的时候在知乎找到一个很优秀的评论 xff0c 特此记录一下 以下内容来自于原文复制 xff1a 对卷积的困惑 卷积这个
  • 图像处理-直方图均衡化(C++实现,不依赖opencv)

    近来接触图像处理领域 xff0c opencv入门之后 xff0c 想自己动手实现一些算法 xff0c 先从直方图均衡化开始吧 xff01 我使用的图像文件是只包含数据yuv格式图像 xff0c 以后等需要的时候再处理从普通格式 xff08
  • 图像处理-Sobel边缘检测(C++实现,不依赖opencv)

    边缘检测一直是图像处理中比较热门的一块 xff0c 今天简单实现了下sobel算法 先上图 xff1a 原图 xff1a Sobel处理 彩图 xff1a Sobel处理 灰度图 xff1a 可以看到在不复杂的情况下 xff0c Sobel
  • 图像处理-高斯滤波和升级版Side Window版高斯滤波(C++实现,无需opencv)

    图像处理绕不开的一个环节就是去燥 xff0c 去掉各式各样的噪声来保证图像的质量 今天将高斯滤波实现了下 xff0c 在此稍作记录 以往惯例 xff0c 先上图 xff1a 原图 xff1a 高斯滤波 xff1a Side Window版高
  • Linux下,使用nginx+ffmpeg+video.js实现直播效果(含centos7环境配置步骤)

    前言 近来因为项目需要 xff0c 需要做一个把视频解码然后推流 xff0c 在浏览器播放的功能 然后查资料 找demo xff0c 最终决定使用FFmpeg 43 nginx来完成相应功能 xff0c 过程颇为心酸 xff0c 在此做下笔
  • 使用QMap保存数据时,若出现相同的键,可以在不改变原有的变量存储选型基础上,使用insertMulti函数来解决

    场景 问题发生场景解决办法方案一方案二方案三 xff08 重点 xff09 针对方案三的示例 问题发生场景 本来项目中选型选择的是QMap来存储相应的键值对 xff0c 根据Map中的键的顺序取出对应的值 但是在使用的过程中 xff0c 发
  • C语言,声明和实现放在头文件中

    将头文件和实现放在同一个文件中 普通函数与静态函数是有区别的 静态函数 xff1a static h ifndef CRND INCLUDE CRND H define CRND INCLUDE CRND H static int pore
  • C++的编译过程详解

    C C 43 43 编译过程 C C 43 43 编译过程主要分为4个过程 编译预处理编译 优化阶段汇编过程链接程序 一 编译预处理 xff08 1 xff09 宏定义指令 xff0c 如 define Name TokenString x
  • BA(Basic authentication)认证实践

    1 概念介绍 Basic authentication xff1a 是一种最简单的对Web资源进行访问控制的方法 xff0c 属应用层的安全保障手段 常用的签名算法有 xff1a base64 HmacSHA1 1 xff09 优点 xff
  • 累加校验和C语言实现

    发送方 xff1a 对要数据累加 xff0c 得到一个数据和 xff0c 对和求反 xff0c 即得到我们的校验值 然后把要发的数据和这个校验值一起发送给接收方 接收方 xff1a 对接收的数据 包括校验和 进行累加 xff0c 如果得到0
  • C++项目工程在Linux环境开发、部署和运行问题

    背景 当我们自己开发的项目程序需要在linux上进行部署 调试时 xff0c 项目代码完整拷贝过去之后 xff0c 直接运行我们自己的可执行程序 xff0c 往往提示找不到所相关的 so库 xff0c 会报错 这是因为 xff0c 系统只会
  • Jetson Xavier NX上安装ROS、Cartographer、基于D435i的Yolov5+TensorRT7的流程及问题解决

    主要记录下自己在Jetson Xavier NX上运行ROS Cartographer 基于D435i的Yolov5 43 TensorRT的系统环境配置流程 xff0c 经过了无数次在ARM上的安装 xff0c 这次是最流畅的一次环境配置
  • 计算机进制转换:二进制、八进制、十进制、十六进制

    一 什么是进制 在生活中 xff0c 我们通常都是使用阿拉伯数字计数的 xff0c 也就是10进制 xff0c 以10为单位 xff0c 遇10进一 xff0c 所以是由0 xff0c 1 xff0c 2 3 4 5 6 7 8 9组成的
  • 摘要认证,使用HttpClient实现HTTP digest authentication

    文章目录 前言一 四个过程二 过程细节三 HttpClient 代码示例 前言 今天工作需要做了摘要认证 xff08 digest authentication xff09 xff0c 下面就工作中遇到的问题及过程做一个总结 一 四个过程
  • C语言之带参数的宏

    这两天在学习C语言 xff0c 发现宏定义挺有意思 xff0c 可以减少代码量 带参宏定义 的一般形式为 define 宏 名 形参表 字符串 带参宏调用 的一般形式为 xff1a 宏 名 实参表 xff1b define M X Y X
  • visual studio升级

    visual studio升级 概述升级步骤温馨提示 概述 有时处于开发要求或者安全要求 xff0c 需要将visual studio升级到最新的版本 本篇文章记录一下如何升级 升级步骤 1 找到visual studio的安装路径下的安装
  • STL中那些好用的东西!(持续更新)

    一 数据结构部分 1 set amp map xff08 后续持续更新 xff09 2 queue xff08 priority queue xff09 queue lt int gt a 定义 a push i 压入 a pop 弹出 a
  • 工业机器人虚拟仿真设计

  • HTTP详解

    一 什么是HTTP xff1f HTTP xff08 HyperText Transfer Protocol xff0c 超文本传输协议 xff09 是一个简单的请求 响应协议 xff0c 它通常运行在TCP之上 xff08 应用层 xff

随机推荐

  • android练习之为 TextView 添加监听器 ,添加后退按钮 ,从按钮到图标按钮

    为 TextView 添加监听器 NEXT按钮不错 xff0c 但如果用户单击应用的TextView文字区域 xff08 地理知识问题 xff09 xff0c 也可以跳转 到下一道题 xff0c 用户体验会更好 添加后退按钮 为GeoQui
  • ORA-01918: 用户 'SCOTT' 不存在 解决方法

    SQL gt alter user scott account unlock alter user scott account unlock 第 1 行出现错误 ORA 01918 用户 SCOTT 不存在 找到scott sql 文件 S
  • idea 里form表单action提交servlet文件出现报错

    由于在action的字符串中加了空格 xff0c 导致于于url pattern不匹配 xff0c 所以报错
  • 数据结构——二维数组

    二维数组可以理解为数组的数组 二维数组组织为矩阵 xff0c 可以表示为行和列的集合 但是 xff0c 创建二维数组以实现关系数据库外观相似的数据结构 它提供了一次容纳大量数据的便利性 xff0c 可以在任何需要的地方传递给任意数量的功能
  • 数据结构——链表

    链表是一种随机存储在内存中的节点的对象集 节点包括两个字段 xff0c 即存储在该地址的数据和包含下一节点地址的指针 链表的最后一个节点包含指向null的指针 1 链表的用途 链表不需要连续存在于存储器中 节点可以是存储器中任何位置并链接在
  • 多线程学习笔记--第一章 多线程技能(1)

    1 什么是进程 xff1f 进程是操作系统结构的基础 xff0c 是一次程序的执行 xff1b 是一个程序及其数据在处理机上顺序执行时所发生的活动 xff1b 是程序在一个数据集合上运行的过程 xff0c 它是系统进行资源分配和调度的一个独
  • 多线程学习笔记--第一章 多线程技能(2)

    1 currentThread方法 该方法返回代码段正在被哪个线程调用的信息 2 isAlive方法 判断当前线程是否处于活动状态 活动状态是线程已经启动且尚未终止 线程处于运行或准备开始运行的状态 如果将线程对象以构造参数的方式传递给Th
  • Qt编程过程中若给定一些数,把它们四舍五入后,保留两位小数

    double类型的数进行四舍五入后保留两位小数 场景实现方式方法一 方法二总结 场景 开发的过程中需要显示一些double类型的数 xff0c 但是又不能直接显示 xff0c 需要四舍五入之后保留两位小数 如 xff1a 0 124567
  • C语言中,头文件、源文件和库文件的关系(转)

    初学c xff0c 一直搞不懂几个概念 xff0c 偶然看到一篇比较好的文章 xff0c 转载一下 xff0c 原文https blog csdn net xhbxhbsq article details 78955216 一下是原文内容
  • 串口是怎样传输数据的

    概述 通过逻辑分析仪捕捉串口传输的数据来了解串口传输数据的实质 串行接口简称为串口 xff0c 串行接口 xff08 Serial Interface xff09 是指数据一位一位地顺序传送 实现双向通信就需要一对传输线 xff0c 即TX
  • 精准时空:让人工智能更智能

    如今科技界 产业界最热门的关键词是什么 xff1f 各地方政府给出了明确的答案 人工智能 8月的最后一周 xff0c 重庆 上海两大直辖市 xff0c 争先恐后地举办了以智能为主题的大会 精准时空能力 xff0c 作为机器智能的基础数据 x
  • 关于FindCM厘米级定位,这6个问题的答案你需要知道

    面对越来越复杂的应用场景 xff0c 单一的FindCM xff08 千寻知寸 xff09 产品 xff0c 已经无法满足不同行业客户的差异化需求 近日 xff0c 千寻位置完成FindCM产品分级 xff0c 推出了面向不同行业和应用场景
  • 千寻位置如何满足自动驾驶“刚需”

    自动驾驶 xff0c 本质是汽车产业的升级 自动驾驶技术在5G 人工智能和汽车行业的飞速发展下 xff0c 成为业界焦点 目前 xff0c 通用 一汽 广汽 北汽 吉利 长安等国内外主流车企都在进行自动驾驶技术研发 xff0c 而他们正在使
  • 自动驾驶汽车为什么需要高精度定位?干货都在这里

    2019年5月7日 xff0c 曾作为主PM驱动凯迪拉克 Jeep全系 福特全系车型Sync3导航产品研发 xff0c 现任千寻位置车端高精度定位解决方案经理的宋子未 xff0c 讲授了主题为 自动驾驶汽车为什么需要高精度定位 xff1f
  • GNSS增强定位技术发展与星地融合应用

    引言 xff1a 你能想象吗 xff1f 除了手机和汽车 xff0c 现在连安全帽 道路锥筒 xff0c 甚至跑鞋都需要定位 随着移动物联网的快速发展 xff0c 国民经济各个领域都对更高精度的定位能力产生迫切需求 同时 xff0c 市场也
  • 基于Android系统的高精度定位SDK方案

    最新数据显示 xff0c 全球平均每3人就拥有一台Android xff08 安卓 xff09 系统设备 xff0c 其总数已经超过25亿台 丰富多样的Android设备在改变人们的生活同时 xff0c 也被赋予更多期望 xff0c 是否能
  • Ubuntu 修改 apt 源为阿里云源

    文章目录 软件源 Software Source使用说明图形界面 xff08 新手推荐 xff09 手动修改配置文件 相关链接 软件源 Software Source 软件源是指用于存储各种 Linux 应用程序的存储库 xff0c 包括自
  • (已解决)rplidar_ros 报错:Operation Time Out

    按照wiki装rplidar ros的时候 xff1a https github com robopeak rplidar ros wiki 运行 xff1a roslaunch rplidar ros view rplidar launc
  • CNN学习(四)----SiameseFC代码运行Matlab2018a+vs2015+cuda9.0

    由于siameseFC运行需要调用GPU xff0c 即需要安装CUDA和visual studio xff0c CUDA安装可以参考的我的上一篇博客 若是要运行tensorflow版本 xff0c 可以参考这篇博客 一 失败经验 先介绍一
  • 目标跟踪之ECO代码运行及原理简介

    论文地址 xff1a https arxiv org pdf 1611 09224 pdf 代码地址 xff1a https github com martin danelljan ECO ECO xff08 Efficient Convo