【目标跟踪】解决多目标跟踪遮挡问题

文章目录

  • 前言
  • 一、判定遮挡目标
  • 二、扩展目标框
  • 三、结论

前言

  1. 目标跟踪在发生遮挡时,极其容易发生Id Switch。
  2. 网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。
  3. 博主为了解决跟踪遮挡,翻阅大量论文。分享其中一篇论文。论文链接:https://arxiv.org/abs/2103.04147
  4. 论文介绍了一种思路,但是未提供代码,博主根据论文思路编写了相关代码。验证后发现,效果好得出乎意料。
  5. 阅读本文需要一定跟踪的基础。如果是新手建议先阅读博主往期博客【目标跟踪】多目标跟踪测距:https://blog.csdn.net/qq_49560248/article/details/134016802

一、判定遮挡目标

要处理遮挡问题,我们先明确什么是遮挡目标,方便与我们后面针对性处理。

  1. 目标未与新检测目标匹配,此时的目标是预测的目标没有与新检测的目标匹配上。
  2. 存在其他目标,在相机与遮挡目标中间

当同时符合上述两个条件时,会判定为遮挡目标

在这里插入图片描述

为了判定是否为遮挡目标,我们定义了两个关键的量。

  1. Ci 目标 i 遮挡置信度
  2. CPi 目标 i 被覆盖的比例

在这里插入图片描述
Ci = min(1, a * (Age / t) * (Ai / Aavg))

a:可调参数,可以默认为1

Age:id 起始帧到当前帧的帧数。如 id 在第 2 帧首次出现,当前第 10 帧还存在,那么 Age = 8

t: 从上一次更新起 连续预测次数。如 目标 i 在第 1 帧匹配了,在第 2 帧未匹配,此时 t = 1,在第 3 帧 匹配上,此时 t = 0。如果是匹配上的目标,不在我们遮挡目标讨论范围内,就不会进入计算 Ci 范围内。

Ai: 目标 i box的面积 box.width * box.height

Aavg: 当前帧所有目标 box 的平均面积

在这里插入图片描述

CPi = I(bbi, bbj) / A(bbi)

I(bbi, bbj): 目标 i box 与 目标 j box 的交集

A(bbi): 目标 i box 面积

当 Ci 大于设定值,同时 CPi 大于设定值,则此时目标判定为遮挡目标

for (auto umt:unMatch) {// 目标置信度 Cicv::Rect_<float> trackerBox = trackers[umt].kBox.GetState();float confidence = (trackers[umt].kBox.mAge / trackers[umt].kBox.mTimeSinceUpdate) * GetBoxArea(trackerBox) / boxAvg;float maxCoverPercent = 0;for (int i = 0; i < detNum; i++) {float percent = GetCoverPercent(trackerBox, deData[i].box);    // 覆盖百分比if (percent > maxCoverPercent) {maxCoverPercent = percent;}}/* 当 跟踪目标置信度>mTrackConfidence和覆盖百分比>mCoverPercent时, 标记为遮挡目标此时计算扩展目标框 */if (confidence > mTrackConfidence && maxCoverPercent > mCoverPercent) {trackers[umt].whetherCover = true;trackers[umt].kBox.kf.statePost.at<float>(7, 0) = trackers[umt].kBox.kf.statePost.at<float>(7, 0) / 2; // 遮挡目标速率减半continue;} 

注:代码中有一行遮挡目标面积速率减半,是因为目标在遮挡时那一帧,目标 box 面积会急速变小,除以 2 是为了补偿这个速率。实际效果算是锦上添花。


二、扩展目标框

当目标判定为遮挡目标时,我们才会计算该目标的扩展框

扩展IOU的计算公式

在这里插入图片描述

回顾下传统 IOU 计算公式

在这里插入图片描述

上述 IOUext 与 IOU 计算 差别 就在于 bbextT(扩展目标框)

现在问题是 bbextT 如何计算呢?

在这里插入图片描述

观察红色框与虚线框,红色框是卡尔曼预测框,虚线框就是我们的扩展目标框

当预测的帧数+1,则此时扩展目标框会有一定比例的扩大。由于论文仅仅提供思路,没有说明具体数值,代码也未提供。我是根据实际的数据调试。

if (pBox.whetherCover == true) {// 如果是遮挡目标, 预测框需要保存扩展框float ePixe = pBox.box.width * boxExpandScale * (*it).kBox.mTimeSinceUpdate;  // boxExpandScale设定的 0.2pBox.expansionBox = pBox.box + cv::Point_<float>(-ePixe, -ePixe) + cv::Size_<float>(2 * ePixe, 2 * ePixe);
}

如果是遮挡目标,此时用扩展IOU计算匹配矩阵的目标权重

float GetExpansionIou(cv::Rect_<float> boxD, cv::Rect_<float> boxT, cv::Rect_<float> boxExpand)
{// boxD:检测框, boxT:跟踪框, boxExpand:扩展框float in = (boxD & boxExpand).area();           // 检测框与扩展框交集面积float un = boxD.area() + boxT.area() - in;      float result = in / un;    if (result > 1) {result = 1;     // 当iou >1 时赋值为1}      return result * mExpansionIou;  
}

三、结论

  • 实际数据测试,在 10 - 20m 的遮挡目标,解决 超过 50% 的 id switch问题

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

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

相关文章

网站被恶意扫描怎么办(上WAF)

在网络安全领域&#xff0c;有一大类工具被广泛使用&#xff0c;且作用不可忽视&#xff0c;它就是网络安全扫描器。扫描器是一种专门设计用来评估计算机、网络或者应用中已知的弱点的计算机程序&#xff0c;但是很多人恶意使用&#xff0c;找到网站弱点进行攻击。 扫描器的种…

Vue和React的运行时,校验引入包的上下文差异

背景 系统使用 webpack 5 模块联邦实现微前端&#xff0c;有关如何实现跨应用的代码共享&#xff0c;可参考 如何优雅的实现跨应用的代码共享 里的第三大点。 总之&#xff0c;这里是其他应用使用了某个应用共享出来的reg文件&#xff0c;引入方式为&#xff1a; import REG …

LSTM的记忆能力实验 [HBU]

目录 模型构建 LSTM层 模型训练 多组训练 模型评价 模型在不同长度的数据集上的准确率变化图 模型汇总 总结 长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的…

ARM12.26

整理三个按键中断代码 key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__ #include"stm32mp1xx_gpio.h" #include"stm32mp1xx_gic.h" #include"stm32mp1xx_exti.h" #include"stm32mp1xx_rcc.h" #include"led.h" void k…

blender使用faceit绑定自己的表情动作

blender使用faceit绑定自己的表情控制模型 faceit是个神器&#xff0c;来记录一下如何让表情动起来保持相对位置头部分离&#xff0c;方便后续绑定faceitfaceit的注册rig生成地标Animate可以修正表情烘培之前记得保存使用Faceit的整个流程 faceit是个神器&#xff0c;来记录一下…

工具系列:TensorFlow决策森林_(3)使用dtreeviz可视化

文章目录 介绍设置安装 TF-DF 和 dtreeviz导入库 可视化分类树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随机森林分类器显示决策树检查叶节点统计信息决策树如何对实例进行分类特征空间划分 可视化回归树加载、清洗和准备数据分割训练/测试集并训练模型训练一个随…

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…

nginx-proxy-manager初次登录502 bad gateway

nginx-proxy-manager初次登录502 bad gateway 按照官方docker-compose安装后,页面如下: 默认账户密码: adminexample.com/changeme点击sign in,提示Bad Gateway 打开调试 重装后依然如此,最后查阅githup issue 找到答案 https://github.com/NginxProxyManager/nginx-proxy-…

【操作系统】探究文件系统奥秘:创建proc文件系统的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;Linux专栏&#xff1a;《探秘Linux | 操作系统解密》⏰诗赋清音&#xff1a;月悬苍穹泛清辉&#xff0c;梦随星河徜徉辉。情牵天际云千层&#xff0c;志立乘风意自飞。 ​ 目录 &a…

web前端项目-七彩夜空烟花【附源码】

web前端项目-七彩动态夜空烟花【附源码】 本项目仅使用了HTML&#xff0c;代码简单&#xff0c;实现效果绚丽&#xff0c;且本项目代码直接运行即可实现&#xff0c;无需图片素材&#xff0c;接下来让我们一起实现一场美丽的烟花秀叭 运行效果&#xff1a;鼠标点击和移动可控制…

tamarin manual总结笔记5(使用流程的模型规格)

使用流程的模型规格 在本节中&#xff0c;我们提供了一个非正式的描述过程演算现在集成在Tamarin。它被称为SAPIC&#xff0c;即“状态应用PI-Calculus”。该模型的全部细节可以在(Kremer and k nnemann 2016)和(Backes et al 2017)中找到。 可以根据规则或作为(单个)流程对协…

云计算:现代技术的基本要素

众所周知&#xff0c;在儿童教育的早期阶段&#xff0c;幼儿园都会传授塑造未来行为的一些基本准则。 今天&#xff0c;我们可以以类似的方式思考云计算&#xff1a;它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

C#教程(四):多态

1、介绍 1.1 什么是多态 在C#中&#xff0c;多态性&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许不同类的对象对同一消息做出响应&#xff0c;即同一个方法可以在不同的对象上产生不同的行为。C#中的多态性可以通过以下几种方式实现…

Java API 操作Docker浅谈

背景&#xff1a; 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程&#xff0c;包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提&#xff1a; 首先&#xff0c;在你的Java项目中添加com.github.doc…

ARM 汇编语言知识积累

博文参考&#xff1a; arm中SP&#xff0c;LR&#xff0c;PC寄存器以及其它所有寄存器以及处理器运行模式介绍 arm平台根据栈进行backtrace的方法-腾讯云开发者社区-腾讯云 (tencent.com) 特殊功能寄存器&#xff1a; SP&#xff1a; 即 R13&#xff0c;栈指针&#xff0c;…

渗透测试——1.4主动扫描

主动扫描是别人可以发觉的情报收集 一、nmap的使用 1.nmap<目标主机>:最常用的扫描方式 有nmap版本、扫描时间 “host is up”表示目标主机处于开机状态、“not shown”未开放端口 有四个端口是开的&#xff08;135.139.445.912&#xff09; 2.nmap -p<端口范围…

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …

【JAVA】黑马MybatisPlus 学习笔记【终】【插件功能】

4.插件功能 MybatisPlus提供了很多的插件功能&#xff0c;进一步拓展其功能。目前已有的插件有&#xff1a; PaginationInnerInterceptor&#xff1a;自动分页TenantLineInnerInterceptor&#xff1a;多租户DynamicTableNameInnerInterceptor&#xff1a;动态表名OptimisticL…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述&#xff1a; ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL&#xff0c;底线是允许用在不开源商业软件中&#xff0c;意思就是免费使用。具体可访问ICSha…

12月25日作业

串口发送控制命令&#xff0c;实现一些外设LED 风扇 uart4.c #include "uart4.h"void uart4_config() {//1.使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR | (0x1 << 1);RCC->MP_AHB4ENSETR | (0x1 << 6);RCC->MP_APB1ENSETR | (0x1 <…