Skip to content

Commit

Permalink
Merge pull request #1683 from mikel-brostrom/standardize-tracker-naming
Browse files Browse the repository at this point in the history
follow tracker name convention
  • Loading branch information
mikel-brostrom authored Oct 1, 2024
2 parents e1ec94c + e105138 commit 9b1ab41
Show file tree
Hide file tree
Showing 18 changed files with 51 additions and 46 deletions.
16 changes: 8 additions & 8 deletions boxmot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@

from boxmot.postprocessing.gsi import gsi
from boxmot.tracker_zoo import create_tracker, get_tracker_config
from boxmot.trackers.botsort.botsort import BoTSORT
from boxmot.trackers.bytetrack.byte_tracker import BYTETracker
from boxmot.trackers.deepocsort.deep_ocsort import DeepOCSort as DeepOCSORT
from boxmot.trackers.hybridsort.hybridsort import HybridSORT
from boxmot.trackers.ocsort.ocsort import OCSort as OCSORT
from boxmot.trackers.strongsort.strong_sort import StrongSORT
from boxmot.trackers.imprassoc.impr_assoc_tracker import ImprAssocTrack
from boxmot.trackers.botsort.botsort import BotSort
from boxmot.trackers.bytetrack.bytetrack import ByteTrack
from boxmot.trackers.deepocsort.deepocsort import DeepOcSort
from boxmot.trackers.hybridsort.hybridsort import HybridSort
from boxmot.trackers.ocsort.ocsort import OcSort
from boxmot.trackers.strongsort.strongsort import StrongSort
from boxmot.trackers.imprassoc.imprassoctrack import ImprAssocTrack


TRACKERS = ['bytetrack', 'botsort', 'strongsort', 'ocsort', 'deepocsort', 'hybridsort', 'imprassoc']

__all__ = ("__version__",
"StrongSORT", "OCSORT", "BYTETracker", "BoTSORT", "DeepOCSORT", "HybridSORT", "ImprAssocTrack"
"StrongSort", "OcSort", "ByteTrack", "BotSort", "DeepOcSort", "HybridSort", "ImprAssocTrack"
"create_tracker", "get_tracker_config", "gsi")
14 changes: 7 additions & 7 deletions boxmot/tracker_zoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ def create_tracker(tracker_type, tracker_config=None, reid_weights=None, device=

# Map tracker types to their corresponding classes
tracker_mapping = {
'strongsort': 'boxmot.trackers.strongsort.strong_sort.StrongSORT',
'ocsort': 'boxmot.trackers.ocsort.ocsort.OCSort',
'bytetrack': 'boxmot.trackers.bytetrack.byte_tracker.BYTETracker',
'botsort': 'boxmot.trackers.botsort.botsort.BoTSORT',
'deepocsort': 'boxmot.trackers.deepocsort.deep_ocsort.DeepOCSort',
'hybridsort': 'boxmot.trackers.hybridsort.hybridsort.HybridSORT',
'imprassoc': 'boxmot.trackers.imprassoc.impr_assoc_tracker.ImprAssocTrack'
'strongsort': 'boxmot.trackers.strongsort.strongsort.StrongSort',
'ocsort': 'boxmot.trackers.ocsort.ocsort.OcSort',
'bytetrack': 'boxmot.trackers.bytetrack.bytetrack.ByteTrack',
'botsort': 'boxmot.trackers.botsort.botsort.BotSort',
'deepocsort': 'boxmot.trackers.deepocsort.deepocsort.DeepOcSort',
'hybridsort': 'boxmot.trackers.hybridsort.hybridsort.HybridSort',
'imprassoc': 'boxmot.trackers.imprassoc.imprassoctrack.ImprAssocTrack'
}

# Check if the tracker type exists in the mapping
Expand Down
2 changes: 1 addition & 1 deletion boxmot/trackers/botsort/botsort.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@



class BoTSORT(BaseTracker):
class BotSort(BaseTracker):
"""
BoTSORT Tracker: A tracking algorithm that combines appearance and motion-based tracking.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def xyxy(self):
return ret


class BYTETracker(BaseTracker):
class ByteTrack(BaseTracker):
"""
BYTETracker: A tracking algorithm based on ByteTrack, which utilizes motion-based tracking.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def mahalanobis(self, bbox):
return self.kf.md_for_measurement(self.bbox_to_z_func(bbox))


class DeepOCSort(BaseTracker):
class DeepOcSort(BaseTracker):
"""
DeepOCSort Tracker: A tracking algorithm that utilizes a combination of appearance and motion-based tracking.
Expand Down
2 changes: 1 addition & 1 deletion boxmot/trackers/hybridsort/hybridsort.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ def get_state(self):
return convert_x_to_bbox(self.kf.x)


class HybridSORT(BaseTracker):
class HybridSort(BaseTracker):
"""
HybridSORT Tracker: A tracking algorithm that utilizes a combination of appearance and motion-based tracking
and temporal consistency models (TCM) for improved tracking accuracy and robustness.
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion boxmot/trackers/ocsort/ocsort.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def get_state(self):
return convert_x_to_bbox(self.kf.x)


class OCSort(BaseTracker):
class OcSort(BaseTracker):
"""
OCSort Tracker: A tracking algorithm that utilizes motion-based tracking.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from boxmot.trackers.basetracker import BaseTracker


class StrongSORT(object):
class StrongSort(object):
"""
StrongSORT Tracker: A tracking algorithm that utilizes a combination of appearance and motion-based tracking.
Expand Down
4 changes: 2 additions & 2 deletions examples/torchvision_det_boxmot.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@
"import numpy as np\n",
"from pathlib import Path\n",
"\n",
"from boxmot import BoTSORT\n",
"from boxmot import BotSort\n",
"\n",
"# Load a pre-trained Faster R-CNN model\n",
"device = torch.device('cpu') # Use 'cuda' if you have a GPU\n",
"detector = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)\n",
"detector.eval().to(device)\n",
"\n",
"# Initialize the tracker\n",
"tracker = BoTSORT(\n",
"tracker = BotSort(\n",
" reid_weights=Path('osnet_x0_25_msmt17.pt'), # Path to ReID model\n",
" device=device, # Use CPU for inference\n",
" half=False\n",
Expand Down
4 changes: 2 additions & 2 deletions examples/torchvision_pose_boxmot.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
"import cv2\n",
"import numpy as np\n",
"from pathlib import Path\n",
"from boxmot import BoTSORT\n",
"from boxmot import BotSort\n",
"\n",
"# Load a pre-trained Keypoint R-CNN model from torchvision\n",
"device = torch.device('cpu') # Change to 'cuda' if you have a GPU available\n",
"pose_model = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=True)\n",
"pose_model.eval().to(device)\n",
"\n",
"tracker = BoTSORT(\n",
"tracker = BotSort(\n",
" reid_weights=Path('osnet_x0_25_msmt17.pt'), # ReID model to use\n",
" device=device,\n",
" half=False,\n",
Expand Down
4 changes: 2 additions & 2 deletions examples/torchvision_seg_boxmot.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
"import cv2\n",
"import numpy as np\n",
"from pathlib import Path\n",
"from boxmot import BoTSORT\n",
"from boxmot import BotSort\n",
"\n",
"# Load a pre-trained Mask R-CNN model from torchvision\n",
"device = torch.device('cpu') # Change to 'cuda' if you have a GPU available\n",
"segmentation_model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)\n",
"segmentation_model.eval().to(device)\n",
"\n",
"tracker = BoTSORT(\n",
"tracker = BotSort(\n",
" reid_weights=Path('osnet_x0_25_msmt17.pt'), # ReID model to use\n",
" device=device,\n",
" half=False,\n",
Expand Down
Empty file added tests/__init__.py
Empty file.
Empty file added tests/performance/__init__.py
Empty file.
9 changes: 4 additions & 5 deletions tests/performance/test_tracking_p.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@

from numpy.testing import assert_allclose
from boxmot import (
StrongSORT, BoTSORT, DeepOCSORT, OCSORT, BYTETracker, ImprAssocTrack, get_tracker_config, create_tracker,
StrongSort, BotSort, DeepOcSort, OcSort, ByteTrack, ImprAssocTrack, get_tracker_config, create_tracker,
)
from tests.test_config import MOTION_ONLY_TRACKING_NAMES, MOTION_N_APPEARANCE_TRACKING_NAMES

MOTION_N_APPEARANCE_TRACKING_METHODS=['botsort', 'deepocsort', 'strongsort', 'imprassoc']
MOTION_ONLY_TRACKING_METHODS=['ocsort', 'bytetrack']

@pytest.mark.parametrize("tracker_type", MOTION_ONLY_TRACKING_METHODS)
@pytest.mark.parametrize("tracker_type", MOTION_ONLY_TRACKING_NAMES)
def test_motion_tracker_update_time(tracker_type):
tracker_conf = get_tracker_config(tracker_type)
tracker = create_tracker(
Expand Down Expand Up @@ -41,7 +40,7 @@ def test_motion_tracker_update_time(tracker_type):
assert elapsed_time_per_iteration < max_allowed_time, f"Tracking algorithms processing time exceeds the allowed limit: {elapsed_time_per_iteration} > {max_allowed_time}"


@pytest.mark.parametrize("tracker_type", MOTION_N_APPEARANCE_TRACKING_METHODS)
@pytest.mark.parametrize("tracker_type", MOTION_N_APPEARANCE_TRACKING_NAMES)
def test_motion_n_appearance_tracker_update_time(tracker_type):
tracker_conf = get_tracker_config(tracker_type)
tracker = create_tracker(
Expand Down
12 changes: 12 additions & 0 deletions tests/test_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from boxmot import (
StrongSort, BotSort, DeepOcSort, OcSort, ByteTrack, ImprAssocTrack, get_tracker_config, create_tracker,
)

MOTION_N_APPEARANCE_TRACKING_NAMES = ['botsort', 'deepocsort', 'strongsort', 'imprassoc']
MOTION_ONLY_TRACKING_NAMES = ['ocsort', 'bytetrack']

MOTION_N_APPEARANCE_TRACKING_METHODS=[StrongSort, BotSort, DeepOcSort, ImprAssocTrack]
MOTION_ONLY_TRACKING_METHODS=[OcSort, ByteTrack]

ALL_TRACKERS = ['botsort', 'deepocsort', 'ocsort', 'bytetrack', 'strongsort', 'imprassoc']
PER_CLASS_TRACKERS = ['botsort', 'deepocsort', 'ocsort', 'bytetrack', 'imprassoc']
Empty file added tests/unit/__init__.py
Empty file.
22 changes: 8 additions & 14 deletions tests/unit/test_trackers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,12 @@

from numpy.testing import assert_allclose
from boxmot import (
StrongSORT, BoTSORT, DeepOCSORT, OCSORT, BYTETracker, ImprAssocTrack, get_tracker_config, create_tracker,
StrongSort, BotSort, DeepOcSort, OcSort, ByteTrack, ImprAssocTrack, get_tracker_config, create_tracker,
)

from boxmot.trackers.ocsort.ocsort import KalmanBoxTracker as OCSortKalmanBoxTracker
from boxmot.trackers.deepocsort.deep_ocsort import KalmanBoxTracker as DeepOCSortKalmanBoxTracker



MOTION_ONLY_TRACKING_METHODS=[OCSORT, BYTETracker]
MOTION_N_APPEARANCE_TRACKING_METHODS=[StrongSORT, BoTSORT, DeepOCSORT, ImprAssocTrack]
ALL_TRACKERS=['botsort', 'deepocsort', 'ocsort', 'bytetrack', 'strongsort', 'imprassoc']
PER_CLASS_TRACKERS=['botsort', 'deepocsort', 'ocsort', 'bytetrack', 'imprassoc']
from boxmot.trackers.deepocsort.deepocsort import KalmanBoxTracker as DeepOCSortKalmanBoxTracker
from tests.test_config import MOTION_ONLY_TRACKING_METHODS, MOTION_N_APPEARANCE_TRACKING_METHODS, ALL_TRACKERS, PER_CLASS_TRACKERS


@pytest.mark.parametrize("Tracker", MOTION_N_APPEARANCE_TRACKING_METHODS)
Expand Down Expand Up @@ -56,7 +50,7 @@ def test_tracker_output_size(tracker_type):

def test_dynamic_max_obs_based_on_max_age():
max_age = 400
ocsort = OCSORT(
ocsort = OcSort(
max_age=max_age
)

Expand Down Expand Up @@ -84,14 +78,14 @@ def create_kalman_box_tracker_deepocsort(bbox, cls, det_ind, tracker):


TRACKER_CREATORS = {
OCSORT: create_kalman_box_tracker_ocsort,
DeepOCSORT: create_kalman_box_tracker_deepocsort,
OcSort: create_kalman_box_tracker_ocsort,
DeepOcSort: create_kalman_box_tracker_deepocsort,
}


@pytest.mark.parametrize("Tracker, init_args", [
(OCSORT, {}),
(DeepOCSORT, {
(OcSort, {}),
(DeepOcSort, {
'reid_weights': Path(WEIGHTS / 'osnet_x0_25_msmt17.pt'),
'device': 'cpu',
'half': True
Expand Down

0 comments on commit 9b1ab41

Please sign in to comment.