位置: IT常识 - 正文

DeepSort目标跟踪算法(deepsort 跟踪)

编辑:rootadmin
DeepSort目标跟踪算法

推荐整理分享DeepSort目标跟踪算法(deepsort 跟踪),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:deepsort如何结合目标检测,deepsort目标跟踪流程图,transformer 目标跟踪,yolo和deepsort目标跟踪,yolo和deepsort目标跟踪,yolo和deepsort目标跟踪,deepsort目标跟踪算法,deepsort目标跟踪的教材,内容如对您有帮助,希望把文章链接给更多的朋友!

DeepSort目标跟踪算法是在Sort算法基础上改进的。 首先介绍一下Sort算法 Sort算法的核心便是卡尔曼滤波与匈牙利匹配算法 卡尔曼滤波是一种通过运动特征来预测目标运动轨迹的算法 其核心为五个公式,包含两个过程: 其分为先验估计(预测) 其中Xt-表示预测的位置状态,包含位置速度等信息,F为状态转移矩阵,描述前一帧如何影响该帧,ut-1为控制量,可认为是加速度B为控制矩阵,表示如何控制ut-1作用于当前状态。

P-为当前帧的预测协方差矩阵,是描述变化关系的,要知道,变量之间是有联系而非独立的,比如身高与体重存在关联,其维度取决于X变量有几个,比如在sort算法中,有(x,y,t,h,vx,vy,vr,vh)八个变量,那么其协方差阵即为8*8,该公式也是在变化的,Q代表噪声,其服从正态分布,表示随机进行抑制或增强,但总体全局来看是无影响的。

后验估计即更新(使用观测值来进行修正),我们知道,在目标检测跟踪中,无论是根据数学公式去推导得到的验证框,还是通过YOLO等检测器所得到的检测框(观测值)其都是有误差的,而更新过程便是要融合两个所得结果来确定一个更接近真实值的过程。 首先要计算Kk,其表示卡尔曼增益,实际上是一种权重,由科学家推导所得,我们也就不要去纠结了,其中R代表检测误差。

接下来便是当前帧的Xt,其表示我们的修正值,也是我们这一帧的一个预测的最终值,该公式表示根据上一帧的运行特征的预测与观测值的一个融合,权重值Kk表示我们应该更相信谁多一点,值得注意的是,当检测误差R=0时,可认为预测值等于观测值。

随后完成Xt的更新后便是更新Pt,这是我们要送入下一帧中使用的协方差阵。

其在Matlab中的实现:可以看到我们直接使用公式即可。 接下来便是ID匹配,使用的是匈牙利算法,其最早是用于二分图匹配中 二分图: 匈牙利算法是一个处理指派问题的算法,在这里可认为ID匹配 指派问题:n个人,n个任务,如何才能是任务完成时间最少,代价最小。 其完成的就是一个指派问题,具体实现过程我们不需要深究,在SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。 Sort算法流程图:

Sort算法总结

SORT是一个粗略的框架,核心就是两个算法:卡尔曼滤波和匈牙利匹配。

卡尔曼滤波:在图中被分为两个过程:预测和更新。预测过程:当一个小车经过移动后,且其初始定位和移动过程都是高斯分布时,则最终估计位置分布会更分散,即更不准确;更新过程:当一个小车经过传感器(也就是我们的Detections)观测定位,且其初始定位和观测都是高斯分布时,则观测后的位置分布会更集中,即更准确。但是由于我们得到的是一堆Track和一堆Detection,因此只有在用匈牙利算法进行分配后,才能把Track按照对应的Detection结果更新。

匈牙利算法:解决的是一个二分图分配问题(Assignment Problem),即如何分配使成本最小。在上图中是IOU Match那里,即基于IOU距离构造的成本矩阵对Detection和Track作匹配。 即每个检测框与预测框的IOU距离最小构成代价矩阵。 SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。具体算法步骤也很简单,是一个复杂度 的算法。

SORT的问题:ID-switch很高,即同一个人的ID会变化。这主要是由于该算法中的一帧不匹配删除机制及IOU 成本矩阵的问题。

DeepSort算法

Sort算法采用IOU加 权的匈牙利算法进行数据关联,用最小IOU作为代价矩阵。

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。DeepSORT运用的就是这个策略,DeepSORT对人群进行跟踪的结果即:每个bbox左上角的数字是用来标识某个人的唯一ID号。 从名字中就可以看出,DeepSort算法中应用了深度学习,其在原有sort算法的基础上使用了CNN网络来实现检测框表观特征的提取,通过将提取的表观特征与预测框(跟踪框)的表观特征技术余弦相似度来衡量两者之间的匹配度。

运动特征匹配DeepSort目标跟踪算法(deepsort 跟踪)

表观特征衡量

马氏距离虽然可以通过检测框和跟踪框的偏差以计算状态估计的不确定性,但仍存 在不足,由于实际跟踪环境复杂,目标运动不受控制,存在因遮挡而丢失目标或身份切 换的问题。因此,DeepSort算法中引入了针对表观特征匹配的余弦距离度量方式。 将表观特征与运动特征融合构造匈牙利算法的代价矩阵。

在DeepSORT中,匈牙利算法用来将前一帧中的跟踪框tracks与当前帧中的检测框detections进行关联,通过外观信息(appearance information)和马氏距离(Mahalanobis distance),或者IOU来计算代价矩阵。 将上述的表观匹配与运动特征匹配运用到匈牙利算法,并引入了级联匹配的概念:

级联匹配

目的:长时间遮挡中。卡尔曼滤波的prediction会发散,不确定性增加,而这样不确定性强的track的马氏距离反而更容易竞争到detection匹配。因此,需要按照遮挡时间n从小到大给track分配匹配的优先级。基于匈牙利算法。 输入为: 1、基于第k-1帧由卡尔曼滤波predict到的当前第k帧所有confirmed状态的track; 2、当前第k帧的所有detection 输出为: 1、match上的detection、track; 2、没有match上的track; 3、没有match上的detection。 具体过程:

#input:基于第k-1帧由卡尔曼滤波predict到的当前第k帧所有confirmed状态的track索引T={1,...,N},当前第k帧所有detections D={1,...,M},最大未匹配帧数Amax=301.用外观最小余弦距离和马氏距离计算成本矩阵C(实操中lambda=0,只会用到外观最小余弦距离)2.用外观最小余弦距离和马氏距离计算阈值矩阵B,用来滤掉不可能的匹配3.用空集初始化match上的集合M4.用D来初始化unmatch集合U5. for n 属于 {1,...,Amax} : #n是每个track未匹配帧数6. 从T中挑出一个子集Tn,即那些未匹配帧数=n的track的索引7. 用匈牙利算法 对上一步选出的子集Tn和D进行匹配8. 向M中添加匹配的序列号对(i,j),确保这个匹配满足阈值矩阵B(即bij=1) 9. 从未匹配索引集合U中删去匹配的序列号对(i,j)的j,确保这个匹配满足阈值矩阵B(即bij=1) 10. end 11. return M,U

级联匹配流程图里上半部分就是特征提取和相似度估计,也就是算这个分配问题的代价函数。主要由两部分组成:代表运动模型的马氏距离和代表外观模型的Re-ID特征。

级联匹配流程图里下半部分匈牙利算法数据关联作为流程的主体。为什么叫级联匹配,主要是它的匹配过程是一个循环。从missing age=0的轨迹(即每一帧都匹配上,没有丢失过的)到missing age=30的轨迹(即丢失轨迹的最大时间30帧)挨个的和检测结果进行匹配。也就是说,对于没有丢失过的轨迹赋予优先匹配的权利,而丢失的最久的轨迹最后匹配。

IOU匹配

IOU匹配是在级联匹配之后做的东西,从SORT中继承而来,用来解决突然的外观变换导致级联匹配难以match的情况,如部分遮挡等。也是基于匈牙利算法做的。

输入: 1、candidate track,包括: 1.1 级联匹配中剩下的unmatched,n=1的track; 1.2 基于第k-1帧由卡尔曼滤波predict到的当前第k帧所有unconfirmed状态(即tenative)的track; 2、级联匹配中剩下的unmatched detection 输出: 1、match上的detection、track; 2、没有match上的track; 3、没有match上的detection。 然后进行更新处理,包括:

1、卡尔曼滤波 update track在第k帧状态的均值和方差

2、是否有track需要转为confirmed(到本帧match上且已连续命中3帧)

3、是否有要删除的track,即n>Amax

4、对unmatched detections分配新的track ID,为unconfirmed态即tenative态。 三者关系:

DeepSort改进

特征提取网络OSNet,其为一种新颖的深度CNN,称为全方位网络( Omni-Scale Network,OSNet),用于ReID中的全方位特征学习。这是通过设计由多个卷积特征流组成的残差块来实现的,每个残差块都以一定比例检测特征。 重要的是,引入了一种新颖的统一汇聚门,以动态融合多尺度特征和与输入有关的通道权重。为了有效地学习空间通道相关性并避免过度拟合,构件块同时使用了点向和深度卷积。

OSNet,每个流关注的特征比例由指数决定,指数是一个新的尺寸因数,在整个流中线性增加,以确保在每个块中捕获各种比例。至关重要的是,通过统一汇聚门(AG)生成的通道权重将生成的多尺度特征图动态融合。AG是一个子网,可在所有流之间共享参数,并具有许多有效的模型训练所需属性。使用可训练的AG,生成的通道权重将取决于输入,因此实现了动态标度融合。

OSNet是一个轻量级的网络,它可带来以下好处: (1)轻量级网络具有更少的模型参数,不容易过拟合 (2)在大型监视应用程序中(例如,使用数千个摄像头的城市范围的监视),ReID的唯一实用方法是在摄像头端执行特征提取。 对于设备上的处理,小型ReID网络显然是首选。

OSBlock (bottleneck)

主要由多个轻量的3x3卷积,和AG组成,AG就是一个通道注意力,然后他们4个分支共享这个注意力网络 bottleneck只用来调整输入输出通道,图像大小没变。

class OSBlock(nn.Module): """Omni-scale feature learning block.""" def __init__( self, in_channels, out_channels, IN=False, bottleneck_reduction=4, **kwargs ): super(OSBlock, self).__init__() mid_channels = out_channels // bottleneck_reduction self.conv1 = Conv1x1(in_channels, mid_channels) self.conv2a = LightConv3x3(mid_channels, mid_channels) self.conv2b = nn.Sequential( LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), ) self.conv2c = nn.Sequential( LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), ) self.conv2d = nn.Sequential( LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), LightConv3x3(mid_channels, mid_channels), ) self.gate = ChannelGate(mid_channels) self.conv3 = Conv1x1Linear(mid_channels, out_channels) self.downsample = None if in_channels != out_channels: self.downsample = Conv1x1Linear(in_channels, out_channels) self.IN = None if IN: self.IN = nn.InstanceNorm2d(out_channels, affine=True) def forward(self, x):#torch.Size([1, 64, 64, 32]) identity = x x1 = self.conv1(x)#torch.Size([1, 64, 64, 32]) x2a = self.conv2a(x1)#torch.Size([1, 64, 64, 32]) x2b = self.conv2b(x1) x2c = self.conv2c(x1) x2d = self.conv2d(x1)#torch.Size([1, 64, 64, 32]) x2 = self.gate(x2a) + self.gate(x2b) + self.gate(x2c) + self.gate(x2d) x3 = self.conv3(x2)#torch.Size([1, 256, 64, 32]) if self.downsample is not None: identity = self.downsample(identity) out = x3 + identity if self.IN is not None: out = self.IN(out) return F.relu(out)OSNet

左图就是bottleneck,注意右图中conv2,3,4,5只负责通道上的变化,transition负责图像大小的变化 OSnet一共有5层[conv1], [conv2,transition], [conv3,transition], conv4, conv5

本文链接地址:https://www.jiuchutong.com/zhishi/300010.html 转载请保留说明!

上一篇:这可能是最好、最详细的VSCode开发uni-app教程吧(这可能是最好的144平米小平层户型)

下一篇:Bilateral Filters(双边滤波算法)的超简单原理,学不会你打我。

  • 智能网络电视机如何安装系统(智能网络电视)(智能网络电视机顶盒)

    智能网络电视机如何安装系统(智能网络电视)(智能网络电视机顶盒)

  • 怎么把电脑屏幕调暗一点(怎么把电脑屏幕恢复原来的样子)

    怎么把电脑屏幕调暗一点(怎么把电脑屏幕恢复原来的样子)

  • 腾讯付费电影怎么赠送给朋友看(腾讯付费电影怎么拉别人一起看)

    腾讯付费电影怎么赠送给朋友看(腾讯付费电影怎么拉别人一起看)

  • 抖音商品橱窗的销量怎么算的(抖音商品橱窗的视频怎么拍?)

    抖音商品橱窗的销量怎么算的(抖音商品橱窗的视频怎么拍?)

  • qq音乐可以赠送单曲吗(qq音乐可以赠送会员吗)

    qq音乐可以赠送单曲吗(qq音乐可以赠送会员吗)

  • ipod丢了有定位吗(ipod耳机丢了一只怎么办)

    ipod丢了有定位吗(ipod耳机丢了一只怎么办)

  • wptx64能卸载吗

    wptx64能卸载吗

  • 抖音小店现在有多少粉丝可以开(抖音小店现在有优势吗)

    抖音小店现在有多少粉丝可以开(抖音小店现在有优势吗)

  • mivideo文件夹可以删除吗(miguvideo是什么文件夹)

    mivideo文件夹可以删除吗(miguvideo是什么文件夹)

  • 我的红包记录怎么查(我的红包记录怎么删除不了)

    我的红包记录怎么查(我的红包记录怎么删除不了)

  • 快手网名怎么改不了显示已被注册(快手网名怎么改成快手用户)

    快手网名怎么改不了显示已被注册(快手网名怎么改成快手用户)

  • 小米手机私密相册照片怎么没有了(小米手机私密相册文件夹路径)

    小米手机私密相册照片怎么没有了(小米手机私密相册文件夹路径)

  • 手机屏幕一会失灵一会能用(手机屏幕一会失灵一会能用怎么办)

    手机屏幕一会失灵一会能用(手机屏幕一会失灵一会能用怎么办)

  • 苹果6s关机后开机显示无法激活(苹果6p关机后开不起来)

    苹果6s关机后开机显示无法激活(苹果6p关机后开不起来)

  • 大众点评和美团的区别(大众点评和美团评价互通吗)

    大众点评和美团的区别(大众点评和美团评价互通吗)

  • airpods pro丢了能定位吗(airpodspro丢了能找回来吗)

    airpods pro丢了能定位吗(airpodspro丢了能找回来吗)

  • 苹果8可以反向充电吗(苹果8反向充电)

    苹果8可以反向充电吗(苹果8反向充电)

  • 怎么限制别人登录我的淘宝(怎么限制别人登录自己的微信)

    怎么限制别人登录我的淘宝(怎么限制别人登录自己的微信)

  • word竖排文字居中并列(word竖排文字居中设置)

    word竖排文字居中并列(word竖排文字居中设置)

  • 联想笔记本vt开启教程(联想笔记本vt开启不了)

    联想笔记本vt开启教程(联想笔记本vt开启不了)

  • 苹果蓝牙耳机去哪里修(苹果蓝牙耳机去哪里买好)

    苹果蓝牙耳机去哪里修(苹果蓝牙耳机去哪里买好)

  • 苹果7可以用airpods吗(苹果7可以用airpods二代吗)

    苹果7可以用airpods吗(苹果7可以用airpods二代吗)

  • 华为ele一al00是什么型号(华为ELE一AL00是几寸的)

    华为ele一al00是什么型号(华为ELE一AL00是几寸的)

  • 金税盘服务费全额抵扣
  • 暂估入库后怎么冲回
  • 购销金额多少的情况下必须需要签合同?
  • 电梯广告租赁属于哪类
  • 注销实收资本账务处理
  • 一般纳税人工会经费返还政策
  • 建筑业机械设备是指什么
  • 税法免抵退计算例题
  • 增值税专用发票和普通发票的区别
  • 参与工会职工应享受哪些福利待遇
  • 设备税款
  • 应交税金在贷方怎么调
  • 双软企业资质
  • 物业费纳税
  • 一卡通充值计入什么费
  • 小规模减半征收印花税的政策
  • 辅助生产费用的归集
  • 专票电话写错了怎么办
  • 手机网速测试怎么看多少兆网
  • 企业之间的违约金进什么科目
  • 处理废料的会计分录
  • 融资租赁税费计算
  • gnu/linux
  • 两名山地车骑手死亡
  • ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
  • php如何提高程序运行效率
  • laravel实战教程
  • vue中v-model
  • 销售费用凭证
  • 差旅费报销会议记录
  • 资产负债表应收账款怎么计算
  • 浏览器本地存储的方式
  • 人脸口罩检测系统
  • react生命周期详解
  • lpstat命令
  • 一般纳税人内账可以不提税吗
  • 来料加工企业的划分标准
  • 年底应交增值税借方余额怎么处理
  • 递延所得税资产借贷方向
  • 会计实操和实际工作一样吗
  • 企业所得税年报截止日期2023
  • 前端面试题汇总.pdf
  • for循环语法结构是什么
  • 销售不动产差额征税可以开专票吗
  • python计算集合交集并集个数
  • 哪些收入需要缴纳个人所得税
  • 外经证开错作废要带些什么
  • 营业执照是如何年审的
  • sqlserver强制转换为字符
  • access数据库丢失原因
  • 企业哪些进项税抵扣
  • 建筑公司包工包料提供建筑服务
  • 什么是存货周转期间
  • 物流报关什么意思
  • 开专票还要另外再交钱么
  • 公司私账银行流水
  • 财务费用利息收入的账务处理
  • 母公司代发子公司工资,子公司申报个税
  • 红字更正法红字冲销法
  • 销售方开红字发票需要什么信息
  • 免税收入和征税收入怎么做账
  • 企业对私账户合法吗
  • 明细账的设置与登记
  • win10应用商店应用少
  • win2003回收站
  • 快速切换用户是什么意思
  • 清华同方bios通用密码(thtfpc)
  • centos 安装
  • win10怎么将桌面图标变小
  • unity de
  • dos脚本 菜鸟教程
  • cocos2dx3.0的label字体去描边
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • 新浪微博随时随地
  • shell脚本转码
  • 脚本添加crontab
  • 命令如下
  • Python网络爬虫出现text没有属性怎么办
  • 如何查询自己公司的对公账号
  • 电子发票和普通发票哪个好
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设