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

文章目录

    • 一、背景
    • 二、方法
      • 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 最终效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型开发(十):Chat Completion Models API 详解

全文共8000余字,预计阅读时间约18~28分钟 | 满满干货(附代码案例),建议收藏! 本文目标:详解Chat Completion Models的参数及应用实例,并基于该API实现一个本地知识库的多轮对话智能助理 代码&文件下载点这里 一、…

【前端|CSS系列第4篇】CSS布局之网格布局

前言 最近在做的一个项目前台首页有一个展示词条的功能,每一个词条都以一个固定大小的词条卡片进行展示,要将所有的词条卡片展示出来,大概是下面这种布局 每一行的卡片数目会随着屏幕大小自动变化,并且希望整个卡片区域周围不要…

ChatGPT 4.0 —— Code Interpreter

📎产品销售数据集.csv 选取以上的数据集作为输入,对Code Interpreter 进行测试 1.输入指定数据集,要求给出该数据集的概貌 2.请分析销售的总金额和其他变量的关系 Python Script: # Import required libraries import matplotlib.pyplot a…

java项目之网络视频播放器(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络视频播放器。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&a…

vs2015 工程组织与动态加载

10.Visual Studio动态加载_哔哩哔哩_bilibili 1.工程组织 ① researcher.cpp #include "nn/nn.h"#include "nn/factory.h" #include "nn/factory_impl/factory_impl.h"#include <iostream>int main() {int ret 0;factory_i* fct new f…

Java实现获取客户端真实IP方法小结

Java实现获取客户端真实IP方法小结 在jsP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr()&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件&am…

【数据挖掘】bytewax 与 ydata工具可实时了解您的数据

一、说明 在这篇博文中&#xff0c;我们将介绍如何将开源流式处理解决方案 bytewax 与 ydata 分析相结合并加以利用&#xff0c;以提高流式处理流的质量。 STream 处理支持在传输中和存储之前对数据进行实时分析&#xff0c;并且可以是有状态的&#xff0c;也可以是无状态的。 …

双向循环链表的基本操作(创建节点,头插,头删,尾插,尾删)

头定义&#xff1a; typedef char datatype[20];//datatypechar[20] typedef struct Node {//数据域 数据元素datatype data;//指针域 下一个节点地址struct Node* next;//指针域 上一个节点地址struct Node* prev; }*DoubleLink; 创建链表节点&#xff1a; DoubleLink crea…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具&#xff0c;采用拖拽式设计模式&#xff0c;不需任何服务器和组件支持&#xff0c;即可在 Mac、Linux 和 Windows 操作系统中&#xff0c;设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…

第五章 编程之免交互

免交互&#xff1a;不需要人为控制就可以完成的自动化操作&#xff08;自动化运维&#xff09; shell脚本和面交互是一个概念&#xff0c;但是两种写法 shell&#xff1a;默认解释器是bash 使用i/o&#xff08;输入/输出&#xff09;重定向的方式&#xff0c;将命令的列表提供…

Flask 定制日志并输出到文件

Flask 定制日志并输出到文件 定制日志器flask缺省日志器配置自定义日志器 定制日志器 flask缺省日志器配置 flask自带的日志系统&#xff0c;缺省配置dictConfig()&#xff0c;但必须在Flask()应用之前使用 # flask缺省配置 from logging.config import dictConfig dictConfig…

文心千帆大模型测评分享,效果超出预期

一、前言 现如今&#xff0c;随着ChatGPT的爆火越来越多的人开始关注人工智能领域了&#xff0c;大家都在尝试使用它来帮助自己在工作上提高效率亦或是解决一些问题。但ChatGPT是有一定的使用门槛的&#xff1a;首先需要我们“科学上网”才能访问&#xff0c;其次GPT4的价格相…

C语言库函数 — 错误信息报告函数

前言 本文介绍错误信息报告函数 错误信息报告函数的作用&#xff1a; 帮助程序员快速定位代码中的错误&#xff0c;以便更快地进行调试和修复问题。 文章目录 前言一、错误信息报告函数什么是错误信息报告函数错误信息报告函数的作用strerror函数介绍strerror函数使用错误码对应…

Data Structure, Algorithm,and Applications in C++

在学习这本书进阶内容之前&#xff0c;我们可以跟着它的第一章部分再巩固和复习。本书由Sartaj Sahni撰写&#xff0c;由王立柱和刘志红翻译。全书通俗易懂&#xff0c;内容丰富&#xff0c;是巩固C内容的不二选择。希望本文对各位有所帮助。 目录 1.函数与参数 1.1.传值参数…

C++的类型转换

文章目录 一. C语言的类型转换二. C的四种类型转换1. static_cast2. reinterpret_cast3. const_cast4. dynamic_cast 三. RTTI结束语 一. C语言的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类…

25 MFC 数据库

文章目录 导入ADO库 导入ADO库 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")void CADODlg::OnBnClickedBtnQuery() {//导入ADO库::CoInitialize(NULL);//初始化COM库_ConnectionPtr pCo…

ChatGPT 最佳实践指南

GPT Best Practices GPT 最佳实践指南 This guide shares strategies and tactics for getting better results from GPTs. The methods described here can sometimes be deployed in combination for greater effect. We encourage experimentation to find the methods that…

Python爬虫-贝壳二手房

前言 本文是该专栏的第3篇,后面会持续分享python爬虫案例干货,记得关注。 本文以某二手房网为例,如下图所示,采集对应城市的二手房源数据。具体思路和方法跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly9zei5rZS5jb20vZXJzaG91ZmFuZy8= 目标:…

QT调用torch的环境配置(2023.7.19 / Win10+Qt+libtorch(1.9.1)+cuda11.1+cuDNN v8.0.4)

QT/C成功调用libtorch的环境配置&#xff08;2023.7.19&#xff09; QT/C成功调用libtorch的环境配置Pytorch 模型训练下载训练转化 libtorch模型使用下载C使用Qt使用 最后的话 QT/C成功调用libtorch的环境配置 背景&#xff1a;和同门一起搭的新系统是基于QT的&#xff0c;如…

Monocular 3D Object Detection with Depth from Motion 论文学习

论文链接&#xff1a;Monocular 3D Object Detection with Depth from Motion 1. 解决了什么问题&#xff1f; 从单目输入感知 3D 目标对于自动驾驶非常重要&#xff0c;因为单目 3D 的成本要比多传感器的方案低许多。但单目方法很难取得令人满意的效果&#xff0c;因为单张图…