sleap-nn 0.1.0a2__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 (35) hide show
  1. sleap_nn/__init__.py +1 -1
  2. sleap_nn/cli.py +36 -0
  3. sleap_nn/evaluation.py +8 -0
  4. sleap_nn/export/__init__.py +21 -0
  5. sleap_nn/export/cli.py +1778 -0
  6. sleap_nn/export/exporters/__init__.py +51 -0
  7. sleap_nn/export/exporters/onnx_exporter.py +80 -0
  8. sleap_nn/export/exporters/tensorrt_exporter.py +291 -0
  9. sleap_nn/export/metadata.py +225 -0
  10. sleap_nn/export/predictors/__init__.py +63 -0
  11. sleap_nn/export/predictors/base.py +22 -0
  12. sleap_nn/export/predictors/onnx.py +154 -0
  13. sleap_nn/export/predictors/tensorrt.py +312 -0
  14. sleap_nn/export/utils.py +307 -0
  15. sleap_nn/export/wrappers/__init__.py +25 -0
  16. sleap_nn/export/wrappers/base.py +96 -0
  17. sleap_nn/export/wrappers/bottomup.py +243 -0
  18. sleap_nn/export/wrappers/bottomup_multiclass.py +195 -0
  19. sleap_nn/export/wrappers/centered_instance.py +56 -0
  20. sleap_nn/export/wrappers/centroid.py +58 -0
  21. sleap_nn/export/wrappers/single_instance.py +83 -0
  22. sleap_nn/export/wrappers/topdown.py +180 -0
  23. sleap_nn/export/wrappers/topdown_multiclass.py +304 -0
  24. sleap_nn/inference/postprocessing.py +284 -0
  25. sleap_nn/predict.py +29 -0
  26. sleap_nn/train.py +64 -0
  27. sleap_nn/training/callbacks.py +62 -20
  28. sleap_nn/training/lightning_modules.py +332 -30
  29. sleap_nn/training/model_trainer.py +35 -67
  30. {sleap_nn-0.1.0a2.dist-info → sleap_nn-0.1.0a3.dist-info}/METADATA +12 -1
  31. {sleap_nn-0.1.0a2.dist-info → sleap_nn-0.1.0a3.dist-info}/RECORD +35 -14
  32. {sleap_nn-0.1.0a2.dist-info → sleap_nn-0.1.0a3.dist-info}/WHEEL +0 -0
  33. {sleap_nn-0.1.0a2.dist-info → sleap_nn-0.1.0a3.dist-info}/entry_points.txt +0 -0
  34. {sleap_nn-0.1.0a2.dist-info → sleap_nn-0.1.0a3.dist-info}/licenses/LICENSE +0 -0
  35. {sleap_nn-0.1.0a2.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,
@@ -494,13 +493,10 @@ class ModelTrainer:
494
493
  if run_name is None or run_name == "" or run_name == "None":
495
494
  sum_train_lfs = sum([len(train_label) for train_label in self.train_labels])
496
495
  sum_val_lfs = sum([len(val_label) for val_label in self.val_labels])
497
- if self._get_trainer_devices() > 1:
498
- run_name = f"{self.model_type}.n={sum_train_lfs + sum_val_lfs}"
499
- else:
500
- run_name = (
501
- datetime.now().strftime("%y%m%d_%H%M%S")
502
- + f".{self.model_type}.n={sum_train_lfs + sum_val_lfs}"
503
- )
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
+ )
504
500
 
505
501
  # If checkpoint path already exists, add suffix to prevent overwriting
506
502
  if (Path(ckpt_dir) / run_name).exists() and (
@@ -643,10 +639,6 @@ class ModelTrainer:
643
639
  if self.config.trainer_config.wandb.prv_runid == "":
644
640
  self.config.trainer_config.wandb.prv_runid = None
645
641
 
646
- # Default wandb run name to trainer run_name if not specified
647
- if self.config.trainer_config.wandb.name is None:
648
- self.config.trainer_config.wandb.name = self.config.trainer_config.run_name
649
-
650
642
  # compute preprocessing parameters from the labels objects and fill in the config
651
643
  self._setup_preprocessing_config()
652
644
 
@@ -696,9 +688,14 @@ class ModelTrainer:
696
688
  )
697
689
  )
698
690
 
699
- # setup checkpoint path
691
+ # setup checkpoint path (generates run_name if not specified)
700
692
  self._setup_ckpt_path()
701
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
+
702
699
  # verify input_channels in model_config based on input image and pretrained model weights
703
700
  self._verify_model_input_channels()
704
701
 
@@ -838,7 +835,7 @@ class ModelTrainer:
838
835
  / self.config.trainer_config.run_name
839
836
  ).as_posix(),
840
837
  filename="best",
841
- monitor="val_loss",
838
+ monitor="val/loss",
842
839
  mode="min",
843
840
  )
844
841
  callbacks.append(checkpoint_callback)
@@ -846,18 +843,20 @@ class ModelTrainer:
846
843
  # csv log callback
847
844
  csv_log_keys = [
848
845
  "epoch",
849
- "train_loss",
850
- "val_loss",
846
+ "train/loss",
847
+ "val/loss",
851
848
  "learning_rate",
852
- "train_time",
853
- "val_time",
849
+ "train/time",
850
+ "val/time",
854
851
  ]
855
852
  if self.model_type in [
856
853
  "single_instance",
857
854
  "centered_instance",
858
855
  "multi_class_topdown",
859
856
  ]:
860
- 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
+ )
861
860
  csv_logger = CSVLoggerCallback(
862
861
  filepath=Path(self.config.trainer_config.ckpt_dir)
863
862
  / self.config.trainer_config.run_name
@@ -870,7 +869,7 @@ class ModelTrainer:
870
869
  # early stopping callback
871
870
  callbacks.append(
872
871
  EarlyStopping(
873
- monitor="val_loss",
872
+ monitor="val/loss",
874
873
  mode="min",
875
874
  verbose=False,
876
875
  min_delta=self.config.trainer_config.early_stopping.min_delta,
@@ -910,10 +909,6 @@ class ModelTrainer:
910
909
  "To keep logs, set trainer_config.wandb.delete_local_logs=false"
911
910
  )
912
911
 
913
- # Learning rate monitor callback - logs LR at each step for dynamic schedulers
914
- # Only added when wandb is enabled since it requires a logger
915
- callbacks.append(LearningRateMonitor(logging_interval="step"))
916
-
917
912
  # save the configs as yaml in the checkpoint dir
918
913
  # Mask API key in both configs to prevent saving to disk
919
914
  self.config.trainer_config.wandb.api_key = ""
@@ -1281,28 +1276,21 @@ class ModelTrainer:
1281
1276
  # Define custom x-axes for wandb metrics
1282
1277
  # Epoch-level metrics use epoch as x-axis, step-level use default global_step
1283
1278
  wandb.define_metric("epoch")
1284
- wandb.define_metric("val_loss", step_metric="epoch")
1285
- wandb.define_metric("val_time", step_metric="epoch")
1286
- wandb.define_metric("train_time", step_metric="epoch")
1287
- # Per-node losses use epoch as x-axis
1288
- for node_name in self.skeletons[0].node_names:
1289
- wandb.define_metric(node_name, step_metric="epoch")
1290
-
1291
- # Visualization images use epoch as x-axis
1292
- wandb.define_metric("train_predictions*", step_metric="epoch")
1293
- wandb.define_metric("val_predictions*", step_metric="epoch")
1294
- wandb.define_metric("train_pafs*", step_metric="epoch")
1295
- wandb.define_metric("val_pafs*", step_metric="epoch")
1296
-
1297
- # Evaluation metrics use epoch as x-axis
1298
- wandb.define_metric("val_mOKS", step_metric="epoch")
1299
- wandb.define_metric("val_oks_voc_mAP", step_metric="epoch")
1300
- wandb.define_metric("val_oks_voc_mAR", step_metric="epoch")
1301
- wandb.define_metric("val_avg_distance", step_metric="epoch")
1302
- wandb.define_metric("val_p50_distance", step_metric="epoch")
1303
- wandb.define_metric("val_mPCK", step_metric="epoch")
1304
- wandb.define_metric("val_visibility_precision", step_metric="epoch")
1305
- wandb.define_metric("val_visibility_recall", 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")
1306
1294
 
1307
1295
  self.config.trainer_config.wandb.current_run_id = wandb.run.id
1308
1296
  wandb.config["run_name"] = self.config.trainer_config.wandb.name
@@ -1345,27 +1333,7 @@ class ModelTrainer:
1345
1333
  logger.info(
1346
1334
  f"Finished training loop. [{(time.time() - start_train_time) / 60:.1f} min]"
1347
1335
  )
1348
- if self.trainer.global_rank == 0 and self.config.trainer_config.use_wandb:
1349
- wandb.finish()
1350
-
1351
- # Delete local wandb logs if configured
1352
- wandb_config = self.config.trainer_config.wandb
1353
- should_delete_wandb_logs = wandb_config.delete_local_logs is True or (
1354
- wandb_config.delete_local_logs is None
1355
- and wandb_config.wandb_mode != "offline"
1356
- )
1357
- if should_delete_wandb_logs:
1358
- wandb_dir = (
1359
- Path(self.config.trainer_config.ckpt_dir)
1360
- / self.config.trainer_config.run_name
1361
- / "wandb"
1362
- )
1363
- if wandb_dir.exists():
1364
- logger.info(
1365
- f"Deleting local wandb logs at {wandb_dir}... "
1366
- "(set trainer_config.wandb.delete_local_logs=false to disable)"
1367
- )
1368
- shutil.rmtree(wandb_dir, ignore_errors=True)
1336
+ # Note: wandb.finish() is called in train.py after post-training evaluation
1369
1337
 
1370
1338
  # delete image disk caching
1371
1339
  if (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleap-nn
3
- Version: 0.1.0a2
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
@@ -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=s3sIImYR5tiP-PfftEj7J8P1Au2nRXj4XWowznrVwm8,1362
3
- sleap_nn/cli.py,sha256=U4hpEcOxK7a92GeItY95E2DRm5P1ME1GqU__mxaDcW0,21167
4
- sleap_nn/evaluation.py,sha256=sKwLnHbCcaNzPs7CJtgRmFcDRFwPMjCxB92viZvinVI,33498
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
@@ -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
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=ZO88NFGZi53Wn4qM6yp3Bk3HFmhkYSGqeMc1QJKirLo,35995
56
- sleap_nn/training/lightning_modules.py,sha256=slkVtQ7r6LatWLYzxcq6x1RALYNyHTRcqiXXwD-x0PA,95420
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=mf6FOdGDal2mMP0F1xD9jVQ54wbUST0ovRt6OjXzVyg,60580
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.0a2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
61
- sleap_nn-0.1.0a2.dist-info/METADATA,sha256=w0dUxvJerGIpu4hlYgGbimjCAooCcf_4NcAzo8T5Sos,5637
62
- sleap_nn-0.1.0a2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
63
- sleap_nn-0.1.0a2.dist-info/entry_points.txt,sha256=zfl5Y3hidZxWBvo8qXvu5piJAXJ_l6v7xVFm0gNiUoI,46
64
- sleap_nn-0.1.0a2.dist-info/top_level.txt,sha256=Kz68iQ55K75LWgSeqz4V4SCMGeFFYH-KGBOyhQh3xZE,9
65
- sleap_nn-0.1.0a2.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,,