ByteTrack icon indicating copy to clipboard operation
ByteTrack copied to clipboard

Memory leak due to removed_stracks

Open pavelbugneac opened this issue 2 years ago • 2 comments

Hi!

There seems to be a memory leak coming from removed_stracks.

self.lost_stracks.extend(lost_stracks)
self.lost_stracks = sub_stracks(self.lost_stracks, self.removed_stracks)
self.removed_stracks.extend(removed_stracks)

In bytetrack.py, the self.removed_stracks variable increases without limit. Over time this can lead to running out of RAM memory if we run inference on larger videos or rtsp streams. This also in turn makes tracking inference speed slower over time, since sub_stracks function loops over all elements of self.removed_stracks. There is already an open pr with a suggested solution #249 which ive tested and it works well. Could you either approve or add your own solution to this?

Thank you.

pavelbugneac avatar Apr 06 '23 15:04 pavelbugneac

I have noticed the same issue! Because it keeps all the removed_stracks it seems that Python keeps references to the KalmanFilter computation matrixes as well. Which quickly adds up to use a huge portion or memory!

Vladimir-125 avatar Jun 29 '23 02:06 Vladimir-125

see how ultralytics handle this problem: https://github.com/ultralytics/ultralytics/blob/main/ultralytics/trackers/byte_tracker.py#L291 Perhaps the author keep all the removed_stracks for other purposes, after all, it is for academic study.

ghost avatar Aug 05 '23 08:08 ghost