-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
1)self.tracked_stracks = [t for t in self.tracked_stracks if t.state == TrackState.Tracked] 2)self.tracked_stracks = joint_stracks(self.tracked_stracks, activated_starcks) 3)self.tracked_stracks = joint_stracks(self.tracked_stracks, refind_stracks) 4)self.lost_stracks = sub_stracks(self.lost_stracks, self.tracked_stracks) 5)self.lost_stracks.extend(lost_stracks) 6)self.lost_stracks = sub_stracks(self.lost_stracks, self.removed_stracks) 7)self.removed_stracks.extend(removed_stracks) 8)self.tracked_stracks, self.lost_stracks = remove_duplicate_stracks(self.tracked_stracks, self.lost_stracks)
这段代码逻辑有点小问题
状态为lost:可能变成remove,也可能变成track,也可能不变,因此需要把第7行代码上移一行,也就是6、7行代码交换位置,此时逻辑更严谨。
举个简单的例子,有一个轨迹,状态为lost,连续30帧都是lost,然后被remove,此时按照当前代码的逻辑,先执行第六行,但在此时,self.lost_stracks本身还包含这个要被remove轨迹,但self.removed_stracks中还没有把这个要被remove的轨迹extend进来,此时执行第六行,再执行第七行,那么这个要被remove的轨迹就还在self.lost_stracks中,并没有被移除,必须等到下一帧,再执行到这里时才会被移除
还有个问题就是,当运行时间很长时,会导致self.removed_stracks中包含的轨迹过多,我觉得self.removed_stracks中保留最近几帧,最多30帧的removed_stracks即可,
为了更好的执行,把上面的代码6\7行交换,修复逻辑,然后每次把self.removed_stracks都置为[]是最好的