Safemotion Lib
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
base_tracker.BaseTracker Class Reference
Inheritance diagram for base_tracker.BaseTracker:
byte_tracker.ByteTracker

Public Member Functions

 __init__ (self, momentums=None, num_frames_retain=30)
 
 reset (self)
 
 empty (self)
 
 ids (self)
 
 with_reid (self)
 
 update (self, **kwargs)
 
 pop_invalid_tracks (self, frame_id)
 
 update_track (self, id, obj)
 
 init_track (self, id, obj)
 
 track (self, *args, **kwargs)
 

Public Attributes

 momentums
 
 num_frames_retain
 
 fp16_enabled
 
 num_tracks
 
 tracks
 
 memo_items
 

Detailed Description

Base tracker model.

Args:
    momentums (dict[str:float], optional): Momentums to update the buffers.
        The `str` indicates the name of the buffer while the `float`
        indicates the momentum. Default to None.
    num_frames_retain (int, optional). If a track is disappeared more than
        `num_frames_retain` frames, it will be deleted in the memo.
    init_cfg (dict or list[dict], optional): Initialization config dict.
        Defaults to None.

Definition at line 5 of file base_tracker.py.

Constructor & Destructor Documentation

◆ __init__()

base_tracker.BaseTracker.__init__ ( self,
momentums = None,
num_frames_retain = 30 )

Reimplemented in byte_tracker.ByteTracker.

Definition at line 18 of file base_tracker.py.

18 def __init__(self, momentums=None, num_frames_retain=30):
19 # super().__init__(init_cfg)
20 if momentums is not None:
21 assert isinstance(momentums, dict), 'momentums must be a dict'
22 self.momentums = momentums
23 self.num_frames_retain = num_frames_retain
24 self.fp16_enabled = False
25
26 self.reset()
27

Member Function Documentation

◆ empty()

base_tracker.BaseTracker.empty ( self)
Whether the buffer is empty or not.

Definition at line 34 of file base_tracker.py.

34 def empty(self):
35 """Whether the buffer is empty or not."""
36 return False if self.tracks else True
37

◆ ids()

base_tracker.BaseTracker.ids ( self)
All ids in the tracker.

Definition at line 39 of file base_tracker.py.

39 def ids(self):
40 """All ids in the tracker."""
41 return list(self.tracks.keys())
42

◆ init_track()

base_tracker.BaseTracker.init_track ( self,
id,
obj )
Initialize a track.

Reimplemented in byte_tracker.ByteTracker.

Definition at line 106 of file base_tracker.py.

106 def init_track(self, id, obj):
107 """Initialize a track."""
108 self.tracks[id] = Dict()
109 for k, v in zip(self.memo_items, obj):
110 v = v[None]
111 if self.momentums is not None and k in self.momentums:
112 self.tracks[id][k] = v
113 else:
114 self.tracks[id][k] = [v]
115

◆ pop_invalid_tracks()

base_tracker.BaseTracker.pop_invalid_tracks ( self,
frame_id )
Pop out invalid tracks.

Reimplemented in byte_tracker.ByteTracker.

Definition at line 87 of file base_tracker.py.

87 def pop_invalid_tracks(self, frame_id):
88 """Pop out invalid tracks."""
89 invalid_ids = []
90 for k, v in self.tracks.items():
91 if frame_id - v['frame_ids'][-1] >= self.num_frames_retain:
92 invalid_ids.append(k)
93 for invalid_id in invalid_ids:
94 self.tracks.pop(invalid_id)
95

◆ reset()

base_tracker.BaseTracker.reset ( self)
Reset the buffer of the tracker.

Definition at line 28 of file base_tracker.py.

28 def reset(self):
29 """Reset the buffer of the tracker."""
30 self.num_tracks = 0
31 self.tracks = dict()
32

◆ track()

base_tracker.BaseTracker.track ( self,
* args,
** kwargs )
Tracking forward function.

Reimplemented in byte_tracker.ByteTracker.

Definition at line 117 of file base_tracker.py.

117 def track(self, *args, **kwargs):
118 """Tracking forward function."""
119 pass

◆ update()

base_tracker.BaseTracker.update ( self,
** kwargs )
Update the tracker.

Args:
    kwargs (dict[str: Tensor | int]): The `str` indicates the
        name of the input variable. `ids` and `frame_ids` are
        obligatory in the keys.

Definition at line 48 of file base_tracker.py.

48 def update(self, **kwargs):
49 """Update the tracker.
50
51 Args:
52 kwargs (dict[str: Tensor | int]): The `str` indicates the
53 name of the input variable. `ids` and `frame_ids` are
54 obligatory in the keys.
55 """
56
57 memo_items = [k for k, v in kwargs.items() if v is not None]
58 rm_items = [k for k in kwargs.keys() if k not in memo_items]
59 for item in rm_items:
60 kwargs.pop(item)
61 if not hasattr(self, 'memo_items'):
62 self.memo_items = memo_items
63 else:
64 assert memo_items == self.memo_items
65
66 assert 'ids' in memo_items
67 num_objs = len(kwargs['ids'])
68 id_indice = memo_items.index('ids')
69 assert 'frame_ids' in memo_items
70 frame_id = int(kwargs['frame_ids'])
71 if isinstance(kwargs['frame_ids'], int):
72 kwargs['frame_ids'] = torch.tensor([kwargs['frame_ids']] * num_objs)
73 # cur_frame_id = int(kwargs['frame_ids'][0])
74 for k, v in kwargs.items():
75 if len(v) != num_objs:
76 raise ValueError()
77
78 for obj in zip(*kwargs.values()):
79 id = int(obj[id_indice])
80 if id in self.tracks:
81 self.update_track(id, obj)
82 else:
83 self.init_track(id, obj)
84
85 self.pop_invalid_tracks(frame_id)
86

◆ update_track()

base_tracker.BaseTracker.update_track ( self,
id,
obj )
Update a track.

Reimplemented in byte_tracker.ByteTracker.

Definition at line 96 of file base_tracker.py.

96 def update_track(self, id, obj):
97 """Update a track."""
98 for k, v in zip(self.memo_items, obj):
99 v = v[None]
100 if self.momentums is not None and k in self.momentums:
101 m = self.momentums[k]
102 self.tracks[id][k] = (1 - m) * self.tracks[id][k] + m * v
103 else:
104 self.tracks[id][k].append(v)
105

◆ with_reid()

base_tracker.BaseTracker.with_reid ( self)
bool: whether the framework has a reid model

Definition at line 44 of file base_tracker.py.

44 def with_reid(self):
45 """bool: whether the framework has a reid model"""
46 return hasattr(self, 'reid') and self.reid is not None
47

Member Data Documentation

◆ fp16_enabled

base_tracker.BaseTracker.fp16_enabled

Definition at line 24 of file base_tracker.py.

◆ memo_items

base_tracker.BaseTracker.memo_items

Definition at line 62 of file base_tracker.py.

◆ momentums

base_tracker.BaseTracker.momentums

Definition at line 22 of file base_tracker.py.

◆ num_frames_retain

base_tracker.BaseTracker.num_frames_retain

Definition at line 23 of file base_tracker.py.

◆ num_tracks

base_tracker.BaseTracker.num_tracks

Definition at line 30 of file base_tracker.py.

◆ tracks

base_tracker.BaseTracker.tracks

Definition at line 31 of file base_tracker.py.


The documentation for this class was generated from the following file: