作者: ShijieSun, Naveed Akhtar, HuanShengSong, Ajmal Mian, Mubarak Shah

来源: arXiv:1810.11780v1

项目:https://github.com/shijieS/SST.git


摘要

MOT方法一般包含两个步骤:目标检测和数据关联。 目标检测这两年随着深度学习的发展而迅速发展,但是数据关联绝大多数还是采用hand crafted的方式将表观特征,运动信息,空间关系,group关系等进行结合。 这篇文章则是利用深度网络实现端到端的表观特征抽取和数据关联。 Deep Affinity Network(DAN)还实现了轨迹的初始化和终止等操作。在MOT15和MOT17,以及UA-DETRAC数据集上验证了有效性。

方法介绍

  • 符号定义:

    • $I_t$ 视频的第$t$帧
    • $t-n:t$ 从$t-n$ 到$t$的时间间隔
    • 下标 $t-n, t$ 表示元素是对$I_{t-n}, I_t$计算得到
    • $\mathcal{C}_t$ 第$t$帧中目标的中心坐标的集合, $\mathcal{C}_t^i$表示集合的第$i$个元素
    • $F_t$第$t$中目标的特征, $F_t^i$表示$t$帧中第$i$个目标的特征
    • $\Psi_{t-n,t}$是一个$N\times N\times 2M$的tensor,其中N表示目标的个数, $M$表示每个目标特征向量的维度
    • $L_{t-n, t}$二值关联矩阵, 1表示关联, 0表示不关联
    • $A_{t-n, t}$相似度矩阵, 由$\Psi$到$A$进而得到$L$
    • $\Tau_t$ 直至第$t$帧时的轨迹的集合。轨迹使用二元组的集合表示,$\Tau_t^i={(0,1),(1,2)}$表示轨迹中的关联是第0帧的第一个目标和第1帧的第2个母校
    • $\mathcal{Z}(\cdot)$算子用来计算集合或者矩阵中的元素
    • $\Lambda_t\in R^{\mathcal{Z}(\Tau_{t-1})\times(\mathcal{Z}(\mathcal{C_t})+1)}$ 是一个accumulator matrix,其元素表示目标与轨迹的相似度
    • $N_m$表示每一帧中最大允许的目标个数, $B$是batchsize
  • Deep Affinity Network (DAN)

    如图1所示, DAN包含了两部分:特征抽取模块(feature extractor)和相似度估计模块(Affinity estimator), 整体的训练是end-to-end方式的。

    DAN的输入是两幅图像$I_t, I_{t-n}$以及每幅图像中对应目标的中心点坐标$\mathcal{C}t, \mathcal{C}{t-n}$, 这里不要求两幅图像连续, 时间间隔$N\in\mathbb{N}^{rand}\sim [1, N_V]$.

    DAN的输出应该是两幅图像中目标的关联矩阵$L_{t-n, t}$

  • Data Preparation

    • Photometric distortions: 像素值尺度变化$[0.7, 1.5]$, 转换成HSV空间, 饱和度的尺度变化$[0.7, 1.5]$, 然后再转回到RGB中,同样尺度[0.7, 1.5]的变化
    • 使用图像像素均值expand frame, 尺度变化范围$[1, 1.2]$
    • 图像裁剪, 尺度范围$[0.8, 1]$, 同时需要包含所有检测目标的中心点

    以0.3的概率按上述方法扩展样本对。然后图像固定大小$H\times W\times 3$, 图像水平翻转的概率$0.5$

  • MOT中每一帧存活的轨迹个数不是固定的,给网络的训练带来难度。因此文章给出了一个轨迹个数的上限值$N_m=80$ , Fig.2 给出了关联矩阵的构建示意图。这里为了清晰演示,取$N_m=5$. 第1帧和第30帧图像各检测到4个目标, 总共有$5$个人。 Fig.2c展示了包含dummy row和column的中间矩阵$L_{1, 30}'$的构建, dummy row或者column用来表示dummy bounding box,从而让关联矩阵大小一致,不随目标个数变化而变化。 Fig.2d中关联矩阵进一步augmented引入新的row和column,表示新出现的目标和终止的轨迹。最终使用Fig.2d的矩阵作为训练目标。最后一行或者列中包含多个1则表示多个目标终止或出现。

  • Feature extractor

    在VGG16上进行了修改, 将VGG16后面的全连接层和softmax层都换成了卷积层,这么做主要是卷积层能够更好地encoding目标的空间特征。另外这里的输入数据也更大$3\times 900 \times 900$, 从而修改后的VGG16最后一层的输出还有$56\times 56$大小。

    VGG16最后输出的$56\times 56$的feature map采用表2上半部分的结构进一步缩小到$3\times 3$

然后根据Table 3,选择9个feature maps,利用目标的中心坐标$\mathcal{C}_t$在channel上选择特征,降维采用的$1\times 1$的卷积核, 特征进行concatenate。最终每一个目标形成$520$维的特征向量。对于那些dummy的目标,其特征表示为全零向量。

  • Affinity estimator

    feature extractor之后每幅图像抽取的特征$F_t\in R^{N_m\times 520}$,然后将两幅图像目标的特征任意的组合就形成了tensor $\Psi\in R^{N_m\times N_m\times(520\times 2)}$, 然后在利用5层卷积核为$1\times 1$的卷积层压缩维度形成相似度矩阵$M\in R^{N_m\times N_m}$,压缩网络的模型如Table 2的下半部分所示。

    这里的M对应于真实的Label,即两个目标是否关联。但是没有解释新出现的轨迹和离开的轨迹。因此文章对相似度矩阵$M$进行了扩充。为了让模型更好训练以及loss更好定义,这里$M$分开进行行列扩充,扩充的向量$\textbf{v}=\gamma \textbf{1}$ , $\gamma$是超参。

  • Network Loss

    $M_1\in R^{N_m\times(N_m+1)}$列扩展矩阵每一行表示第$m$个目标关联情况或者是否结束。 $M_2\in R^{(N_m+1)\times N_m}$行扩展矩阵对应了反向匹配时第二幅图像中目标的关联情况或者是否是新出现的轨迹。对行,列扩展矩阵$M_1, M_2$分别进行行,列softmax得到$A_1, A_2$表示的是概率。

    因此DAN网络损失包含4部分:前向损失,后向损失,一致性损失和组合损失
    $$
    \begin{aligned}
    \mathcal{L}_f(L_1, A_1) &= \frac{\sum(L_1\odot(-\log A_1))}{\sum L_1}\
    \mathcal{L}b(L_2, A_2) &= \frac{\sum(L_2\odot(-\log A_2))}{\sum L_2}\
    \mathcal{L_c}(\widehat{A_1}, \widehat{A_2}) &= \Vert\widehat{A_1}-\widehat{A_2} \Vert_1\
    \mathcal{L_a}(L_3, \widehat{A_1}, \widehat{A_2}) &= \frac{\sum (L_3\odot (-\log(max(\widehat{A_1}, \widehat{A_2}))))}{\sum (L_3)}\
    \mathcal{L} &= \frac{\mathcal{L_f}+\mathcal{L_b}+\mathcal{L_a}+\mathcal{L_c}}{4}
    \end{aligned}
    $$
    其中$L_1, L_2$都是与$M_1, M_2$对应的$L
    {t-n, t}$的trimmed 版本, $\widehat{A_1}, \widehat{A_2}$是trimmed成$N_m\times N_m$的版本, $L_3$则是同时去掉了最后一行和最后一列。

    关于四种loss的关系阐述

    We compute the final loss $L$ as the mean value of the four sub-losses. The overall cost function of our network is defined as the Expected value of the training data loss. The afore-mentioned four sub-losses are carefully designed for our problem. In the Forward and Backward losses, instead of forcing $A_q$, where $q \in{ 1, 2}$1; to approximate corresponding Lq by using a distance metric, we maximize the probabilities encoded by the relevant coefficients of $A_q$. We argue that this trategy is more sensible than minimizing a distance between a binary matrix ($L_q$) and a probability matrix ($A_q$). Similarly, given the difference between $\widehat{A_1}$ and $\widehat{A_2}$ is expected to be small, we employ $l_1$-distance instead of more commonly used $l_2$-distance for the Consistency loss. Once the DAN is trained, we use it to compute the affinity matrix for an input frame pair as $A \in R^{N_m\times (N_m+1)} = \mathcal{A}(max(\widehat{A_1},\widehat{ A_2}))$ , where $\mathcal{A}(.)$ appends the ($N_m + 1$)th column of $A_1$ to the matrix in its argument. The max operation used in our definition of the affinity matrix $A$ also justifies the maximization performed to compute the Assemble loss. Thus, the four sub-losses
    defined above are complementary that result in a systematic approximation of the ground truth data association.

  • DAN deployment

    因为feature extractor部分是参数共享的,而在计算相似度矩阵的时候只是后面的affinity estimator牵涉到两两相互操作,因此,每张图片其实只进行一次feature extractor的操作,后面的affinity estimator是进行匹配。

  • Deep track association

    这部分很关键。为了匹配当前帧中的目标, 将每一帧的特征矩阵$F$和对应的时间戳保存起来,然后可以计算历史frames与当前frame之间的相似度矩阵。

    关联过程: 首先根据第1帧图像中的目标个数初始化轨迹集合$\Tau_0$,轨迹中每一个元素是一个二元组(时间戳, 轨迹编号),使用hungrain algorithm对accumulator matrix $\Lambda$分解去grow对应的轨迹, $\Lambda$是当前帧目标与多个历史帧目标的相似度矩阵的累积求和,注意这里累积求和是相同轨迹编号进行求和。

    注意这里有个问题,匈牙利算法是一对一约束,但相似度矩阵中添加的最后一行一列不满足这个要求,于是匈牙利算法只是对去除最后一行和列的矩阵进行分解,然后再把最后的行列加进来。

Experiments

实验部分还是很充分的,在MOT15和MOT17上进行了行人跟踪的实验, 在UA-DETRAC上进行了车辆的跟踪。

结语

实验没有给出在MOT16上DPM检测器下的跟踪性能,我跑了下代码发现性能很差。在MOT17库上性能好是因为MOT17库上的检测相对准确。也就是说该方法其实对于检测的精度还是非常依赖的。因为网络的输入是目标的中心点坐标,并且在抽取特征阶段是利用中心点位置channel 作为特征,检测误差必定导致特征的不准确,从而影响性能。

论文笔记-Deep Affinity Network for Multiple Object Tracking的更多相关文章

  1. 论文笔记:Fully-Convolutional Siamese Networks for Object Tracking

    Fully-Convolutional Siamese Networks for Object Tracking 本文作者提出一个全卷积Siamese跟踪网络,该网络有两个分支,一个是上一帧的目标,一 ...

  2. Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记

    Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记 arXiv 摘要:本文提出了一种 DRL 算法进行单目标跟踪 ...

  3. 论文笔记系列-Neural Network Search :A Survey

    论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...

  4. 论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning

    论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning  2017-06-06  21: ...

  5. Motion-Based Multiple Object Tracking

    kalman filter tracking... %% Motion-Based Multiple Object Tracking % This example shows how to perfo ...

  6. Multiple Object Tracking using K-Shortest Paths Optimization简要

    参考文献:Multiple Object Tracking using K-Shortest Paths Optimization 核心步骤: 两步:一.detection 二.link detect ...

  7. 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives

    (聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...

  8. 论文笔记:SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks

    SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks 2019-04-02 12:44:36 Paper:ht ...

  9. 多目标跟踪(MOT)论文随笔-POI: Multiple Object Tracking with High Performance Detection and Appearance Feature

    网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是tracking by detection 方法进行多目标跟踪的文章,最大的特点是使用 ...

随机推荐

  1. Tp5.1 管理后台开发纪要

    1. tp5.1 对网页是有缓存机制的 E:\phpStudy\PHPTutorial\WWW\NewAdmin\thinkphp\library\think\Template.php 下displa ...

  2. Django框架1——视图和URL配置

    三个命令 1.创建一个django项目 在cmd中:django-admin.py startproject project_name D:\python\django_site>django- ...

  3. 算法两数之和 python版

    方法一.暴力解法 -- 5s 复杂度分析:时间复杂度:O(n^2)空间复杂度:O(1) length = len(nums)for i in range(length):    for j in ra ...

  4. C#-System.Dynamic.ExpandoObject

    dynamic dynamicObject = new System.Dynamic.ExpandoObject(); dynamicObject.Id = Guid.NewGuid(); (dyna ...

  5. 依赖: libcheese-gtk23 (>= 3.4.0)

    unity-control-center : 依赖: libcheese-gtk23 (>= 3.4.0) 但是它将不会被安装                         依赖: libch ...

  6. cmake用法及常用命令总结(全)

    CMakeLists.txt 的语法比较简单,由命令.注释和空格组成,其中命令是不区分大小写的.指令是大小写无关的,参数和变量是大小写相关的.但推荐全部使用大写指令.符号 # 后面的内容被认为是注释. ...

  7. robot framework 怎么验证搜索无记录,页面元素不存在

    假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好  class=vtext 你好1  class=vtext 你好2  class ...

  8. 【转载】 C#使用Select方法快速获取List集合集合中某个属性的所有值集合

    在C#的List集合操作或者数组操作中,有时候我们需要获取到List集合元素中所有的对象的某个属性,然后存放到一个数组集合中,此时就可以使用到List集合以及数组的扩展方法Select方法快速实现获取 ...

  9. 解决github提示安全漏洞的问题

    今天在提交代码的时候发现github提示了这样的错误: We found potential security vulnerabilities in your dependencies. Only t ...

  10. setTimeout()方法和setInterval()方法

    setTimeout方法: 定义和用法: setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. tip: 1000 毫秒= 1 秒. tip:  如果你只想重复执行可以使用setI ...