Skip to content

最终更新状态可以更好? #449

@SpringCCC

Description

@SpringCCC

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都置为[]是最好的

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions