DeepSORT是针对多目标跟踪的跟踪算法。有人可能会想,将传统的单目标跟踪算法直接用于多目标跟踪,一起对每一个目标进行单目标跟踪不可以吗?理论上似乎可行,但是实际应用中会发现,单纯的套用单目标跟踪算法用于多个目标进行跟踪的结果并不理想。至于有多不理想,举个栗子,把KCF用于多目标跟踪,结果就是KCF的帧率变低(初始帧框完后,后继帧中框出目标的速度极慢,完全跟不上目标的移动速度);即便把极速的mosse用于多目标跟踪,结果也是不尽人意,精度大幅降低(更多的是把背景框出而不是目标)。
如何对多目标进行跟踪呢?
为什么选择与detection进行结合呢?
为什么不可以直接用detection进行多目标跟踪呢?
这是因为检测算法有时会出现漏检的情况,在跟踪算法中一旦跟踪丢了目标就很难再继续跟踪下去了。
如果遇到漏检的情况,将失去身份ID,而仅仅使用detection进行跟踪结果也并不理想,所以就提出了track+detection的多目标跟踪思路。这里需要提一句的是,对于跟踪,算法并不知道自己跟踪的目标内容是什么,它只负责跟踪,具体是什么并不需要知道,那么就会出现重识别(ReID)的问题:
什么是重识别?如上图,紫色框表示上一帧的目标track,黑框表示当前帧检测到的四个目标,上一帧的目标(紫)跟检测出来的四个目标(黑)中哪一个是同一个目标呢?这也是多目标跟踪要做的数据关联:上一时刻的目标,和当前时刻的目标,怎么匹配关联起来。实现策略有很多,思路就是训练一个网络使它最小化类内误差,最大化类间误差。
在目标跟踪中还会遇到一个问题就是身份变换(IDswitch)问题:
如上图:白色框表示track,蓝色框表示detection。图1中有四个ID:37,41,45,38。随着目标移动,ID41把ID38挡住(图4),detection检测不到ID38,而ID37如果刚好走到ID38原来的位置附近(从图片可以看出来,37走向和38走向是相对的,38被从右侧走到了左侧途中经过了遮挡,37从左侧走到了右侧可能也发生了遮挡),检测器可能会把37识别成38,把后继帧出现的38识别成37,从而导致身份变换。
DeepSort
在DeepSORT提出之前是SORT算法(SORT论文链接),但是它对身份变换的问题,仅仅采取框和框之间距离的匹配方式,没有考虑框内的内容,所以容易发生身份变换,不过这个问题已经在2017年的论文中进行了解决,即DeepSORT。
