本文来自公众号“AI大道理”
DeepSORT在SORT的基础上引入了深度学习的特征表示和更强大的目标关联方式,有效地减少了身份切换的数量,缓解了重识别问题。
DeepSORT的主要思想是将目标检测和目标跟踪两个任务相结合。
首先使用目标检测算法(Faster R-CNN等)在每一帧中检测出目标物体的位置和边界框。然后,通过深度学习模型(如CNN)提取目标的特征表示,将每个目标与先前帧中已跟踪的目标进行匹配。
匹配过程中会考虑目标的特征相似度、运动一致性等因素,以确定目标的身份和轨迹。
DeepSORT的关键贡献之一是使用了一个强大的外观特征描述符,可以准确地区分不同目标之间的相似度。
DeepSORT还通过处理目标的消失和重新出现等复杂情况,实现了对长期跟踪的支持。
主要技术特点:
级联匹配
ReID 网络
马氏距离
余弦距离
原因:
当一个目标长时间被遮挡之后,kalman滤波预测的不确定性就会大大增加,状态空间内的可观察性就会大大降低。
假如此时两个追踪器竞争同一个检测结果的匹配权,往往遮挡时间较长的那条轨迹的马氏距离更小,使得检测结果更可能和遮挡时间较长的那条轨迹相关联,这种不理想的效果往往会破坏追踪的持续性。
这么理解吧,假设本来协方差矩阵是一个正态分布,那么连续的预测不更新就会导致这个正态分布的方差越来越大,那么离均值欧氏距离远的点可能和之前分布中离得较近的点获得同样的马氏距离值。所以,作者使用了级联匹配来对更加频繁出现的目标赋予优先权。
匹配:
为什么叫级联匹配,主要是它的匹配过程是一个循环。
即从missing age=0的轨迹,每一帧都匹配上,没有丢失过的轨迹到missing age=30的轨迹,丢失轨迹的最大时间30帧的轨迹,挨个的和检测结果进行匹配。
也就是说,对于没有丢失过的轨迹赋予优先匹配的权利,而丢失的最久的轨迹最后匹配。
这里丢失30帧了还给机会匹配,就是对遮挡目标的再跟踪。
级联匹配的距离度量是马氏距离和余弦距离的融合,设置了两个距离的阈值,先过滤一遍。
然后利用这个融合的距离进行匈牙利算法的匹配,匹配是对检测框和预测框的匹配。
而且匹配有优先级的,那些历史上一直有匹配上的轨迹优先匹配,而历史上已经已经很久没有匹配上的轨迹则最后匹配。
也就是说遮挡的可能性比较小,大部分没有匹配上的轨迹可能就是目标消失了。
匹配流程图:
(蓝字只对蓝线有效)
情况1:确定的轨迹,一级匹配成功
流程:
(1)轨迹(上一时刻的检测框)经过kalman滤波预测后,会对当前帧预测出一组检测框。
(2)目标检测算法对当前帧进行目标检测,产生检测框。
(3)对于确定的轨迹来说与目标检测的检测框进行级联匹配,也就是利用马氏距离和图像特征相似度余弦距离进行匈牙利算法的数据关联。
(4)轨迹(上一时刻的检测框)成功与检测框匹配。
(5)进行卡尔曼滤波的融合,是检测框与预测框的融合,融合完后更新到轨迹中。
情况2:确定的轨迹,一级匹配失败,二级匹配成功
匹配失败分为轨迹匹配失败和检测框匹配失败两种。
轨迹匹配失败:
有些轨迹没有检测框与之匹配,原因是检测可能发生了漏检,某时刻,预测的轨迹tracks还在,但是检测器没有检测到与之对应的目标;也可能是这个目标消失不见了,或者被遮挡了,没有检测框了。
检测框匹配失败:
有些检测框匹配不上轨迹,原因可能是某一时刻有一个物体是新进入的镜头,就会发生检测框匹配不到tracks的情况,因为这个物体是新来的,在这之前并没有它的轨迹;也可能是物体长时间被遮挡后的检测,导致检测到的物体没有可以与之匹配的轨迹(长时间遮挡超过阈值轨迹被删除)。
流程:
(1)对于确定的轨迹来说与目标检测的检测框进行级联匹配,也就是利用马氏距离和图像特征相似度余弦距离进行匈牙利算法的数据关联。
(2)轨迹没有与检测框匹配,则对这些轨迹进行与检测框的IOU匹配,匹配成功。
(IOU匹配可以有效匹配静态场景几何体的部分遮挡的情况,提高匹配成功率。这里相当于进行多次匹配,第一次匹配成功那就成功,匹配不上再给一次机会,进行IOU匹配,这次匹配上也算匹配上。)
(3)检测框没有与轨迹匹配上,则对这些检测框进行与轨迹的IOU匹配,匹配成功。
(4)进行卡尔曼滤波的融合,是检测框与预测框的融合,融合完后更新到轨迹中。
情况3:确定的轨迹,一级匹配失败,二级匹配也失败。
流程:
(1)对于二级匹配失败的检测框,建立一个新的不确定的轨迹。因为匹配失败可能是视野中出现新目标了,也可能就是检测器的误检测,对这个检测框要不要建立真实轨迹是不一定的,也就是unconfirmed轨迹。
(2)这个新不确定的轨迹要经过一个考验才能成为真实轨迹,那就是要连续三帧都要有检测框对其进行成功匹配,那就确定是一个真实轨迹了。
(3)对于考核期的轨迹(3帧考核,unconfirmed轨迹),直接进行IOU匹配,匹配成功,计数加1,连续三次匹配成功,则变更为确定的轨迹。确认的轨迹接下来就会保存外观特征100帧。考察期间的轨迹在3帧内匹配失败,则直接删除,判定为偶然的误报。
(4)对于再次匹配失败的轨迹来说,如果这个轨迹是待确定的轨迹,则删除,如果是确定的轨迹,则判断接下来几帧(max age帧,30帧)是否还能匹配上,超过30帧了还不能匹配上,放弃了,这个轨迹终止了。可能是真的终止了,也可能是长时间遮挡,这个就是这个阈值max age的容忍程度了,遮挡太久就没办法了,只能认为是新目标了,也就是跟丢了。
如果在30帧内,那继续给你机会进行IOU匹配,这时候即使匹配成功了,也要进行三帧考察。
DeepSORT中采用了一个简单的CNN来提取被检测物体的外观特征,在每次检测追踪后,进行一次物体外观特征的提取并保存,最多保存100帧。
后面每执行一步时,都要执行一次当前帧被检测物体外观特征与之前存储的外观特征的相似度计算,这个相似度将作为一个重要的判别依据。
Deep Sort 采用了经过大规模人员重新识别数据集训练的 Cosine 深度特征网络,该数据集包含 1,261 位行人的 1,100,000 多张图像,使其非常适合在人员跟踪环境中进行深度度量学习。
Cosine 深度特征网络使用了宽残差网络,该网络具有 2 个卷积层和 6 个残差块,L2 归一化层能够计算不同行人间的相似性,以与余弦外观度量兼容。通过计算行人间的余弦距离,余弦距离越小,两行人图像越相似。Cosine 深度特征网络结构如下图所示。
使用 Cosine 深度特征网络参数,将每个检测框内图片压缩为最能表征图片特异信息的128维向量,并归一化后得到外观描述向量。
DeepSort使用马氏距离表示检测框到轨迹的距离,马氏距离就是“加强版的欧氏距离”。
马氏距离规避了欧氏距离中对于数据特征方差不同的风险,在计算中添加了协方差矩阵,其目的就是进行方差归一化,从而使所谓的“距离”更加符合数据特征以及实际意义。
马氏距离是旋转变换缩放后的欧氏距离,它将样本的协方差矩阵纳入距离度量计算,相当于对欧式距离的修正。
马氏距离完成正交,解决了特征间相关性的问题,内含标准化,解决了特征间尺度不一致的问题。
马氏距离可用于判断点到某个分布的距离。
马氏距离是表示数据的协方差距离,计算两个未知样本集的相似度的方法。
公式:
马氏距离是旋转变换缩放后的欧氏距离,所以马氏距离的计算公式可以由欧式距离推导而来。
如果协方差矩阵为单位矩阵,马氏距离就简化为欧式距离。
欧式距离两个分量的权值都是1,而马氏距离可以是其他值。
等距线:
旋转椭圆
马氏距离,将变量按照主成分进行旋转,让维度间相互独立,然后进行标准化,让维度同分布。
由于马氏距离在遮挡后的度量有些问题,因此DeepSort加入了图像特征相似度度来进行综合判断。
余弦距离则是一种相似度度量方式。
马氏距离是针对于位置进行区分,而余弦距离则是针对于方向和特征。
余弦相似度是一种常用的衡量向量之间相似度的方法,它可以用于计算两个向量之间的夹角的余弦值。
在图像相似度计算中,可以将图像转换为特征向量,在DeepSort中就是使用了ReID网络,然后使用余弦相似度来比较这些特征向量的相似程度。
余弦相似度的计算公式如下:
其中,A和B分别表示两个向量,·表示向量的点积,||A||和||B||表示向量的范数(即向量的长度)。
余弦相似度的取值范围在 -1 到 1 之间,值越接近 1 表示两个向量越相似,越接近 -1 表示两个向量越不相似,接近 0 表示两个向量之间没有明显的相似性或差异。
在图像相似度计算中,可以将图像转换为特征向量(如使用卷积神经网络提取的特征向量),然后计算这些特征向量之间的余弦相似度来衡量图像的相似性。
DeepSort着重要解决的一个问题就是遮挡后的ID切换的问题,在遮挡一段时间后不管是IOU距离还是马氏距离,其实效果都不是很理想。
因此要想建立这种远程联系就要进行特征比对。
这个很像孪生网络的思想,建立一个历史目标库,检测框与目标库一一比对,相似度高的就是同一个目标,进行轨迹关联。
因此这里的ReID网络自然也可以用孪生网络来做。
孪生网络的应用有两种思路,一种就是当做ReID网络来用,下一帧使用检测器检测出来,然后对框内的目标进行相似度比对,这是判别式的思想。
另一种是当做生成式来用,对上一帧的检测框里面的目标进行特征提取,然后下一帧就不用检测器了,而是直接去所搜区域,逐一进行相似度比对找到目标。
——————
浅谈则止,细致入微AI大道理
扫描下方“AI大道理”,选择“关注”公众号
—————————————————————
—————————————————————
投稿吧 | 留言吧