sleap-nn 0.1.0a1__py3-none-any.whl → 0.1.0a3__py3-none-any.whl

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 (37) hide show
  1. sleap_nn/__init__.py +1 -1
  2. sleap_nn/cli.py +36 -0
  3. sleap_nn/config/trainer_config.py +18 -0
  4. sleap_nn/evaluation.py +81 -22
  5. sleap_nn/export/__init__.py +21 -0
  6. sleap_nn/export/cli.py +1778 -0
  7. sleap_nn/export/exporters/__init__.py +51 -0
  8. sleap_nn/export/exporters/onnx_exporter.py +80 -0
  9. sleap_nn/export/exporters/tensorrt_exporter.py +291 -0
  10. sleap_nn/export/metadata.py +225 -0
  11. sleap_nn/export/predictors/__init__.py +63 -0
  12. sleap_nn/export/predictors/base.py +22 -0
  13. sleap_nn/export/predictors/onnx.py +154 -0
  14. sleap_nn/export/predictors/tensorrt.py +312 -0
  15. sleap_nn/export/utils.py +307 -0
  16. sleap_nn/export/wrappers/__init__.py +25 -0
  17. sleap_nn/export/wrappers/base.py +96 -0
  18. sleap_nn/export/wrappers/bottomup.py +243 -0
  19. sleap_nn/export/wrappers/bottomup_multiclass.py +195 -0
  20. sleap_nn/export/wrappers/centered_instance.py +56 -0
  21. sleap_nn/export/wrappers/centroid.py +58 -0
  22. sleap_nn/export/wrappers/single_instance.py +83 -0
  23. sleap_nn/export/wrappers/topdown.py +180 -0
  24. sleap_nn/export/wrappers/topdown_multiclass.py +304 -0
  25. sleap_nn/inference/bottomup.py +86 -20
  26. sleap_nn/inference/postprocessing.py +284 -0
  27. sleap_nn/predict.py +29 -0
  28. sleap_nn/train.py +64 -0
  29. sleap_nn/training/callbacks.py +324 -8
  30. sleap_nn/training/lightning_modules.py +542 -32
  31. sleap_nn/training/model_trainer.py +48 -57
  32. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/METADATA +13 -2
  33. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/RECORD +37 -16
  34. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/WHEEL +0 -0
  35. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/entry_points.txt +0 -0
  36. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/licenses/LICENSE +0 -0
  37. {sleap_nn-0.1.0a1.dist-info → sleap_nn-0.1.0a3.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,6 @@ from sleap_nn.data.utils import check_cache_memory
23
23
  from lightning.pytorch.callbacks import (
24
24
  ModelCheckpoint,
25
25
  EarlyStopping,
26
- LearningRateMonitor,
27
26
  )
28
27
  from lightning.pytorch.profilers import (
29
28
  SimpleProfiler,
@@ -61,6 +60,7 @@ from sleap_nn.training.callbacks import (
61
60
  WandBVizCallbackWithPAFs,
62
61
  CSVLoggerCallback,
63
62
  SleapProgressBar,
63
+ EpochEndEvaluationCallback,
64
64
  )
65
65
  from sleap_nn import RANK
66
66
  from sleap_nn.legacy_models import get_keras_first_layer_channels
@@ -493,13 +493,10 @@ class ModelTrainer:
493
493
  if run_name is None or run_name == "" or run_name == "None":
494
494
  sum_train_lfs = sum([len(train_label) for train_label in self.train_labels])
495
495
  sum_val_lfs = sum([len(val_label) for val_label in self.val_labels])
496
- if self._get_trainer_devices() > 1:
497
- run_name = f"{self.model_type}.n={sum_train_lfs + sum_val_lfs}"
498
- else:
499
- run_name = (
500
- datetime.now().strftime("%y%m%d_%H%M%S")
501
- + f".{self.model_type}.n={sum_train_lfs + sum_val_lfs}"
502
- )
496
+ run_name = (
497
+ datetime.now().strftime("%y%m%d_%H%M%S")
498
+ + f".{self.model_type}.n={sum_train_lfs + sum_val_lfs}"
499
+ )
503
500
 
504
501
  # If checkpoint path already exists, add suffix to prevent overwriting
505
502
  if (Path(ckpt_dir) / run_name).exists() and (
@@ -642,10 +639,6 @@ class ModelTrainer:
642
639
  if self.config.trainer_config.wandb.prv_runid == "":
643
640
  self.config.trainer_config.wandb.prv_runid = None
644
641
 
645
- # Default wandb run name to trainer run_name if not specified
646
- if self.config.trainer_config.wandb.name is None:
647
- self.config.trainer_config.wandb.name = self.config.trainer_config.run_name
648
-
649
642
  # compute preprocessing parameters from the labels objects and fill in the config
650
643
  self._setup_preprocessing_config()
651
644
 
@@ -695,9 +688,14 @@ class ModelTrainer:
695
688
  )
696
689
  )
697
690
 
698
- # setup checkpoint path
691
+ # setup checkpoint path (generates run_name if not specified)
699
692
  self._setup_ckpt_path()
700
693
 
694
+ # Default wandb run name to trainer run_name if not specified
695
+ # Note: This must come after _setup_ckpt_path() which generates run_name
696
+ if self.config.trainer_config.wandb.name is None:
697
+ self.config.trainer_config.wandb.name = self.config.trainer_config.run_name
698
+
701
699
  # verify input_channels in model_config based on input image and pretrained model weights
702
700
  self._verify_model_input_channels()
703
701
 
@@ -837,7 +835,7 @@ class ModelTrainer:
837
835
  / self.config.trainer_config.run_name
838
836
  ).as_posix(),
839
837
  filename="best",
840
- monitor="val_loss",
838
+ monitor="val/loss",
841
839
  mode="min",
842
840
  )
843
841
  callbacks.append(checkpoint_callback)
@@ -845,18 +843,20 @@ class ModelTrainer:
845
843
  # csv log callback
846
844
  csv_log_keys = [
847
845
  "epoch",
848
- "train_loss",
849
- "val_loss",
846
+ "train/loss",
847
+ "val/loss",
850
848
  "learning_rate",
851
- "train_time",
852
- "val_time",
849
+ "train/time",
850
+ "val/time",
853
851
  ]
854
852
  if self.model_type in [
855
853
  "single_instance",
856
854
  "centered_instance",
857
855
  "multi_class_topdown",
858
856
  ]:
859
- csv_log_keys.extend(self.skeletons[0].node_names)
857
+ csv_log_keys.extend(
858
+ [f"train/confmaps/{name}" for name in self.skeletons[0].node_names]
859
+ )
860
860
  csv_logger = CSVLoggerCallback(
861
861
  filepath=Path(self.config.trainer_config.ckpt_dir)
862
862
  / self.config.trainer_config.run_name
@@ -869,7 +869,7 @@ class ModelTrainer:
869
869
  # early stopping callback
870
870
  callbacks.append(
871
871
  EarlyStopping(
872
- monitor="val_loss",
872
+ monitor="val/loss",
873
873
  mode="min",
874
874
  verbose=False,
875
875
  min_delta=self.config.trainer_config.early_stopping.min_delta,
@@ -909,10 +909,6 @@ class ModelTrainer:
909
909
  "To keep logs, set trainer_config.wandb.delete_local_logs=false"
910
910
  )
911
911
 
912
- # Learning rate monitor callback - logs LR at each step for dynamic schedulers
913
- # Only added when wandb is enabled since it requires a logger
914
- callbacks.append(LearningRateMonitor(logging_interval="step"))
915
-
916
912
  # save the configs as yaml in the checkpoint dir
917
913
  # Mask API key in both configs to prevent saving to disk
918
914
  self.config.trainer_config.wandb.api_key = ""
@@ -1086,6 +1082,18 @@ class ModelTrainer:
1086
1082
  if self.config.trainer_config.enable_progress_bar:
1087
1083
  callbacks.append(SleapProgressBar())
1088
1084
 
1085
+ # Add epoch-end evaluation callback if enabled
1086
+ if self.config.trainer_config.eval.enabled:
1087
+ callbacks.append(
1088
+ EpochEndEvaluationCallback(
1089
+ skeleton=self.skeletons[0],
1090
+ videos=self.val_labels[0].videos,
1091
+ eval_frequency=self.config.trainer_config.eval.frequency,
1092
+ oks_stddev=self.config.trainer_config.eval.oks_stddev,
1093
+ oks_scale=self.config.trainer_config.eval.oks_scale,
1094
+ )
1095
+ )
1096
+
1089
1097
  return loggers, callbacks
1090
1098
 
1091
1099
  def _delete_cache_imgs(self):
@@ -1268,18 +1276,21 @@ class ModelTrainer:
1268
1276
  # Define custom x-axes for wandb metrics
1269
1277
  # Epoch-level metrics use epoch as x-axis, step-level use default global_step
1270
1278
  wandb.define_metric("epoch")
1271
- wandb.define_metric("val_loss", step_metric="epoch")
1272
- wandb.define_metric("val_time", step_metric="epoch")
1273
- wandb.define_metric("train_time", step_metric="epoch")
1274
- # Per-node losses use epoch as x-axis
1275
- for node_name in self.skeletons[0].node_names:
1276
- wandb.define_metric(node_name, step_metric="epoch")
1277
-
1278
- # Visualization images use epoch as x-axis
1279
- wandb.define_metric("train_predictions*", step_metric="epoch")
1280
- wandb.define_metric("val_predictions*", step_metric="epoch")
1281
- wandb.define_metric("train_pafs*", step_metric="epoch")
1282
- wandb.define_metric("val_pafs*", step_metric="epoch")
1279
+
1280
+ # Training metrics (train/ prefix for grouping) - all use epoch x-axis
1281
+ wandb.define_metric("train/*", step_metric="epoch")
1282
+ wandb.define_metric("train/confmaps/*", step_metric="epoch")
1283
+
1284
+ # Validation metrics (val/ prefix for grouping)
1285
+ wandb.define_metric("val/*", step_metric="epoch")
1286
+
1287
+ # Evaluation metrics (eval/ prefix for grouping)
1288
+ wandb.define_metric("eval/*", step_metric="epoch")
1289
+
1290
+ # Visualization images (need explicit nested paths)
1291
+ wandb.define_metric("viz/*", step_metric="epoch")
1292
+ wandb.define_metric("viz/train/*", step_metric="epoch")
1293
+ wandb.define_metric("viz/val/*", step_metric="epoch")
1283
1294
 
1284
1295
  self.config.trainer_config.wandb.current_run_id = wandb.run.id
1285
1296
  wandb.config["run_name"] = self.config.trainer_config.wandb.name
@@ -1322,27 +1333,7 @@ class ModelTrainer:
1322
1333
  logger.info(
1323
1334
  f"Finished training loop. [{(time.time() - start_train_time) / 60:.1f} min]"
1324
1335
  )
1325
- if self.trainer.global_rank == 0 and self.config.trainer_config.use_wandb:
1326
- wandb.finish()
1327
-
1328
- # Delete local wandb logs if configured
1329
- wandb_config = self.config.trainer_config.wandb
1330
- should_delete_wandb_logs = wandb_config.delete_local_logs is True or (
1331
- wandb_config.delete_local_logs is None
1332
- and wandb_config.wandb_mode != "offline"
1333
- )
1334
- if should_delete_wandb_logs:
1335
- wandb_dir = (
1336
- Path(self.config.trainer_config.ckpt_dir)
1337
- / self.config.trainer_config.run_name
1338
- / "wandb"
1339
- )
1340
- if wandb_dir.exists():
1341
- logger.info(
1342
- f"Deleting local wandb logs at {wandb_dir}... "
1343
- "(set trainer_config.wandb.delete_local_logs=false to disable)"
1344
- )
1345
- shutil.rmtree(wandb_dir, ignore_errors=True)
1336
+ # Note: wandb.finish() is called in train.py after post-training evaluation
1346
1337
 
1347
1338
  # delete image disk caching
1348
1339
  if (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleap-nn
3
- Version: 0.1.0a1
3
+ Version: 0.1.0a3
4
4
  Summary: Neural network backend for training and inference for animal pose estimation.
5
5
  Author-email: Divya Seshadri Murali <dimurali@salk.edu>, Elizabeth Berrigan <eberrigan@salk.edu>, Vincent Tu <vitu@ucsd.edu>, Liezl Maree <lmaree@salk.edu>, David Samy <davidasamy@gmail.com>, Talmo Pereira <talmo@salk.edu>
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3.13
13
13
  Requires-Python: <3.14,>=3.11
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
- Requires-Dist: sleap-io<0.7.0,>=0.6.0
16
+ Requires-Dist: sleap-io<0.7.0,>=0.6.2
17
17
  Requires-Dist: numpy
18
18
  Requires-Dist: lightning
19
19
  Requires-Dist: kornia
@@ -47,6 +47,17 @@ Requires-Dist: torchvision>=0.20.0; extra == "torch-cuda128"
47
47
  Provides-Extra: torch-cuda130
48
48
  Requires-Dist: torch; extra == "torch-cuda130"
49
49
  Requires-Dist: torchvision>=0.20.0; extra == "torch-cuda130"
50
+ Provides-Extra: export
51
+ Requires-Dist: onnx>=1.15.0; extra == "export"
52
+ Requires-Dist: onnxruntime>=1.16.0; extra == "export"
53
+ Requires-Dist: onnxscript>=0.1.0; extra == "export"
54
+ Provides-Extra: export-gpu
55
+ Requires-Dist: onnx>=1.15.0; extra == "export-gpu"
56
+ Requires-Dist: onnxruntime-gpu>=1.16.0; extra == "export-gpu"
57
+ Requires-Dist: onnxscript>=0.1.0; extra == "export-gpu"
58
+ Provides-Extra: tensorrt
59
+ Requires-Dist: tensorrt>=10.0.0; extra == "tensorrt"
60
+ Requires-Dist: torch-tensorrt>=2.0.0; extra == "tensorrt"
50
61
  Dynamic: license-file
51
62
 
52
63
  # sleap-nn
@@ -1,11 +1,11 @@
1
1
  sleap_nn/.DS_Store,sha256=HY8amA79eHkt7o5VUiNsMxkc9YwW6WIPyZbYRj_JdSU,6148
2
- sleap_nn/__init__.py,sha256=l5Lwiad8GOurqkAhMwWw8-UcpH6af2TnMURf-oKj_U8,1362
3
- sleap_nn/cli.py,sha256=U4hpEcOxK7a92GeItY95E2DRm5P1ME1GqU__mxaDcW0,21167
4
- sleap_nn/evaluation.py,sha256=3u7y85wFoBgCwOB2xOGTJIDrd2dUPWOo4m0s0oW3da4,31095
2
+ sleap_nn/__init__.py,sha256=rBA8WZU2_28NOBxfsqkSeA1hMG4pKEPiB2_yZYmhCIg,1362
3
+ sleap_nn/cli.py,sha256=O_edfRK6imWE8KFECQ-Ux0sqlLLbsyQYQjTLtQ63ry4,22295
4
+ sleap_nn/evaluation.py,sha256=SRO3qNOyyGoNBLLA2OKIUhvwyk0oI2ax1rtYmccx6m0,33785
5
5
  sleap_nn/legacy_models.py,sha256=8aGK30DZv3pW2IKDBEWH1G2mrytjaxPQD4miPUehj0M,20258
6
- sleap_nn/predict.py,sha256=8QKjRbS-L-6HF1NFJWioBPv3HSzUpFr2oGEB5hRJzQA,35523
6
+ sleap_nn/predict.py,sha256=B0YhCdJ35TLOydpVvc3gHdkN45pf_ruhi7jZ_6Rrfqs,37089
7
7
  sleap_nn/system_info.py,sha256=7tWe3y6s872nDbrZoHIdSs-w4w46Z4dEV2qCV-Fe7No,14711
8
- sleap_nn/train.py,sha256=XvVhzMXL9rNQLx1-6jIcp5BAO1pR7AZjdphMn5ZX-_I,27558
8
+ sleap_nn/train.py,sha256=PEaK2B0S7DoImf8vt2cvJQS-n2NBw_pUJHmXy0J4NT0,30712
9
9
  sleap_nn/architectures/__init__.py,sha256=w0XxQcx-CYyooszzvxRkKWiJkUg-26IlwQoGna8gn40,46
10
10
  sleap_nn/architectures/common.py,sha256=MLv-zdHsWL5Q2ct_Wv6SQbRS-5hrFtjK_pvBEfwx-vU,3660
11
11
  sleap_nn/architectures/convnext.py,sha256=l9lMJDxIMb-9MI3ShOtVwbOUMuwOLtSQlxiVyYHqjvE,13953
@@ -19,7 +19,7 @@ sleap_nn/config/__init__.py,sha256=l0xV1uJsGJfMPfWAqlUR7Ivu4cSCWsP-3Y9ueyPESuk,4
19
19
  sleap_nn/config/data_config.py,sha256=5a5YlXm4V9qGvkqgFNy6o0XJ_Q06UFjpYJXmNHfvXEI,24021
20
20
  sleap_nn/config/get_config.py,sha256=rjNUffKU9z-ohLwrOVmJNGCqwUM93eh68h4KJfrSy8Y,42396
21
21
  sleap_nn/config/model_config.py,sha256=XFIbqFno7IkX0Se5WF_2_7aUalAlC2SvpDe-uP2TttM,57582
22
- sleap_nn/config/trainer_config.py,sha256=ZMXxns6VYakgYHRhkM541Eje76DdaTdDi4FFPNjJtP4,28413
22
+ sleap_nn/config/trainer_config.py,sha256=Ob2UqU10DXsQOnDb0iJxy0qc82CfP6FkQZQkrCvTEEY,29120
23
23
  sleap_nn/config/training_job_config.py,sha256=v12_ME_tBUg8JFwOxJNW4sDQn-SedDhiJOGz-TlRwT0,5861
24
24
  sleap_nn/config/utils.py,sha256=GgWgVs7_N7ifsJ5OQG3_EyOagNyN3Dx7wS2BAlkaRkg,5553
25
25
  sleap_nn/data/__init__.py,sha256=eMNvFJFa3gv5Rq8oK5wzo6zt1pOlwUGYf8EQii6bq7c,54
@@ -34,11 +34,32 @@ sleap_nn/data/normalization.py,sha256=5xEvcguG-fvAGObl4nWPZ9TEM5gvv0uYPGDuni34XI
34
34
  sleap_nn/data/providers.py,sha256=0x6GFP1s1c08ji4p0M5V6p-dhT4Z9c-SI_Aw1DWX-uM,14272
35
35
  sleap_nn/data/resizing.py,sha256=YFpSQduIBkRK39FYmrqDL-v8zMySlEs6TJxh6zb_0ZU,5076
36
36
  sleap_nn/data/utils.py,sha256=rT0w7KMOTlzaeKWq1TqjbgC4Lvjz_G96McllvEOqXx8,5641
37
+ sleap_nn/export/__init__.py,sha256=E5FN_dG7583V_poTMS8jthL0Bf07qFCUA0kY2iewlvk,574
38
+ sleap_nn/export/cli.py,sha256=UcXrefi7YKunaIzbW97QeBQmbG3_-7Xa4XZgcwOGd9k,63568
39
+ sleap_nn/export/metadata.py,sha256=ory-smt2tpgObmld7WicxEFFHM03hl6yasl4N3KVTmA,7427
40
+ sleap_nn/export/utils.py,sha256=oSVf_PCG1IUZd6ZpgwOMPgqVkMxaO50tt2C-cTUMGg4,11414
41
+ sleap_nn/export/exporters/__init__.py,sha256=zBZMEjqzjGDq1KvIiKSVrHPplE4zVtUW3MHQ5kGg1M4,1459
42
+ sleap_nn/export/exporters/onnx_exporter.py,sha256=i3GWYn9NH2i_SJd2OmVHZgUfJJW9w-Swms1YDM-HhEc,2129
43
+ sleap_nn/export/exporters/tensorrt_exporter.py,sha256=5v_wnkal7bPKgrhQRL8akYikmQ_8PdqVr1ajpmU1oGo,9069
44
+ sleap_nn/export/predictors/__init__.py,sha256=xmDFeK05eHO9-Obue3jhBy4VMBW0NZjyGXSuL3RMhJY,1772
45
+ sleap_nn/export/predictors/base.py,sha256=5uJjMSuG4p-I3YPY9tpn6m8HdENcPqFtjpehL5mNuAg,584
46
+ sleap_nn/export/predictors/onnx.py,sha256=uiFIrCQBxZ_pK4x0JUx2N2k6qzN8KqfQtXAa4FkqVIs,5125
47
+ sleap_nn/export/predictors/tensorrt.py,sha256=lrYjw_lasjbGIku8aM5b26G92bXdvQaVAKrT6U4Xcco,10805
48
+ sleap_nn/export/wrappers/__init__.py,sha256=OeMCP8UCXNwmAYCrudKX-Gt4nhr9z13bzkdrZHjUNnk,984
49
+ sleap_nn/export/wrappers/base.py,sha256=sd55SCkjOdMYut9Yh8Yi1MMF8EY0U9oYtXadmi7xD80,3462
50
+ sleap_nn/export/wrappers/bottomup.py,sha256=rh4-wu4Oc8JWWW3K3xLhiTkyQ3dqhJ9QfMrPY65ck4Y,9237
51
+ sleap_nn/export/wrappers/bottomup_multiclass.py,sha256=r0-LJxv8zYTUr94ytlj1rp0GDuodY6CugLIl93IVhRA,7495
52
+ sleap_nn/export/wrappers/centered_instance.py,sha256=PShtVAlJhSbyuAVmRNjIM3PnOngaRFX3LtX-wO91Qqs,1704
53
+ sleap_nn/export/wrappers/centroid.py,sha256=3nbbysCkzHS9pRC2-37z4Z1Ol5XEdvYahyR4Gm25dqc,1840
54
+ sleap_nn/export/wrappers/single_instance.py,sha256=ZoQICK5_tuPjA19wsDmq8ljhM1Qus2_O8ZCDq6yd2L4,2826
55
+ sleap_nn/export/wrappers/topdown.py,sha256=_HAtEASBSfLTfFO9Q7honIpm4ECNoMR76JLkWyO-PF8,6809
56
+ sleap_nn/export/wrappers/topdown_multiclass.py,sha256=fJ3SC76BdB5QWOvMobCoKqf1OQBJGoi5MS0Bv6_gQmY,11920
37
57
  sleap_nn/inference/__init__.py,sha256=eVkCmKrxHlDFJIlZTf8B5XEOcSyw-gPQymXMY5uShOM,170
38
- sleap_nn/inference/bottomup.py,sha256=NqN-G8TzAOsvCoL3bttEjA1iGsuveLOnOCXIUeFCdSA,13684
58
+ sleap_nn/inference/bottomup.py,sha256=3s90aRlpIcRnSNe-R5-qiuX3S48kCWMpCl8YuNnTEDI,17084
39
59
  sleap_nn/inference/identity.py,sha256=GjNDL9MfGqNyQaK4AE8JQCAE8gpMuE_Y-3r3Gpa53CE,6540
40
60
  sleap_nn/inference/paf_grouping.py,sha256=7Fo9lCAj-zcHgv5rI5LIMYGcixCGNt_ZbSNs8Dik7l8,69973
41
61
  sleap_nn/inference/peak_finding.py,sha256=L9LdYKt_Bfw7cxo6xEpgF8wXcZAwq5plCfmKJ839N40,13014
62
+ sleap_nn/inference/postprocessing.py,sha256=ZM_OH7_WIprieaujZ2Rk_34JhSDDzCry6Pq2YM_u5sg,8998
42
63
  sleap_nn/inference/predictors.py,sha256=U114RlgOXKGm5iz1lnTfE3aN9S0WCh6gWhVP3KVewfc,158046
43
64
  sleap_nn/inference/provenance.py,sha256=0BekXyvpLMb0Vv6DjpctlLduG9RN-Q8jt5zDm783eZE,11204
44
65
  sleap_nn/inference/single_instance.py,sha256=rOns_5TsJ1rb-lwmHG3ZY-pOhXGN2D-SfW9RmBxxzcI,4089
@@ -52,14 +73,14 @@ sleap_nn/tracking/candidates/__init__.py,sha256=1O7NObIwshM7j1rLHmImbFphvkM9wY1j
52
73
  sleap_nn/tracking/candidates/fixed_window.py,sha256=D80KMlTnenuQveQVVhk9j0G8yx6K324C7nMLHgG76e0,6296
53
74
  sleap_nn/tracking/candidates/local_queues.py,sha256=Nx3R5wwEwq0gbfH-fi3oOumfkQo8_sYe5GN47pD9Be8,7305
54
75
  sleap_nn/training/__init__.py,sha256=vNTKsIJPZHJwFSKn5PmjiiRJunR_9e7y4_v0S6rdF8U,32
55
- sleap_nn/training/callbacks.py,sha256=TVnQ6plNC2MnlTiY2rSCRuw2WRk5cQSziek_VPUcOEg,25994
56
- sleap_nn/training/lightning_modules.py,sha256=G3c4xJkYWW-iSRawzkgTqkGd4lTsbPiMTcB5Nvq7jes,85512
76
+ sleap_nn/training/callbacks.py,sha256=7FvYLLoOxbjIu9v9zjDmzHZC4TW6y_P-N9J9GliHlSc,37944
77
+ sleap_nn/training/lightning_modules.py,sha256=z98NBTrNy-GfCw4zatummJhVUO1fdjv_kPweAKcoaXc,108394
57
78
  sleap_nn/training/losses.py,sha256=gbdinUURh4QUzjmNd2UJpt4FXwecqKy9gHr65JZ1bZk,1632
58
- sleap_nn/training/model_trainer.py,sha256=loCmEX0DfBtdV_pN-W8s31fn2_L-lbpWaq3OQXeSp-0,59337
79
+ sleap_nn/training/model_trainer.py,sha256=LHBIpjcI6WCJUxAHFKA-DSesNT3Nk4-RhSKlDaP4Fz4,58715
59
80
  sleap_nn/training/utils.py,sha256=ivdkZEI0DkTCm6NPszsaDOh9jSfozkONZdl6TvvQUWI,20398
60
- sleap_nn-0.1.0a1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
61
- sleap_nn-0.1.0a1.dist-info/METADATA,sha256=h3d4WPIu_JunY32jaRqJ4-fXp4KruTWT57FWb3L6dps,5637
62
- sleap_nn-0.1.0a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
63
- sleap_nn-0.1.0a1.dist-info/entry_points.txt,sha256=zfl5Y3hidZxWBvo8qXvu5piJAXJ_l6v7xVFm0gNiUoI,46
64
- sleap_nn-0.1.0a1.dist-info/top_level.txt,sha256=Kz68iQ55K75LWgSeqz4V4SCMGeFFYH-KGBOyhQh3xZE,9
65
- sleap_nn-0.1.0a1.dist-info/RECORD,,
81
+ sleap_nn-0.1.0a3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
82
+ sleap_nn-0.1.0a3.dist-info/METADATA,sha256=nx3yU6SNyPf_hNqCO1183zj3OEuxX3frrMqIr0MfNbo,6145
83
+ sleap_nn-0.1.0a3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
84
+ sleap_nn-0.1.0a3.dist-info/entry_points.txt,sha256=zfl5Y3hidZxWBvo8qXvu5piJAXJ_l6v7xVFm0gNiUoI,46
85
+ sleap_nn-0.1.0a3.dist-info/top_level.txt,sha256=Kz68iQ55K75LWgSeqz4V4SCMGeFFYH-KGBOyhQh3xZE,9
86
+ sleap_nn-0.1.0a3.dist-info/RECORD,,