卡尔曼滤波预测的跟踪框过大或过小的问题

使用deepsort做目标跟踪,有时会出现这样的情况:

img

当目标活动较大或者由垂直变为平行式
卡尔曼滤波所预测的跟踪框会比检测框大,或者小。虽然能做到跟踪同一目标,但是跟踪框内会包含出跟踪目标外的对于信息,或者跟踪框内只包含跟踪目标的部分信息。
请问需要怎么解决这个问题?是否需要修改代码中的卡尔曼滤波的相关参数?

  • 这篇文章讲的很详细,请看:多目标跟踪-DeepSort分析(一)论文解读及代码架构
  • 除此之外, 这篇博客: 超轻量的deepsort目标跟踪源码分享中的 1.1 检测模型 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • yolo-fatest(大小1.4M)
    • yolo-fatest-xl(大小3.7M)
    • yolov5s(大小14.8M)
  • 以下回答由chatgpt基于相关博客总结生成:

    针对卡尔曼滤波预测的跟踪框大小与检测框不匹配的问题,可以从以下几个方面尝试解决:

    1.调整卡尔曼滤波的参数 可以通过调整卡尔曼滤波的参数,如协方差矩阵的初始值、过程噪声、测量噪声等,来优化预测的跟踪框大小与检测框的匹配。具体的调整方法可以参考卡尔曼滤波器的相关资料进行尝试。

    2.使用级联匹配算法 在级联匹配算法中,可以根据跟踪器的状态(如time_since_update参数)来分配优先级,以保证重要目标的跟踪状态。同时,通过设定阈值,可以避免错误匹配的情况。

    3.使用运动模型距离(马氏距离)进行匹配 可以考虑使用运动模型距离(马氏距离)来进行匹配,以更加准确地匹配跟踪框和检测框。具体实现方式可以参考DeepSORT算法中的实现方法。

    4.获取更准确的检测框特征 可以考虑优化目标检测器的模型或参数,以获取更准确的检测框特征,从而提高跟踪框和检测框之间的匹配精度。

    5.综合考虑多种因素进行匹配 在进行匹配时,可以综合考虑多种因素,如外观特征、运动模型距离、时间距离等,以得到更加准确的匹配结果。

    具体的实现方法需要结合具体的情况进行尝试和优化,可以根据实际情况选择合适的方法来解决该问题。

以下答案由GPT-4.0Plus大模型与博主A努力中.......共同编写:
您遇到的问题是:卡尔曼滤波器跟踪得到的框与检测框大小不匹配,要么过大覆盖了非目标区域,要么过小没有覆盖整个目标。
这是卡尔曼滤波器在跟踪初期的参数估计不准确导致的。要解决这个问题,可以采取以下措施:

  1. 调整卡尔曼滤波器的初始化参数。在跟踪开始时,检测框可以作为卡尔曼滤波器的初始状态量,这样可以避免跟踪初期出现框大小不匹配的问题。
  2. 调整过程噪声方差。过程噪声方差决定新状态量跟旧状态量之间的相关性,值过大会导致框大小变化太快,值过小跟踪框难以拟合目标。需要选择一个适宜的值。
  3. 增加系统观测量。系统观测量可以在滤波预测时修正状态量,减小跟踪误差。可以将检测框的信息也作为观测量引入,辅助卡尔曼滤波器产生更准确的跟踪结果。
  4. 调整状态向量。卡尔曼滤波器的状态向量决定跟踪框的表示方式。如果状态量不能很好代表目标运动或形变,也会导致跟踪效果不理想。可根据目标特点选择更合适的状态向量。
  5. 增加时间更新。时间更新决定跟踪框在两帧之间的预测变化量。如果时间过长,跟踪框可能难以准确跟踪快速运动的目标。适当减小时间间隔可以提高跟踪精度。
    所以,总结来说,需要从以下几个方面提高卡尔曼滤波器的跟踪精度:
  1. 选择更合适的初始参数和过程噪声方差
  2. 增加检测框等观测量提高预测准确性
  3. 选择能很好代表目标的状态向量
  4. 适当减小时间更新的间隔
    通过调整以上参数,卡尔曼滤波器可以达到更加准确和稳定的跟踪效果,实现较为满意的框定位。