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

@@ -1159,7 +1159,9 @@ class TaskApi(ModuleApiBase, ModuleWithStatus):
1159
1159
  )
1160
1160
  self._api.post("tasks.status.update", {ApiField.ID: task_id, ApiField.STATUS: status})
1161
1161
 
1162
- def set_output_experiment(self, task_id: int, experiment_info: dict) -> Dict:
1162
+ def set_output_experiment(
1163
+ self, task_id: int, experiment_info: dict, project_name: str = None
1164
+ ) -> Dict:
1163
1165
  """
1164
1166
  Sets output for the task with experiment info.
1165
1167
 
@@ -1214,7 +1216,17 @@ class TaskApi(ModuleApiBase, ModuleWithStatus):
1214
1216
  },
1215
1217
  }
1216
1218
  """
1217
- output = {ApiField.EXPERIMENT: {ApiField.DATA: {**experiment_info}}}
1219
+ project_id = experiment_info.get("project_id")
1220
+ if project_id is None:
1221
+ raise ValueError("Key 'project_id' is required in experiment_info")
1222
+ if project_name is None:
1223
+ project = self._api.project.get_info_by_id(project_id, raise_error=True)
1224
+ project_name = project.name
1225
+
1226
+ output = {
1227
+ ApiField.PROJECT: {ApiField.ID: project_id, ApiField.TITLE: project_name},
1228
+ ApiField.EXPERIMENT: {ApiField.DATA: {**experiment_info}},
1229
+ }
1218
1230
  resp = self._api.post(
1219
1231
  "tasks.output.set", {ApiField.TASK_ID: task_id, ApiField.OUTPUT: output}
1220
1232
  )
@@ -54,6 +54,22 @@ from supervisely.sly_logger import logger
54
54
  if TYPE_CHECKING:
55
55
  from supervisely.app.widgets import Widget
56
56
 
57
+ import logging
58
+
59
+ uvicorn_logger = logging.getLogger("uvicorn.access")
60
+
61
+
62
+ class ReadyzFilter(logging.Filter):
63
+ def filter(self, record):
64
+ if "/readyz" in record.getMessage() or "/livez" in record.getMessage():
65
+ record.levelno = logging.DEBUG # Change log level to DEBUG
66
+ record.levelname = "DEBUG"
67
+ return True
68
+
69
+
70
+ # Apply the filter
71
+ uvicorn_logger.addFilter(ReadyzFilter())
72
+
57
73
 
58
74
  class Event:
59
75
  class Brush:
@@ -5,3 +5,6 @@ iou_threshold: 0.5
5
5
  # Confidence threshold.
6
6
  # Set 'auto' to calculate the optimal confidence threshold.
7
7
  confidence_threshold: auto
8
+
9
+ # Maximum number of detections per image.
10
+ max_detections: 100
@@ -5,3 +5,6 @@ iou_threshold: 0.5
5
5
  # Confidence threshold.
6
6
  # Set 'auto' to calculate the optimal confidence threshold.
7
7
  confidence_threshold: auto
8
+
9
+ # Maximum number of detections per image.
10
+ max_detections: 100
@@ -3,9 +3,15 @@ from typing import Callable, List, Literal, Optional
3
3
 
4
4
  import numpy as np
5
5
 
6
+ from supervisely.nn.benchmark.utils.detection.coco_eval import (
7
+ COCO,
8
+ SlyCOCOeval,
9
+ pycocotools_installed,
10
+ )
11
+
6
12
 
7
13
  def set_cocoeval_params(
8
- cocoeval,
14
+ cocoeval: SlyCOCOeval,
9
15
  parameters: dict,
10
16
  ):
11
17
  """
@@ -28,8 +34,8 @@ def set_cocoeval_params(
28
34
 
29
35
 
30
36
  def calculate_metrics(
31
- cocoGt,
32
- cocoDt,
37
+ cocoGt: COCO,
38
+ cocoDt: COCO,
33
39
  iouType: Literal["bbox", "segm"],
34
40
  progress_cb: Optional[Callable] = None,
35
41
  evaluation_params: Optional[dict] = None,
@@ -48,12 +54,14 @@ def calculate_metrics(
48
54
  :return: Results of the evaluation
49
55
  :rtype: dict
50
56
  """
51
- from pycocotools.coco import COCO # pylint: disable=import-error
52
- from pycocotools.cocoeval import COCOeval # pylint: disable=import-error
57
+ if not pycocotools_installed:
58
+ raise ImportError("pycocotools is not installed")
53
59
 
54
- cocoGt: COCO = cocoGt
60
+ evaluation_params = evaluation_params or {}
61
+ max_dets = evaluation_params.get("max_detections", 100)
55
62
 
56
- cocoEval = COCOeval(cocoGt, cocoDt, iouType=iouType)
63
+ cocoEval = SlyCOCOeval(cocoGt, cocoDt, iouType=iouType)
64
+ cocoEval.params.maxDets[-1] = max_dets
57
65
  cocoEval.evaluate()
58
66
  progress_cb(1) if progress_cb is not None else None
59
67
  cocoEval.accumulate()
@@ -61,8 +69,9 @@ def calculate_metrics(
61
69
  cocoEval.summarize()
62
70
 
63
71
  # For classification metrics
64
- cocoEval_cls = COCOeval(cocoGt, cocoDt, iouType=iouType)
72
+ cocoEval_cls = SlyCOCOeval(cocoGt, cocoDt, iouType=iouType)
65
73
  cocoEval_cls.params.useCats = 0
74
+ cocoEval_cls.params.maxDets[-1] = max_dets
66
75
  cocoEval_cls.evaluate()
67
76
  progress_cb(1) if progress_cb is not None else None
68
77
  cocoEval_cls.accumulate()
@@ -70,7 +79,6 @@ def calculate_metrics(
70
79
  cocoEval_cls.summarize()
71
80
 
72
81
  iouThrs = cocoEval.params.iouThrs
73
- evaluation_params = evaluation_params or {}
74
82
  iou_threshold = evaluation_params.get("iou_threshold", 0.5)
75
83
  iou_threshold_per_class = evaluation_params.get("iou_threshold_per_class")
76
84
  if iou_threshold_per_class is not None:
@@ -86,7 +94,7 @@ def calculate_metrics(
86
94
  if iou_threshold_per_class is not None or iou_threshold != 0.5:
87
95
  average_across_iou_thresholds = False
88
96
  evaluation_params["average_across_iou_thresholds"] = average_across_iou_thresholds
89
-
97
+
90
98
  eval_img_dict = get_eval_img_dict(cocoEval)
91
99
  eval_img_dict_cls = get_eval_img_dict(cocoEval_cls)
92
100
  matches = get_matches(
@@ -116,7 +124,10 @@ def calculate_metrics(
116
124
  return eval_data
117
125
 
118
126
 
119
- def get_counts(eval_img_dict: dict, cocoEval_cls):
127
+ def get_counts(eval_img_dict: dict, cocoEval_cls: SlyCOCOeval):
128
+ if not pycocotools_installed:
129
+ raise ImportError("pycocotools is not installed")
130
+
120
131
  cat_ids = cocoEval_cls.cocoGt.getCatIds()
121
132
  iouThrs = cocoEval_cls.params.iouThrs
122
133
  catId2idx = {cat_id: i for i, cat_id in enumerate(cat_ids)}
@@ -143,12 +154,12 @@ def get_counts(eval_img_dict: dict, cocoEval_cls):
143
154
  return true_positives.astype(int), false_positives.astype(int), false_negatives.astype(int)
144
155
 
145
156
 
146
- def get_counts_and_scores(cocoEval, cat_id: int, t: int):
147
- """
148
- tps, fps, scores, n_positives
157
+ def get_counts_and_scores(cocoEval: SlyCOCOeval, cat_id: int, t: int):
158
+ """Returns tps, fps, scores, n_positives"""
159
+
160
+ if not pycocotools_installed:
161
+ raise ImportError("pycocotools is not installed")
149
162
 
150
- type cocoEval: COCOeval
151
- """
152
163
  aRng = cocoEval.params.areaRng[0]
153
164
  eval_imgs = [ev for ev in cocoEval.evalImgs if ev is not None and ev["aRng"] == aRng]
154
165
 
@@ -192,10 +203,10 @@ def get_counts_and_scores(cocoEval, cat_id: int, t: int):
192
203
  return tps, fps, scores, n_positives
193
204
 
194
205
 
195
- def get_eval_img_dict(cocoEval):
196
- """
197
- type cocoEval: COCOeval
198
- """
206
+ def get_eval_img_dict(cocoEval: SlyCOCOeval):
207
+ if not pycocotools_installed:
208
+ raise ImportError("pycocotools is not installed")
209
+
199
210
  aRng = cocoEval.params.areaRng[0]
200
211
  eval_img_dict = defaultdict(list) # img_id : dt/gt
201
212
  for i, eval_img in enumerate(cocoEval.evalImgs):
@@ -211,7 +222,10 @@ def get_eval_img_dict(cocoEval):
211
222
  return eval_img_dict
212
223
 
213
224
 
214
- def _get_missclassified_match(eval_img_cls, dt_id, gtIds_orig, dtIds_orig, iou_t):
225
+ def _get_missclassified_match(eval_img_cls: SlyCOCOeval, dt_id, gtIds_orig, dtIds_orig, iou_t):
226
+ if not pycocotools_installed:
227
+ raise ImportError("pycocotools is not installed")
228
+
215
229
  # Correction on miss-classification
216
230
  gt_idx = np.nonzero(eval_img_cls["gtMatches"][iou_t] == dt_id)[0]
217
231
  if len(gt_idx) == 1:
@@ -231,12 +245,12 @@ def _get_missclassified_match(eval_img_cls, dt_id, gtIds_orig, dtIds_orig, iou_t
231
245
  def get_matches(
232
246
  eval_img_dict: dict,
233
247
  eval_img_dict_cls: dict,
234
- cocoEval_cls,
248
+ cocoEval_cls: SlyCOCOeval,
235
249
  iou_idx_per_class: dict = None,
236
250
  ):
237
- """
238
- type cocoEval_cls: COCOeval
239
- """
251
+ if not pycocotools_installed:
252
+ raise ImportError("pycocotools is not installed")
253
+
240
254
  cat_ids = cocoEval_cls.cocoGt.getCatIds()
241
255
  matches = []
242
256
  for img_id, eval_imgs in eval_img_dict.items():
@@ -326,11 +340,10 @@ def get_matches(
326
340
  return matches
327
341
 
328
342
 
329
- def get_rare_classes(cocoGt, topk_ann_fraction=0.1, topk_classes_fraction=0.2):
330
- """
331
- :param cocoGt: Ground truth dataset in COCO format
332
- :type cocoGt: COCO
333
- """
343
+ def get_rare_classes(cocoGt: COCO, topk_ann_fraction=0.1, topk_classes_fraction=0.2):
344
+ if not pycocotools_installed:
345
+ raise ImportError("pycocotools is not installed")
346
+
334
347
  anns_cat_ids = [ann["category_id"] for ann in cocoGt.anns.values()]
335
348
  cat_ids, cat_counts = np.unique(anns_cat_ids, return_counts=True)
336
349
  inds_sorted = np.argsort(cat_counts)
@@ -0,0 +1,93 @@
1
+ import numpy as np
2
+
3
+ pycocotools_installed = False
4
+ try:
5
+ from pycocotools.coco import COCO # pylint: disable=import-error
6
+ from pycocotools.cocoeval import COCOeval # pylint: disable=import-error
7
+
8
+ pycocotools_installed = True
9
+ except ImportError:
10
+ COCO = object
11
+ COCOeval = object
12
+
13
+
14
+ class SlyCOCOeval(COCOeval):
15
+ def summarize(self):
16
+ """
17
+ Compute and display summary metrics for evaluation results.
18
+ Note this functin can *only* be applied on the default parameter setting
19
+ """
20
+
21
+ def _summarize(ap=1, iouThr=None, areaRng="all", maxDets=100):
22
+ p = self.params
23
+ iStr = " {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}"
24
+ titleStr = "Average Precision" if ap == 1 else "Average Recall"
25
+ typeStr = "(AP)" if ap == 1 else "(AR)"
26
+ iouStr = (
27
+ "{:0.2f}:{:0.2f}".format(p.iouThrs[0], p.iouThrs[-1])
28
+ if iouThr is None
29
+ else "{:0.2f}".format(iouThr)
30
+ )
31
+
32
+ aind = [i for i, aRng in enumerate(p.areaRngLbl) if aRng == areaRng]
33
+ mind = [i for i, mDet in enumerate(p.maxDets) if mDet == maxDets]
34
+ if ap == 1:
35
+ # dimension of precision: [TxRxKxAxM]
36
+ s = self.eval["precision"]
37
+ # IoU
38
+ if iouThr is not None:
39
+ t = np.where(iouThr == p.iouThrs)[0]
40
+ s = s[t]
41
+ s = s[:, :, :, aind, mind]
42
+ else:
43
+ # dimension of recall: [TxKxAxM]
44
+ s = self.eval["recall"]
45
+ if iouThr is not None:
46
+ t = np.where(iouThr == p.iouThrs)[0]
47
+ s = s[t]
48
+ s = s[:, :, aind, mind]
49
+ if len(s[s > -1]) == 0:
50
+ mean_s = -1
51
+ else:
52
+ mean_s = np.mean(s[s > -1])
53
+ print(iStr.format(titleStr, typeStr, iouStr, areaRng, maxDets, mean_s))
54
+ return mean_s
55
+
56
+ def _summarizeDets():
57
+ stats = np.zeros((12,))
58
+ stats[0] = _summarize(1, maxDets=self.params.maxDets[2])
59
+ stats[1] = _summarize(1, iouThr=0.5, maxDets=self.params.maxDets[2])
60
+ stats[2] = _summarize(1, iouThr=0.75, maxDets=self.params.maxDets[2])
61
+ stats[3] = _summarize(1, areaRng="small", maxDets=self.params.maxDets[2])
62
+ stats[4] = _summarize(1, areaRng="medium", maxDets=self.params.maxDets[2])
63
+ stats[5] = _summarize(1, areaRng="large", maxDets=self.params.maxDets[2])
64
+ stats[6] = _summarize(0, maxDets=self.params.maxDets[0])
65
+ stats[7] = _summarize(0, maxDets=self.params.maxDets[1])
66
+ stats[8] = _summarize(0, maxDets=self.params.maxDets[2])
67
+ stats[9] = _summarize(0, areaRng="small", maxDets=self.params.maxDets[2])
68
+ stats[10] = _summarize(0, areaRng="medium", maxDets=self.params.maxDets[2])
69
+ stats[11] = _summarize(0, areaRng="large", maxDets=self.params.maxDets[2])
70
+ return stats
71
+
72
+ def _summarizeKps():
73
+ stats = np.zeros((10,))
74
+ stats[0] = _summarize(1, maxDets=20)
75
+ stats[1] = _summarize(1, maxDets=20, iouThr=0.5)
76
+ stats[2] = _summarize(1, maxDets=20, iouThr=0.75)
77
+ stats[3] = _summarize(1, maxDets=20, areaRng="medium")
78
+ stats[4] = _summarize(1, maxDets=20, areaRng="large")
79
+ stats[5] = _summarize(0, maxDets=20)
80
+ stats[6] = _summarize(0, maxDets=20, iouThr=0.5)
81
+ stats[7] = _summarize(0, maxDets=20, iouThr=0.75)
82
+ stats[8] = _summarize(0, maxDets=20, areaRng="medium")
83
+ stats[9] = _summarize(0, maxDets=20, areaRng="large")
84
+ return stats
85
+
86
+ if not self.eval:
87
+ raise Exception("Please run accumulate() first")
88
+ iouType = self.params.iouType
89
+ if iouType == "segm" or iouType == "bbox":
90
+ summarize = _summarizeDets
91
+ elif iouType == "keypoints":
92
+ summarize = _summarizeKps
93
+ self.stats = summarize() # pylint: disable=possibly-used-before-assignment
@@ -785,9 +785,11 @@ class Inference:
785
785
  checkpoint_file_path = os.path.join(
786
786
  model_info.get("artifacts_dir"), "checkpoints", checkpoint_name
787
787
  )
788
- checkpoint_file_info = self.api.file.get_info_by_path(
789
- sly_env.team_id(), checkpoint_file_path
790
- )
788
+ checkpoint_file_info = None
789
+ if not self._is_local_deploy:
790
+ checkpoint_file_info = self.api.file.get_info_by_path(
791
+ sly_env.team_id(), checkpoint_file_path
792
+ )
791
793
  if checkpoint_file_info is None:
792
794
  checkpoint_url = None
793
795
  else:
@@ -2413,6 +2415,7 @@ class Inference:
2413
2415
  self._inference_by_local_deploy_args()
2414
2416
  # Gracefully shut down the server
2415
2417
  self._app.shutdown()
2418
+ exit(0)
2416
2419
  # else: run server after endpoints
2417
2420
 
2418
2421
  @call_on_autostart()
@@ -3017,6 +3020,8 @@ class Inference:
3017
3020
  def _load_experiment_info(artifacts_dir):
3018
3021
  experiment_path = os.path.join(artifacts_dir, "experiment_info.json")
3019
3022
  model_info = self._load_json_file(experiment_path)
3023
+ model_meta_path = os.path.join(artifacts_dir, "model_meta.json")
3024
+ model_info["model_meta"] = self._load_json_file(model_meta_path)
3020
3025
  original_model_files = model_info.get("model_files")
3021
3026
  if not original_model_files:
3022
3027
  raise ValueError("Invalid 'experiment_info.json'. Missing 'model_files' key.")
@@ -3106,7 +3111,7 @@ class Inference:
3106
3111
  "runtime": runtime,
3107
3112
  }
3108
3113
 
3109
- logger.info(f"Deploy parameters: {deploy_params}")
3114
+ logger.debug(f"Deploy parameters: {deploy_params}")
3110
3115
  return deploy_params, need_download
3111
3116
 
3112
3117
  def _run_server(self):
@@ -3151,14 +3156,17 @@ class Inference:
3151
3156
  ann = predict_image_np(image_np)
3152
3157
  api.annotation.upload_ann(image, ann)
3153
3158
  elif isinstance(image, str):
3154
- if sly_fs.file_exists(self._args.predict):
3155
- image_np = sly_image.read(self._args.predict)
3159
+ if sly_fs.file_exists(self._args.predict_image):
3160
+ image_np = sly_image.read(self._args.predict_image)
3156
3161
  ann = predict_image_np(image_np)
3157
3162
  pred_ann_path = image + ".json"
3158
3163
  sly_json.dump_json_file(ann.to_json(), pred_ann_path)
3159
- # Save image for debug
3164
+ # Save image and ann for debug
3160
3165
  # ann.draw_pretty(image_np)
3161
- # pred_path = os.path.join(os.path.dirname(self._args.predict), "pred_" + os.path.basename(self._args.predict))
3166
+ # pred_path = os.path.join(
3167
+ # os.path.dirname(self._args.predict_image),
3168
+ # "pred_" + os.path.basename(self._args.predict_image),
3169
+ # )
3162
3170
  # sly_image.write(pred_path, image_np)
3163
3171
 
3164
3172
  if self._args.predict_project is not None:
@@ -1759,7 +1759,7 @@ class TrainApp:
1759
1759
  # self.gui.training_logs.tensorboard_button.disable()
1760
1760
 
1761
1761
  # Set artifacts to GUI
1762
- self._api.task.set_output_experiment(self.task_id, experiment_info)
1762
+ self._api.task.set_output_experiment(self.task_id, experiment_info, self.project_name)
1763
1763
  set_directory(remote_dir)
1764
1764
  self.gui.training_artifacts.artifacts_thumbnail.set(file_info)
1765
1765
  self.gui.training_artifacts.artifacts_thumbnail.show()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.306
3
+ Version: 6.73.308
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -42,7 +42,7 @@ supervisely/api/remote_storage_api.py,sha256=qTuPhPsstgEjRm1g-ZInddik8BNC_38YvBB
42
42
  supervisely/api/report_api.py,sha256=Om7CGulUbQ4BuJ16eDtz7luLe0JQNqab-LoLpUXu7YE,7123
43
43
  supervisely/api/role_api.py,sha256=aBL4mxtn08LDPXQuS153-lQFN6N2kcwiz8MbescZ8Gk,3044
44
44
  supervisely/api/storage_api.py,sha256=FPGYf3Rn3LBoe38RBNdoiURs306oshzvKOEOQ56XAbs,13030
45
- supervisely/api/task_api.py,sha256=iaP5v0WrVJFjdmoIuBBk___7kS57fxgmhjByZX7ZSHo,53610
45
+ supervisely/api/task_api.py,sha256=1xbKi6JYl8FOHno2GoE224ZiQBXdKGR4Sz5uP9LElyE,54085
46
46
  supervisely/api/team_api.py,sha256=bEoz3mrykvliLhKnzEy52vzdd_H8VBJCpxF-Bnek9Q8,19467
47
47
  supervisely/api/user_api.py,sha256=4S97yIc6AMTZCa0N57lzETnpIE8CeqClvCb6kjUkgfc,24940
48
48
  supervisely/api/video_annotation_tool_api.py,sha256=3A9-U8WJzrTShP_n9T8U01M9FzGYdeS51CCBTzUnooo,6686
@@ -93,7 +93,7 @@ supervisely/app/fastapi/index.html,sha256=6K8akK7_k9Au-BpZ7cM2qocuiegLdXz8UFPnWg
93
93
  supervisely/app/fastapi/no_html_main.html,sha256=NhQP7noyORBx72lFh1CQKgBRupkWjiq6Gaw-9Hkvg7c,37
94
94
  supervisely/app/fastapi/offline.py,sha256=CwMMkJ1frD6wiZS-SEoNDtQ1UJcJe1Ob6ohE3r4CQL8,7414
95
95
  supervisely/app/fastapi/request.py,sha256=NU7rKmxJ1pfkDZ7_yHckRcRAueJRQIqCor11UO2OHr8,766
96
- supervisely/app/fastapi/subapp.py,sha256=MlB2dcHEtF0RPk-hxk67Gb1wBeGHsgCEIqAaBHzLEoY,43653
96
+ supervisely/app/fastapi/subapp.py,sha256=AE_AJQ5ZfNKbV38To2uhSnSR7C_XoI99lAc0nDXOtbU,44064
97
97
  supervisely/app/fastapi/templating.py,sha256=JOAW8U-14GD47E286mzFi3mZSPbm_csJGqtXWLRM4rc,2929
98
98
  supervisely/app/fastapi/utils.py,sha256=GZuTWLcVRGVx8TL3jVEYUOZIT2FawbwIe2kAOBLw9ho,398
99
99
  supervisely/app/fastapi/websocket.py,sha256=TlRSPOAhRItTv1HGvdukK1ZvhRjMUxRa-lJlsRR9rJw,1308
@@ -781,14 +781,14 @@ supervisely/nn/benchmark/comparison/semantic_segmentation/vis_metrics/renormaliz
781
781
  supervisely/nn/benchmark/comparison/semantic_segmentation/vis_metrics/speedtest.py,sha256=sQDkzfpVNaSYBHVcHYqydRSWN0i-yV9uhtEAggg295A,10879
782
782
  supervisely/nn/benchmark/instance_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
783
783
  supervisely/nn/benchmark/instance_segmentation/benchmark.py,sha256=lTDzgKGpfeF5o_a2nS56wiAsUQPH1eubk37b9CaB2KI,1171
784
- supervisely/nn/benchmark/instance_segmentation/evaluation_params.yaml,sha256=NoaecTcEp-LhsDQcHNQZi1gzNXcahgycKy_C4aDcSSw,304
784
+ supervisely/nn/benchmark/instance_segmentation/evaluation_params.yaml,sha256=fEYA-ExmxDiSzRl7YfBMpF6LZui0tcDgZyC-YUvmmqg,367
785
785
  supervisely/nn/benchmark/instance_segmentation/evaluator.py,sha256=mpCi8S6YNwlVvgcERQSHBOhC9PrSfQkQ55pPTcK6V9c,2811
786
786
  supervisely/nn/benchmark/instance_segmentation/text_templates.py,sha256=usKqm_FaO-WXiopxzrdjpIrOqHdqFQ89lmYoayzt6KM,25597
787
787
  supervisely/nn/benchmark/instance_segmentation/visualizer.py,sha256=8NscOKy7JK4AG-Czu3SM0qJQXLDfKD9URdG1d4nz89E,564
788
788
  supervisely/nn/benchmark/object_detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
789
789
  supervisely/nn/benchmark/object_detection/base_vis_metric.py,sha256=44Em214YPxZgn2hEzFvqBcnjsyiElD9TSuLamwUnx20,1611
790
790
  supervisely/nn/benchmark/object_detection/benchmark.py,sha256=Wb4xlFXilIMVfsifNNQY25uE52NeEDLzQpnq8QPYq9U,1086
791
- supervisely/nn/benchmark/object_detection/evaluation_params.yaml,sha256=NoaecTcEp-LhsDQcHNQZi1gzNXcahgycKy_C4aDcSSw,304
791
+ supervisely/nn/benchmark/object_detection/evaluation_params.yaml,sha256=fEYA-ExmxDiSzRl7YfBMpF6LZui0tcDgZyC-YUvmmqg,367
792
792
  supervisely/nn/benchmark/object_detection/evaluator.py,sha256=s-hPBm5BmoCgwoozVyDacum4kVLNtYK6I6NCt_L_LSA,7278
793
793
  supervisely/nn/benchmark/object_detection/metric_provider.py,sha256=59UnOX7VuYvVQFeUJy5v6EFIpqSDNgx5wMp9qyVixgM,23686
794
794
  supervisely/nn/benchmark/object_detection/text_templates.py,sha256=4BgTIX1Co4WK9_VSUa1qWCmh5OJzo3_opVU6LOjKSjc,25842
@@ -837,7 +837,8 @@ supervisely/nn/benchmark/semantic_segmentation/vis_metrics/speedtest.py,sha256=0
837
837
  supervisely/nn/benchmark/semantic_segmentation/vis_metrics/vis_texts.py,sha256=rRdYZxmhQX4T3RsXJVGp34NMZPz8jUHtVvBN5BpPJ5I,603
838
838
  supervisely/nn/benchmark/utils/__init__.py,sha256=r0Ay4OMqfIL-9wwJykKji_Uks2Dm9vUhyA7hT8eLxII,657
839
839
  supervisely/nn/benchmark/utils/detection/__init__.py,sha256=6CsMxQqUp1GOc-2Wmnw2lamtvklHo2tcCYTxgT5NsZo,88
840
- supervisely/nn/benchmark/utils/detection/calculate_metrics.py,sha256=gC6by_2HT9ACuxbtW93eKeioW9sCMMDM3aPi99w1xx8,11963
840
+ supervisely/nn/benchmark/utils/detection/calculate_metrics.py,sha256=plgBNJXRZ2MEY_Es8kVnrzpsZAyZqtvsOFT3uZocBhU,12593
841
+ supervisely/nn/benchmark/utils/detection/coco_eval.py,sha256=9Pz0_zUzg8qCOWyE24wzhRoDLO5z9qPuWoqc8Pj29do,4135
841
842
  supervisely/nn/benchmark/utils/detection/metrics.py,sha256=oyictdJ7rRDUkaVvHoxntywW5zZweS8pIJ1bN6JgXtE,2420
842
843
  supervisely/nn/benchmark/utils/detection/sly2coco.py,sha256=0O2LSCU5zIX34mD4hZIv8O3-j6LwnB0DqhiVPAiosO8,6883
843
844
  supervisely/nn/benchmark/utils/detection/utlis.py,sha256=dKhsOGmQKH20-IlD90DWfZzi171j65N71hNdHRCX5Hs,954
@@ -875,7 +876,7 @@ supervisely/nn/benchmark/visualization/widgets/table/__init__.py,sha256=47DEQpj8
875
876
  supervisely/nn/benchmark/visualization/widgets/table/table.py,sha256=atmDnF1Af6qLQBUjLhK18RMDKAYlxnsuVHMSEa5a-e8,4319
876
877
  supervisely/nn/inference/__init__.py,sha256=mtEci4Puu-fRXDnGn8RP47o97rv3VTE0hjbYO34Zwqg,1622
877
878
  supervisely/nn/inference/cache.py,sha256=h-pP_7th0ana3oJ75sFfTbead3hdKUvYA8Iq2OXDx3I,31317
878
- supervisely/nn/inference/inference.py,sha256=-RXgGv9QUI-hJk1fVDYZVNguLlvSHjCDtElwSIz21Ow,148340
879
+ supervisely/nn/inference/inference.py,sha256=WIFVWA-x5RtcIhpq_9I0XjOeQfP32V5Ef1-cL8YyNJ8,148722
879
880
  supervisely/nn/inference/session.py,sha256=jmkkxbe2kH-lEgUU6Afh62jP68dxfhF5v6OGDfLU62E,35757
880
881
  supervisely/nn/inference/video_inference.py,sha256=8Bshjr6rDyLay5Za8IB8Dr6FURMO2R_v7aELasO8pR4,5746
881
882
  supervisely/nn/inference/gui/__init__.py,sha256=wCxd-lF5Zhcwsis-wScDA8n1Gk_1O00PKgDviUZ3F1U,221
@@ -972,7 +973,7 @@ supervisely/nn/tracker/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
972
973
  supervisely/nn/tracker/utils/gmc.py,sha256=3JX8979H3NA-YHNaRQyj9Z-xb9qtyMittPEjGw8y2Jo,11557
973
974
  supervisely/nn/tracker/utils/kalman_filter.py,sha256=eSFmCjM0mikHCAFvj-KCVzw-0Jxpoc3Cfc2NWEjJC1Q,17268
974
975
  supervisely/nn/training/__init__.py,sha256=gY4PCykJ-42MWKsqb9kl-skemKa8yB6t_fb5kzqR66U,111
975
- supervisely/nn/training/train_app.py,sha256=oFK1lGNmFAWvSel7nxYd-YA54gA0XJXnaZze1B3pqbg,103947
976
+ supervisely/nn/training/train_app.py,sha256=6bbmj4d2uemKMnv2u5d-2Wp6RFOQl3COl3CgwC6-Gqs,103966
976
977
  supervisely/nn/training/gui/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
977
978
  supervisely/nn/training/gui/classes_selector.py,sha256=8UgzA4aogOAr1s42smwEcDbgaBj_i0JLhjwlZ9bFdIA,3772
978
979
  supervisely/nn/training/gui/gui.py,sha256=CnT_QhihrxdSHKybpI0pXhPLwCaXEana_qdn0DhXByg,25558
@@ -1074,9 +1075,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1074
1075
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1075
1076
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1076
1077
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1077
- supervisely-6.73.306.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1078
- supervisely-6.73.306.dist-info/METADATA,sha256=Le_ZxcfBW8-k0qfJMmpxGWDVaMOQPNo9MmmuoOrT0fU,33573
1079
- supervisely-6.73.306.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1080
- supervisely-6.73.306.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1081
- supervisely-6.73.306.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1082
- supervisely-6.73.306.dist-info/RECORD,,
1078
+ supervisely-6.73.308.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1079
+ supervisely-6.73.308.dist-info/METADATA,sha256=ahArJ7ylpv1q99AgrwIkcjoNL8-Dy-E6vWP5v4NCgow,33573
1080
+ supervisely-6.73.308.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1081
+ supervisely-6.73.308.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1082
+ supervisely-6.73.308.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1083
+ supervisely-6.73.308.dist-info/RECORD,,