supervisely 6.73.252__py3-none-any.whl → 6.73.253__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.

Potentially problematic release.


This version of supervisely might be problematic. Click here for more details.

@@ -73,20 +73,28 @@ class ExperimentSelector(Widget):
73
73
 
74
74
  # col 3 project
75
75
  self._training_project_id = experiment_info.project_id
76
- self._training_project_info = self._api.project.get_info_by_id(
77
- self._training_project_id
78
- )
76
+ if self._training_project_id is None:
77
+ self._training_project_info = None
78
+ else:
79
+ self._training_project_info = self._api.project.get_info_by_id(
80
+ self._training_project_id
81
+ )
79
82
 
80
83
  # col 4 checkpoints
81
84
  self._checkpoints = experiment_info.checkpoints
82
85
 
83
86
  self._checkpoints_names = []
84
87
  self._checkpoints_paths = []
88
+ self._best_checkpoint_value = None
85
89
  for checkpoint_path in self._checkpoints:
86
90
  self._checkpoints_names.append(get_file_name_with_ext(checkpoint_path))
87
91
  self._checkpoints_paths.append(
88
92
  os.path.join(experiment_info.artifacts_dir, checkpoint_path)
89
93
  )
94
+ if experiment_info.best_checkpoint == get_file_name_with_ext(checkpoint_path):
95
+ self._best_checkpoint = os.path.join(
96
+ experiment_info.artifacts_dir, checkpoint_path
97
+ )
90
98
 
91
99
  # col 5 session
92
100
  self._session_link = self._generate_session_link()
@@ -234,6 +242,8 @@ class ExperimentSelector(Widget):
234
242
  for path, name in zip(self._checkpoints_paths, self._checkpoints_names):
235
243
  checkpoint_selector_items.append(Select.Item(value=path, label=name))
236
244
  checkpoint_selector = Select(items=checkpoint_selector_items)
245
+ if self._best_checkpoint_value is not None:
246
+ checkpoint_selector.set_value(self._best_checkpoint)
237
247
  return checkpoint_selector
238
248
 
239
249
  def _create_session_widget(self) -> Text:
@@ -3,6 +3,7 @@ import string
3
3
  from abc import abstractmethod
4
4
  from collections import defaultdict
5
5
  from concurrent.futures import ThreadPoolExecutor, as_completed
6
+ from datetime import datetime
6
7
  from json import JSONDecodeError
7
8
  from os.path import dirname, join
8
9
  from time import time
@@ -14,8 +15,9 @@ from supervisely import logger
14
15
  from supervisely._utils import abs_url, is_development
15
16
  from supervisely.api.api import Api, ApiField
16
17
  from supervisely.api.file_api import FileInfo
17
- from supervisely.io.fs import silent_remove
18
+ from supervisely.io.fs import get_file_name_with_ext, silent_remove
18
19
  from supervisely.io.json import dump_json_file
20
+ from supervisely.nn.experiments import ExperimentInfo
19
21
 
20
22
 
21
23
  class TrainInfo(NamedTuple):
@@ -53,6 +55,7 @@ class BaseTrainArtifacts:
53
55
  self._metadata_file_name: str = "train_info.json"
54
56
 
55
57
  self._app_name: str = None
58
+ self._framework_name: str = None
56
59
  self._framework_folder: str = None
57
60
  self._weights_folder: str = None
58
61
  self._task_type: str = None
@@ -91,6 +94,16 @@ class BaseTrainArtifacts:
91
94
  """
92
95
  return self._app_name
93
96
 
97
+ @property
98
+ def framework_name(self):
99
+ """
100
+ Framework name.
101
+
102
+ :return: The framework name.
103
+ :rtype: str
104
+ """
105
+ return self._framework_name
106
+
94
107
  @property
95
108
  def framework_folder(self):
96
109
  """
@@ -518,6 +531,84 @@ class BaseTrainArtifacts:
518
531
  logger.debug(f"Listing time: '{format(end_time - start_time, '.6f')}' sec")
519
532
  return train_infos
520
533
 
534
+ def get_list_experiment_info(self, sort: Literal["desc", "asc"] = "desc") -> List[TrainInfo]:
535
+ def build_experiment_info_from_train_info(
536
+ api: Api, train_info: TrainInfo
537
+ ) -> ExperimentInfo:
538
+
539
+ checkpoints = []
540
+ for chk in train_info.checkpoints:
541
+ if self.weights_folder:
542
+ checkpoints.append(join(self.weights_folder, chk.name))
543
+ else:
544
+ checkpoints.append(chk.name)
545
+
546
+ best_checkpoint = next(
547
+ (chk.name for chk in train_info.checkpoints if "best" in chk.name), None
548
+ )
549
+ if not best_checkpoint and checkpoints:
550
+ best_checkpoint = get_file_name_with_ext(checkpoints[-1])
551
+
552
+ task_info = api.task.get_info_by_id(train_info.task_id)
553
+ workspace_id = task_info["workspaceId"]
554
+
555
+ project = api.project.get_info_by_name(workspace_id, train_info.project_name)
556
+ project_id = project.id if project else None
557
+
558
+ model_files = {}
559
+ if train_info.config_path:
560
+ model_files["config"] = self.get_config_path(train_info.artifacts_folder).replace(
561
+ train_info.artifacts_folder, ""
562
+ )
563
+
564
+ input_datetime = task_info["startedAt"]
565
+ parsed_datetime = datetime.strptime(input_datetime, "%Y-%m-%dT%H:%M:%S.%fZ")
566
+ date_time = parsed_datetime.strftime("%Y-%m-%d %H:%M:%S")
567
+
568
+ experiment_info_data = {
569
+ "experiment_name": f"Unknown {self.framework_name} experiment",
570
+ "framework_name": self.framework_name,
571
+ "model_name": f"Unknown {self.framework_name} model",
572
+ "task_type": train_info.task_type,
573
+ "project_id": project_id,
574
+ "task_id": train_info.task_id,
575
+ "model_files": model_files,
576
+ "checkpoints": checkpoints,
577
+ "best_checkpoint": best_checkpoint,
578
+ "artifacts_dir": train_info.artifacts_folder,
579
+ "datetime": date_time,
580
+ }
581
+
582
+ experiment_info_fields = {
583
+ field.name
584
+ for field in ExperimentInfo.__dataclass_fields__.values() # pylint: disable=no-member
585
+ }
586
+ for field in experiment_info_fields:
587
+ if field not in experiment_info_data:
588
+ experiment_info_data[field] = None
589
+
590
+ return ExperimentInfo(**experiment_info_data)
591
+
592
+ train_infos = self.get_list(sort)
593
+
594
+ # Sync version
595
+ # Uncomment for debug
596
+ # experiment_infos = [
597
+ # convert_traininfo_to_experimentinfo(api, framework_cls, train_info)
598
+ # for train_info in train_infos
599
+ # ]
600
+ # return experiment_infos
601
+
602
+ # Async version
603
+ with ThreadPoolExecutor() as executor:
604
+ experiment_infos = list(
605
+ executor.map(
606
+ lambda t: build_experiment_info_from_train_info(self._api, t),
607
+ train_infos,
608
+ )
609
+ )
610
+ return [info for info in experiment_infos if info is not None]
611
+
521
612
  def get_available_task_types(self) -> List[str]:
522
613
  """
523
614
  Get available task types.
@@ -10,6 +10,7 @@ class Detectron2(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train Detectron2"
13
+ self._framework_name = "Detectron2"
13
14
  self._framework_folder = "/detectron2"
14
15
  self._weights_folder = "checkpoints"
15
16
  self._legacy_weights_folder = "detectron_data"
@@ -10,6 +10,7 @@ class MMClassification(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train MMClassification"
13
+ self._framework_name = "MMClassification"
13
14
  self._framework_folder = "/mmclassification"
14
15
  self._weights_folder = "checkpoints"
15
16
  self._task_type = "classification"
@@ -13,6 +13,7 @@ class MMDetection(BaseTrainArtifacts):
13
13
  super().__init__(team_id)
14
14
 
15
15
  self._app_name = "Train MMDetection"
16
+ self._framework_name = "MMDetection"
16
17
  self._framework_folder = "/mmdetection"
17
18
  self._weights_folder = "checkpoints/data"
18
19
  self._task_type = None
@@ -58,6 +59,7 @@ class MMDetection3(BaseTrainArtifacts):
58
59
  super().__init__(team_id)
59
60
 
60
61
  self._app_name = "Train MMDetection 3.0"
62
+ self._framework_name = "MMDetection 3.0"
61
63
  self._framework_folder = "/mmdetection-3"
62
64
  self._weights_folder = None
63
65
  self._task_type = None
@@ -10,6 +10,7 @@ class MMSegmentation(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train MMSegmentation"
13
+ self._framework_name = "MMSegmentation"
13
14
  self._framework_folder = "/mmsegmentation"
14
15
  self._weights_folder = "checkpoints/data"
15
16
  self._task_type = "instance segmentation"
@@ -10,6 +10,7 @@ class RITM(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train RITM"
13
+ self._framework_name = "RITM"
13
14
  self._framework_folder = "/RITM_training"
14
15
  self._weights_folder = "checkpoints"
15
16
  self._task_type = None
@@ -10,6 +10,7 @@ class RTDETR(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train RT-DETR"
13
+ self._framework_name = "RT-DETR"
13
14
  self._framework_folder = "/RT-DETR"
14
15
  self._weights_folder = "weights"
15
16
  self._task_type = "object detection"
@@ -10,6 +10,7 @@ class UNet(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train UNet"
13
+ self._framework_name = "UNet"
13
14
  self._framework_folder = "/unet"
14
15
  self._weights_folder = "checkpoints"
15
16
  self._task_type = "semantic segmentation"
@@ -0,0 +1,50 @@
1
+ from supervisely.nn.artifacts.artifacts import BaseTrainArtifacts
2
+ from supervisely.nn.artifacts import (
3
+ YOLOv5,
4
+ YOLOv5v2,
5
+ YOLOv8,
6
+ MMClassification,
7
+ MMSegmentation,
8
+ MMDetection,
9
+ MMDetection3,
10
+ Detectron2,
11
+ UNet,
12
+ RITM,
13
+ RTDETR,
14
+ )
15
+
16
+
17
+ class FrameworkName:
18
+ YOLOV5 = "YOLOv5"
19
+ YOLOV5V2 = "YOLOv5 2.0"
20
+ YOLOV8 = "YOLOv8+"
21
+ MMCLASSIFICATION = "MMClassification"
22
+ MMSEGMENTATION = "MMSegmentation"
23
+ MMDETECTION = "MMDetection"
24
+ MMDETECTION3 = "MMDetection 3.0"
25
+ RTDETR = "RT-DETR"
26
+ DETECTRON2 = "Detectron2"
27
+ UNET = "UNet"
28
+ RITM = "RITM"
29
+
30
+
31
+ class FrameworkMapper:
32
+ _map = {
33
+ FrameworkName.YOLOV5: YOLOv5,
34
+ FrameworkName.YOLOV5V2: YOLOv5v2,
35
+ FrameworkName.YOLOV8: YOLOv8,
36
+ FrameworkName.MMCLASSIFICATION: MMClassification,
37
+ FrameworkName.MMSEGMENTATION: MMSegmentation,
38
+ FrameworkName.MMDETECTION: MMDetection,
39
+ FrameworkName.MMDETECTION3: MMDetection3,
40
+ FrameworkName.RTDETR: RTDETR,
41
+ FrameworkName.DETECTRON2: Detectron2,
42
+ FrameworkName.UNET: UNet,
43
+ FrameworkName.RITM: RITM,
44
+ }
45
+
46
+ @classmethod
47
+ def get_framework_cls(cls, name: str, team_id: int) -> BaseTrainArtifacts:
48
+ if name not in cls._map:
49
+ raise ValueError(f"Unknown framework: {name}")
50
+ return cls._map[name](team_id)
@@ -10,6 +10,7 @@ class YOLOv5(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train YOLOv5"
13
+ self._framework_name = "YOLOv5"
13
14
  self._framework_folder = "/yolov5_train"
14
15
  self._weights_folder = "weights"
15
16
  self._task_type = "object detection"
@@ -39,6 +40,7 @@ class YOLOv5v2(YOLOv5):
39
40
  super().__init__(team_id)
40
41
 
41
42
  self._app_name = "Train YOLOv5 2.0"
43
+ self._framework_name = "YOLOv5 2.0"
42
44
  self._framework_folder = "/yolov5_2.0_train"
43
45
  self._weights_folder = "weights"
44
46
  self._task_type = "object detection"
@@ -10,6 +10,7 @@ class YOLOv8(BaseTrainArtifacts):
10
10
  super().__init__(team_id)
11
11
 
12
12
  self._app_name = "Train YOLOv8 | v9 | v10 | v11"
13
+ self._framework_name = "YOLOv8+"
13
14
  self._framework_folder = "/yolov8_train"
14
15
  self._weights_folder = "weights"
15
16
  self._task_type = None
@@ -2,13 +2,12 @@ from concurrent.futures import ThreadPoolExecutor
2
2
  from dataclasses import dataclass, fields
3
3
  from json import JSONDecodeError
4
4
  from os.path import dirname, join
5
- from typing import Any, Dict, List
5
+ from typing import List
6
6
 
7
7
  import requests
8
8
 
9
9
  from supervisely import logger
10
10
  from supervisely.api.api import Api, ApiField
11
- from supervisely.api.file_api import FileInfo
12
11
 
13
12
 
14
13
  @dataclass
@@ -51,7 +50,9 @@ class ExperimentInfo:
51
50
  """Evaluation metrics"""
52
51
 
53
52
 
54
- def get_experiment_infos(api: Api, team_id: int, framework_name: str) -> List[ExperimentInfo]:
53
+ def get_experiment_infos(
54
+ api: Api, team_id: int, framework_name: str
55
+ ) -> List[ExperimentInfo]:
55
56
  """
56
57
  Get experiments from the specified framework folder for Train v2
57
58
 
@@ -78,7 +79,9 @@ def get_experiment_infos(api: Api, team_id: int, framework_name: str) -> List[Ex
78
79
  experiments_folder = "/experiments"
79
80
  experiment_infos = []
80
81
 
81
- file_infos = api.file.list(team_id, experiments_folder, recursive=True, return_type="fileinfo")
82
+ file_infos = api.file.list(
83
+ team_id, experiments_folder, recursive=True, return_type="fileinfo"
84
+ )
82
85
  sorted_experiment_paths = []
83
86
  for file_info in file_infos:
84
87
  if not file_info.path.endswith(metadata_name):
@@ -101,7 +104,9 @@ def get_experiment_infos(api: Api, team_id: int, framework_name: str) -> List[Ex
101
104
  required_fields = {field.name for field in fields(ExperimentInfo)}
102
105
  missing_fields = required_fields - response_json.keys()
103
106
  if missing_fields:
104
- logger.debug(f"Missing fields: {missing_fields} for '{experiment_path}'")
107
+ logger.debug(
108
+ f"Missing fields: {missing_fields} for '{experiment_path}'"
109
+ )
105
110
  return None
106
111
  return ExperimentInfo(**response_json)
107
112
  except requests.exceptions.RequestException as e:
@@ -112,9 +117,10 @@ def get_experiment_infos(api: Api, team_id: int, framework_name: str) -> List[Ex
112
117
  logger.error(f"TypeError for '{experiment_path}': {e}")
113
118
  return None
114
119
 
115
- # Error
116
120
  with ThreadPoolExecutor() as executor:
117
- experiment_infos = list(executor.map(fetch_experiment_data, sorted_experiment_paths))
121
+ experiment_infos = list(
122
+ executor.map(fetch_experiment_data, sorted_experiment_paths)
123
+ )
118
124
 
119
125
  experiment_infos = [info for info in experiment_infos if info is not None]
120
126
  return experiment_infos
@@ -1,6 +1,7 @@
1
1
  from typing import Literal
2
2
 
3
3
  import supervisely.io.env as sly_env
4
+ from supervisely import logger
4
5
  from supervisely.api.api import Api
5
6
  from supervisely.app.widgets import (
6
7
  Button,
@@ -13,6 +14,7 @@ from supervisely.app.widgets import (
13
14
  )
14
15
  from supervisely.nn.experiments import get_experiment_infos
15
16
  from supervisely.nn.utils import ModelSource
17
+ from supervisely.nn.artifacts.utils import FrameworkMapper, FrameworkName
16
18
 
17
19
 
18
20
  class ModelSelector:
@@ -22,12 +24,21 @@ class ModelSelector:
22
24
 
23
25
  def __init__(self, api: Api, framework: str, models: list, app_options: dict = {}):
24
26
  self.display_widgets = []
25
- self.team_id = sly_env.team_id() # get from project id
27
+ self.team_id = sly_env.team_id()
26
28
  self.models = models
27
29
 
28
30
  # GUI Components
29
31
  self.pretrained_models_table = PretrainedModelsSelector(self.models)
32
+
30
33
  experiment_infos = get_experiment_infos(api, self.team_id, framework)
34
+ if app_options.get("legacy_checkpoints", False):
35
+ try:
36
+ framework_cls = FrameworkMapper.get_framework_cls(framework, self.team_id)
37
+ legacy_experiment_infos = framework_cls.get_list_experiment_info()
38
+ experiment_infos = experiment_infos + legacy_experiment_infos
39
+ except:
40
+ logger.warn(f"Legacy checkpoints are not available for '{framework}'")
41
+
31
42
  self.experiment_selector = ExperimentSelector(self.team_id, experiment_infos)
32
43
  self.model_source_tabs = RadioTabs(
33
44
  titles=[ModelSource.PRETRAINED, ModelSource.CUSTOM],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.252
3
+ Version: 6.73.253
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -247,7 +247,7 @@ supervisely/app/widgets/empty/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
247
247
  supervisely/app/widgets/empty/empty.py,sha256=fCr8I7CQ2XLo59bl2txjDrblOGiu0TzUcM-Pq6s7gKY,1285
248
248
  supervisely/app/widgets/empty/template.html,sha256=aDBKkin5aLuqByzNN517-rTYCGIg5SPKgnysYMPYjv8,40
249
249
  supervisely/app/widgets/experiment_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
- supervisely/app/widgets/experiment_selector/experiment_selector.py,sha256=4-xV3zQ3llo3BWiwcFkux4o0yEDlk6SZOQycsx2diik,18907
250
+ supervisely/app/widgets/experiment_selector/experiment_selector.py,sha256=XZxhpD3utmHsHhKxo34-wJIfOaKXXznrFQVnVaHVWik,19456
251
251
  supervisely/app/widgets/experiment_selector/style.css,sha256=-zPPXHnJvatYj_xVVAb7T8uoSsUTyhm5xCKWkkFQ78E,548
252
252
  supervisely/app/widgets/experiment_selector/template.html,sha256=k7f_Xl6nDUXXwu6IY_RblYni5TbZRRxCBduY5O_SyFs,2908
253
253
  supervisely/app/widgets/fast_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -710,22 +710,23 @@ supervisely/metric/pixel_accuracy.py,sha256=qjtxInOTkGDwPeLUnjBdzOrVRT3V6kGGOWjB
710
710
  supervisely/metric/precision_recall_metric.py,sha256=4AQCkcB84mpYQS94yJ-wkG1LBuXlQf3X_tI9f67vtR8,3426
711
711
  supervisely/metric/projects_applier.py,sha256=ORtgLQHYtNi4KYsSGaGPPWiZPexTJF9IWqX_RuLRxPk,3415
712
712
  supervisely/nn/__init__.py,sha256=w2gZ6pCreaTYyhZV8PZrYctqmCu_7sbJ-WGegs7mouw,570
713
- supervisely/nn/experiments.py,sha256=RrqsgqlwgTwvIqlOPd-mjj36ZJQBi4AwrVoAQMNgs58,4542
713
+ supervisely/nn/experiments.py,sha256=tM0dYkaMphrw_dnSRQatBf1A-uEq1jfL8pdPF8V7g9o,4553
714
714
  supervisely/nn/prediction_dto.py,sha256=8QQE6h_feOf3bjWtyG_PoU8FIQrr4g8PoMOyoscmqJM,1697
715
715
  supervisely/nn/task_type.py,sha256=UJvSJ4L3I08j_e6sU6Ptu7kS5p1H09rfhfoDUSZ2iys,522
716
716
  supervisely/nn/utils.py,sha256=-Xjv5KLu8CTtyi7acqsIX1E0dDwKZPED4D6b4Z_Ln3k,1451
717
717
  supervisely/nn/artifacts/__init__.py,sha256=m7KYTMzEJnoV9wcU_0xzgLuPz69Dqp9va0fP32tohV4,576
718
- supervisely/nn/artifacts/artifacts.py,sha256=8_iB5Y3hqehCXYs0evv5jou2sqzFi7yKBfMRB3sEwXw,17246
719
- supervisely/nn/artifacts/detectron2.py,sha256=2kDcf75Xkt1CrqjDTYVL_s0msJjWs0a5lhuxXimmQx0,1629
718
+ supervisely/nn/artifacts/artifacts.py,sha256=SWVwaE40SPNElLp2NsRSOVh_ESRIXXZ1I-tMLEUYmTQ,20751
719
+ supervisely/nn/artifacts/detectron2.py,sha256=6iu5Yslc-SxCKJVNl6sn84qeXmD-JIQShJIxuLdzf2o,1673
720
720
  supervisely/nn/artifacts/hrda.py,sha256=3DzbjDIt9YuLozMrKmYYw13oxc14xju2vzbxKVq2G4I,1073
721
- supervisely/nn/artifacts/mmclassification.py,sha256=n0QjyeRFYNEEyor-lpCH39YKGE-_902LBaEyd81DTYU,1477
722
- supervisely/nn/artifacts/mmdetection.py,sha256=sHPkAq6heiAjLRditTN6GCl83BtQP9Yz7QXZvxHF7H4,4718
723
- supervisely/nn/artifacts/mmsegmentation.py,sha256=sXJZ8jNqmWkZG9l_FShGWC_8YQt666hkozw5TbBBwFA,1283
724
- supervisely/nn/artifacts/ritm.py,sha256=RVFH0L7Z7ukJjo2ZeijaHxXigv8JoH9DHQMql7bUxfg,1931
725
- supervisely/nn/artifacts/rtdetr.py,sha256=qbaGbQ_7LkrBH4Je6aKNBqWWzav9poG_h4-2IK5LYWE,1188
726
- supervisely/nn/artifacts/unet.py,sha256=1FUHHYKVPXrcCFbkL_sYNTr4mOKxvVodp4-wtGPNDUA,1548
727
- supervisely/nn/artifacts/yolov5.py,sha256=a8TnNqLIhYY9oFIN5Gj-Payw459j_tXfYd418SF0WWc,1640
728
- supervisely/nn/artifacts/yolov8.py,sha256=ZXuAyuabjAw84lmGhD3l-xvybsy3xIMdpq2W69k8jlQ,1405
721
+ supervisely/nn/artifacts/mmclassification.py,sha256=M0m9HHF5koHsl5RuFkRU0_clckA1sFty3X6awB2eKNo,1527
722
+ supervisely/nn/artifacts/mmdetection.py,sha256=RxrCPODJzJqu9rtNtkndiGiHiPnusIRQWmwbAzZ9PGU,4812
723
+ supervisely/nn/artifacts/mmsegmentation.py,sha256=VTh0hKgaDeF1SHWWxTTXgt7h_mpLuXER1_2Jeb3ytHI,1331
724
+ supervisely/nn/artifacts/ritm.py,sha256=lff_lx8IqmhvE9qF8rtbddGkjgVF-abKCtQEi_kLhkk,1969
725
+ supervisely/nn/artifacts/rtdetr.py,sha256=aKNieooBl8VX5BDwaNkr9vj142rquKQU4xPDB31m_Fw,1229
726
+ supervisely/nn/artifacts/unet.py,sha256=ifipjAWLANZoZ5Er5qxCykBIV-Zu_NQKtenjFdgpbic,1586
727
+ supervisely/nn/artifacts/utils.py,sha256=C4EaMi95MAwtK5TOnhK4sQ1BWvgwYBxXyRStkhYrYv8,1356
728
+ supervisely/nn/artifacts/yolov5.py,sha256=slh05EpQsxqgKwB9KMClshdBxPBN3ZWZ6S4B80ECEt4,1724
729
+ supervisely/nn/artifacts/yolov8.py,sha256=sFd9kU7Gdowq6WH1S3NdlQeoL9jjQKmRYb51fG_wbDk,1446
729
730
  supervisely/nn/benchmark/__init__.py,sha256=7jDezvavJFtO9mDeB2TqW8N4sD8TsHQBPpA9RESleIQ,610
730
731
  supervisely/nn/benchmark/base_benchmark.py,sha256=yb0zaMjQIQ5A0hcukf1MVuIh877ie2yUVJLmaHCXI90,25451
731
732
  supervisely/nn/benchmark/base_evaluator.py,sha256=MqLw42bXxGLKbI8pKMoCe8qmTouQ38zoBpxO3jAtEtM,4355
@@ -946,7 +947,7 @@ supervisely/nn/training/gui/classes_selector.py,sha256=8UgzA4aogOAr1s42smwEcDbga
946
947
  supervisely/nn/training/gui/gui.py,sha256=Xco1yXcfVSPnbBwZDYGIOysyN7WRxIV_r6G1vtCgkpE,22591
947
948
  supervisely/nn/training/gui/hyperparameters_selector.py,sha256=2qryuBss0bLcZJV8PNJ6_hKZM5Dbj2FIxTb3EULHQrE,6670
948
949
  supervisely/nn/training/gui/input_selector.py,sha256=Jp9PnVVADv1fhndPuZdMlKuzWTOBQZogrOks5dwATlc,2179
949
- supervisely/nn/training/gui/model_selector.py,sha256=lVcNJagQYjxrfuYfrslCMOEM9PSHlztkroj4QrOimHg,3565
950
+ supervisely/nn/training/gui/model_selector.py,sha256=QTFHMf-8-rREYPk64QKoRvE4zKPC8V6tcP4H4N6nyt0,4082
950
951
  supervisely/nn/training/gui/train_val_splits_selector.py,sha256=MLryFD2Tj_RobkFzZOeQXzXpch0eGiVFisq3FGA3dFg,8549
951
952
  supervisely/nn/training/gui/training_logs.py,sha256=1CBqnL0l5kiZVaegJ-NLgOVI1T4EDB_rLAtumuw18Jo,3222
952
953
  supervisely/nn/training/gui/training_process.py,sha256=yaAUHL6A9GVeiGFTd9DSTHMAQNxnlUa7oZ-j0xmLfEE,3881
@@ -1041,9 +1042,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1041
1042
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1042
1043
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1043
1044
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1044
- supervisely-6.73.252.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1045
- supervisely-6.73.252.dist-info/METADATA,sha256=N7Oy7O6uK-847rvygnHmjeRp1b3J2hSDkDDXSYm7adI,33573
1046
- supervisely-6.73.252.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1047
- supervisely-6.73.252.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1048
- supervisely-6.73.252.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1049
- supervisely-6.73.252.dist-info/RECORD,,
1045
+ supervisely-6.73.253.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1046
+ supervisely-6.73.253.dist-info/METADATA,sha256=kp6hHxnNB6C3Z7dktlJdus0Mxv_xr9xdbLBEIbsMDRM,33573
1047
+ supervisely-6.73.253.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1048
+ supervisely-6.73.253.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1049
+ supervisely-6.73.253.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1050
+ supervisely-6.73.253.dist-info/RECORD,,