Improving Multiple Object Tracking with Single Object Tracking
论文地址:Improving Multiple Object Tracking with Single Object Tracking
SOTMOT
- 介绍和相关工作
- SOTMOT
- Backbone网络
- SOT Branch
- 离线训练
- 在线推理
介绍和相关工作
传统的基于ReID特征的MOT方法,难以应对复杂的环境,并且作者认为轨迹之间的关联,不一定非要通过ReID特征,将不同帧的相同目标进行关联。
SOT和MOT相似的是都是时序任务,旨在视频序列中,在面对遮挡等问题的情况下,顺利评估目标对象的轨迹信息。也就是,MOT任务可以被多个SOT的组合实现。MOT的关键步骤被认为是目标关联,如果在MOT任务中,目标类已知,且检测器在目标搜索的区域中具有较高召回率,SOT就可以被认为是一个proposal的关联问题,因此SOT中的一些技术也可以被运用到MOT中来提高关联鲁棒性。
如果如图2(a),直接将MOT中的每个目标对象的坐标看作是一个SOT任务,并且使用一个SOT模型来进行直接追踪,则会存在以下问题:
- 不恰当的辨别性:对于SOT而言,需要的是获得将目标从其背景出辨别出的能力,即泛化辨别性,而MOT任务由于背景信息可以被检测器所过滤,所以一般需要更多的是将目标和其周围目标进行区分,即具体辨别性。
- 尽管先进的SOT方法可以高速运行(40FPS),但是相同时间内使用SOT追踪MOT中的数十个目标还是很耗时的。
为了解决以上问题,作者提出了一个新颖的端到端的MOT训练结构,使得MOT任务可以受益于SOT的强大辨别能力,如图1。通过拓展CenterNet检测器,在其基础上增加一个SOT分支,和已存在结构并存。为了获得具体的辨别性,不同于传统SOT方法,增加的SOT分支对每个目标在线训练一个单独的SOT模型,来从当前帧中从周围目标中区分出该目标(图2b)。
训练完毕的SOT用于后续帧的目标关联,如此,MOT任务就拥有了强大的辨别能力和在线学习和追踪(关联)能力。如同检测分支相同,SOT分支将目标看为点,目标有特征向量表示,如此SOT可以效率的同时追踪数十个目标。
离线训练时,网络保存两帧图片作为输入,SOT分支中,SOT模型使用一张图片训练,另一张图片测试。在线追踪时,不同于CenterTrack利用ReID特征进行追踪,而是基于SOT模型进行追踪。
SOTMOT
SOTMOT,基于CenterNet检测器基础上构建。在原本CenterNet三个分支的基础上增加了一个SOT分支,构建了SOTMOT网络。SOT分支每一帧单独为每个目标训练一个单独的SOT模型用于另一帧的定位,和其他分支一样,SOT分支将目标看为点,结构如下图。
Backbone网络
采用FairMOT的变体DLA-34作为Backbone,拥有更多的跳跃连接以及可变卷积。输出尺寸为输入图像的1/4大小。
CenterNet这里就不介绍了,CenterNet检测网络主要有三个分支输出,用于定位的Heatmap,用于矫正的偏移Offset以及目标框大小Size。
SOT Branch
基于Center的特征提取
对于一个输入图片的Backbone特征图,将其传入到三个卷积网络层中获得SOT特征图F∈RCsot×H×WF\in R^{C_{sot}\times H \times W}F∈RCsot×H×W,卷积核为3x3,stride为1x1,紧跟BN和Relu层。进一步,对于目标中心点c={xc,yc}c = \{x^c,y^c\}c={xc,yc}对应于特征图,其可以通过特征向量表示为x=F(c)x = F(c)x=F(c),直接在特征图中提取,不需要其他操作,即x∈RCsotx \in R^{C_{sot}}x∈RCsot。如此提取数十个目标的特征不会浪费太多时间。
SOT模型训练
给定一张训练图片,和目标中心集合N={(xic,yic)}i=1NN = \{(x_i^c,y_i^c)\}^N_{i=1}N={(xic,yic)}i=1N,所有目标的提取的特征向量为X≡[x1T;...;XNT]∈RN×CsotX≡ [x_1^T;...;X_N^T] \in R^{N \times C_{sot}}X≡[x1T;...;XNT]∈RN×Csot。进一步,一个领接矩阵A∈{0,1}N×NA\in \{0,1\}^{N\times N}A∈{0,1}N×N,表示是否中心集合NNN中两个中心是否相邻:Ai,j={1if min(∣xic−xjc∣,∣yic−yjc∣)⩽r0otherwise (1)\mathbf{A}_{i, j}=\left\{\begin{array}{lc} 1 & \text { if } \min \left(\left|x_{i}^{c}-x_{j}^{c}\right|,\left|y_{i}^{c}-y_{j}^{c}\right|\right) \leqslant r \\ 0 & \text { otherwise } \end{array}\right. \tag{1} Ai,j={10 if min(∣∣xic−xjc∣∣,∣∣yic−yjc∣∣)⩽r otherwise (1)
rrr为距离阈值。
对于每个目标对象xix_ixi,其相邻采样矩阵XiX_iXi和标签向量yiy_iyi被构建,XiX_iXi由目标中心(xic,yic)(x_i^c,y_i^c)(xic,yic)的相邻节点的特征向量组成,{xj∣∀j:Ai,j=1}\{x_j | ∀_j : A_{i,j} = 1\}{xj∣∀j:Ai,j=1}。yiy_iyi标签除了xix_ixi处为1,外全为0。训练基于回归的判别模型wi∗w^*_iwi∗来从其邻居目标中区分目标xix_ixi,具体点:minwi∥Xiwi−yi∥22+λ∥wi∥22(2)\min _{\mathbf{w}_{i}}\left\|\mathbf{X}_{i} \mathbf{w}_{i}-\mathbf{y}_{i}\right\|_{2}^{2}+\lambda\left\|\mathbf{w}_{i}\right\|_{2}^{2} \tag{2} wimin∥Xiwi−yi∥22+λ∥wi∥22(2)
λλλ是规则化参数,公式(2)的优化可以表示为:wi∗=(Xi⊤Xi+λI)−1Xi⊤yi(3)\mathbf{w}_{i}^{*}=\left(\mathbf{X}_{i}^{\top} \mathbf{X}_{i}+\lambda \mathbf{I}\right)^{-1} \mathbf{X}_{i}^{\top} \mathbf{y}_{i} \tag{3} wi∗=(Xi⊤Xi+λI)−1Xi⊤yi(3)
值得注意的是,XiX_iXi的行数依赖于中心点的邻居数,∑jAi,j\sum_jA_{i,j}∑jAi,j,不论∑jAi,j\sum_jA_{i,j}∑jAi,j多大,XiTXiX_i^TX_iXiTXi和XiTyiX_i^Ty_iXiTyi一直属于RCsot×CsotR^{C_{sot}\times C_{sot}}RCsot×Csot和RCsot×1R^{C_{sot}\times 1}RCsot×1,给定(XiTXi)s,(XiTyi)s(X_i^TX_i)s,(X_i^Ty_i)s(XiTXi)s,(XiTyi)s,w∗sw^*sw∗s就可以被同时注册。
离线训练
如图3,网络保存一对RGB图像,一个用于训练,一个用于测试,以双流共享参数的方式训练。对于训练图片,{wi∗}i=1N\{w_i^*\}^N_{i=1}{wi∗}i=1N可以通过公式(3)获得,对于测试图片,给定中心集合M={(xjc,yjc)}j=1MM = \{(x_j^c,y_j^c)\}^M_{j=1}M={(xjc,yjc)}j=1M,test采样矩阵Z=[z1T;...;zMT]∈RM×CsotZ = [z_1^T;...;z_M^T]\in R^{M\times C_{sot}}Z=[z1T;...;zMT]∈RM×Csot,邻接采样矩阵ZjsZ_jsZjs及其GT标签向量vjsv_jsvjs可以相似的获得。
总之,将{wi∗}i=1N\{w_i^*\}^N_{i=1}{wi∗}i=1N和{Zj∗}j=1M\{Z_j^*\}^M_{j=1}{Zj∗}j=1M重新排列为{wi∗,...,wk∗,...wN∗}\{w_i^*,...,w_k^*,...w_N^*\}{wi∗,...,wk∗,...wN∗}和{Z1,...,Zk,...,ZM}\{Z_1,...,Z_k,...,Z_M\}{Z1,...,Zk,...,ZM},即(wi∗,Zi)(w_i^*,Z_i)(wi∗,Zi)的前kkk对,产生wi∗w_i^*wi∗的正例xix_ixi与其对应的ziz_izi是ZiZ_iZi中唯一的正样本,表示相同的目标对象。训练损失为:Lsot=∑i=1kLreg(vi,v^i)(4)\mathcal{L}_{\mathrm{sot}}=\sum_{i=1}^{k} \mathcal{L}_{\mathrm{reg}}\left(\mathbf{v}_{i}, \hat{\mathbf{v}}_{i}\right) \tag{4} Lsot=i=1∑kLreg(vi,v^i)(4)
Lreg(⋅,⋅)L_{reg} (·, ·)Lreg(⋅,⋅)为收缩损失,用于缓解采样不平衡,表示为:
Lreg(v,v^)=∥exp(v)⊙(v−v^)1+exp(a⋅(c−∣v−v^∣))∥22(5)\mathcal{L}_{\mathrm{reg}}(\mathbf{v}, \hat{\mathbf{v}})=\left\|\frac{\exp (\mathbf{v}) \odot(\mathbf{v}-\hat{\mathbf{v}})}{1+\exp (a \cdot(c-|\mathbf{v}-\hat{\mathbf{v}}|))}\right\|_{2}^{2} \tag{5} Lreg(v,v^)=∥∥∥∥1+exp(a⋅(c−∣v−v^∣))exp(v)⊙(v−v^)∥∥∥∥22(5)
viv_ivi为ZiZ_iZi的标签向量,v^i=Ziwi∗\hat v_i = Z_iw_i^*v^i=Ziwi∗为其预测值。
由于回归模型是可微分的,并且(Eq.3)可以被整合进离线训练CNNs训练。SOT分支可以按照上述方法进行端到端训练,学习基于岭回归模型的单目标跟踪器的最优特征嵌入,该跟踪器通过将目标对象与周围的相似对象区分开来来跟踪目标对象。
在线推理
整个在线追踪机制基于DeepSORT和FairMOT。SOT分支用于初始化新轨迹和通过SOT模型在线更新已存在轨迹,并且通过计算匹配得分关联检测目标对象和已存在轨迹。
Improving Multiple Object Tracking with Single Object Tracking相关推荐
- 论文笔记(三十):Counter-Hypothetical Particle Filters for Single Object Pose Tracking
Counter-Hypothetical Particle Filters for Single Object Pose Tracking 文章概括 摘要 I. 简介 II. 相关工作 A. 机器人的 ...
- 论文阅读 [TPAMI-2022] Disentangling Monocular 3D Object Detection: From Single to Multi-Class Recognitio
论文阅读 [TPAMI-2022] Disentangling Monocular 3D Object Detection: From Single to Multi-Class Recognitio ...
- pandas使用apply函数将dataframe多个数据列整合为元组形式并生成新的数据列(combine multiple columns as a single column of tuples)
pandas使用apply函数将dataframe多个数据列整合为元组形式并生成新的数据列(combine multiple columns as a single column of tuples ...
- The FBX plug-in does not support objects set to By Object mode in the Object Properties Display
The FBX plug-in does not support objects set to "By Object" mode in the Object Properties ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型...
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型 转载于:https://www.cnblogs.com/qingyundian/p/7744351.html
- java的object有show_Java中 Object的方法
Java中 Object的方法 构造方法摘要 Object() 方法摘要 protected Object clone() 创建并返回此对象的一个副本. boolean equals(Object o ...
- Showing multiple lines on a single chart in Node-RED
This simple tutorial explains how to display multiple lines on a Node-RED chart. We'll be building o ...
- Pure Pursuit trajectory tracking and Stanley trajectory tracking总结与比较
Summary of Pure Pursuit trajactory tracking and Stanley trajactory tracking Geometric Vehicle Model ...
- Object.create()和new object()和{}的区别
Object.create() 详细文档: Object.create() new Object() 和new操作符相关:new {} 字面量申明 列如 let NewObj03 = {n ...
最新文章
- 单片机基础课程有哪些?
- TensorFlow数据归一化
- html 方式使用iview,VUE之iview框架使用教程
- 软件工程复习笔记 UML
- 仿回收站效果的设计与实现
- (Object detection)目标检测从入门到精通——第三部分非极大抑制
- 社区团购到底有什么魔力
- 很多同学工作了,这里呢简单说说工作中吧可能会遇到的一些事情‘
- oracle相同sql执行计划不同,相同的SQL 在正式和测试环境中执行计划的不同
- 定制puttygen
- android u盘检测工具,android U盘检测及获取内存储器信息
- 计算机建筑装饰设计入门,07建筑装饰《计算机装饰设计软件实训专用周.doc
- 旭锋科技制造信息管理系统
- 【数字】求特定三位数
- 不能打开到主机的连接,在端口1521:连接失败的解决方法
- 当前目录./和父目录../辨析
- 2002 年 Google被封事件真相
- Java——继承、方法覆盖
- 华三设备SSH登录方式
- iPhone6分辨率与适配(一)
热门文章
- Python 读取指定目录及其子目录下所有文件名
- (附源码)计算机毕业设计SSM福利院管理系统
- 狂神说java java基础篇 学习笔记
- Android studio 3.0 查看手机文件系统
- JQuery 总结篇
- 安卓java自实现mp3播放器,基于安卓Android的MP3播放器的设计与实现
- VMware虚拟机网络设置简介
- springboot毕设项目享瘦减肥中心管理系统47ccq(java+VUE+Mybatis+Maven+Mysql)
- 原创:进化论带来对人类的思考
- 第27件事 产品哲学中必须关注的9大人性