AIC21-trick3 金牌方案
原文为
City-scale multi-camera vehicle tracking guided by crossroad zonesC. Liu, Y. Zhang, H. Luo, J. Tang, W. Chen, X. Xu, et al.
Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition 2021
Pages: 4129-4137
MTMCT 通常分为几个子任务:①单相机跟踪 (SCT) ②基于外观的特征重新识别 (ReID) 和轨迹聚类:
(1) 单相机跟踪在圈里中也称为多目标跟踪(MOT),通常遵循逐检测跟踪的方式。 (2) ReID尝试从大型图库集中检索完全相同的实例。 (3) 轨迹聚类旨在将摄像机中的轨迹合并成跨摄像机链接。尽管在目标检测、跟踪和重新识别等单独任务中进行了很好的研究,但对多相机多跟踪框架的优化研发仍然很有前景。
对于车辆MTMCT
(1)车辆经常由于失真或照明条件而错过。在多目标跟踪的场景中,这通常可以通过更好的检测器、更好的数据关联策略甚至单个目标跟踪来缓解。然而,这些方法依赖于大量的训练数据或外部模型。
(2) 车辆外观相似,因此纯重识别模型无法区分这些车辆。
(3) 同一个车辆实例可能会有很大的外观变化,因此无法在不同的摄像机中分组。考虑到这些挑战和一些基本的交通规则,我们设法解决这些问题如下。
策略1——Tracklet Filter Strategy(TFS)
用一个低阈值获取较多的目标,然后对这些目标进行筛选。
- 存在静止的道路标志等物体被误检为车辆,由于该物体一直是静止不同的,始终存在于相机的视角当中,因此可以筛选掉。
- 为了减少搜索空间,一些并不进入主干道的车辆会被剔除。
策略2——Direction Based Temporal Mask (DBTM)
在每个摄像头中设置不同的区域,获得了车辆的移动方向,对于来自不同摄像机的两个轨迹,通过相应的时间戳和移动方向来判断它们是否应该断开连接
从A移动到B和从B移动到A的两辆汽车轨迹不应当被匹配到,因为移动方向冲突。通过简单而有效的时间掩码,搜索空间大大减少,从而减轻了重新识别的压力。
策略3——Sub-clustering in Adjacent Cameras
对于外观变化很大的同一辆车,我们提出了相邻摄像机中的子聚类(SCAC),它试图匹配相邻摄像机中的轨迹。灵感是车辆总是连续地经过摄像头视场,例如,来自 C41 的车辆不应该与没有内部 C42 的 C43 匹配。通过子聚类,首先对相邻摄像机中的轨迹进行分组,然后对这些本地匹配的轨迹进行查询扩展。查询扩展为这些本地匹配的轨迹引入了更多信息,并使它们更有可能与其他摄像机中的潜在轨迹相匹配。
先验知识:得知相机之间是否相邻
相关研究
多目标跟踪
目前,检测跟踪是多目标跟踪的主要方案。对于目标检测,多目标跟踪旨在通过离线跟踪或在线跟踪将它们关联成长轨迹。
-
离线跟踪,基于视觉和时空相似性构建图,然后针对解决方案优化图。它通常以更多的计算时间为代价获得更好的性能。
-
在线跟踪,旨在在没有未来信息的情况下关联跟踪和检测。目前已经提出了一些简单而有效的方法,包括 SORT 和 Deep-SORT。当只有历史信息时,这些方法依靠准确的外观重新识别模型进行长期跟踪来处理遮挡。近年来,还提出了联合检测与跟踪、单目标跟踪。
目标ReID
对于车辆ReID主题,由于在城市管理和智能交通中的应用,受到了更多的关注。该课题涉及多领域学习、大规模数据集、合成数据等。随着基于transformer的视觉任务的出现,车辆识别得到了极大的改善
轨迹聚类
有了以上两个基本模块,MTMCT可以看成是一个轨迹聚类问题。许多以前的工作都遵循这种 MTMCT 方案。基于图的方法为不同摄像机中的多个轨迹建立全局图,并针对 MTMCT 解决方案进行优化。时空约束和交通规则已嵌入到聚类阶段。有了这些约束,搜索空间大大减少,因此车辆重新识别的准确性大大提高。在测试数据和训练数据的相机分布相同的情况下,方法可以学习每对相邻连接的相机的转换时间分布,而无需手动调整。对于完全不同的测试集中的 MTMCT,在不知道相机分布的情况下,方法遵循一些基本规则来约束匹配场。
本文方法
-
首先通过检测头从视频流的每一帧中获取目标的BBox
-
通过训练好的一个Re-ID模型从目标BBox中提取出外观特征
-
单相机跟踪器使用 BBox 和 Re-ID 功能为每个跟踪目标生成一个单相机轨迹
-
最后,根据单摄像机tracklets和 Re-ID 特征,摄像机之间的 ID 同步生成多摄像机轨迹
车辆检测
车辆检测用的是有较好检测表现的YOLOv5x模型进行检测,该模型是在COCO数据集上训练的,没有用到其他额外的数据集。
原始模型输出有80个种类,其中筛选了3种和车辆道路有关的结果——cars, trucks, buses.
车辆Re-ID
具体的损失函数采用了复合的损失:
L
r
e
i
d
=
L
c
l
s
+
α
L
t
r
p
L_{reid}=L_{cls}+\alpha L_{trp}
Lreid=Lcls+αLtrp
其中,
L
c
l
s
L_{cls}
Lcls表示softmax cross-entropy loss,
L
t
r
p
L_{trp}
Ltrp表示triplet loss
L
c
l
s
=
−
log
e
W
y
i
T
x
i
+
b
y
i
∑
j
=
1
n
e
W
j
T
x
i
+
b
j
L_{cls}=-\log\frac{e^{W_{y_i}^T}\pmb x_i+b_{y_i}}{\sum_{j=1}^ne^{W_j^T\pmb x_i+b_j}}
Lcls=−log∑j=1neWjTxxxi+bjeWyiTxxxi+byi
其中,
x
i
\pmb x_i
xxxi表示类别为
y
i
y_i
yi的深度为
i
i
i的特征,
W
j
W_j
Wj表示权重
W
W
W中第
j
j
j列。这个就是带有偏置项的经过log变化后的softmax函数
L
t
r
p
=
[
d
p
−
d
n
+
α
]
+
L_{trp}=[d_p-d_n+\alpha]_+
Ltrp=[dp−dn+α]+
这里的
d
p
d_p
dp和
d
n
d_n
dn是正样本和负样本的距离,
α
\alpha
α是margin,
[
z
]
+
[z]_+
[z]+等价于
max
(
z
,
0
)
\max{(z,0)}
max(z,0)
单相机多目标跟踪
将视频帧中的检测与对应的tracklet关联起来,实现多车目标的单摄像头跟踪。
使用的是当前最新的FairMOT模型
FairMOT是一个检测和跟踪于一体的统一的模型
多相机轨迹匹配(这里是重点)
1)根据十字路口区域和轨迹生成匹配所需的信息;
2)使用TFS过滤tracklets;Tracklet Filter Strategy
3)计算tracklet之间的相似度矩阵,使用DBTM进行匹配约束;Direction Based Temporal Mask
4)tracklet之间进行SCAC处理,分别进行区域间聚类和凸轮间聚类。Sub-clustering in Adjacent Cameras
第一部分——针对十字交叉区域,根据轨迹进行筛选
因为竞赛强调了主干道的匹配,所以这里对进入到主干道的车辆进行了划分
这里就是一个技巧,是针对这一个竞赛采用的一个技巧,并不具有普适性。
人工划分了哪些路口是进入到主干道的,哪些路口是和主干道相接的,哪些路口是连接到其他相机的。
接下来对进入不同道路的目标进行了标记,到这个阶段时已经获得了单个相机中目标的轨迹,现在需要进行聚类。如果目标只是经过主干道,那么这些车辆并不会被其他相机拍下来,所以通过这种方式减少了搜索空间。并且还有一部分误检的对象,这些误检的对象可能是静止不动的,一直存在于一个相机中,因此也是忽略掉
第二部分——基于目标运动轨迹的方向进行编码
这里的冲突表就是用于目标轨迹方向判断的。
这里的轨迹并不复杂,其实就是一个向量。标识了始末区域的向量 [ z s , z e ] [z_s,z_e] [zs,ze]和标识了始末时间的向量 [ t s , t e ] [t_s,t_e] [ts,te]
举个例子,两个轨迹,现在要在相机 i i i 的Zero3进行匹配,
轨迹
i
i
i的属性为:属于相机
c
i
c^i
ci,时间向量为
[
t
s
i
,
t
e
i
]
[t_s^i,t_e^i]
[tsi,tei]
轨迹
j
j
j的属性为:属于相机
c
j
c^j
cj,时间向量为
[
t
s
j
,
t
e
j
]
[t_s^j,t_e^j]
[tsj,tej]
如果相机 c j c^j cj是相机 c i c^i ci的上一个路口(这里应当理解为是3号路口连接的十字路口节点)的相机,那么轨迹 j j j的 t e j t_e^j tej应当小于轨迹 i i i的 t s i t_s^i tsi,或者轨迹 j j j的 t s j t_s^j tsj应当大于轨迹 i i i的 t e i t_e^i tei,因为车辆是从上一个相机开往这个相机的Zero3或者从这个相机的Zero3开往上一个相机的。
其实就是个很简单的数学建模问题,而且是人工建立的图结构
最终得到了一个矩阵,由 m m m端轨迹两两首位呼应构成的稀疏图结构。
但这里还没有进行匹配,因为符合首尾呼应的轨迹很多,而轨迹的匹配是一对一的,因此接下来通过计算轨迹的相似性进行匹配。
每一条轨迹都有一个由其所有帧构成的2048维平均特征,轨迹的相似性通过余弦距离来计算
计算出对应的相似度距离矩阵
到这里还不够,论文提到因为光照和视图变化等原因,只用相似度距离矩阵进行匹配是不够完善的。
这里一个值得学习的方法就是去掉相机引起的偏差。
从每个 tracklet 特征中减去同一相机下特征的平均值。然后使用最近的邻居更新 tracklet 特征。还使用 k相互近邻 方法来细化更新后的相似度矩阵。 k相互近邻效果很好,从而生成更强的相似度矩阵 S ^ \hat{S} S^。
k相互近邻(k-reciprocal nearest neighbor) 这个算法的思路就是:如果两张图片A,B相似,那么B应该会在A的前K个近邻里面,反过来,A也会在B的前K个近邻里面。但如果两张图C,D不相似,即使C在D的前K个近邻里面,D也不会在C的前K个近邻里面。
总结:相比于K临近算法,多了个相互的要求
第三部分——临近相机的子聚类
判断了首尾呼应的轨迹,再将轨迹特征减去同一相机下的特征平均值后,利用k相互近邻算法计算出一个更好的相似度矩阵,这样得到的一个称为DBTM的相似度矩阵 S ^ \hat{S} S^,再接下来就是需要匹配了。
常用的方法是根据DBTM相似度矩阵 S S S对所有轨迹进行层次聚类。这种方法对所有摄像机进行大范围的聚类,很难聚集到正确的车辆一起。同时,它可能会与错误的车辆聚集并导致错误的集群。根据数据集场景的特点,我们提出了相邻相机中的子聚类(SCAC)。这是一种基于层次聚类的局部聚类方法。
主要分为①区域间聚类和②相机间聚类两个过程。
这里还是用了相机之间的相互关系组队进行聚类而已。
对于区域间聚类:
在数据集中,当前相机区域4连接到上一个相机的区域3,当前相机区域3连接到下一个相机的区域4。因此,首先对连通区域中的轨迹进行层次聚类,以确保高置信度的车辆聚类并确保聚类的正确性。
对于相机间聚类:
用于在区域间聚类的基础上对摄像机中的所有轨迹进行聚类,以保证Crossroad Zones无法描述的轨迹与类的广度相匹配。
通过这两种聚类方法,可以匹配尽可能多的轨迹,同时仍然保证准确性。然后获得最终的摄像机间轨迹匹配结果并将其合并为完整的轨迹。
实验
这里论文里写了,不做赘述