【目标跟踪】2、FairMOT | 平衡多目标跟踪中的目标检测和 Re-ID 任务 | IJCV2021

news2024/11/28 6:51:17

文章目录

    • 一、背景
    • 二、方法
      • 2.1 Backbone
      • 2.2 检测分支
      • 2.3 Re-ID 分支
      • 2.4 训练 FairMOT
      • 2.5 Online Inference
    • 三、效果
      • 3.1 数据集
      • 3.2 实现细节
      • 3.3 消融实验
      • 3.4 最终效果

在这里插入图片描述

论文:FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking

代码:https://github.com/ifzhang/FairMOT

出处:IJCV2021

一、背景

Multi-object tracking (MOT) 任务是什么:

  • 估计视频中感兴趣目标的运动轨迹

MOT 的重要性,在计算机视觉中是一个很重要的任务:

  • 有利于智能视频分析
  • 人机交互

当时的方法是怎么解决 MOT 任务的

  • 很多方法将 MOT 任务构建成了一个多任务学习的模型,包括:
    • 目标检测
    • reid

但作者认为,这两个任务是相互竞争的

之前的方法一般都是将 reid 作为检测后的第二个任务,其效果会被目标检测的效果影响,且网络一般都是偏向第一阶段的目标检测网络,对 reid 很不公平,而且两阶段的 MOT 方法难以实现实时推理,原因在于当目标数量很多时,这两个模型是不共享特征的,reid 模型需要对每个框都提取特征

所以,后面就出现了单阶段的追踪方法,使用一个模型来学习检测和 reid 的特征:

  • Voigtlaender(在 Mask RCNN 中增加了一个 reid 分支,给每个 proposal 都学习 reid 特征,虽然提升了速度,但效果远远比不上两阶段方法,一般都是检测效果很好,但追踪效果变差

所以本文作者首先探讨了上述问题出现的原因:

  • anchors:anchor 原本是为目标检测设计的,不适合用于对 reid 特征的学习
    • 基于 anchors 的方法需要为待检测的目标生成 anchors,然后基于检测结果来抽取 reid 特征,所以,模型在训练时候就会进入 “先检测,后 reid” 的模式,reid 特征就会差一些
    • 而且 anchor 会为 reid 特征的学习带来不确定性,尤其是在拥挤场景,一个 anchor 可能对应多个个体,多个 anchor 也可能对应一个个体
  • 特征共享:这两个任务所需要的特征是不同的,所以不能直接进行特征共享
    • reid 需要更 low-level 的特征来识别同一类别不同实例间的有区分力的特征
    • 目标检测需要高层和低层信息结合来学习类别和位置
    • 单阶段目标追踪方法会产生特征冲突,降低效果
  • 特征维度:(reid 需要更高维的特征,MOT 需要低维的特征即可)
    • reid 特征一般使用的特征维度为 512 或 1024,远远大于目标检测的维度(一般为 类别+定位),所以降低 reid 特征的维度有利于两个任务的平衡
    • MOT tracking 和 reid 是不同的,MOT 任务只需要对前后帧目标进行一对一的匹配,reid 需要更有区分力的高维特征来从大量的候选样本中匹配查询样本,MOT 是不需要高维特征的
    • 低维度的 reid 特征会提高推理速度

在这里插入图片描述

本文提出了公平的方法 FairMOT:基于 CenterNet

  • 将目标检测和 reid 同等对待,而不是先检测后 reid 的模式
  • 不是对 CenterNet 和 REID 的简单结合

FairMOT 的结构图如图 1 所示:

  • 由两个分支组成,分别来进行目标检测和抽取 reid 特征
  • 目标检测分支是 anchor-free 的,是基于特征图来预测特征的中心点和尺寸
  • reid 分支为每个目标中心位置预测 reid 特征
  • 这样的两个分支并列的而非串联的,能更好的平衡这两个任务

在这里插入图片描述

二、方法

2.1 Backbone

作者使用 ResNet-34 作为基础 backbone,能更好的平衡速度和精度

还可以使用 DLA 来实现更强版本

2.2 检测分支

检测分支使用 CenterNet,centerNet 包含一个 heatmap head,一个 wh head,一个 offset head

2.3 Re-ID 分支

作者在 backbone 输出特征的基础上,构建了 reid 分支:

  • reid 分支提取的特征,在不同目标上距离远,在相同目标上的距离近
  • 所以作者使用 128 kernel 为特征图上的每个位置来抽取 reid 特性,得到的特征为 128xHxW

Re-ID loss:

reid 特征的学习方式被规范为分类任务,同一个个体的不同实例都被认为是同一类别

对一张图中的所有 gt 框,会得到其中心点位置,然后会抽取 reid 特征,并使用全连接层和 softmax 操作来将其映射为分类特征

假设 gt 类别向量为 L,预测的为 p,则 reid loss 为:

在这里插入图片描述

  • K 是训练数据中所有个体的数量
  • 在训练中,只有在目标中心的个体特征会参与训练

2.4 训练 FairMOT

作者联合训练检测和 reid 分支,将所有 loss 加起来

注意:作者使用了 uncertainty loss 来自动平衡两个任务:

在这里插入图片描述

  • w 1 w_1 w1 w 2 w_2 w2 是可学习参数,用于平衡两个任务

此外,作者还提出了 single image training method 来在 image-level 目标检测数据集上训练了 FairMOT(如 COCO、CrowdHuman 等)

  • 作者每次只属于一个图片,将图像中每个目标都当做独立的个体,将每个 bbox 都当做一个单独的类别

2.5 Online Inference

1、网络推理

  • 输入 1088x608
  • 对预测的 heatmap,基于 heatmap score 来进行 NMS 过滤,来抽取峰值关键点(NMS 是 3x3 最大池化),保留大于阈值的 keypoint
  • 基于保留下来的关键点和 wh、offset 分支来计算 box 尺寸

2、Online Association

  • 首先,将第一帧检出的检测框建立为 tracklet(短轨迹)
  • 之后,在后面的每一帧,都会使用 two-stage 匹配策略来将检出的 bbox 和 tracklet 匹配
    • 匹配策略第一阶段:使用 Kalman 滤波和 reid 的特征来得到初始追踪结果,使用 Kalman 滤波是为了预测后面的帧的 tracklet 位置,并且计算预测框和检测框的 Mahalanobis distance ( D m D_m Dm)。然后将 D m D_m Dm 和余弦距离进行融合, D = λ D r + ( 1 − λ ) D m D=\lambda D_r + (1-\lambda) D_m D=λDr+(1λ)Dm λ = 0.98 \lambda=0.98 λ=0.98 是权重。当 D m D_m Dm 大于阈值 τ 1 = 0.4 \tau_1 = 0.4 τ1=0.4 时,被设置为无穷大
    • 匹配策略第二阶段:对没匹配上的检测结果和 tracklet,作者会使用 box 之间的重合率来进行匹配,阈值 τ 2 = 0.5 \tau_2 = 0.5 τ2=0.5,会更新 tracklets 的特征
  • 最后,会给没匹配上的检测结果重新初始化,并且对没有匹配上的 tracklets 保留 30 帧

三、效果

3.1 数据集

训练数据集:

  • ETH 和 CityPerson:只有 box 的标注信息,故被用于训练检测分支
  • CalTech、MOT17、CUHK-SYSU、PRW 有 box 和 identity 标注信息,可以训练两个分支

测试数据集:

  • 2DMOT15、MOT16、MOT17、MOT29

测评方式:

  • 检测效果:mAP
  • reid 特征:True Positive Rate, false accept rate =0.1(TPR@FAR=0.1)
  • 整个追踪效果:CLEAR、IDF1

3.2 实现细节

  • 使用 DLA-34 的变体作为 backbone,在 COCO 上预训练后的模型来作为初始模型
  • 优化器:Adam,初始学习率 1 0 − 4 10^{-4} 104
  • epoch:30,在 20 epochs 的时候学习率降低到 1 0 − 5 10^{-5} 105
  • batch size:12
  • 输入数据大小:1088x608(特征图的分辨率为 272x152)

3.3 消融实验

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4 最终效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

基于大模型的Text2SQL微调的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

(转载)基于 BP_Adaboost 的强分类器设计(matlab实现)

本博客的完整代码获取: https://www.mathworks.com/academia/books/book106283.html 1案例背景 1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间(x,y),从样本空间中找出m组训练数…

Postman传递对象参数(包含有集合对象)

postman通常需要传递各式各样的参数,本文主要介绍了Postman传递对象参数(包含有集合对象),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目场景: postman通常需要传递各式各样的参数,这样的话,进行…

自然语言处理与词嵌入

1、词表特征 前面介绍过表征单词的方式是首先建立一个较大的词汇表(例如10000),然后使用one-hot的方式对每个单词进行编码。例如单词Man,Woman,King,Queen,Apple,Orange分别出现在词…

Docker数据管理和网络通信 dockerfile

Docker数据管理和网络通信 dockerfile 一:Docker 的数据管理1.数据卷2.数据卷容器 二:端口映射三:容器互联(使用centos镜像)四:Docker 镜像的创建1.基于现有镜像创建2&am…

C++入门先填坑

C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C学习也有一定的帮助。 C入门先填坑系列主要内容会围绕以下方面 补充C语言语法的不足,以及C是如何对C语言设计不…

servlet Filter与spring的OncePerRequestFilter

servlet 规范 javax.servlet Filter 任何的servlet容器都要实现的,例如tomcat、undertow、jetty等等。类似于jdbc规范,制定好了一个约束,各家数据库厂商根据规范开发对应的驱动来实现访问自己的数据库。 spring 对于Filter的自定义实现 所…

NLP(六十)Baichuan-13B-Chat模型使用体验

2023年7月11日,百川智能正式发布参数量130亿的通用大语言模型Baichuan-13B-Base、对话模型Baichuan-13B-Chat及其INT4/INT8两个量化版本。   本文将介绍大模型BaiChuan-13B-Chat的使用体验,其HuggingFace网址为:https://huggingface.co/bai…

【C语言day02】

转义字符 \\ 表示字符\,\123表示字符{,\t表示制表符,这些都是一个字符宏只是替换 替换后NUM的样子是(211)*21/2常量指针与指针常量 const和* 来区别,如果是const * 这样的顺序就是常量指针,所以说他的本质是指针&am…

uni-app:请求后端数据uni.request

完整代码: onLoad() {uni.request({url: getApp().globalData.position Produce/select_employee,data: {username: getApp().globalData.username,},method: POST,dataType: json,success: res > {this.employee_name res.data.info.employee_name;// consol…

uniapp 之 微信小程序、支付宝小程序 对于自定义导航栏的不同

目录 前言 微信小程序 代码 支付宝小程序 首页配置文件 二级菜单页面 配置 总结 不同 相同 前言 小程序都是 uni-app 写的 不是原生 微信小程序 代码 pages.json文件中配置 重点: "navigationStyle": "custom", // 导航栏样式…

安卓开发日记问题记录(隐藏标题栏中的应用名称)

当我们设置了显示标题栏,应用名也会显示出来,这对设置标题栏内容很不方便 可以在activity里的onCreate部分设置这句代码隐藏APP名字 getSupportActionBar().setDisplayShowTitleEnabled(false);或者改变它 getSupportActionBar().setTitle("new …

疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接)

疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接) 目录 疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接) 1. 前言 2. 疲劳驾驶类别说明 3. 疲劳驾驶检测数据集: (1)Drowsy-Driving-Det1 …

hadoop安全保护机制(kerberos + ldap)

信息安全理论: CIA模型:机密性、完整性和可用性 CIA模型能够帮助建议一些信息安全原则,但该模型并不是一个需要严格遵守的规则 hadoop平台可能设计多个CIA模型组件,也kennel一个也不涉及 机密性: 信息只应该被期望的…

高压放大器的增益和偏压是什么意思

高压放大器是一种广泛应用的电子元器件,主要用于放大高压信号和驱动负载等方面。在实际应用中,了解高压放大器的增益和偏压是非常重要的,下面安泰电子将详细介绍它们的意义和作用。 高压放大器的增益 增益是指放大器输入信号与输出信号之间的…

iClient3D for CesiumWebGL入门之使用vscode以服务方式运行调试

作者:超图研究院技术支持中心-于丁 iClient3D for Cesium&WebGL入门之使用vscode以服务方式运行调试 相信大家第一次使用SuperMap iClient3D for Cesium或SuperMap iClient3D for WebGL的时候,都遇到过和我一样的事情: 在文件夹中直接打…

二极管钳位电路的原理与实际应用

写在前面 本文参考了什么是二极管钳位的作用及原理? - 知乎 针对一些文章讲述错误的地方进行了更正,在讲述不清楚的地方进行了详细的解释,还请各位两篇文章结合而看,效果更佳。 钳位电路说明 1.我们都知道二极管具有单向导电性&a…

【Ajax】笔记-Ajax重复发送请求

问题的产生 用户频繁地点击一个发送请求的按钮,服务器就会频繁地处理请求,而且处理的内容是一样的,这样会导致服务器的压力很大。 这种情况下服务器就没有必要处理每一个请求。 解决方案 发送请求的时候先查看有没有正在请求的相同请求&am…

docker - prometheus+grafana监控与集成到spring boot 服务

一、Prometheus 介绍 1.数据收集器,它以配置的时间间隔定期通过HTTP提取指标数据。 2.一个时间序列数据库,用于存储所有指标数据。 3.一个简单的用户界面,您可以在其中可视化,查询和监视所有指标。二、Grafana 介绍 Grafana 是一…

Android图形系统之ANativeWindow与Surface关系(十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…