supervisely 6.73.326__py3-none-any.whl → 6.73.328__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.
- supervisely/annotation/annotation.py +1 -1
- supervisely/annotation/tag_meta.py +1 -1
- supervisely/api/api.py +8 -5
- supervisely/app/widgets/pretrained_models_selector/pretrained_models_selector.py +17 -14
- supervisely/app/widgets/pretrained_models_selector/template.html +2 -1
- supervisely/convert/image/yolo/yolo_helper.py +95 -25
- supervisely/io/env.py +15 -0
- supervisely/nn/inference/gui/serving_gui_template.py +2 -3
- supervisely/nn/inference/inference.py +33 -25
- supervisely/nn/training/gui/classes_selector.py +24 -19
- supervisely/nn/training/gui/gui.py +90 -37
- supervisely/nn/training/gui/hyperparameters_selector.py +32 -15
- supervisely/nn/training/gui/input_selector.py +13 -2
- supervisely/nn/training/gui/model_selector.py +16 -6
- supervisely/nn/training/gui/train_val_splits_selector.py +10 -1
- supervisely/nn/training/gui/training_artifacts.py +23 -4
- supervisely/nn/training/gui/training_logs.py +15 -3
- supervisely/nn/training/gui/training_process.py +14 -13
- supervisely/nn/training/train_app.py +59 -24
- supervisely/nn/utils.py +9 -0
- supervisely/project/project.py +16 -3
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/METADATA +1 -1
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/RECORD +27 -27
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/WHEEL +1 -1
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/LICENSE +0 -0
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.326.dist-info → supervisely-6.73.328.dist-info}/top_level.txt +0 -0
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
from typing import Any, Dict
|
|
2
2
|
|
|
3
|
-
from supervisely import Api
|
|
4
3
|
from supervisely.app.widgets import (
|
|
5
4
|
Button,
|
|
6
5
|
Card,
|
|
7
6
|
Container,
|
|
8
|
-
DoneLabel,
|
|
9
7
|
Empty,
|
|
10
8
|
Field,
|
|
11
|
-
FolderThumbnail,
|
|
12
9
|
Input,
|
|
13
|
-
ReportThumbnail,
|
|
14
10
|
SelectCudaDevice,
|
|
15
11
|
Text,
|
|
16
12
|
)
|
|
@@ -19,14 +15,25 @@ from supervisely.app.widgets import (
|
|
|
19
15
|
class TrainingProcess:
|
|
20
16
|
title = "Training Process"
|
|
21
17
|
description = "Manage training process"
|
|
22
|
-
lock_message = "Select
|
|
18
|
+
lock_message = "Select hyperparameters to unlock"
|
|
23
19
|
|
|
24
20
|
def __init__(self, app_options: Dict[str, Any]):
|
|
21
|
+
# Initialize widgets to None
|
|
22
|
+
self.select_device = None
|
|
23
|
+
self.select_device_field = None
|
|
24
|
+
self.experiment_name_input = None
|
|
25
|
+
self.experiment_name_field = None
|
|
26
|
+
self.start_button = None
|
|
27
|
+
self.stop_button = None
|
|
28
|
+
self.validator_text = None
|
|
29
|
+
self.container = None
|
|
30
|
+
self.card = None
|
|
31
|
+
# -------------------------------- #
|
|
32
|
+
|
|
25
33
|
self.display_widgets = []
|
|
26
34
|
self.app_options = app_options
|
|
27
35
|
|
|
28
36
|
# GUI Components
|
|
29
|
-
# Optional Select CUDA device
|
|
30
37
|
if self.app_options.get("device_selector", False):
|
|
31
38
|
self.select_device = SelectCudaDevice()
|
|
32
39
|
self.select_device_field = Field(
|
|
@@ -35,7 +42,6 @@ class TrainingProcess:
|
|
|
35
42
|
content=self.select_device,
|
|
36
43
|
)
|
|
37
44
|
self.display_widgets.extend([self.select_device_field])
|
|
38
|
-
# -------------------------------- #
|
|
39
45
|
|
|
40
46
|
self.experiment_name_input = Input("Enter experiment name")
|
|
41
47
|
self.experiment_name_field = Field(
|
|
@@ -59,13 +65,8 @@ class TrainingProcess:
|
|
|
59
65
|
self.validator_text.hide()
|
|
60
66
|
|
|
61
67
|
self.display_widgets.extend(
|
|
62
|
-
[
|
|
63
|
-
self.experiment_name_field,
|
|
64
|
-
button_container,
|
|
65
|
-
self.validator_text,
|
|
66
|
-
]
|
|
68
|
+
[self.experiment_name_field, button_container, self.validator_text]
|
|
67
69
|
)
|
|
68
|
-
# -------------------------------- #
|
|
69
70
|
|
|
70
71
|
self.container = Container(self.display_widgets)
|
|
71
72
|
self.card = Card(
|
|
@@ -8,7 +8,7 @@ training workflows in a Supervisely application.
|
|
|
8
8
|
import shutil
|
|
9
9
|
import subprocess
|
|
10
10
|
from datetime import datetime
|
|
11
|
-
from os import getcwd, listdir
|
|
11
|
+
from os import getcwd, listdir, walk
|
|
12
12
|
from os.path import basename, exists, expanduser, isdir, isfile, join
|
|
13
13
|
from typing import Any, Dict, List, Literal, Optional, Union
|
|
14
14
|
from urllib.request import urlopen
|
|
@@ -56,7 +56,7 @@ from supervisely.nn.inference.inference import Inference
|
|
|
56
56
|
from supervisely.nn.task_type import TaskType
|
|
57
57
|
from supervisely.nn.training.gui.gui import TrainGUI
|
|
58
58
|
from supervisely.nn.training.loggers import setup_train_logger, train_logger
|
|
59
|
-
from supervisely.nn.utils import ModelSource
|
|
59
|
+
from supervisely.nn.utils import ModelSource, _get_model_name
|
|
60
60
|
from supervisely.output import set_directory
|
|
61
61
|
from supervisely.project.download import (
|
|
62
62
|
copy_from_cache,
|
|
@@ -135,6 +135,7 @@ class TrainApp:
|
|
|
135
135
|
self._hyperparameters = self._load_hyperparameters(hyperparameters)
|
|
136
136
|
self._app_options = self._load_app_options(app_options)
|
|
137
137
|
self._inference_class = None
|
|
138
|
+
self._is_inference_class_regirested = False
|
|
138
139
|
# ----------------------------------------- #
|
|
139
140
|
|
|
140
141
|
# Directories
|
|
@@ -174,6 +175,7 @@ class TrainApp:
|
|
|
174
175
|
self.gui: TrainGUI = TrainGUI(
|
|
175
176
|
self.framework_name, self._models, self._hyperparameters, self._app_options
|
|
176
177
|
)
|
|
178
|
+
|
|
177
179
|
self.app = Application(layout=self.gui.layout)
|
|
178
180
|
self._server = self.app.get_server()
|
|
179
181
|
self._train_func = None
|
|
@@ -345,6 +347,16 @@ class TrainApp:
|
|
|
345
347
|
"""
|
|
346
348
|
return self.gui.model_selector.get_model_info()
|
|
347
349
|
|
|
350
|
+
@property
|
|
351
|
+
def task_type(self) -> TaskType:
|
|
352
|
+
"""
|
|
353
|
+
Returns the task type of the model.
|
|
354
|
+
|
|
355
|
+
:return: Task type.
|
|
356
|
+
:rtype: TaskType
|
|
357
|
+
"""
|
|
358
|
+
return self.gui.model_selector.get_selected_task_type()
|
|
359
|
+
|
|
348
360
|
@property
|
|
349
361
|
def device(self) -> str:
|
|
350
362
|
"""
|
|
@@ -359,9 +371,9 @@ class TrainApp:
|
|
|
359
371
|
@property
|
|
360
372
|
def classes(self) -> List[str]:
|
|
361
373
|
"""
|
|
362
|
-
Returns the selected classes for training.
|
|
374
|
+
Returns the selected classes names for training.
|
|
363
375
|
|
|
364
|
-
:return: List of selected classes.
|
|
376
|
+
:return: List of selected classes names.
|
|
365
377
|
:rtype: List[str]
|
|
366
378
|
"""
|
|
367
379
|
selected_classes = set(self.gui.classes_selector.get_selected_classes())
|
|
@@ -556,7 +568,10 @@ class TrainApp:
|
|
|
556
568
|
model_meta,
|
|
557
569
|
gt_project_id,
|
|
558
570
|
)
|
|
559
|
-
|
|
571
|
+
if mb_eval_report_id is not None:
|
|
572
|
+
evaluation_report_link = abs_url(
|
|
573
|
+
f"/model-benchmark?id={str(mb_eval_report_id)}"
|
|
574
|
+
)
|
|
560
575
|
except Exception as e:
|
|
561
576
|
logger.error(f"Model benchmark failed: {e}")
|
|
562
577
|
|
|
@@ -596,7 +611,7 @@ class TrainApp:
|
|
|
596
611
|
self._workflow_output(remote_dir, file_info, mb_eval_lnk_file_info, mb_eval_report_id)
|
|
597
612
|
|
|
598
613
|
def register_inference_class(
|
|
599
|
-
self, inference_class: Inference, inference_settings: dict = None
|
|
614
|
+
self, inference_class: Inference, inference_settings: Union[str, dict] = None
|
|
600
615
|
) -> None:
|
|
601
616
|
"""
|
|
602
617
|
Registers an inference class for the training application to do model benchmarking.
|
|
@@ -606,8 +621,19 @@ class TrainApp:
|
|
|
606
621
|
:param inference_settings: Settings for the inference class.
|
|
607
622
|
:type inference_settings: dict
|
|
608
623
|
"""
|
|
624
|
+
# if not self.is_model_benchmark_enabled:
|
|
625
|
+
# raise ValueError(
|
|
626
|
+
# "Enable 'model_benchmark' in app_options.yaml to register an inference class."
|
|
627
|
+
# )
|
|
628
|
+
|
|
629
|
+
self._is_inference_class_regirested = True
|
|
609
630
|
self._inference_class = inference_class
|
|
610
|
-
self._inference_settings =
|
|
631
|
+
self._inference_settings = None
|
|
632
|
+
if isinstance(inference_settings, str):
|
|
633
|
+
with open(inference_settings, "r") as file:
|
|
634
|
+
self._inference_settings = yaml.safe_load(file)
|
|
635
|
+
else:
|
|
636
|
+
self._inference_settings = inference_settings
|
|
611
637
|
|
|
612
638
|
def get_app_state(self, experiment_info: dict = None) -> dict:
|
|
613
639
|
"""
|
|
@@ -616,7 +642,6 @@ class TrainApp:
|
|
|
616
642
|
:return: Application state.
|
|
617
643
|
:rtype: dict
|
|
618
644
|
"""
|
|
619
|
-
input_data = {"project_id": self.project_id}
|
|
620
645
|
train_val_splits = self._get_train_val_splits_for_app_state()
|
|
621
646
|
model = self._get_model_config_for_app_state(experiment_info)
|
|
622
647
|
|
|
@@ -629,7 +654,6 @@ class TrainApp:
|
|
|
629
654
|
}
|
|
630
655
|
|
|
631
656
|
app_state = {
|
|
632
|
-
"input": input_data,
|
|
633
657
|
"train_val_split": train_val_splits,
|
|
634
658
|
"classes": self.classes,
|
|
635
659
|
"model": model,
|
|
@@ -778,6 +802,7 @@ class TrainApp:
|
|
|
778
802
|
if not self.gui.input_selector.get_cache_value() or is_development():
|
|
779
803
|
self._download_no_cache(dataset_infos, total_images)
|
|
780
804
|
self.sly_project = Project(self.project_dir, OpenMode.READ)
|
|
805
|
+
self.sly_project.remove_classes_except(self.project_dir, self.classes, True)
|
|
781
806
|
return
|
|
782
807
|
|
|
783
808
|
try:
|
|
@@ -792,6 +817,7 @@ class TrainApp:
|
|
|
792
817
|
self._download_no_cache(dataset_infos, total_images)
|
|
793
818
|
finally:
|
|
794
819
|
self.sly_project = Project(self.project_dir, OpenMode.READ)
|
|
820
|
+
self.sly_project.remove_classes_except(self.project_dir, self.classes, True)
|
|
795
821
|
logger.info(f"Project downloaded successfully to: '{self.project_dir}'")
|
|
796
822
|
|
|
797
823
|
def _download_no_cache(self, dataset_infos: List[DatasetInfo], total_images: int) -> None:
|
|
@@ -1160,9 +1186,9 @@ class TrainApp:
|
|
|
1160
1186
|
experiment_info should contain the following keys:
|
|
1161
1187
|
- model_name": str
|
|
1162
1188
|
- task_type": str
|
|
1163
|
-
- model_files": dict
|
|
1164
1189
|
- checkpoints": list
|
|
1165
1190
|
- best_checkpoint": str
|
|
1191
|
+
- model_files": Optional[dict]
|
|
1166
1192
|
|
|
1167
1193
|
Other keys are generated by the TrainApp class automatically
|
|
1168
1194
|
|
|
@@ -1179,7 +1205,6 @@ class TrainApp:
|
|
|
1179
1205
|
required_keys = {
|
|
1180
1206
|
"model_name": str,
|
|
1181
1207
|
"task_type": str,
|
|
1182
|
-
"model_files": dict,
|
|
1183
1208
|
"checkpoints": (list, str),
|
|
1184
1209
|
"best_checkpoint": str,
|
|
1185
1210
|
}
|
|
@@ -1388,7 +1413,14 @@ class TrainApp:
|
|
|
1388
1413
|
# Prepare logs
|
|
1389
1414
|
if sly_fs.dir_exists(self.log_dir):
|
|
1390
1415
|
logs_dir = join(self.output_dir, "logs")
|
|
1391
|
-
|
|
1416
|
+
logger_type = self._app_options.get("train_logger", None)
|
|
1417
|
+
for root, _, files in walk(self.log_dir):
|
|
1418
|
+
for file in files:
|
|
1419
|
+
if logger_type is None or logger_type == "tensorboard":
|
|
1420
|
+
if ".tfevents." in file:
|
|
1421
|
+
src_log_path = join(root, file)
|
|
1422
|
+
dst_log_path = join(logs_dir, file)
|
|
1423
|
+
sly_fs.copy_file(src_log_path, dst_log_path)
|
|
1392
1424
|
return experiment_info
|
|
1393
1425
|
|
|
1394
1426
|
# Generate experiment_info.json and app_state.json
|
|
@@ -1534,9 +1566,11 @@ class TrainApp:
|
|
|
1534
1566
|
experiment_info["best_checkpoint"] = sly_fs.get_file_name_with_ext(
|
|
1535
1567
|
experiment_info["best_checkpoint"]
|
|
1536
1568
|
)
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1569
|
+
|
|
1570
|
+
for file in experiment_info["model_files"]:
|
|
1571
|
+
experiment_info["model_files"][file] = sly_fs.get_file_name_with_ext(
|
|
1572
|
+
experiment_info["model_files"][file]
|
|
1573
|
+
)
|
|
1540
1574
|
|
|
1541
1575
|
local_path = join(self.output_dir, self._experiment_json_file)
|
|
1542
1576
|
remote_path = join(remote_dir, self._experiment_json_file)
|
|
@@ -1594,6 +1628,8 @@ class TrainApp:
|
|
|
1594
1628
|
)
|
|
1595
1629
|
|
|
1596
1630
|
def _upload_demo_files(self, remote_dir: str) -> None:
|
|
1631
|
+
if not self.gui.training_artifacts.need_upload_demo:
|
|
1632
|
+
return
|
|
1597
1633
|
demo = self._app_options.get("demo")
|
|
1598
1634
|
if demo is None:
|
|
1599
1635
|
return
|
|
@@ -1671,9 +1707,7 @@ class TrainApp:
|
|
|
1671
1707
|
experiment_info = experiment_info or {}
|
|
1672
1708
|
|
|
1673
1709
|
if self.model_source == ModelSource.PRETRAINED:
|
|
1674
|
-
model_name = experiment_info.get("model_name") or self.model_info
|
|
1675
|
-
"model_name"
|
|
1676
|
-
)
|
|
1710
|
+
model_name = experiment_info.get("model_name") or _get_model_name(self.model_info)
|
|
1677
1711
|
return {
|
|
1678
1712
|
"source": ModelSource.PRETRAINED,
|
|
1679
1713
|
"model_name": model_name,
|
|
@@ -1682,7 +1716,7 @@ class TrainApp:
|
|
|
1682
1716
|
return {
|
|
1683
1717
|
"source": ModelSource.CUSTOM,
|
|
1684
1718
|
"task_id": self.task_id,
|
|
1685
|
-
"checkpoint": "checkpoint
|
|
1719
|
+
"checkpoint": "custom checkpoint",
|
|
1686
1720
|
}
|
|
1687
1721
|
|
|
1688
1722
|
# ----------------------------------------- #
|
|
@@ -1764,10 +1798,10 @@ class TrainApp:
|
|
|
1764
1798
|
self.gui.training_process.start_button.loading = False
|
|
1765
1799
|
self.gui.training_process.start_button.disable()
|
|
1766
1800
|
self.gui.training_process.stop_button.disable()
|
|
1767
|
-
# self.gui.training_logs.tensorboard_button.disable()
|
|
1768
1801
|
|
|
1769
1802
|
# Set artifacts to GUI
|
|
1770
|
-
|
|
1803
|
+
if is_production():
|
|
1804
|
+
self._api.task.set_output_experiment(self.task_id, experiment_info)
|
|
1771
1805
|
set_directory(remote_dir)
|
|
1772
1806
|
self.gui.training_artifacts.artifacts_thumbnail.set(file_info)
|
|
1773
1807
|
self.gui.training_artifacts.artifacts_thumbnail.show()
|
|
@@ -1814,7 +1848,7 @@ class TrainApp:
|
|
|
1814
1848
|
self.gui.training_artifacts.trt_instruction.show()
|
|
1815
1849
|
|
|
1816
1850
|
# Show the inference demo widget if overview or any demo is available
|
|
1817
|
-
if
|
|
1851
|
+
if self.gui.training_artifacts.inference_demo_field is not None and any(
|
|
1818
1852
|
[
|
|
1819
1853
|
self.gui.training_artifacts.overview_demo_exists(demo_path),
|
|
1820
1854
|
self.gui.training_artifacts.pytorch_demo_exists(demo_path),
|
|
@@ -1822,7 +1856,8 @@ class TrainApp:
|
|
|
1822
1856
|
self.gui.training_artifacts.trt_demo_exists(demo_path),
|
|
1823
1857
|
]
|
|
1824
1858
|
):
|
|
1825
|
-
self.gui.training_artifacts.inference_demo_field
|
|
1859
|
+
if self.gui.training_artifacts.inference_demo_field is not None:
|
|
1860
|
+
self.gui.training_artifacts.inference_demo_field.show()
|
|
1826
1861
|
# ---------------------------- #
|
|
1827
1862
|
|
|
1828
1863
|
# Set status to completed and unlock
|
|
@@ -1932,6 +1967,7 @@ class TrainApp:
|
|
|
1932
1967
|
"model_name": experiment_info["model_name"],
|
|
1933
1968
|
"framework_name": self.framework_name,
|
|
1934
1969
|
"model_meta": model_meta.to_json(),
|
|
1970
|
+
"task_type": task_type,
|
|
1935
1971
|
}
|
|
1936
1972
|
|
|
1937
1973
|
logger.info(f"Deploy parameters: {self._benchmark_params}")
|
|
@@ -2551,7 +2587,6 @@ class TrainApp:
|
|
|
2551
2587
|
if task_type == TaskType.OBJECT_DETECTION:
|
|
2552
2588
|
Project.to_detection_task(project.directory, inplace=True)
|
|
2553
2589
|
pr_prefix = "[detection]: "
|
|
2554
|
-
# @TODO: dont convert segmentation?
|
|
2555
2590
|
elif (
|
|
2556
2591
|
task_type == TaskType.INSTANCE_SEGMENTATION
|
|
2557
2592
|
or task_type == TaskType.SEMANTIC_SEGMENTATION
|
supervisely/nn/utils.py
CHANGED
|
@@ -55,3 +55,12 @@ class DeployInfo:
|
|
|
55
55
|
model_precision: str
|
|
56
56
|
hardware: str
|
|
57
57
|
deploy_params: dict
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _get_model_name(model_info: dict):
|
|
61
|
+
name = model_info.get("model_name")
|
|
62
|
+
if not name:
|
|
63
|
+
name = model_info.get("meta", {}).get("model_name")
|
|
64
|
+
if not name:
|
|
65
|
+
raise ValueError("Model name not found not in model_info nor in meta.")
|
|
66
|
+
return name
|
supervisely/project/project.py
CHANGED
|
@@ -1933,9 +1933,10 @@ class Dataset(KeyObject):
|
|
|
1933
1933
|
self,
|
|
1934
1934
|
meta: ProjectMeta,
|
|
1935
1935
|
dest_dir: Optional[str] = None,
|
|
1936
|
-
task_type: Literal["
|
|
1936
|
+
task_type: Literal["detect", "segment", "pose"] = "detect",
|
|
1937
1937
|
log_progress: bool = False,
|
|
1938
1938
|
progress_cb: Optional[Callable] = None,
|
|
1939
|
+
is_val: Optional[bool] = None,
|
|
1939
1940
|
):
|
|
1940
1941
|
"""
|
|
1941
1942
|
Convert Supervisely dataset to YOLO format.
|
|
@@ -1950,6 +1951,8 @@ class Dataset(KeyObject):
|
|
|
1950
1951
|
:type log_progress: :class:`str`, optional
|
|
1951
1952
|
:param progress_cb: Progress callback.
|
|
1952
1953
|
:type progress_cb: :class:`Callable`, optional
|
|
1954
|
+
:param is_val: If True, the dataset is a validation dataset.
|
|
1955
|
+
:type is_val: :class:`bool`, optional
|
|
1953
1956
|
:return: YOLO dataset in dictionary format.
|
|
1954
1957
|
:rtype: :class:`dict`
|
|
1955
1958
|
|
|
@@ -1975,6 +1978,7 @@ class Dataset(KeyObject):
|
|
|
1975
1978
|
task_type=task_type,
|
|
1976
1979
|
log_progress=log_progress,
|
|
1977
1980
|
progress_cb=progress_cb,
|
|
1981
|
+
is_val=is_val,
|
|
1978
1982
|
)
|
|
1979
1983
|
|
|
1980
1984
|
def to_pascal_voc(
|
|
@@ -3821,19 +3825,27 @@ class Project:
|
|
|
3821
3825
|
def to_yolo(
|
|
3822
3826
|
self,
|
|
3823
3827
|
dest_dir: Optional[str] = None,
|
|
3824
|
-
task_type: Literal["
|
|
3828
|
+
task_type: Literal["detect", "segment", "pose"] = "detect",
|
|
3825
3829
|
log_progress: bool = True,
|
|
3826
3830
|
progress_cb: Optional[Callable] = None,
|
|
3831
|
+
val_datasets: Optional[List[str]] = None,
|
|
3827
3832
|
) -> None:
|
|
3828
3833
|
"""
|
|
3829
3834
|
Convert Supervisely project to YOLO format.
|
|
3830
3835
|
|
|
3831
3836
|
:param dest_dir: Destination directory.
|
|
3832
3837
|
:type dest_dir: :class:`str`, optional
|
|
3838
|
+
:param task_type: Task type for YOLO format. Possible values: 'detection', 'segmentation', 'pose'.
|
|
3839
|
+
:type task_type: :class:`str` or :class:`TaskType`, optional
|
|
3833
3840
|
:param log_progress: Show uploading progress bar.
|
|
3834
3841
|
:type log_progress: :class:`bool`
|
|
3835
3842
|
:param progress_cb: Function for tracking conversion progress (for all items in the project).
|
|
3836
3843
|
:type progress_cb: callable, optional
|
|
3844
|
+
:param val_datasets: List of dataset names for validation.
|
|
3845
|
+
Full dataset names are required (e.g., 'ds0/nested_ds1/ds3').
|
|
3846
|
+
If specified, datasets from the list will be marked as val, others as train.
|
|
3847
|
+
If not specified, the function will determine the validation datasets automatically.
|
|
3848
|
+
:type val_datasets: :class:`list` [ :class:`str` ], optional
|
|
3837
3849
|
:return: None
|
|
3838
3850
|
:rtype: NoneType
|
|
3839
3851
|
|
|
@@ -3855,12 +3867,13 @@ class Project:
|
|
|
3855
3867
|
|
|
3856
3868
|
from supervisely.convert import project_to_yolo
|
|
3857
3869
|
|
|
3858
|
-
project_to_yolo(
|
|
3870
|
+
return project_to_yolo(
|
|
3859
3871
|
project=self,
|
|
3860
3872
|
dest_dir=dest_dir,
|
|
3861
3873
|
task_type=task_type,
|
|
3862
3874
|
log_progress=log_progress,
|
|
3863
3875
|
progress_cb=progress_cb,
|
|
3876
|
+
val_datasets=val_datasets,
|
|
3864
3877
|
)
|
|
3865
3878
|
|
|
3866
3879
|
def to_pascal_voc(
|
|
@@ -5,7 +5,7 @@ supervisely/function_wrapper.py,sha256=R5YajTQ0GnRp2vtjwfC9hINkzQc0JiyGsu8TER373
|
|
|
5
5
|
supervisely/sly_logger.py,sha256=z92Vu5hmC0GgTIJO1n6kPDayRW9__8ix8hL6poDZj-Y,6274
|
|
6
6
|
supervisely/tiny_timer.py,sha256=hkpe_7FE6bsKL79blSs7WBaktuPavEVu67IpEPrfmjE,183
|
|
7
7
|
supervisely/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
supervisely/annotation/annotation.py,sha256=
|
|
8
|
+
supervisely/annotation/annotation.py,sha256=eUcakVkh6AHYJTqeh5ope4Wqm8isRu-5m0U4ghPcmSE,114654
|
|
9
9
|
supervisely/annotation/annotation_transforms.py,sha256=TlVy_gUbM-XH6GbLpZPrAi6pMIGTr7Ow02iSKOSTa-I,9582
|
|
10
10
|
supervisely/annotation/json_geometries_map.py,sha256=nL6AmMhFy02fw9ryBm75plKyOkDh61QdOToSuLAcz_Q,1659
|
|
11
11
|
supervisely/annotation/label.py,sha256=NpHZ5o2H6dI4KiII22o2HpiLXG1yekh-bEy8WvI2Ljg,37498
|
|
@@ -15,14 +15,14 @@ supervisely/annotation/obj_class_mapper.py,sha256=aIJDoRULqcAOD2a1CQPk2OOF8k3VPP
|
|
|
15
15
|
supervisely/annotation/renamer.py,sha256=rVvNLtpfd1kKUVPgm8VlLmYSDByWjriJ92FobC4buqY,1944
|
|
16
16
|
supervisely/annotation/tag.py,sha256=iBHI0s52TiSvuGKL2p-mkd1Jpkmx4d7tTy9QZ7Ta9Hk,17635
|
|
17
17
|
supervisely/annotation/tag_collection.py,sha256=MVPTzer9rLpD4O0g2XhYFUheK7-ILgwAXDJd1em3kZ8,10015
|
|
18
|
-
supervisely/annotation/tag_meta.py,sha256=
|
|
18
|
+
supervisely/annotation/tag_meta.py,sha256=GESucIwSbgrZEo22XMWdghb7iySws-VanWQmmDddHwM,27767
|
|
19
19
|
supervisely/annotation/tag_meta_collection.py,sha256=JY2wAo4dF47UylYeglkJtRtpVOArGjf3dXeEYIHFWP0,14491
|
|
20
20
|
supervisely/annotation/tag_meta_mapper.py,sha256=RWeTrxJ64syodyhXIRSH007bX6Hr3B45tG14YTcpwSU,1639
|
|
21
21
|
supervisely/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
supervisely/api/advanced_api.py,sha256=Nd5cCnHFWc3PSUrCtENxTGtDjS37_lCHXsgXvUI3Ti8,2054
|
|
23
23
|
supervisely/api/agent_api.py,sha256=ShWAIlXcWXcyI9fqVuP5GZVCigCMJmjnvdGUfLspD6Y,8890
|
|
24
24
|
supervisely/api/annotation_api.py,sha256=kuk4qwojTJxYr2iqAKbW-QhWw_DFc4TsjA2Wc2MEaqw,68449
|
|
25
|
-
supervisely/api/api.py,sha256=
|
|
25
|
+
supervisely/api/api.py,sha256=DpLa2rTFKa9we4WUZD8jRuurK6G3OYsdnBb2VehEik0,66585
|
|
26
26
|
supervisely/api/app_api.py,sha256=RsbVej8WxWVn9cNo5s3Fqd1symsCdsfOaKVBKEUapRY,71927
|
|
27
27
|
supervisely/api/dataset_api.py,sha256=GH7prDRJKyJlTv_7_Y-RkTwJN7ED4EkXNqqmi3iIdI4,41352
|
|
28
28
|
supervisely/api/file_api.py,sha256=bVWv6kf3B5n6qlB14HmUa6iUr8ara5cr-pPK8QC7XWg,92932
|
|
@@ -386,9 +386,9 @@ supervisely/app/widgets/pagination/template.html,sha256=1z9pt2SOTjA5Kmt8YjSiyO8X
|
|
|
386
386
|
supervisely/app/widgets/pie_chart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
387
387
|
supervisely/app/widgets/pie_chart/pie_chart.py,sha256=E0erw7kPXiudJzNhWMKdOnMgK9u6yYlPw10noKoO2jw,7809
|
|
388
388
|
supervisely/app/widgets/pretrained_models_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
389
|
-
supervisely/app/widgets/pretrained_models_selector/pretrained_models_selector.py,sha256=
|
|
389
|
+
supervisely/app/widgets/pretrained_models_selector/pretrained_models_selector.py,sha256=o5inxg0mQnX6b4D1Ipod7OqddrpKx6RfuoJcN3lGVgM,14374
|
|
390
390
|
supervisely/app/widgets/pretrained_models_selector/style.css,sha256=po3FssuZhg3lKFU3VcTLqTW-qTCXLDnxYi2lCtYXhBc,363
|
|
391
|
-
supervisely/app/widgets/pretrained_models_selector/template.html,sha256=
|
|
391
|
+
supervisely/app/widgets/pretrained_models_selector/template.html,sha256=f4pDne6ZH6kDpxntfVi_1xI2KmMDU2DzXZ6iL4EWehU,5239
|
|
392
392
|
supervisely/app/widgets/project_selector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
393
393
|
supervisely/app/widgets/project_selector/project_selector.py,sha256=qWieMLjCp8m2QtzPEtbhiTpXKsPYoEc0gqEnhULO3QM,2112
|
|
394
394
|
supervisely/app/widgets/project_selector/style.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -611,7 +611,7 @@ supervisely/convert/image/sly/sly_image_converter.py,sha256=097ijLa_62ZBu0elRx0x
|
|
|
611
611
|
supervisely/convert/image/sly/sly_image_helper.py,sha256=5Ri8fKb5dzh5b3v8AJ5u8xVFOQfAtoWqZ7HktPsCjTI,7373
|
|
612
612
|
supervisely/convert/image/yolo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
613
613
|
supervisely/convert/image/yolo/yolo_converter.py,sha256=Wn5dR05y4SEPONcaxWr9ofnbvbf-SbRZN0fkksk5Dps,11391
|
|
614
|
-
supervisely/convert/image/yolo/yolo_helper.py,sha256=
|
|
614
|
+
supervisely/convert/image/yolo/yolo_helper.py,sha256=5b0ShsVlqikA071VT8AiRW_079_WD6pdB5Bx3OU12Bw,25989
|
|
615
615
|
supervisely/convert/pointcloud/__init__.py,sha256=WPeIpPoTWDIKAa0lF6t2SMUhFNZ0l-vKujf6yD6w7SA,589
|
|
616
616
|
supervisely/convert/pointcloud/pointcloud_converter.py,sha256=yCCpzm7GrvL6WT4lNesvtYWWwdO3DO32JIOBBSSQgSA,7130
|
|
617
617
|
supervisely/convert/pointcloud/bag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -713,7 +713,7 @@ supervisely/imaging/font.py,sha256=0XcmWhlw7y2PAhrWgcsfInyRWj0WnlFpMSEXXilR8UA,2
|
|
|
713
713
|
supervisely/imaging/image.py,sha256=1KNc4qRbP9OlI4Yta07Kc2ohAgSBJ_9alF9Jag74w30,41873
|
|
714
714
|
supervisely/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
715
715
|
supervisely/io/docker_utils.py,sha256=hb_HXGM8IYB0PF-nD7NxMwaHgzaxIFxofsUzQ_RCUZI,7935
|
|
716
|
-
supervisely/io/env.py,sha256=
|
|
716
|
+
supervisely/io/env.py,sha256=DLsoRhouPT-y5wJzzJBs7zhJ2UxOIvIcQVbVLP5Yx7U,18256
|
|
717
717
|
supervisely/io/exception_handlers.py,sha256=_nAgMFeE94bCxEvWakR82hMtdOJUyn7Gc7OymMxI9WI,36484
|
|
718
718
|
supervisely/io/fs.py,sha256=DvLDzZUEpo7_ieSbt1gw8BYmoSsNUBcGKpXVs0Wqckk,55296
|
|
719
719
|
supervisely/io/fs_cache.py,sha256=985gvBGzveLcDudgz10E4EWVjP9jxdU1Pa0GFfCBoCA,6520
|
|
@@ -740,7 +740,7 @@ supervisely/nn/__init__.py,sha256=bG1CTEriUn31-lqGeYF4yUO0MtfYN68zdsObmEFPFZ8,61
|
|
|
740
740
|
supervisely/nn/experiments.py,sha256=0RFYp-LZTRny9tsyeVV58GKtPWngxTw54abfrk3052g,8742
|
|
741
741
|
supervisely/nn/prediction_dto.py,sha256=oi146DJpUUBDbR-b-vYkL5WAhCZQYOGomqBDEQGbPdY,2700
|
|
742
742
|
supervisely/nn/task_type.py,sha256=UJvSJ4L3I08j_e6sU6Ptu7kS5p1H09rfhfoDUSZ2iys,522
|
|
743
|
-
supervisely/nn/utils.py,sha256
|
|
743
|
+
supervisely/nn/utils.py,sha256=b2ckqZKa3se9wATE7OSa6bZcTMcvHoZJGoRYddE4dTI,1722
|
|
744
744
|
supervisely/nn/artifacts/__init__.py,sha256=m7KYTMzEJnoV9wcU_0xzgLuPz69Dqp9va0fP32tohV4,576
|
|
745
745
|
supervisely/nn/artifacts/artifacts.py,sha256=Ol6Tt3CHGbGm_7rR3iClokOArUj6z4ky92YKozpewRM,22859
|
|
746
746
|
supervisely/nn/artifacts/detectron2.py,sha256=g2F47GS1LryWng1zMAXW5ZLnz0fcRuYAY3sX6LcuHUs,1961
|
|
@@ -883,13 +883,13 @@ supervisely/nn/benchmark/visualization/widgets/table/__init__.py,sha256=47DEQpj8
|
|
|
883
883
|
supervisely/nn/benchmark/visualization/widgets/table/table.py,sha256=atmDnF1Af6qLQBUjLhK18RMDKAYlxnsuVHMSEa5a-e8,4319
|
|
884
884
|
supervisely/nn/inference/__init__.py,sha256=QFukX2ip-U7263aEPCF_UCFwj6EujbMnsgrXp5Bbt8I,1623
|
|
885
885
|
supervisely/nn/inference/cache.py,sha256=q4F7ZRzZghNWSVFClXEIHNMNW4PK6xddYckCFUgyhCo,32027
|
|
886
|
-
supervisely/nn/inference/inference.py,sha256=
|
|
886
|
+
supervisely/nn/inference/inference.py,sha256=O0GR2o0t9hDh-bMdiKrxk-hxdmQU1M-44aIcZM89Qo8,166222
|
|
887
887
|
supervisely/nn/inference/session.py,sha256=jmkkxbe2kH-lEgUU6Afh62jP68dxfhF5v6OGDfLU62E,35757
|
|
888
888
|
supervisely/nn/inference/video_inference.py,sha256=8Bshjr6rDyLay5Za8IB8Dr6FURMO2R_v7aELasO8pR4,5746
|
|
889
889
|
supervisely/nn/inference/gui/__init__.py,sha256=wCxd-lF5Zhcwsis-wScDA8n1Gk_1O00PKgDviUZ3F1U,221
|
|
890
890
|
supervisely/nn/inference/gui/gui.py,sha256=5xoPmBrCcIAIgh_RFe9qi488MzRRDwLgUmmGiH--q_I,20274
|
|
891
891
|
supervisely/nn/inference/gui/serving_gui.py,sha256=MCGyN-ASusn0vAug24AWEmmKF8qwvo-Pk3WQSJGX8ec,8446
|
|
892
|
-
supervisely/nn/inference/gui/serving_gui_template.py,sha256=
|
|
892
|
+
supervisely/nn/inference/gui/serving_gui_template.py,sha256=LkKnhZGqCPtW5nI2ACR_3T4rn4t1kF4__tPQMPgXqIc,7142
|
|
893
893
|
supervisely/nn/inference/instance_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
894
894
|
supervisely/nn/inference/instance_segmentation/instance_segmentation.py,sha256=TWasw61P4CDiWi2zWuIYJLZ9woLA5IxWtUNRn9u6qEU,2211
|
|
895
895
|
supervisely/nn/inference/instance_segmentation/dashboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -980,17 +980,17 @@ supervisely/nn/tracker/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
980
980
|
supervisely/nn/tracker/utils/gmc.py,sha256=3JX8979H3NA-YHNaRQyj9Z-xb9qtyMittPEjGw8y2Jo,11557
|
|
981
981
|
supervisely/nn/tracker/utils/kalman_filter.py,sha256=eSFmCjM0mikHCAFvj-KCVzw-0Jxpoc3Cfc2NWEjJC1Q,17268
|
|
982
982
|
supervisely/nn/training/__init__.py,sha256=gY4PCykJ-42MWKsqb9kl-skemKa8yB6t_fb5kzqR66U,111
|
|
983
|
-
supervisely/nn/training/train_app.py,sha256=
|
|
983
|
+
supervisely/nn/training/train_app.py,sha256=mUEXGE9rQZKyVCrX1qjyDFOEuKqdVVa5jQ0EnP0gBGI,106273
|
|
984
984
|
supervisely/nn/training/gui/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
985
|
-
supervisely/nn/training/gui/classes_selector.py,sha256=
|
|
986
|
-
supervisely/nn/training/gui/gui.py,sha256=
|
|
987
|
-
supervisely/nn/training/gui/hyperparameters_selector.py,sha256=
|
|
988
|
-
supervisely/nn/training/gui/input_selector.py,sha256=
|
|
989
|
-
supervisely/nn/training/gui/model_selector.py,sha256=
|
|
990
|
-
supervisely/nn/training/gui/train_val_splits_selector.py,sha256=
|
|
991
|
-
supervisely/nn/training/gui/training_artifacts.py,sha256=
|
|
992
|
-
supervisely/nn/training/gui/training_logs.py,sha256=
|
|
993
|
-
supervisely/nn/training/gui/training_process.py,sha256=
|
|
985
|
+
supervisely/nn/training/gui/classes_selector.py,sha256=Bpp-RFDQqcZ0kLJmS6ZnExkdscWwRusvF4vbWjEsKlQ,3926
|
|
986
|
+
supervisely/nn/training/gui/gui.py,sha256=QDeWa6iow3z3EwLZcHlQ48d4Ur6hCmedNvCod-8qZ-k,27978
|
|
987
|
+
supervisely/nn/training/gui/hyperparameters_selector.py,sha256=5dUCYAx4E0HBLguj2B_s2nWeGGCWzv6vJeT0XvDJO3M,7746
|
|
988
|
+
supervisely/nn/training/gui/input_selector.py,sha256=tFf14jqtG1LoSi1xJb0uU2yDn6hAoATKfZGFcmr9dzY,2511
|
|
989
|
+
supervisely/nn/training/gui/model_selector.py,sha256=6tniZ_-qTI5QM3AIdVYgHN1lOkY6JzLAXxanT_UpGTU,4649
|
|
990
|
+
supervisely/nn/training/gui/train_val_splits_selector.py,sha256=n4DcijNw30H71Hv_tGdAqQ9Pc-w7ZxEX1NcJY_HZLZw,8816
|
|
991
|
+
supervisely/nn/training/gui/training_artifacts.py,sha256=c0GH70ZByvnL413KWHjSKcSX8V5DStXM5sjFVZafSZo,10519
|
|
992
|
+
supervisely/nn/training/gui/training_logs.py,sha256=fXj1Cszu7Qi4p8tNdBPqwet08I4xcphB5jbTPjCDmVk,4851
|
|
993
|
+
supervisely/nn/training/gui/training_process.py,sha256=2F65cuu5ypKWkdaO4uVpNLMkwXjM8dpprd7Km5aedds,3192
|
|
994
994
|
supervisely/nn/training/gui/utils.py,sha256=EO629fSOwxOsiXL7mr1EXTiKKMIg7xgVm3jtCnF4r7Q,4268
|
|
995
995
|
supervisely/nn/training/loggers/__init__.py,sha256=DOqR-4NJv25C4Y1HCWggvGNM5mgo1CbwQOdvROOL-60,777
|
|
996
996
|
supervisely/nn/training/loggers/base_train_logger.py,sha256=Gf_TKwSfQdSVG6P3wAeWf5t2_EJWJqOPqt_TsJ5jpBY,1914
|
|
@@ -1020,7 +1020,7 @@ supervisely/project/data_version.py,sha256=6vOz5ovBeCIiMAKUG7lGQ5IXvQnU1GbcnrWxd
|
|
|
1020
1020
|
supervisely/project/download.py,sha256=GQFYN3KCdM_egXDzoyZrzl6Yeg2QshYQNFNlKi8Nh8A,25471
|
|
1021
1021
|
supervisely/project/pointcloud_episode_project.py,sha256=yiWdNBQiI6f1O9sr1pg8JHW6O-w3XUB1rikJNn3Oung,41866
|
|
1022
1022
|
supervisely/project/pointcloud_project.py,sha256=Kx1Vaes-krwG3BiRRtHRLQxb9G5m5bTHPN9IzRqmNWo,49399
|
|
1023
|
-
supervisely/project/project.py,sha256=
|
|
1023
|
+
supervisely/project/project.py,sha256=3b5tslwDcQYd-7K-r5Yo9DqOgEZ1iKjwu6jaQXLTYAw,206749
|
|
1024
1024
|
supervisely/project/project_meta.py,sha256=26s8IiHC5Pg8B1AQi6_CrsWteioJP2in00cRNe8QlW0,51423
|
|
1025
1025
|
supervisely/project/project_settings.py,sha256=NLThzU_DCynOK6hkHhVdFyezwprn9UqlnrLDe_3qhkY,9347
|
|
1026
1026
|
supervisely/project/project_type.py,sha256=EZDJFRi4MmC_5epYexBgML5WMZsWdEVk_CjqDQy5m3c,572
|
|
@@ -1082,9 +1082,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
1082
1082
|
supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
|
|
1083
1083
|
supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
|
|
1084
1084
|
supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
|
|
1085
|
-
supervisely-6.73.
|
|
1086
|
-
supervisely-6.73.
|
|
1087
|
-
supervisely-6.73.
|
|
1088
|
-
supervisely-6.73.
|
|
1089
|
-
supervisely-6.73.
|
|
1090
|
-
supervisely-6.73.
|
|
1085
|
+
supervisely-6.73.328.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
1086
|
+
supervisely-6.73.328.dist-info/METADATA,sha256=zb3oE_o2mfmVo-yfobR0aPJ4AjQYZFIpldlNALmq59Y,33596
|
|
1087
|
+
supervisely-6.73.328.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
|
1088
|
+
supervisely-6.73.328.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
|
|
1089
|
+
supervisely-6.73.328.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
|
|
1090
|
+
supervisely-6.73.328.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|