supervisely 6.73.438__py3-none-any.whl → 6.73.513__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/__init__.py +137 -1
- supervisely/_utils.py +81 -0
- supervisely/annotation/annotation.py +8 -2
- supervisely/annotation/json_geometries_map.py +14 -11
- supervisely/annotation/label.py +80 -3
- supervisely/api/annotation_api.py +14 -11
- supervisely/api/api.py +59 -38
- supervisely/api/app_api.py +11 -2
- supervisely/api/dataset_api.py +74 -12
- supervisely/api/entities_collection_api.py +10 -0
- supervisely/api/entity_annotation/figure_api.py +52 -4
- supervisely/api/entity_annotation/object_api.py +3 -3
- supervisely/api/entity_annotation/tag_api.py +63 -12
- supervisely/api/guides_api.py +210 -0
- supervisely/api/image_api.py +72 -1
- supervisely/api/labeling_job_api.py +83 -1
- supervisely/api/labeling_queue_api.py +33 -7
- supervisely/api/module_api.py +9 -0
- supervisely/api/project_api.py +71 -26
- supervisely/api/storage_api.py +3 -1
- supervisely/api/task_api.py +13 -2
- supervisely/api/team_api.py +4 -3
- supervisely/api/video/video_annotation_api.py +119 -3
- supervisely/api/video/video_api.py +65 -14
- supervisely/api/video/video_figure_api.py +24 -11
- supervisely/app/__init__.py +1 -1
- supervisely/app/content.py +23 -7
- supervisely/app/development/development.py +18 -2
- supervisely/app/fastapi/__init__.py +1 -0
- supervisely/app/fastapi/custom_static_files.py +1 -1
- supervisely/app/fastapi/multi_user.py +105 -0
- supervisely/app/fastapi/subapp.py +88 -42
- supervisely/app/fastapi/websocket.py +77 -9
- supervisely/app/singleton.py +21 -0
- supervisely/app/v1/app_service.py +18 -2
- supervisely/app/v1/constants.py +7 -1
- supervisely/app/widgets/__init__.py +6 -0
- supervisely/app/widgets/activity_feed/__init__.py +0 -0
- supervisely/app/widgets/activity_feed/activity_feed.py +239 -0
- supervisely/app/widgets/activity_feed/style.css +78 -0
- supervisely/app/widgets/activity_feed/template.html +22 -0
- supervisely/app/widgets/card/card.py +20 -0
- supervisely/app/widgets/classes_list_selector/classes_list_selector.py +121 -9
- supervisely/app/widgets/classes_list_selector/template.html +60 -93
- supervisely/app/widgets/classes_mapping/classes_mapping.py +13 -12
- supervisely/app/widgets/classes_table/classes_table.py +1 -0
- supervisely/app/widgets/deploy_model/deploy_model.py +56 -35
- supervisely/app/widgets/dialog/dialog.py +12 -0
- supervisely/app/widgets/dialog/template.html +2 -1
- supervisely/app/widgets/ecosystem_model_selector/ecosystem_model_selector.py +1 -1
- supervisely/app/widgets/experiment_selector/experiment_selector.py +8 -0
- supervisely/app/widgets/fast_table/fast_table.py +184 -60
- supervisely/app/widgets/fast_table/template.html +1 -1
- supervisely/app/widgets/heatmap/__init__.py +0 -0
- supervisely/app/widgets/heatmap/heatmap.py +564 -0
- supervisely/app/widgets/heatmap/script.js +533 -0
- supervisely/app/widgets/heatmap/style.css +233 -0
- supervisely/app/widgets/heatmap/template.html +21 -0
- supervisely/app/widgets/modal/__init__.py +0 -0
- supervisely/app/widgets/modal/modal.py +198 -0
- supervisely/app/widgets/modal/template.html +10 -0
- supervisely/app/widgets/object_class_view/object_class_view.py +3 -0
- supervisely/app/widgets/radio_tabs/radio_tabs.py +18 -2
- supervisely/app/widgets/radio_tabs/template.html +1 -0
- supervisely/app/widgets/select/select.py +6 -3
- supervisely/app/widgets/select_class/__init__.py +0 -0
- supervisely/app/widgets/select_class/select_class.py +363 -0
- supervisely/app/widgets/select_class/template.html +50 -0
- supervisely/app/widgets/select_cuda/select_cuda.py +22 -0
- supervisely/app/widgets/select_dataset_tree/select_dataset_tree.py +65 -7
- supervisely/app/widgets/select_tag/__init__.py +0 -0
- supervisely/app/widgets/select_tag/select_tag.py +352 -0
- supervisely/app/widgets/select_tag/template.html +64 -0
- supervisely/app/widgets/select_team/select_team.py +37 -4
- supervisely/app/widgets/select_team/template.html +4 -5
- supervisely/app/widgets/select_user/__init__.py +0 -0
- supervisely/app/widgets/select_user/select_user.py +270 -0
- supervisely/app/widgets/select_user/template.html +13 -0
- supervisely/app/widgets/select_workspace/select_workspace.py +59 -10
- supervisely/app/widgets/select_workspace/template.html +9 -12
- supervisely/app/widgets/table/table.py +68 -13
- supervisely/app/widgets/tree_select/tree_select.py +2 -0
- supervisely/aug/aug.py +6 -2
- supervisely/convert/base_converter.py +1 -0
- supervisely/convert/converter.py +2 -2
- supervisely/convert/image/csv/csv_converter.py +24 -15
- supervisely/convert/image/image_converter.py +3 -1
- supervisely/convert/image/image_helper.py +48 -4
- supervisely/convert/image/label_studio/label_studio_converter.py +2 -0
- supervisely/convert/image/medical2d/medical2d_helper.py +2 -24
- supervisely/convert/image/multispectral/multispectral_converter.py +6 -0
- supervisely/convert/image/pascal_voc/pascal_voc_converter.py +8 -5
- supervisely/convert/image/pascal_voc/pascal_voc_helper.py +7 -0
- supervisely/convert/pointcloud/kitti_3d/kitti_3d_converter.py +33 -3
- supervisely/convert/pointcloud/kitti_3d/kitti_3d_helper.py +12 -5
- supervisely/convert/pointcloud/las/las_converter.py +13 -1
- supervisely/convert/pointcloud/las/las_helper.py +110 -11
- supervisely/convert/pointcloud/nuscenes_conv/nuscenes_converter.py +27 -16
- supervisely/convert/pointcloud/pointcloud_converter.py +91 -3
- supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_converter.py +58 -22
- supervisely/convert/pointcloud_episodes/nuscenes_conv/nuscenes_helper.py +21 -47
- supervisely/convert/video/__init__.py +1 -0
- supervisely/convert/video/multi_view/__init__.py +0 -0
- supervisely/convert/video/multi_view/multi_view.py +543 -0
- supervisely/convert/video/sly/sly_video_converter.py +359 -3
- supervisely/convert/video/video_converter.py +24 -4
- supervisely/convert/volume/dicom/dicom_converter.py +13 -5
- supervisely/convert/volume/dicom/dicom_helper.py +30 -18
- supervisely/geometry/constants.py +1 -0
- supervisely/geometry/geometry.py +4 -0
- supervisely/geometry/helpers.py +5 -1
- supervisely/geometry/oriented_bbox.py +676 -0
- supervisely/geometry/polyline_3d.py +110 -0
- supervisely/geometry/rectangle.py +2 -1
- supervisely/io/env.py +76 -1
- supervisely/io/fs.py +21 -0
- supervisely/nn/benchmark/base_evaluator.py +104 -11
- supervisely/nn/benchmark/instance_segmentation/evaluator.py +1 -8
- supervisely/nn/benchmark/object_detection/evaluator.py +20 -4
- supervisely/nn/benchmark/object_detection/vis_metrics/pr_curve.py +10 -5
- supervisely/nn/benchmark/semantic_segmentation/evaluator.py +34 -16
- supervisely/nn/benchmark/semantic_segmentation/vis_metrics/confusion_matrix.py +1 -1
- supervisely/nn/benchmark/semantic_segmentation/vis_metrics/frequently_confused.py +1 -1
- supervisely/nn/benchmark/semantic_segmentation/vis_metrics/overview.py +1 -1
- supervisely/nn/benchmark/visualization/evaluation_result.py +66 -4
- supervisely/nn/inference/cache.py +43 -18
- supervisely/nn/inference/gui/serving_gui_template.py +5 -2
- supervisely/nn/inference/inference.py +916 -222
- supervisely/nn/inference/inference_request.py +55 -10
- supervisely/nn/inference/predict_app/gui/classes_selector.py +83 -12
- supervisely/nn/inference/predict_app/gui/gui.py +676 -488
- supervisely/nn/inference/predict_app/gui/input_selector.py +205 -26
- supervisely/nn/inference/predict_app/gui/model_selector.py +2 -4
- supervisely/nn/inference/predict_app/gui/output_selector.py +46 -6
- supervisely/nn/inference/predict_app/gui/settings_selector.py +756 -59
- supervisely/nn/inference/predict_app/gui/tags_selector.py +1 -1
- supervisely/nn/inference/predict_app/gui/utils.py +236 -119
- supervisely/nn/inference/predict_app/predict_app.py +2 -2
- supervisely/nn/inference/session.py +43 -35
- supervisely/nn/inference/tracking/bbox_tracking.py +118 -35
- supervisely/nn/inference/tracking/point_tracking.py +5 -1
- supervisely/nn/inference/tracking/tracker_interface.py +10 -1
- supervisely/nn/inference/uploader.py +139 -12
- supervisely/nn/live_training/__init__.py +7 -0
- supervisely/nn/live_training/api_server.py +111 -0
- supervisely/nn/live_training/artifacts_utils.py +243 -0
- supervisely/nn/live_training/checkpoint_utils.py +229 -0
- supervisely/nn/live_training/dynamic_sampler.py +44 -0
- supervisely/nn/live_training/helpers.py +14 -0
- supervisely/nn/live_training/incremental_dataset.py +146 -0
- supervisely/nn/live_training/live_training.py +497 -0
- supervisely/nn/live_training/loss_plateau_detector.py +111 -0
- supervisely/nn/live_training/request_queue.py +52 -0
- supervisely/nn/model/model_api.py +9 -0
- supervisely/nn/model/prediction.py +2 -1
- supervisely/nn/model/prediction_session.py +26 -14
- supervisely/nn/prediction_dto.py +19 -1
- supervisely/nn/tracker/base_tracker.py +11 -1
- supervisely/nn/tracker/botsort/botsort_config.yaml +0 -1
- supervisely/nn/tracker/botsort/tracker/mc_bot_sort.py +7 -4
- supervisely/nn/tracker/botsort_tracker.py +94 -65
- supervisely/nn/tracker/utils.py +4 -5
- supervisely/nn/tracker/visualize.py +93 -93
- supervisely/nn/training/gui/classes_selector.py +16 -1
- supervisely/nn/training/gui/train_val_splits_selector.py +52 -31
- supervisely/nn/training/train_app.py +46 -31
- supervisely/project/data_version.py +115 -51
- supervisely/project/download.py +1 -1
- supervisely/project/pointcloud_episode_project.py +37 -8
- supervisely/project/pointcloud_project.py +30 -2
- supervisely/project/project.py +14 -2
- supervisely/project/project_meta.py +27 -1
- supervisely/project/project_settings.py +32 -18
- supervisely/project/versioning/__init__.py +1 -0
- supervisely/project/versioning/common.py +20 -0
- supervisely/project/versioning/schema_fields.py +35 -0
- supervisely/project/versioning/video_schema.py +221 -0
- supervisely/project/versioning/volume_schema.py +87 -0
- supervisely/project/video_project.py +717 -15
- supervisely/project/volume_project.py +623 -5
- supervisely/template/experiment/experiment.html.jinja +4 -4
- supervisely/template/experiment/experiment_generator.py +14 -21
- supervisely/template/live_training/__init__.py +0 -0
- supervisely/template/live_training/header.html.jinja +96 -0
- supervisely/template/live_training/live_training.html.jinja +51 -0
- supervisely/template/live_training/live_training_generator.py +464 -0
- supervisely/template/live_training/sly-style.css +402 -0
- supervisely/template/live_training/template.html.jinja +18 -0
- supervisely/versions.json +28 -26
- supervisely/video/sampling.py +39 -20
- supervisely/video/video.py +41 -12
- supervisely/video_annotation/video_figure.py +38 -4
- supervisely/video_annotation/video_object.py +29 -4
- supervisely/volume/stl_converter.py +2 -0
- supervisely/worker_api/agent_rpc.py +24 -1
- supervisely/worker_api/rpc_servicer.py +31 -7
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info}/METADATA +58 -40
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info}/RECORD +203 -155
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info}/WHEEL +1 -1
- supervisely_lib/__init__.py +6 -1
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info/licenses}/LICENSE +0 -0
- {supervisely-6.73.438.dist-info → supervisely-6.73.513.dist-info}/top_level.txt +0 -0
|
@@ -17,7 +17,7 @@ Here are prediction samples made with **{{ experiment.training.checkpoints.pytor
|
|
|
17
17
|
The **{{ experiment.training.checkpoints.pytorch.name }}** checkpoint was evaluated on the validation set containing **{{ experiment.project.splits.val.size }}
|
|
18
18
|
images**.
|
|
19
19
|
|
|
20
|
-
See the full [📊 Evaluation Report]({{ experiment.training.evaluation.url }}) for details and visualizations.
|
|
20
|
+
See the full [📊 Evaluation Report]({{ experiment.training.evaluation.url }}){:target="_blank"} for details and visualizations.
|
|
21
21
|
{{ widgets.tables.metrics | safe }}
|
|
22
22
|
|
|
23
23
|
{% else %}
|
|
@@ -114,11 +114,11 @@ The training process was configured with the following hyperparameters. You can
|
|
|
114
114
|
|
|
115
115
|
The quick actions on this page, such as **Deploy**, **Predict**, or **Fine-tune**, help you to quickly work with your model. But you can also run the apps manually from the Supervisely Platform. Here are related apps to this experiment:
|
|
116
116
|
|
|
117
|
-
- [Serve {{ experiment.model.framework }}](
|
|
117
|
+
- [Serve {{ experiment.model.framework }}](/ecosystem/apps/{{ resources.apps.serve.slug
|
|
118
118
|
}}){:target="_blank"} - deploy your model in the Supervisely Platform.
|
|
119
|
-
- [Train {{ experiment.model.framework }}](
|
|
119
|
+
- [Train {{ experiment.model.framework }}](/ecosystem/apps/{{ resources.apps.train.slug
|
|
120
120
|
}}){:target="_blank"} - train a model in the Supervisely Platform.
|
|
121
|
-
- [Predict App](
|
|
121
|
+
- [Predict App](/ecosystem/apps/{{ resources.apps.predict.slug }}){:target="_blank"} -
|
|
122
122
|
deploy your model and make predictions.
|
|
123
123
|
|
|
124
124
|
## API Integration & Deployment
|
|
@@ -26,6 +26,7 @@ from supervisely.geometry.pointcloud import Pointcloud
|
|
|
26
26
|
from supervisely.geometry.polygon import Polygon
|
|
27
27
|
from supervisely.geometry.polyline import Polyline
|
|
28
28
|
from supervisely.geometry.rectangle import Rectangle
|
|
29
|
+
from supervisely.geometry.oriented_bbox import OrientedBBox
|
|
29
30
|
from supervisely.imaging.color import rgb2hex
|
|
30
31
|
from supervisely.nn.benchmark.object_detection.metric_provider import (
|
|
31
32
|
METRIC_NAMES as OBJECT_DETECTION_METRIC_NAMES,
|
|
@@ -91,10 +92,9 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
91
92
|
return f"{server_address}/nn/experiments/{template_id}"
|
|
92
93
|
|
|
93
94
|
def _datasets_url_with_entities_filter(self, project_id: int, entities_filter: List[dict]) -> str:
|
|
94
|
-
base_url = self.api.server_address.rstrip('/')
|
|
95
95
|
path = f"/projects/{project_id}/datasets"
|
|
96
96
|
query = urlencode({"entitiesFilter": json.dumps(entities_filter)})
|
|
97
|
-
return f"{
|
|
97
|
+
return f"{path}?{query}"
|
|
98
98
|
|
|
99
99
|
def upload_to_artifacts(self):
|
|
100
100
|
remote_dir = os.path.join(self.info["artifacts_dir"], "visualization")
|
|
@@ -251,6 +251,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
251
251
|
Pointcloud: "zmdi zmdi-cloud-outline",
|
|
252
252
|
MultichannelBitmap: "zmdi zmdi-layers",
|
|
253
253
|
Point3d: "zmdi zmdi-filter-center-focus",
|
|
254
|
+
OrientedBBox: "zmdi zmdi-rotate-cw",
|
|
254
255
|
}
|
|
255
256
|
|
|
256
257
|
if not hasattr(self.model_meta, "obj_classes"):
|
|
@@ -475,10 +476,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
475
476
|
}
|
|
476
477
|
return training_session
|
|
477
478
|
|
|
478
|
-
training_session = {
|
|
479
|
-
"id": task_id,
|
|
480
|
-
"url": f"{self.api.server_address}/apps/sessions/{task_id}",
|
|
481
|
-
}
|
|
479
|
+
training_session = {"id": task_id, "url": f"/apps/sessions/{task_id}"}
|
|
482
480
|
return training_session
|
|
483
481
|
|
|
484
482
|
def _get_training_duration(self) -> str:
|
|
@@ -788,6 +786,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
788
786
|
return train_app, serve_app
|
|
789
787
|
|
|
790
788
|
def _get_agent_info(self) -> str:
|
|
789
|
+
# Not used
|
|
791
790
|
task_id = self.info.get("task_id", None)
|
|
792
791
|
|
|
793
792
|
agent_info = {
|
|
@@ -803,7 +802,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
803
802
|
if task_info is not None:
|
|
804
803
|
agent_info["name"] = task_info["agentName"]
|
|
805
804
|
agent_info["id"] = task_info["agentId"]
|
|
806
|
-
agent_info["link"] = f"
|
|
805
|
+
agent_info["link"] = f"/nodes/{agent_info['id']}/info"
|
|
807
806
|
return agent_info
|
|
808
807
|
|
|
809
808
|
def _get_class_names(self, model_classes: list) -> dict:
|
|
@@ -909,7 +908,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
909
908
|
version_info = {
|
|
910
909
|
"version": project_version["version"],
|
|
911
910
|
"id": project_version["id"],
|
|
912
|
-
"url": f"
|
|
911
|
+
"url": f"/projects/{project_info.id}/versions",
|
|
913
912
|
}
|
|
914
913
|
return version_info
|
|
915
914
|
|
|
@@ -918,7 +917,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
918
917
|
project_info = self.api.project.get_info_by_id(project_id)
|
|
919
918
|
project_version = self._get_project_version(project_info)
|
|
920
919
|
project_type = project_info.type
|
|
921
|
-
project_url = f"
|
|
920
|
+
project_url = f"/projects/{project_id}/datasets"
|
|
922
921
|
model_classes = [cls.name for cls in self.model_meta.obj_classes]
|
|
923
922
|
class_names = self._get_class_names(model_classes)
|
|
924
923
|
splits = self._get_project_splits()
|
|
@@ -949,9 +948,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
949
948
|
)
|
|
950
949
|
base_checkpoint_name = base_checkpoint_info.name
|
|
951
950
|
base_checkpoint_link = base_checkpoint_info.full_storage_url
|
|
952
|
-
base_checkpoint_path =
|
|
953
|
-
f"{self.api.server_address}/files/?path={base_checkpoint_info.path}"
|
|
954
|
-
)
|
|
951
|
+
base_checkpoint_path = f"/files/?path={base_checkpoint_info.path}"
|
|
955
952
|
|
|
956
953
|
base_checkpoint = {
|
|
957
954
|
"name": base_checkpoint_name,
|
|
@@ -981,7 +978,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
981
978
|
onnx_checkpoint, trt_checkpoint = self._get_optimized_checkpoints()
|
|
982
979
|
|
|
983
980
|
logs_path = self.info.get("logs", {}).get("link")
|
|
984
|
-
logs_url = f"
|
|
981
|
+
logs_url = f"/files/?path={logs_path}" if logs_path else None
|
|
985
982
|
|
|
986
983
|
primary_metric = self._get_primary_metric()
|
|
987
984
|
display_metrics = self._get_display_metrics(self.info["task_type"])
|
|
@@ -1000,7 +997,7 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
1000
997
|
"logs": {"path": logs_path, "url": logs_url},
|
|
1001
998
|
"evaluation": {
|
|
1002
999
|
"id": self.info.get("evaluation_report_id"),
|
|
1003
|
-
"url": self.info.get("
|
|
1000
|
+
"url": f"/model-benchmark/?id={self.info.get('evaluation_report_id')}",
|
|
1004
1001
|
"primary_metric": primary_metric,
|
|
1005
1002
|
"display_metrics": display_metrics,
|
|
1006
1003
|
"metrics": self.info.get("evaluation_metrics"),
|
|
@@ -1030,15 +1027,15 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
1030
1027
|
"paths": {
|
|
1031
1028
|
"experiment_dir": {
|
|
1032
1029
|
"path": experiment_dir,
|
|
1033
|
-
"url": f"
|
|
1030
|
+
"url": f"/files/?path={experiment_dir.rstrip('/') + '/'}",
|
|
1034
1031
|
},
|
|
1035
1032
|
"artifacts_dir": {
|
|
1036
1033
|
"path": artifacts_dir,
|
|
1037
|
-
"url": f"
|
|
1034
|
+
"url": f"/files/?path={artifacts_dir.rstrip('/') + '/'}",
|
|
1038
1035
|
},
|
|
1039
1036
|
"checkpoints_dir": {
|
|
1040
1037
|
"path": checkpoints_dir,
|
|
1041
|
-
"url": f"
|
|
1038
|
+
"url": f"/files/?path={checkpoints_dir.rstrip('/') + '/'}",
|
|
1042
1039
|
},
|
|
1043
1040
|
},
|
|
1044
1041
|
}
|
|
@@ -1136,7 +1133,3 @@ class ExperimentGenerator(BaseGenerator):
|
|
|
1136
1133
|
except Exception as e:
|
|
1137
1134
|
logger.warning(f"Failed to build or save static training plot: {e}")
|
|
1138
1135
|
return None
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
# Pylint Errors: ************* Module supervisely.api.app_api
|
|
1142
|
-
# supervisely/api/app_api.py:1463:20: E0606: Possibly using variable 'progress' before assignment (possibly-used-before-assignment)
|
|
File without changes
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<div class="experiment-info-header">
|
|
2
|
+
<div class="experiment-info-subheader">
|
|
3
|
+
<h1>{{ session.name }}</h1>
|
|
4
|
+
|
|
5
|
+
<div class="experiment-info-buttons">
|
|
6
|
+
<!-- Download -->
|
|
7
|
+
<sly-iw-download-button
|
|
8
|
+
style="padding: 7px 8px;"
|
|
9
|
+
:disabled="false"
|
|
10
|
+
teamFilesPath="{{ session.artifacts_dir + '/' }}"
|
|
11
|
+
:command="command">
|
|
12
|
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAABn0lEQVR4nO2YT04CMRSHPzdzDEAT4lZIvICDHsiFia7Y4BEQTsF50CiCW42iCzeTjKkpyXNScDodp4P0S17Sgfb1/fr6ZzoQCAQC/5VDYAE8Am22kCsg1XbJFtIXAlR56+gHAZ4JGfBNyIBvQgbKogWMgScgEXu7tE9gYJGBa90mNVii+xoBTdfgz4D3NR1l7SOngD1dN4/PJdBzGfm8wdtmYLAhA6lBRKOIgLFw8gCcAFEFizgCYmAm2t8UiP97Hq4cqOCr3oVi0X5eoP2PBWsz8mUJiDIL2xo5D32dA6lLDDsj4AC4A+6Bbg4BXV1Xzet2HQSci3ovQoRJQFfXWf1+UQcBrUxQqtwxCOgY6u3XQYBpZFV5Ip4nhv/ldPMuQHEEPOc4WV+B4z+KwbnxbyJsgve2ja4TYRu813MgK6JI8N4PMrVIb4FpzgVbOwFlkO60gMTxbdSVyPVtdOF4H3ClJ/pXn+itGQkHM+2wikxEwGnmRjYs4qip76OpZ3sreidGj/rSc/AxjjR0CucbvguVaYnua+gy8oFAIEAlfAG3TJLaWbXlEAAAAABJRU5ErkJggg==" alt="download--v1">
|
|
13
|
+
</sly-iw-download-button>
|
|
14
|
+
|
|
15
|
+
{% if resources.apps.online_training.module_id %}
|
|
16
|
+
<!-- Finetune --->
|
|
17
|
+
<sly-iw-launch-button
|
|
18
|
+
style=""
|
|
19
|
+
:disabled="false"
|
|
20
|
+
:autoRun="false"
|
|
21
|
+
:openInNewWindow="true"
|
|
22
|
+
:selectContext="true"
|
|
23
|
+
:state="{ 'checkpointMode': 'finetune', 'selectedExperimentTaskId': {{ session.task_id }}}"
|
|
24
|
+
:moduleId="{{ resources.apps.online_training.module_id }}"
|
|
25
|
+
:command="command">
|
|
26
|
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACeElEQVR4nO2Yy2oVQRCGv+AhUXyBqDFqHiEighIXgpHcFH0EF3GnWfgICaJuzEbNwn127oIuYrbeLyAuIiQcycWdRkFNEEZKaqBoZsY5mdMzc6B/aA4zPaf6q+6q6p6BoKCgoJzqAUaAOeA1sAH8Ab4C74GHwGWgm5qpAVxV4ChH2wTGqYn6gTc5wSPTZEUq1wngiwO2CswAp4ADGi7i5JLz3N2q4fsd+J/AVEJ8dwGzDvy8hl1lajhhs6mrQSfAowlrZ74IfEPD6QMwQUml0labqYLw885Kei+xo07CJg14ZxfwkbZLvh2YM4NNJ/RPFICPdLPzqldmsNMJ/Yum/1FOeFti3/l2wMa/1HlX303/wRzwkitHzPU33w5sm8EkoV1tpTjQSIHvUjvxvZ0yV+DQf0JoAegDDms4JcGjjsb313078NwMNpTQP57jHDRr4FE7cd9L3w7YEnkr5ZnpDPjbDrzopum/59uBa2awtxnPjQFPgR/aFnUPcbUXaBqb5z2y/6vxNomftMHmDWNvzedOLG9av81gyylJ3IqO61kqtnmFkmb+UxvgTzrHcSkOeygJXkrjbtWjYfPL2NwoaLMt8LIijzWxpTqd0XvdWueHtNrYhI3hB+sAv5yj/kdOe9GGUCycsL3AxxbB14BJXzF/ocDMy/+u62b1TMNjW48HMtv3geEyS2UWvDvzAnqRCjUS4CvSWAsx36f9NmxK+ZKQpgE9aHUkvPuCvtJp8KLPBuosHQaPUzL3kQ9e9onaqJmxArWHFz0wgOLMOWC//q7UHV50zPmOk9RqCx9rOMOJrZT32NrpqB60mjrjTb2WL2ZBQUFBFNJfCnaIn00BSHcAAAAASUVORK5CYII=" alt="support">
|
|
27
|
+
<span>Finetune</span>
|
|
28
|
+
</sly-iw-launch-button>
|
|
29
|
+
|
|
30
|
+
<!-- Continue --->
|
|
31
|
+
<sly-iw-launch-button
|
|
32
|
+
style=""
|
|
33
|
+
:disabled="false"
|
|
34
|
+
:autoRun="false"
|
|
35
|
+
:openInNewWindow="true"
|
|
36
|
+
:selectContext="false"
|
|
37
|
+
:state="{ 'checkpointMode': 'continue', 'selectedExperimentTaskId': {{ session.task_id }}, 'slyProjectId': {{ session.project.id }} }"
|
|
38
|
+
:moduleId="{{ resources.apps.online_training.module_id }}"
|
|
39
|
+
:command="command">
|
|
40
|
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFcklEQVR4nO2da4hVVRTHf42Zjjg1RUwmSWX0GqlMe9sDUokKv0RUFvVBoje9vkT6oaDI3mVR9KAPFUUY5IfACS2bqKAHOVMRKFpN1JSNWc1ILytPbPgPXS5z7z1733vOvufe9YMNcuc81l7rnL3/55y1tmAYhmEYhmEYhmEYhmEYzccewBnASuAtYBgYUxvWbyu1jdvWaBDTgOuBzUCSsm3WPm5fI5C9gZuA7z0cX962A3cC+1kU0nOAnPZrHY4vbzuBVcAsC0RlDpOT/mig48vbLuAFoNcC8T/Hyyn/ZOj48rYbeB04tV0D4VTKuUB/gPMGgVt1FXeq9eq3wYDj9cuWtlBOHcAS4KMAR72nfWs56nRd3bs9j/8ZcAWwJy3IFHXOR0omwL9y5skB55yroe1vz3N+LfU1rZWk5LCnE/6S845qgA2zNbn/7mnDSJEl7LiU/MWz02Ny1kEZ2NQjm35uZQkbKiV/lHP2zcHGLt2V3wXelb2tJCW/kjOcksmbvTQvbQqcl5pCwo4rjsSzDTaR4uiQuvowQ2VWOClZtAvq0zwuqHql5CkUh7mBQ2omErarTil5NMVldkwJGyold2YoJWPRk6cvnDp4VFewz8m2AbcD3eRDJ/AUMKr2bIMe3KrRrT5uCxgNHtMwXpOHPQ++FbgGmEq+PF1hvlmTw3wzVX3e6ukrd2HX5KeUB9sIXAxMIg6/1bDvHeD8jBXXJPlgY0qfuafwlghAh15bpLHzc+ByYHITBMB9Xq3JQwUZgh73tPMb4GZgesQh6N60k/AjBZiEp8jOPz3t3AHcJWWT1yTsbLzP9y6cCTzgcauPt1Gd7EDyYSZwv87rY6fT9k9I69fCPeHeE3COUdnmbAzGRX15YNSfAQ4nH/YBbgtIY3FPu68A82oc/zi9cog2GjjdfS3wpWcHnTR8FTiB/IamKwNembi2DlhU463Ax7HnQzfzXwIMBHTwTWAx+SmlC4APAuz8BLiogsI7eIJXE9EU4TnAhgZ3MAvOAtYGfKh3V/SyCY63Sn/fIB9E5yTgNQ03Ph3cAlyV9hG9ARwLvKgELR87XcpLKUeoz03HkQFZCAnwgyZQN5FmjTvHk572uTfBhSGpo43qYWVGBnbN0LF9pWSiO7stApBkkJZyaOA7/fJWGCp14Dp9hPfV6KuB+QF2zNe+vvNSywZg/IlyaWAO53pgYYrzL9S2vscflG0tHYBGJOcOSJXMKUnOnaPfBhqQnNsWAWjm9PSk3QLQbAUabRuAZilRavsAxC7SswBUKFP1yeHcVEeZqgWgAk6lLADulswcKklJGdKrZPe30+r8EG8BiIwFIDIWgMhYACJjAYiMBSAyFoDIWAAiYwGIjAUgMhaAyFgAImMBiIwFIDIWgMgUPgCVvunmVTlDuwfg2wodOJNikBQ9AJUWu3BFGs3O8ioBWEFBuLFKJ1yFTbOyOMW35mrVM01DT43cnpdyWFIghDdSBMBtUwgeTJGZ1q9czLyKM2oxknJptULQpeqXNCkkIwrYgpxKllzt2IkTFNK1VAAcx3gse5CUFFG/DFwWWEhdLe3xUuB5OTGZoCy1r5WGoNKaLN+y1qSsNGidlk9YpmK7eSqu3l9V/ZO12uIhyvl0C3TcoH36qlwE5YLg7BT2uG0KR7fWyvEtjEsybu9OYOuKKts7iVpo3KpRd1R5UEsitEUVCjz6lFe6Xf9OUxhSGDrU8dWBFZWNbEMaytqWWUqiXduAIjqftkv/6c8tGVVkFpJO4DytYPJFA4vrEj0Yvq/l2C7MqR658EzXC7yrtWzOGjlxi5b+Gispad0hteVqxN4GntOEulSLhGSxWpZhGIZhGIZhGIZhGIZh4MN/hN4K9eVoLMsAAAAASUVORK5CYII=" alt="graduation-cap">
|
|
41
|
+
<span>Continue</span>
|
|
42
|
+
</sly-iw-launch-button>
|
|
43
|
+
{% else %}
|
|
44
|
+
<!-- Module not found - buttons disabled -->
|
|
45
|
+
{% endif %}
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="experiment-info-subheader-body">
|
|
49
|
+
<div class="experiment-info-subheader-block">
|
|
50
|
+
<div class="experiment-info-subheader-mini-title">
|
|
51
|
+
<h2>Training Info</h2>
|
|
52
|
+
{% if training.session_url %}
|
|
53
|
+
<a href="{{ training.session_url }}" target="_blank">Session <i class="zmdi zmdi-arrow-right-top" /></a>
|
|
54
|
+
{% endif %}
|
|
55
|
+
{% if training.logs.url %}
|
|
56
|
+
<a href="{{ training.logs.url }}" target="_blank">Logs <i class="zmdi zmdi-arrow-right-top" /></a>
|
|
57
|
+
{% endif %}
|
|
58
|
+
</div>
|
|
59
|
+
<ul>
|
|
60
|
+
<li><strong>Session ID:</strong> {{ session.id }}</li>
|
|
61
|
+
<li><strong>Date:</strong> {{ session.start_time }}</li>
|
|
62
|
+
<li><strong>Duration:</strong> {{ session.duration or "N/A" }}</li>
|
|
63
|
+
<li><strong>Device:</strong> {{ training.device or "N/A" }}</li>
|
|
64
|
+
<li><strong>Total Iterations:</strong> {{ training.total_iterations }}</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="experiment-info-subheader-block">
|
|
68
|
+
<div class="experiment-info-subheader-mini-title">
|
|
69
|
+
<h2>Model</h2>
|
|
70
|
+
</div>
|
|
71
|
+
<ul>
|
|
72
|
+
<li><strong>Architecture:</strong> {{ model.name }}</li>
|
|
73
|
+
<li><strong>Backbone:</strong> {{ model.backbone }}</li>
|
|
74
|
+
<li><strong>Task:</strong> {{ model.task_type or "Live Learning" }}</li>
|
|
75
|
+
<li><strong>Classes:</strong> ({{ model.num_classes }}) {% for class_name in model.classes_short %}<span class="class-tag">{{ class_name }}</span> {% endfor %}</li> </ul>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="experiment-info-subheader-block">
|
|
78
|
+
<div class="experiment-info-subheader-mini-title">
|
|
79
|
+
<h2>Training Data</h2>
|
|
80
|
+
<a href="{{ session.project.url }}" target="_blank">Project <i class="zmdi zmdi-arrow-right-top" /></a>
|
|
81
|
+
<a href="{{ session.artifacts_url }}" target="_blank">Artifacts <i class="zmdi zmdi-arrow-right-top" /></a>
|
|
82
|
+
</div>
|
|
83
|
+
<ul>
|
|
84
|
+
<li><strong>Project:</strong> {{ session.project.name }}</li>
|
|
85
|
+
<li><strong>Final Size:</strong> {{ dataset.current_size }} samples</li>
|
|
86
|
+
<li><strong>Initial Samples:</strong> {{ dataset.initial_samples }}</li>
|
|
87
|
+
</ul>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="experiment-info-subheader-footer-menu">
|
|
91
|
+
<a :href="`${location.pathname}#about-live-training`" class="active">About Live Training</a>
|
|
92
|
+
<a :href="`${location.pathname}#training-results`">Training Results</a>
|
|
93
|
+
<a :href="`${location.pathname}#checkpoints`">Checkpoints</a>
|
|
94
|
+
<a :href="`${location.pathname}#classes`">Classes</a>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
## About Live Training
|
|
2
|
+
|
|
3
|
+
Live Training is a novel data annotation paradigm where the model trains in parallel with the annotation process, rather than after it. Each newly labeled sample is immediately added to the training set, and the model adapts in real-time, providing progressively more accurate predictions for subsequent images.
|
|
4
|
+
This creates a synergistic human-AI collaboration: the growing dataset improves the model → the improved model accelerates annotation → faster annotation expands the dataset. Unlike traditional workflows where annotators wait for training to complete and GPUs sit idle during labeling, Live Training utilizes resources continuously and efficiently.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
## Training Results
|
|
8
|
+
|
|
9
|
+
{{ widgets.training_plot | safe }}
|
|
10
|
+
|
|
11
|
+
## Checkpoints
|
|
12
|
+
|
|
13
|
+
[📂 Open in Team Files]({{ session.artifacts_url }}){:target="_blank"}
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary>📋 Checkpoints</summary>
|
|
17
|
+
|
|
18
|
+
{% if widgets.tables.checkpoints %}
|
|
19
|
+
{{ widgets.tables.checkpoints | safe }}
|
|
20
|
+
{% else %}
|
|
21
|
+
No checkpoints available.
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
</details>
|
|
25
|
+
|
|
26
|
+
## Classes
|
|
27
|
+
|
|
28
|
+
The model can predict {{ model.num_classes }} classes. Here is the full list of classes:
|
|
29
|
+
|
|
30
|
+
<details>
|
|
31
|
+
<summary>Classes</summary>
|
|
32
|
+
{{ widgets.tables.classes }}
|
|
33
|
+
|
|
34
|
+
</details>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
{# ## Hyperparameters
|
|
38
|
+
|
|
39
|
+
{% if hyperparameters %}
|
|
40
|
+
| Parameter | Value |
|
|
41
|
+
|-----------|-------|
|
|
42
|
+
{% for key, value in hyperparameters.items() %}
|
|
43
|
+
| {{ key }} | {{ value }} |
|
|
44
|
+
{% endfor %}
|
|
45
|
+
{% else %}
|
|
46
|
+
No hyperparameters available.
|
|
47
|
+
{% endif %}
|
|
48
|
+
|
|
49
|
+
## Configuration
|
|
50
|
+
|
|
51
|
+
**Config file:** `{{ model.config_file }}` #}
|