supervisely 6.73.390__py3-none-any.whl → 6.73.391__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. supervisely/app/widgets/experiment_selector/experiment_selector.py +20 -3
  2. supervisely/app/widgets/experiment_selector/template.html +49 -70
  3. supervisely/app/widgets/report_thumbnail/report_thumbnail.py +19 -4
  4. supervisely/decorators/profile.py +20 -0
  5. supervisely/nn/benchmark/utils/detection/utlis.py +7 -0
  6. supervisely/nn/experiments.py +4 -0
  7. supervisely/nn/inference/gui/serving_gui_template.py +71 -11
  8. supervisely/nn/inference/inference.py +108 -6
  9. supervisely/nn/training/gui/classes_selector.py +246 -27
  10. supervisely/nn/training/gui/gui.py +318 -234
  11. supervisely/nn/training/gui/hyperparameters_selector.py +2 -2
  12. supervisely/nn/training/gui/model_selector.py +42 -1
  13. supervisely/nn/training/gui/tags_selector.py +1 -1
  14. supervisely/nn/training/gui/train_val_splits_selector.py +8 -7
  15. supervisely/nn/training/gui/training_artifacts.py +10 -1
  16. supervisely/nn/training/gui/training_process.py +17 -1
  17. supervisely/nn/training/train_app.py +227 -72
  18. supervisely/template/__init__.py +2 -0
  19. supervisely/template/base_generator.py +90 -0
  20. supervisely/template/experiment/__init__.py +0 -0
  21. supervisely/template/experiment/experiment.html.jinja +537 -0
  22. supervisely/template/experiment/experiment_generator.py +996 -0
  23. supervisely/template/experiment/header.html.jinja +154 -0
  24. supervisely/template/experiment/sidebar.html.jinja +240 -0
  25. supervisely/template/experiment/sly-style.css +397 -0
  26. supervisely/template/experiment/template.html.jinja +18 -0
  27. supervisely/template/extensions.py +172 -0
  28. supervisely/template/template_renderer.py +253 -0
  29. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/METADATA +3 -1
  30. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/RECORD +34 -23
  31. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/LICENSE +0 -0
  32. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/WHEEL +0 -0
  33. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/entry_points.txt +0 -0
  34. {supervisely-6.73.390.dist-info → supervisely-6.73.391.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,154 @@
1
+ <div class="experiment-info-header">
2
+ <div class="experiment-info-subheader">
3
+ <h1>{{ experiment.name }}</h1>
4
+
5
+ <div class="experiment-info-buttons">
6
+
7
+ <!-- Download -->
8
+ <sly-iw-download-button
9
+ style="padding: 7px 8px;"
10
+ :disabled="false"
11
+ teamFilesPath="{{ experiment.paths.artifacts_dir.path + '/' }}"
12
+ :command="command">
13
+ <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">
14
+ </sly-iw-download-button>
15
+
16
+ <!-- Finetune -->
17
+ <sly-iw-launch-button
18
+ style=""
19
+ :disabled="false"
20
+ :autoRun="false"
21
+ :openInNewWindow="true"
22
+ :selectContext="true"
23
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, 'trainMode': 'continue' }"
24
+ :moduleId="{{ resources.apps.train.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
+ <!-- Train New -->
31
+ <sly-iw-launch-button
32
+ style=""
33
+ :disabled="false"
34
+ :autoRun="false"
35
+ :openInNewWindow="true"
36
+ :selectContext="true"
37
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, 'trainMode': 'new' }"
38
+ :moduleId="{{ resources.apps.train.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>Train New</span>
42
+ </sly-iw-launch-button>
43
+
44
+ <!-- Deploy -->
45
+ <sly-iw-launch-button
46
+ style=""
47
+ :disabled="false"
48
+ :autoRun="false"
49
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, }"
50
+ :moduleId="{{ resources.apps.serve.module_id }}"
51
+ :openInNewWindow="true"
52
+ :command="command">
53
+ <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACjUlEQVR4nO2Yu2sVQRSHv7tRSRqjNleIGDEgqIWFjYgPxEKv4l+goGgRRMFSEOKjt9DCIBIhImirNqLxUdrEXHyUNnpNSFqJKGhUDszAcdjH3bvZYRb2B1Ps7Myc78yemTk7UKtWrVoFdQC4DswAs8A3YA6YAsaATQSq/cAb4G9GWQKuEJguAL+7gNdOBPElImDCgfsO3AQOAk1gANgInAI+qXZjIcDfdeCfA+tT+pxVbWVNBAUvzysy+u1Q7b8SEPyEqc9SU/VZpGLwomHVb4EA4Y+a0OgArZgxWqrvdIgz31Hvv8SMc1u9vxFi2HRSHBgycW/f7wkNXtQyTgj8YVXfBzxVY7wNEb7bcf4Au4tAjQJt4GeOo7+XBZs0CZfpUTLYg5zQ+pDKu2CjhC/Y6NWB0WWEz3IgSjip84bff5pRg40DqwsaTVqwURnwoh9qwDUF4ZMUlQUvmleD7q0avOiek4ccqxK8aMT8n2ojH6sCb7XL/Gjn2W2CgbdaC7yoKrzVe2V0smrww8roZ6B/GeCXfMFj0lhr+DHF4W3xpq1OCiDXHkXhvTnQAPYBv3KugaSY9+pAE3iZMHtpeX7agvXmwCrgXQ9ZZ9Zu482B08qQhM8t4BzwyoGYVGtiwEk/4pz05sAzZeiqqheY1w6ILOwnTr4v5UPMF/LiQJ+5cLWG5BzQOp8RWrpIAmg1qOolVS9N253ZdTXuhJcGbjtpx4LZxSQduePrkupEwsElV97XHGg55LYAO4ENpt26lATQljNlOnDJmalHJoVwIaYyslg3FbflfpEf9W50pIvYbptzIk2bza40Z2J+2sx8qfAYAw9joBfNbdlJYCWBqwEcAi4Cx4FtZneqVasWYekfCJHJg6JpgYcAAAAASUVORK5CYII=" alt="rocket" />
54
+ <span>Deploy</span>
55
+ </sly-iw-launch-button>
56
+
57
+ <!-- Apply Model -->
58
+ <sly-iw-launch-button class="primary"
59
+ style=""
60
+ :selectContext="true"
61
+ :disabled="false"
62
+ :autoRun="false"
63
+ :moduleId="{{ resources.apps.apply_nn_to_images.module_id }}"
64
+ :openInNewWindow="true"
65
+ :command="command">
66
+ <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA50lEQVR4nO3YOw6CQBSF4bHQwIJ9VEYL3JisQtgFBQ3JbyaimcoMxuEOer6aCedyCAnXORH5PUAJnIEWGLAzjBlOPtOU8DX5qYEiZgD/5HN1jBnAV/a0BdbOCLAGdkGeW8yh8J3fzJL0DZ8hyDPEHHhxmWBKJg2QAGrAGGrAGGrAGGrAGGrAGGrAGGrAGGrAGP/WwLD0n/o2OLC3HIJH+MPUtYpf4y16sVVmulq8Rq0WxyEKPy3QZLDcbcYsceE/Ed7xm9fORgNYUwNzAi5An+CL0wNV6vAroCOdLukA4xDVYhsQEZedOy9lmdD5aZkaAAAAAElFTkSuQmCC" alt="monitor--v1">
67
+ <span>Apply Model</span>
68
+ </sly-iw-launch-button>
69
+
70
+ </div>
71
+ </div>
72
+ <div class="experiment-info-subheader-body">
73
+ <div class="experiment-info-subheader-block">
74
+ <div class="experiment-info-subheader-mini-title">
75
+ <h2>Training Info</h2>
76
+ <a href="{{ experiment.training.session.url }}" target="_blank">Session <i class="zmdi zmdi-arrow-right-top" /></a>
77
+ <!-- Launch Logs Button -->
78
+ <sly-iw-launch-button
79
+ style=""
80
+ :disabled="false"
81
+ :autoRun="true"
82
+ :state="{ 'slyFolder': '{{ experiment.training.logs.path }}' }"
83
+ :moduleId="{{ resources.apps.log_viewer.module_id }}"
84
+ :proxyKeepUrl="true"
85
+ :openInNewWindow="true"
86
+ :command="command">
87
+ <span>Logs</span> <i class="zmdi zmdi-arrow-right-top" />
88
+ </sly-iw-launch-button>
89
+ </div>
90
+ <ul>
91
+ <li><strong>Date:</strong> {{ experiment.date }}</li>
92
+ <li><strong>Framework:</strong> {{ experiment.model.framework }}</li>
93
+ <li><strong>Model:</strong> {{ experiment.model.name }}</li>
94
+ {% if experiment.model.base_checkpoint.url and not experiment.model.base_checkpoint.path %}
95
+ <!-- Pretrained Checkpoint -> download link-->
96
+ <li><strong>Base checkpoint:</strong> <a href="{{ experiment.model.base_checkpoint.url }}" target="_blank" download="{{ experiment.model.base_checkpoint.name }}">{{ experiment.model.base_checkpoint.name }}</a></li>
97
+ {% elif experiment.model.base_checkpoint.path %}
98
+ <!-- Custom Checkpoint -> TeamFiles Link -->
99
+ <li><strong>Base checkpoint:</strong> <a href="{{ experiment.model.base_checkpoint.path }}" target="_blank">{{ experiment.model.base_checkpoint.name }}</a></li>
100
+ {% else %}
101
+ <li><strong>Base checkpoint:</strong> {{ experiment.model.base_checkpoint.name }}</li>
102
+ {% endif %}
103
+ <li><strong>Task:</strong> {{ experiment.model.task_type }}</li>
104
+ <li><strong>Device:</strong> {{ experiment.training.device }}</li>
105
+ <li><strong>Training duration:</strong> {{ experiment.training.duration }}</li>
106
+ </ul>
107
+ </div>
108
+ <div class="experiment-info-subheader-block">
109
+ <div class="experiment-info-subheader-mini-title">
110
+ <h2>Training Data</h2>
111
+ <a href="{{ experiment.project.url }}" target="_blank">Project <i class="zmdi zmdi-arrow-right-top" /></a>
112
+ <a href="{{ experiment.paths.artifacts_dir.url }}" target="_blank">Artifacts <i class="zmdi zmdi-arrow-right-top" /></a>
113
+ </div>
114
+ <ul>
115
+ <li><strong>Project:</strong> {{ experiment.project.name }}</li>
116
+ <li><strong>Classes:</strong> ({{ experiment.project.classes.count }}) {% for class_name in experiment.project.classes.names.short_list %}<span class="class-tag">{{ class_name }}</span> {% endfor %}</li>
117
+ <li><strong>Training:</strong> {{ experiment.project.splits.train }} {{ experiment.project.type }}</li>
118
+ <li><strong>Validation:</strong> {{ experiment.project.splits.val }} {{ experiment.project.type }}</li>
119
+ </ul>
120
+ </div>
121
+ {% if experiment.training.evaluation.id %}
122
+ <div class="experiment-info-subheader-block">
123
+ <div class="experiment-info-subheader-mini-title">
124
+ <h2>Evaluation</h2>
125
+ {% if experiment.training.evaluation.id %}
126
+ <a href="{{ experiment.training.evaluation.url }}" target="_blank">Full Report <i class="zmdi zmdi-arrow-right-top" /></a>
127
+ {% endif %}
128
+ </div>
129
+ {% for metric in experiment.training.evaluation.display_metrics %}
130
+ <div class="experiment-metric">
131
+ <span class="experiment-label">{{ metric.name }}</span>
132
+ <span class="experiment-value">{{ metric.value }}</span>
133
+ <div class="experiment-progress-bar">
134
+ <div class="experiment-progress" style="width: {{ metric.percent_value }}%"></div>
135
+ </div>
136
+ </div>
137
+ {% endfor %}
138
+ </div>
139
+ {% endif %}
140
+ </div>
141
+ <div class="experiment-info-subheader-footer-menu">
142
+ {% if experiment.training.evaluation.id %}
143
+ <a :href="`${window.location.pathname}#predictions`" class="active">Predictions</a>
144
+ <a :href="`${window.location.pathname}#evaluation-2`">Evaluation</a>
145
+ {% endif %}
146
+ {% if not experiment.training.evaluation.id %}
147
+ <a :href="`${window.location.pathname}#evaluation-2`" class="active">Evaluation</a>
148
+ {% endif %}
149
+ <a :href="`${window.location.pathname}#artifacts`">Artifacts</a>
150
+ <a :href="`${window.location.pathname}#classes`">Classes</a>
151
+ <a :href="`${window.location.pathname}#hyperparameters`">Hyperparameters</a>
152
+ <a :href="`${window.location.pathname}#api-integration-amp-deployment`">API Integration & Deployment</a>
153
+ </div>
154
+ </div>
@@ -0,0 +1,240 @@
1
+ <div>
2
+
3
+ <sly-style>
4
+ /* Sidebar styles */
5
+ .experiment-sidebar {
6
+ position: sticky;
7
+ top: 30px;
8
+ width: 300px;
9
+ height: 100vh;
10
+ background: #fff;
11
+ padding: 0 20px 20px;
12
+ border-left: 1px solid #ccc;
13
+ border-right: 1px solid #ccc;
14
+ flex-shrink: 0;
15
+ }
16
+
17
+ .experiment-main-wrapper {
18
+ display: flex;
19
+ }
20
+
21
+ .experiment-sidebar-nav a {
22
+ display: flex;
23
+ align-items: center;
24
+ margin-bottom: 8px;
25
+ color: #007bff;
26
+ text-decoration: none;
27
+ font-size: 14px;
28
+ }
29
+ .experiment-sidebar-nav a .icon {
30
+ margin-right: 6px;
31
+ }
32
+ .experiment-sidebar-nav a:hover {
33
+ text-decoration: underline;
34
+ }
35
+
36
+ .experiment-sidebar-section {
37
+ margin: 20px 0;
38
+ }
39
+ .experiment-sidebar-section h3 {
40
+ margin-bottom: 8px;
41
+ font-size: 14px;
42
+ color: #878787;
43
+ padding-bottom: 4px;
44
+ }
45
+
46
+ .experiment-checkpoints-list {
47
+ list-style: none;
48
+ padding: 0;
49
+ margin-left: 10px;
50
+ }
51
+ .experiment-checkpoints-list li {
52
+ margin-bottom: 6px;
53
+ font-size: 13px;
54
+ }
55
+ .experiment-checkpoints-list li a {
56
+ color: #007bff;
57
+ text-decoration: none;
58
+ }
59
+ .experiment-checkpoints-list li a:hover {
60
+ text-decoration: underline;
61
+ }
62
+
63
+ .experiment-metric {
64
+ margin-bottom: 12px;
65
+ font-size: 13px;
66
+ margin-left: 10px;
67
+ }
68
+ .experiment-metric .experiment-label {
69
+ display: inline-block;
70
+ width: 40px;
71
+ }
72
+ .experiment-metric .experiment-value {
73
+ float: right;
74
+ }
75
+ .experiment-progress-bar {
76
+ background: #eee;
77
+ height: 6px;
78
+ border-radius: 3px;
79
+ overflow: hidden;
80
+ margin-top: 4px;
81
+ }
82
+ .experiment-progress {
83
+ height: 100%;
84
+ background: #28a745;
85
+ }
86
+
87
+ .experiment-divider {
88
+ border: none;
89
+ height: 1px;
90
+ background-color: #ddd;
91
+ margin: 20px 0;
92
+ width: 50%;
93
+ margin-left: auto;
94
+ margin-right: auto;
95
+ }
96
+
97
+ html {
98
+ scroll-behavior: smooth;
99
+ }
100
+ </sly-style>
101
+
102
+ <div>
103
+ <div class="experiment-sidebar-section">
104
+ <h3>🚀 Actions</h3>
105
+
106
+ <div>
107
+
108
+ <sly-iw-launch-button
109
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
110
+ title="Deploy"
111
+ description="Deploy to Supervisely"
112
+ icon="https://img.icons8.com/?size=100&id=59881&format=png&color=000000"
113
+ :disabled="false"
114
+ :autoRun="false"
115
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, }"
116
+ :moduleId="{{ resources.apps.serve.module_id }}"
117
+ :openInNewWindow="true"
118
+ :command="command">
119
+ </sly-iw-launch-button>
120
+
121
+ <sly-iw-launch-button
122
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
123
+ title="Predict"
124
+ description="Apply Model to Supervisely project"
125
+ icon="https://img.icons8.com/?size=100&id=79621&format=png&color=000000"
126
+ :selectContext="true"
127
+ :disabled="false"
128
+ :autoRun="false"
129
+ :moduleId="{{ resources.apps.apply_nn_to_images.module_id }}"
130
+ :openInNewWindow="true"
131
+ :command="command">
132
+ </sly-iw-launch-button>
133
+
134
+ <sly-iw-download-button
135
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
136
+ title="Download"
137
+ description="Zip archive with artifacts"
138
+ icon="https://img.icons8.com/?size=100&id=59783&format=png&color=000000"
139
+ :disabled="false"
140
+ teamFilesPath="{{ experiment.paths.artifacts_dir.path + '/' }}"
141
+ :command="command">
142
+ </sly-iw-download-button>
143
+
144
+ <sly-iw-launch-button
145
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
146
+ title="Fine-tune"
147
+ description="Continue training"
148
+ icon="https://img.icons8.com/?size=100&id=61035&format=png&color=000000"
149
+ :disabled="false"
150
+ :autoRun="false"
151
+ :openInNewWindow="true"
152
+ :selectContext="true"
153
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, 'trainMode': 'new' }"
154
+ :moduleId="{{ resources.apps.train.module_id }}"
155
+ :command="command">
156
+ </sly-iw-launch-button>
157
+
158
+ <sly-iw-launch-button
159
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
160
+ title="Train New"
161
+ description="Start new training with the same configurations"
162
+ icon="https://img.icons8.com/?size=100&id=74239&format=png&color=000000"
163
+ :disabled="false"
164
+ :autoRun="false"
165
+ :openInNewWindow="true"
166
+ :selectContext="true"
167
+ :state="{ 'trainTaskId': {{ experiment.task_id }}, 'trainMode': 'continue' }"
168
+ :moduleId="{{ resources.apps.train.module_id }}"
169
+ :command="command">
170
+ </sly-iw-launch-button>
171
+
172
+ <sly-iw-launch-button
173
+ style="min-height: 30px; height: 30px; margin-bottom: 5px;"
174
+ title="Logs"
175
+ description="Open training logs"
176
+ icon="https://img.icons8.com/?size=100&id=59881&format=png&color=000000"
177
+ :disabled="false"
178
+ :autoRun="true"
179
+ :state="{ 'slyFolder': {{ experiment.training.logs.path }} }"
180
+ :moduleId="{{ resources.apps.log_viewer.module_id }}"
181
+ :openInNewWindow="true"
182
+ :command="command">
183
+ </sly-iw-launch-button>
184
+
185
+ </div>
186
+ </div>
187
+ <hr class="experiment-divider">
188
+ <div class="experiment-sidebar-section">
189
+ <h3>🔗 Links</h3>
190
+ <nav class="experiment-sidebar-nav">
191
+ <a href="{{ experiment.training.session.url }}" target="_blank"><span class="icon">🎓</span> Open Train App
192
+ <i class="zmdi zmdi-arrow-right-top" style="margin-left: 5px"></i></a>
193
+ <a href="{{ experiment.training.logs.url }}" target="_blank"><span class="icon">📈</span> Training Logs <i
194
+ class="zmdi zmdi-arrow-right-top" style="margin-left: 5px"></i></a>
195
+ <a href="{{ experiment.paths.artifacts_dir.url }}" target="_blank"><span class="icon">📂</span> Team Files Artifacts
196
+ <i class="zmdi zmdi-arrow-right-top" style="margin-left: 5px"></i></a>
197
+ {% if experiment.training.evaluation.id %}
198
+ <a href="{{ experiment.training.evaluation.url }}" target="_blank"><span class="icon">📊</span> Evaluation
199
+ Report <i class="zmdi zmdi-arrow-right-top" style="margin-left: 5px"></i></a>
200
+ {% endif %}
201
+ </nav>
202
+ </div>
203
+
204
+ <div class="experiment-sidebar-section">
205
+ <h3>🏆 Checkpoints</h3>
206
+ <ul class="experiment-checkpoints-list">
207
+ <li><strong>🔥 PyTorch:</strong> <a href="{{ experiment.training.checkpoints.pytorch.url }}"
208
+ download="{{ experiment.training.checkpoints.pytorch.name}}">{{ experiment.training.checkpoints.pytorch.name }}</a> ({{
209
+ experiment.training.checkpoints.pytorch.size }})</li>
210
+ {% if experiment.training.checkpoints.onnx.name %}
211
+ <li><strong>📦 ONNX:</strong> <a href="{{ experiment.training.checkpoints.onnx.url }}"
212
+ download="{{ experiment.training.checkpoints.onnx.name}}">{{ experiment.training.checkpoints.onnx.name }}</a> ({{
213
+ experiment.training.checkpoints.onnx.size }})</li>
214
+ {% endif %}
215
+ {% if experiment.training.checkpoints.tensorrt.name %}
216
+ <li><strong>⚡ TensorRT:</strong> <a href="{{ experiment.training.checkpoints.tensorrt.url }}"
217
+ download="{{ experiment.training.checkpoints.tensorrt.name}}">{{ experiment.training.checkpoints.tensorrt.name }}</a> ({{
218
+ experiment.training.checkpoints.tensorrt.size }})</li>
219
+ {% endif %}
220
+ </ul>
221
+ </div>
222
+
223
+ {% if experiment.training.evaluation.id %}
224
+ <div class="experiment-sidebar-section">
225
+ <h3>📊 Evaluation</h3>
226
+
227
+ {% for metric in experiment.training.evaluation.display_metrics %}
228
+ <div class="experiment-metric">
229
+ <span class="experiment-label">{{ metric.name }}</span>
230
+ <span class="experiment-value">{{ metric.value }}</span>
231
+ <div class="experiment-progress-bar">
232
+ <div class="experiment-progress" style="width: {{ metric.percent_value }}%"></div>
233
+ </div>
234
+ </div>
235
+ {% endfor %}
236
+ </div>
237
+ <hr class="experiment-divider">
238
+ {% endif %}
239
+ </div>
240
+ </div>