【问题标题】:SORT Tracker - Parameter SettingSORT Tracker - 参数设置
【发布时间】:2019-09-11 09:38:37
【问题描述】:

我在足球视频中遇到了一些与 SORT 跟踪器(卡尔曼滤波器和匈牙利算法的组合)结合 YOLO v3 相关的问题。 正如主要论文中所提到的,SORT 在身份转换方面受到很多影响(换句话说,即使跟踪的对象相同,ID 也会发生变化),在没有遮挡的情况下也是如此!我想知道我是否可以(稍微)通过校准参数 max_age(没有分配 id 可以通过的时间)和 max_hits 来缓解这个问题。这些参数如何影响最终跟踪?还有匈牙利语的IoU参数?非常感谢!

class Sort(object):
  def __init__(self,max_age=8,min_hits=3):
    """
    Sets key parameters for SORT
    """
    self.max_age = max_age
    self.min_hits = min_hits
    self.trackers = []
    self.frame_count = 0

  def update(self,dets):
    """
    Params:
      dets - a numpy array of detections in the format [[x,y,w,h,score],[x,y,w,h,score],...]
    Requires: this method must be called once for each frame even with empty detections.
    Returns the a similar array, where the last column is the object ID.

    NOTE: The number of objects returned may differ from the number of detections provided.
    """

    # prevent "too many indices for array" error
    if len(dets)==0:
      return np.empty((0,5))

    self.frame_count += 1
    #get predicted locations from existing trackers.
    trks = np.zeros((len(self.trackers),5))
    to_del = []
    ret = []
    for t,trk in enumerate(trks):
      pos = self.trackers[t].predict()[0]
      trk[:] = [pos[0], pos[1], pos[2], pos[3], 0]
      if(np.any(np.isnan(pos))):
        to_del.append(t)
    trks = np.ma.compress_rows(np.ma.masked_invalid(trks))
    for t in reversed(to_del):
      self.trackers.pop(t)
    matched, unmatched_dets, unmatched_trks = associate_detections_to_trackers(dets,trks)

    #update matched trackers with assigned detections
    for t,trk in enumerate(self.trackers):
      if(t not in unmatched_trks):
        d = matched[np.where(matched[:,1]==t)[0],0]
        trk.update(dets[d,:][0])

    #create and initialise new trackers for unmatched detections
    for i in unmatched_dets:
        trk = KalmanBoxTracker(dets[i,:])
        self.trackers.append(trk)
    i = len(self.trackers)
    for trk in reversed(self.trackers):
        d = trk.get_state()[0]
        if((trk.time_since_update < 1) and (trk.hit_streak >= self.min_hits or self.frame_count <= self.min_hits)):
          ret.append(np.concatenate((d,[trk.id+1])).reshape(1,-1)) # +1 as MOT benchmark requires positive
        i -= 1
        #remove dead tracklet
        if(trk.time_since_update > self.max_age):
          self.trackers.pop(i)
    if(len(ret)>0):

【问题讨论】:

    标签: python sorting computer-vision yolo


    【解决方案1】:

    如果您提高 max_age,您可能会在丢失/离开场景的对象和进入最后看到的区域的新对象之间产生混淆。你应该使用这个参数(也许提高一点)并降低卡尔曼的 IOU。这将创建更长和更强大的跟踪,增加不同 ID 合并到一个跟踪中的风险。这种调整对于您的跟踪器的性能至关重要,并且高度依赖于数据。祝你好运:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多