opensportslib 0.0.1.dev18__tar.gz → 0.0.1.dev19__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {opensportslib-0.0.1.dev18/opensportslib.egg-info → opensportslib-0.0.1.dev19}/PKG-INFO +1 -1
  2. opensportslib-0.0.1.dev19/opensportslib/config/localization-json_calf_resnetpca512.yaml +169 -0
  3. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/localization-json_netvlad++_resnetpca512.yaml +3 -1
  4. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/calf.py +2 -2
  5. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/trainer/localization_trainer.py +45 -16
  6. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/checkpoint.py +17 -8
  7. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/contextaware.py +2 -2
  8. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/utils.py +1 -1
  9. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19/opensportslib.egg-info}/PKG-INFO +1 -1
  10. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib.egg-info/SOURCES.txt +1 -0
  11. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/pyproject.toml +1 -1
  12. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/LICENSE +0 -0
  13. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/LICENSE-COMMERCIAL +0 -0
  14. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/MANIFEST.in +0 -0
  15. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/README.md +0 -0
  16. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/examples/quickstart/basic_classification.py +0 -0
  17. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/examples/quickstart/basic_localization.py +0 -0
  18. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/__init__.py +0 -0
  19. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/apis/__init__.py +0 -0
  20. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/apis/classification.py +0 -0
  21. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/apis/localization.py +0 -0
  22. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/classification.yaml +0 -0
  23. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/localization-e2e-ocv.yaml +0 -0
  24. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/localization.yaml +0 -0
  25. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/sngar-frames.yaml +0 -0
  26. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/config/sngar-tracking.yaml +0 -0
  27. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/__init__.py +0 -0
  28. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/__init__.py +0 -0
  29. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/builder.py +0 -0
  30. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/ce.py +0 -0
  31. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/combine.py +0 -0
  32. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/loss/nll.py +0 -0
  33. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/optimizer/__init__.py +0 -0
  34. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/optimizer/builder.py +0 -0
  35. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  36. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/scheduler/__init__.py +0 -0
  37. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/scheduler/builder.py +0 -0
  38. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/trainer/__init__.py +0 -0
  39. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/trainer/classification_trainer.py +0 -0
  40. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/config.py +0 -0
  41. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/data.py +0 -0
  42. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/ddp.py +0 -0
  43. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/default_args.py +0 -0
  44. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/lightning.py +0 -0
  45. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/load_annotations.py +0 -0
  46. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/seed.py +0 -0
  47. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/video_processing.py +0 -0
  48. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/core/utils/wandb.py +0 -0
  49. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/__init__.py +0 -0
  50. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/builder.py +0 -0
  51. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/classification_dataset.py +0 -0
  52. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/localization_dataset.py +0 -0
  53. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/utils/__init__.py +0 -0
  54. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/datasets/utils/tracking.py +0 -0
  55. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/metrics/classification_metric.py +0 -0
  56. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/metrics/localization_metric.py +0 -0
  57. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/__init__.py +0 -0
  58. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/backbones/builder.py +0 -0
  59. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/e2e.py +0 -0
  60. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/learnablepooling.py +0 -0
  61. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/tracking.py +0 -0
  62. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/vars.py +0 -0
  63. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/video.py +0 -0
  64. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/base/video_mae.py +0 -0
  65. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/builder.py +0 -0
  66. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/heads/builder.py +0 -0
  67. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/neck/builder.py +0 -0
  68. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/common.py +0 -0
  69. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/__init__.py +0 -0
  70. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/asformer.py +0 -0
  71. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/calf.py +0 -0
  72. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/gsm.py +0 -0
  73. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/gtad.py +0 -0
  74. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/impl/tsm.py +0 -0
  75. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/litebase.py +0 -0
  76. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/modules.py +0 -0
  77. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib/models/utils/shift.py +0 -0
  78. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib.egg-info/dependency_links.txt +0 -0
  79. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib.egg-info/requires.txt +0 -0
  80. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/opensportslib.egg-info/top_level.txt +0 -0
  81. {opensportslib-0.0.1.dev18 → opensportslib-0.0.1.dev19}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.0.1.dev18
3
+ Version: 0.0.1.dev19
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -0,0 +1,169 @@
1
+ TASK: localization
2
+
3
+ dali: false
4
+
5
+ DATA:
6
+ dataset_name: SoccerNet
7
+ data_dir: /home/vorajv/opensportslib/SoccerNet/
8
+ classes:
9
+ - Penalty
10
+ - Kick-off
11
+ - Goal
12
+ - Substitution
13
+ - Offside
14
+ - Shots on target
15
+ - Shots off target
16
+ - Clearance
17
+ - Ball out of play
18
+ - Throw-in
19
+ - Foul
20
+ - Indirect free-kick
21
+ - Direct free-kick
22
+ - Corner
23
+ - Yellow card
24
+ - Red card
25
+ - Yellow->red card
26
+
27
+ epoch_num_frames: 500000
28
+ mixup: true
29
+ modality: rgb
30
+ crop_dim: -1
31
+ dilate_len: 0 # Dilate ground truth labels
32
+ clip_len: 100
33
+ input_fps: 25
34
+ extract_fps: 2
35
+ imagenet_mean: [0.485, 0.456, 0.406]
36
+ imagenet_std: [0.229, 0.224, 0.225]
37
+ target_height: 224
38
+ target_width: 398
39
+
40
+ train:
41
+ type: FeatureClipChunksfromJson
42
+ classes: ${DATA.classes}
43
+ output_map: [data, label]
44
+ video_path: ${DATA.data_dir}
45
+ path: ${DATA.train.video_path}/annotations-2024-224p-train.json
46
+ framerate: 2
47
+ chunk_size: 120
48
+ receptive_field: 40
49
+ chunks_per_epoch: 6000
50
+ dataloader:
51
+ batch_size: 256
52
+ shuffle: true
53
+ num_workers: 4
54
+ pin_memory: true
55
+
56
+ valid:
57
+ type: FeatureClipChunksfromJson
58
+ classes: ${DATA.classes}
59
+ output_map: [data, label]
60
+ video_path: ${DATA.data_dir}
61
+ path: ${DATA.valid.video_path}/annotations-2024-224p-valid.json
62
+ framerate: 2
63
+ chunk_size: 120
64
+ receptive_field: 40
65
+ chunks_per_epoch: 6000
66
+ dataloader:
67
+ batch_size: 256
68
+ shuffle: true
69
+ num_workers: 4
70
+ pin_memory: true
71
+
72
+ test:
73
+ type: FeatureVideosChunksfromJson
74
+ classes: ${DATA.classes}
75
+ output_map: [data, label]
76
+ video_path: ${DATA.data_dir}
77
+ path: ${DATA.test.video_path}/annotations-2024-224p-test.json
78
+ results: results_spotting_test_calf_resnetpca512
79
+ framerate: 2
80
+ chunk_size: 120
81
+ receptive_field: 40
82
+ chunks_per_epoch: 6000
83
+ metric: loose
84
+ dataloader:
85
+ batch_size: 1
86
+ shuffle: false
87
+ num_workers: 1
88
+ pin_memory: true
89
+
90
+ MODEL:
91
+ type: ContextAware
92
+ runner:
93
+ type: runner_JSON
94
+ backbone:
95
+ type: PreExtactedFeatures
96
+ encoder: ResNET_TF2_PCA512
97
+ feature_dim: 512
98
+ output_dim: 512
99
+ framerate: 2
100
+ neck:
101
+ type: CNN++
102
+ input_size: 512
103
+ num_classes: 17
104
+ chunk_size: 120
105
+ dim_capsule: 16
106
+ receptive_field: 40
107
+ num_detections: 15
108
+ framerate: 2
109
+ head:
110
+ type: SpottingCALF
111
+ dim_capsule: 16
112
+ num_detections: 15
113
+ chunk_size: 120
114
+ num_classes: 17
115
+ load_weights: null
116
+
117
+ TRAIN:
118
+ type: trainer_CALF
119
+ max_epochs: 200
120
+ evaluation_frequency: 200
121
+ framerate: 2
122
+ batch_size: 32
123
+ monitor: valid_loss
124
+ mode: min
125
+
126
+ criterion:
127
+ type: Combined2x
128
+ w_1: 0.000367
129
+ loss_1:
130
+ type: ContextAwareLoss
131
+ K: [[-100, -98, -20, -40, -96, -5, -8, -93, -99, -31, -75, -10, -97, -75, -20, -84, -18],
132
+ [-50, -49, -10, -20, -48, -3, -4, -46, -50, -15, -37, -5, -49, -38, -10, -42, -9],
133
+ [50, 49, 60, 10, 48, 3, 4, 46, 50, 15, 37, 5, 49, 38, 10, 42, 9],
134
+ [100, 98, 90, 20, 96, 5, 8, 93, 99, 31, 75, 10, 97, 75, 20, 84, 18]]
135
+ framerate: 2
136
+ hit_radius: 0.1
137
+ miss_radius: 0.9
138
+ w_2: 1.0
139
+ loss_2:
140
+ type: SpottingLoss
141
+ lambda_coord: 5.0
142
+ lambda_noobj: 0.5
143
+
144
+ optimizer:
145
+ type: Adam
146
+ lr: 0.001
147
+ betas: [0.9, 0.999]
148
+ eps: 1e-07
149
+ weight_decay: 0
150
+ amsgrad: false
151
+
152
+ scheduler:
153
+ type: ReduceLROnPlateau
154
+ mode: min
155
+ factor: 1e-03
156
+ min_lr: 1e-06
157
+ patience: 25
158
+ verbose: true
159
+
160
+
161
+ SYSTEM:
162
+ log_dir: ./logs
163
+ save_dir: ./checkpoints
164
+ work_dir: ${SYSTEM.save_dir}
165
+ seed: 42
166
+ GPU: 4 # number of gpus to use
167
+ device: cuda # auto | cuda | cpu
168
+ gpu_id: 0 # device id for single gpu training
169
+
@@ -74,7 +74,7 @@ DATA:
74
74
  results: results_spotting_test_netvlad++_resnetpca512
75
75
  framerate: 2
76
76
  window_size: 20
77
- metric: tight
77
+ metric: loose
78
78
  dataloader:
79
79
  batch_size: 1
80
80
  shuffle: false
@@ -113,6 +113,8 @@ TRAIN:
113
113
  evaluation_frequency: 200
114
114
  framerate: 2
115
115
  batch_size: 256
116
+ monitor: valid_loss
117
+ mode: min
116
118
 
117
119
  criterion:
118
120
  type: NLLLoss
@@ -26,7 +26,7 @@ class ContextAwareLoss(torch.nn.Module):
26
26
 
27
27
  super(ContextAwareLoss, self).__init__()
28
28
 
29
- self.K = torch.FloatTensor(K * framerate).cuda()
29
+ self.K = torch.FloatTensor(K * framerate)
30
30
  self.hit_radius = float(hit_radius)
31
31
  self.miss_radius = float(miss_radius)
32
32
 
@@ -40,7 +40,7 @@ class ContextAwareLoss(torch.nn.Module):
40
40
  Returns:
41
41
  torch.Tensor: The returned loss.
42
42
  """
43
- K = self.K
43
+ K = self.K.to(output.device)
44
44
  hit_radius = self.hit_radius
45
45
  miss_radius = self.miss_radius
46
46
 
@@ -42,6 +42,7 @@ import tqdm
42
42
  import numpy as np
43
43
  from opensportslib.core.utils.config import load_gz_json, load_json
44
44
  from abc import ABC, abstractmethod
45
+
45
46
  import logging
46
47
  logger = logging.getLogger(__name__)
47
48
 
@@ -159,9 +160,9 @@ class Trainer_pl(Trainer):
159
160
 
160
161
  def __init__(self, cfg, work_dir):
161
162
  from opensportslib.core.utils.lightning import CustomProgressBar, MyCallback
163
+ from pytorch_lightning.callbacks import ModelCheckpoint
162
164
  import pytorch_lightning as pl
163
165
  from pytorch_lightning.loggers import WandbLogger
164
- import wandb
165
166
 
166
167
  wandb_logger = None
167
168
  if wandb.run is not None: # means init_wandb already ran
@@ -169,11 +170,19 @@ class Trainer_pl(Trainer):
169
170
 
170
171
  self.work_dir = work_dir
171
172
  call = MyCallback()
173
+ checkpoint_callback = ModelCheckpoint(
174
+ dirpath=self.work_dir,
175
+ filename="best",
176
+ monitor=getattr(cfg.TRAIN, 'monitor', 'valid_loss'), # or your metric
177
+ mode=getattr(cfg.TRAIN, 'mode', 'min'),
178
+ save_top_k=1,
179
+ )
172
180
  self.trainer = pl.Trainer(
173
181
  logger=wandb_logger,
174
- max_epochs=cfg.TRAIN.max_epochs,
175
- devices=cfg.SYSTEM.GPU,
176
- callbacks=[call, CustomProgressBar(refresh_rate=1)],
182
+ max_epochs=getattr(cfg.TRAIN, 'max_epochs', 200),
183
+ devices="auto",
184
+ accelerator="auto",
185
+ callbacks=[call, CustomProgressBar(refresh_rate=1), checkpoint_callback],
177
186
  num_sanity_val_steps=0,
178
187
  )
179
188
  self.best_checkpoint_path = None
@@ -181,16 +190,27 @@ class Trainer_pl(Trainer):
181
190
  def train(self, **kwargs):
182
191
  self.trainer.fit(**kwargs)
183
192
 
184
- best_model = kwargs["model"].best_state
193
+ # best_model = kwargs["model"].best_state
194
+
195
+ # logging.info("Done training")
196
+ # logging.info("Best epoch: {}".format(best_model.get("epoch")))
197
+ # best_path = os.path.join(self.work_dir, "model.pth.tar")
198
+ # self.best_checkpoint_path = best_path
199
+ # torch.save(best_model, best_path)
200
+
201
+ # logging.info("Model saved")
202
+ # logging.info(best_path)
203
+
204
+ self.best_checkpoint_path = self.trainer.checkpoint_callback.best_model_path
205
+
206
+ from pytorch_lightning.utilities.rank_zero import rank_zero_only
185
207
 
186
- logging.info("Done training")
187
- logging.info("Best epoch: {}".format(best_model.get("epoch")))
188
- best_path = os.path.join(self.work_dir, "model.pth.tar")
189
- self.best_checkpoint_path = best_path
190
- torch.save(best_model, best_path)
208
+ @rank_zero_only
209
+ def log():
210
+ logging.info("Done training")
211
+ logging.info(f"Best model saved at: {self.best_checkpoint_path}")
191
212
 
192
- logging.info("Model saved")
193
- logging.info(best_path)
213
+ log()
194
214
 
195
215
 
196
216
  class Trainer_e2e(Trainer):
@@ -538,12 +558,19 @@ class Inferer:
538
558
  # Run Inference on Dataset
539
559
  from opensportslib.core.utils.lightning import CustomProgressBar, MyCallback
540
560
  import pytorch_lightning as pl
561
+ from pytorch_lightning.loggers import WandbLogger
562
+
563
+ wandb_logger = None
564
+ if wandb.run is not None: # means init_wandb already ran
565
+ wandb_logger = WandbLogger(experiment=wandb.run)
541
566
 
542
567
  if cfg.SYSTEM.work_dir is not None and dataloader is not None:
543
568
 
544
569
  evaluator = pl.Trainer(
570
+ logger=wandb_logger,
545
571
  callbacks=[CustomProgressBar()],
546
- devices=cfg.SYSTEM.GPU,
572
+ devices=1,
573
+ accelerator="auto",
547
574
  num_sanity_val_steps=0,
548
575
  )
549
576
  evaluator.predict(model, dataloader)
@@ -777,7 +804,6 @@ class Evaluator:
777
804
 
778
805
  # detect v2 prediction
779
806
  pred_is_v2 = isinstance(pred_data, dict) and pred_data is not None and "data" in pred_data
780
- print("PRED V2 :", pred_is_v2)
781
807
  # --------------------------------------------------
782
808
  # CLASSES
783
809
  # --------------------------------------------------
@@ -1054,10 +1080,13 @@ class Evaluator:
1054
1080
  "{:0.2f}".format(results["a_mAP_unshown"] * 100),
1055
1081
  )
1056
1082
  )
1057
-
1083
+ header = ["", "Any", "Visible", "Unseen"]
1084
+ result = tabulate(rows, headers=header)
1085
+ from opensportslib.core.utils.wandb import log_table_wandb
1086
+ log_table_wandb(name=f"Final Scores (Metric : {metric})", rows=rows, headers=header)
1058
1087
  logging.info("Best Performance at end of training ")
1059
1088
  logging.info("Metric: " + metric)
1060
- print(tabulate(rows, headers=["", "Any", "Visible", "Unseen"]))
1089
+ logging.info("\n" + result)
1061
1090
  # logging.info("a_mAP visibility all: " + str(results["a_mAP"]))
1062
1091
  # logging.info("a_mAP visibility all per class: " + str( results["a_mAP_per_class"]))
1063
1092
 
@@ -184,16 +184,25 @@ def load_checkpoint(
184
184
  model_keys = list(model.state_dict().keys())
185
185
  ckpt_keys = list(state_dict.keys())
186
186
 
187
- ckpt_has_module = ckpt_keys[0].startswith("module.")
188
- model_has_module = model_keys[0].startswith("module.")
187
+ # ckpt_has_module = ckpt_keys[0].startswith("module.")
188
+ # model_has_module = model_keys[0].startswith("module.")
189
189
 
190
- # Case 1: checkpoint has module., model doesn't
191
- if ckpt_has_module and not model_has_module:
192
- state_dict = {k.replace("module.", "", 1): v for k, v in state_dict.items()}
190
+ # # Case 1: checkpoint has module., model doesn't
191
+ # if ckpt_has_module and not model_has_module:
192
+ # state_dict = {k.replace("module.", "", 1): v for k, v in state_dict.items()}
193
193
 
194
- # Case 2: checkpoint doesn't have module., model does
195
- elif not ckpt_has_module and model_has_module:
196
- state_dict = {f"module.{k}": v for k, v in state_dict.items()}
194
+ # # Case 2: checkpoint doesn't have module., model does
195
+ # elif not ckpt_has_module and model_has_module:
196
+ # state_dict = {f"module.{k}": v for k, v in state_dict.items()}
197
+
198
+ def strip_prefix(state_dict, prefix):
199
+ return {
200
+ k[len(prefix):] if k.startswith(prefix) else k: v
201
+ for k, v in state_dict.items()
202
+ }
203
+
204
+ state_dict = strip_prefix(state_dict, "module.")
205
+ state_dict = strip_prefix(state_dict, "model.")
197
206
 
198
207
  # Optional custom remap
199
208
  if key_remap_fn:
@@ -249,10 +249,10 @@ class LiteContextAwareModel(LiteBaseModel):
249
249
  self.json_data = json_data
250
250
  elif self.runner == "runner_JSON":
251
251
  list_videos = self.trainer.predict_dataloaders.dataset.data_json[0][
252
- "videos"
252
+ "data"
253
253
  ]
254
254
  for index in np.arange(len(list_videos)):
255
- video = list_videos[index]["path"]
255
+ video = list_videos[index]["inputs"][0]["path"]
256
256
 
257
257
  if self.infer_split:
258
258
  video = os.path.splitext(video)[0]
@@ -275,7 +275,7 @@ def predictions2json_runnerjson(
275
275
 
276
276
  confidence = predictions_video[frame_index, class_index]
277
277
 
278
- json_data["predictions"].append(
278
+ json_data["data"][0]["events"].append(
279
279
  get_prediction_data(
280
280
  True,
281
281
  frame_index,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.0.1.dev18
3
+ Version: 0.0.1.dev19
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -16,6 +16,7 @@ opensportslib/apis/classification.py
16
16
  opensportslib/apis/localization.py
17
17
  opensportslib/config/classification.yaml
18
18
  opensportslib/config/localization-e2e-ocv.yaml
19
+ opensportslib/config/localization-json_calf_resnetpca512.yaml
19
20
  opensportslib/config/localization-json_netvlad++_resnetpca512.yaml
20
21
  opensportslib/config/localization.yaml
21
22
  opensportslib/config/sngar-frames.yaml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.0.1.dev18"
7
+ version = "0.0.1.dev19"
8
8
  description = "OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"