ifzhang / ByteTrack

[ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box
MIT License
4.63k stars 879 forks source link

Memory leak due to removed_stracks #328

Open pavelbugneac opened 1 year ago

pavelbugneac commented 1 year ago

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.

Vladimir-125 commented 1 year ago

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!

ghost commented 1 year ago

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.