flashstudio 0.1.2__tar.gz → 0.1.4__tar.gz
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 flashstudio might be problematic. Click here for more details.
- flashstudio-0.1.4/PKG-INFO +371 -0
- flashstudio-0.1.4/README.md +334 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/__init__.py +1 -1
- flashstudio-0.1.4/flashstudio/app.py +194 -0
- flashstudio-0.1.4/flashstudio/components/project_manager.py +490 -0
- flashstudio-0.1.4/flashstudio/components/sidebar.py +87 -0
- flashstudio-0.1.4/flashstudio/components/styles.py +341 -0
- flashstudio-0.1.4/flashstudio/components/wizard.py +45 -0
- flashstudio-0.1.4/flashstudio/components/zone_drawer/__init__.py +177 -0
- flashstudio-0.1.4/flashstudio/constants.py +245 -0
- flashstudio-0.1.4/flashstudio/core/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/core/constants.py +3 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/launcher.py +33 -7
- flashstudio-0.1.4/flashstudio/pages/__init__.py +8 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/_common.py +10 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/metrics.py +66 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/pipeline_status.py +35 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/project_banner.py +23 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/quick_actions.py +28 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/recent_runs.py +99 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/overview/tab.py +35 -0
- flashstudio-0.1.4/flashstudio/pages/dashboard/page.py +17 -0
- flashstudio-0.1.4/flashstudio/pages/data/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/data/_common.py +107 -0
- flashstudio-0.1.4/flashstudio/pages/data/download/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/data/download/tab.py +75 -0
- flashstudio-0.1.4/flashstudio/pages/data/helpers.py +290 -0
- flashstudio-0.1.4/flashstudio/pages/data/page.py +50 -0
- flashstudio-0.1.4/flashstudio/pages/data/preview/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/data/preview/tab.py +139 -0
- flashstudio-0.1.4/flashstudio/pages/data/upload/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/data/upload/tab.py +160 -0
- flashstudio-0.1.4/flashstudio/pages/data/verify/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/data/verify/tab.py +107 -0
- flashstudio-0.1.4/flashstudio/pages/export/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/export/page.py +54 -0
- flashstudio-0.1.4/flashstudio/pages/export/weights/__init__.py +4 -0
- flashstudio-0.1.4/flashstudio/pages/export/weights/exporter.py +60 -0
- flashstudio-0.1.4/flashstudio/pages/export/weights/settings.py +75 -0
- flashstudio-0.1.4/flashstudio/pages/inference/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/inference/_common.py +76 -0
- flashstudio-0.1.4/flashstudio/pages/inference/data/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/inference/data/tab.py +121 -0
- flashstudio-0.1.4/flashstudio/pages/inference/model/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/inference/model/tab.py +60 -0
- flashstudio-0.1.4/flashstudio/pages/inference/page.py +42 -0
- flashstudio-0.1.4/flashstudio/pages/inference/run/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/inference/run/detection.py +133 -0
- flashstudio-0.1.4/flashstudio/pages/inference/run/tab.py +159 -0
- flashstudio-0.1.4/flashstudio/pages/inference/run/video.py +195 -0
- flashstudio-0.1.4/flashstudio/pages/inference/solution/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/inference/solution/tab.py +121 -0
- flashstudio-0.1.4/flashstudio/pages/model/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/_common.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/advanced/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/advanced/tab.py +54 -0
- flashstudio-0.1.4/flashstudio/pages/model/architecture/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/architecture/tab.py +90 -0
- flashstudio-0.1.4/flashstudio/pages/model/augment/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/augment/tab.py +18 -0
- flashstudio-0.1.4/flashstudio/pages/model/hyperparams/__init__.py +4 -0
- flashstudio-0.1.4/flashstudio/pages/model/hyperparams/tab.py +89 -0
- flashstudio-0.1.4/flashstudio/pages/model/page.py +30 -0
- flashstudio-0.1.4/flashstudio/pages/model/utils/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/model/utils/config.py +27 -0
- flashstudio-0.1.4/flashstudio/pages/training/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/training/_common.py +24 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/controls.py +84 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/dialogs.py +247 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/preflight.py +66 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/runner.py +429 -0
- flashstudio-0.1.4/flashstudio/pages/training/launch/tab.py +130 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/__init__.py +3 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/checkpoints.py +96 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/curves.py +113 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/dashboard.py +129 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/gt_verification.py +122 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/log_viewer.py +43 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/parsers.py +253 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/run_meta.py +165 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/tab.py +142 -0
- flashstudio-0.1.4/flashstudio/pages/training/monitor/visualizations.py +52 -0
- flashstudio-0.1.4/flashstudio/pages/training/page.py +128 -0
- flashstudio-0.1.4/flashstudio/utils/__init__.py +152 -0
- flashstudio-0.1.4/flashstudio/utils/config.py +104 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/utils/device.py +12 -3
- flashstudio-0.1.4/flashstudio/utils/filesystem.py +67 -0
- flashstudio-0.1.4/flashstudio/utils/jobs.py +95 -0
- flashstudio-0.1.4/flashstudio/utils/training_hooks.py +266 -0
- flashstudio-0.1.4/flashstudio.egg-info/PKG-INFO +371 -0
- flashstudio-0.1.4/flashstudio.egg-info/SOURCES.txt +106 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/requires.txt +5 -0
- flashstudio-0.1.4/flashstudio.egg-info/top_level.txt +2 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/pyproject.toml +20 -5
- flashstudio-0.1.4/tests/test_app.py +120 -0
- flashstudio-0.1.4/tests/test_cli.py +37 -0
- flashstudio-0.1.4/tests/test_constants.py +172 -0
- flashstudio-0.1.4/tests/test_launcher.py +60 -0
- flashstudio-0.1.4/tests/test_pipeline_flow.py +771 -0
- flashstudio-0.1.4/tests/test_save_dir_compat.py +685 -0
- flashstudio-0.1.2/PKG-INFO +0 -159
- flashstudio-0.1.2/README.md +0 -127
- flashstudio-0.1.2/flashstudio/app.py +0 -64
- flashstudio-0.1.2/flashstudio/components/sidebar.py +0 -45
- flashstudio-0.1.2/flashstudio/components/styles.py +0 -273
- flashstudio-0.1.2/flashstudio/components/wizard.py +0 -46
- flashstudio-0.1.2/flashstudio/pages/__init__.py +0 -0
- flashstudio-0.1.2/flashstudio/pages/dashboard.py +0 -168
- flashstudio-0.1.2/flashstudio/pages/data.py +0 -272
- flashstudio-0.1.2/flashstudio/pages/export.py +0 -212
- flashstudio-0.1.2/flashstudio/pages/inference.py +0 -1112
- flashstudio-0.1.2/flashstudio/pages/model.py +0 -370
- flashstudio-0.1.2/flashstudio/pages/training.py +0 -672
- flashstudio-0.1.2/flashstudio/utils/__init__.py +0 -0
- flashstudio-0.1.2/flashstudio.egg-info/PKG-INFO +0 -159
- flashstudio-0.1.2/flashstudio.egg-info/SOURCES.txt +0 -25
- flashstudio-0.1.2/flashstudio.egg-info/top_level.txt +0 -1
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/cli.py +0 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio/components/__init__.py +0 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/dependency_links.txt +0 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/flashstudio.egg-info/entry_points.txt +0 -0
- {flashstudio-0.1.2 → flashstudio-0.1.4}/setup.cfg +0 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flashstudio
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: Interactive Training & Inference UI for FlashDet — runs on Google Colab
|
|
5
|
+
Author: Gaurav14cs17
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/FlashVision/FlashStudio
|
|
8
|
+
Project-URL: Repository, https://github.com/FlashVision/FlashStudio
|
|
9
|
+
Keywords: object-detection,flashdet,training,inference,ui,colab
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: streamlit>=1.28.0
|
|
18
|
+
Requires-Dist: plotly>=5.0
|
|
19
|
+
Requires-Dist: pandas>=1.5
|
|
20
|
+
Requires-Dist: pillow>=9.0
|
|
21
|
+
Requires-Dist: numpy>=1.21
|
|
22
|
+
Requires-Dist: pyngrok>=6.0
|
|
23
|
+
Requires-Dist: opencv-python>=4.5
|
|
24
|
+
Requires-Dist: pyyaml>=6.0
|
|
25
|
+
Requires-Dist: flashdet
|
|
26
|
+
Provides-Extra: full
|
|
27
|
+
Requires-Dist: pyngrok>=6.0; extra == "full"
|
|
28
|
+
Requires-Dist: torch>=2.0; extra == "full"
|
|
29
|
+
Requires-Dist: opencv-python>=4.5; extra == "full"
|
|
30
|
+
Requires-Dist: flashdet[export]; extra == "full"
|
|
31
|
+
Provides-Extra: colab
|
|
32
|
+
Requires-Dist: pyngrok>=6.0; extra == "colab"
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: ruff; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
<img src="https://raw.githubusercontent.com/FlashVision/FlashStudio/main/assets/logo.png" width="200" alt="FlashStudio Logo">
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<h1 align="center">FlashStudio</h1>
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<a href="https://pypi.org/project/flashstudio/"><img src="https://badge.fury.io/py/flashstudio.svg" alt="PyPI version"></a>
|
|
46
|
+
<img src="https://img.shields.io/badge/python-3.9+-blue.svg?logo=python&logoColor=white" alt="Python 3.9+">
|
|
47
|
+
<img src="https://img.shields.io/badge/Streamlit-UI-FF4B4B?logo=streamlit&logoColor=white" alt="Streamlit">
|
|
48
|
+
<img src="https://img.shields.io/badge/FlashDet-Powered-00CCFF?logo=lightning&logoColor=white" alt="FlashDet">
|
|
49
|
+
<img src="https://img.shields.io/badge/License-Apache%202.0-green.svg" alt="License">
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<b>Interactive Training & Inference UI for FlashDet — runs locally or on Google Colab with a Streamlit interface.</b>
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="docs/mockups/flashstudio_streamlit_mockup.png" width="800" alt="FlashStudio UI"/>
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
## Features
|
|
61
|
+
|
|
62
|
+
- 🏋️ **Training Dashboard** — Real-time monitoring with live loss curves, per-epoch visualizations, GT verification
|
|
63
|
+
- 🧠 **Model Config** — All 6 FlashDet sizes + YOLOv8/v9/v10/v11/YOLOX with accurate params
|
|
64
|
+
- 🔍 **Inference Pipeline** — 4-step wizard: Model → Data → Zone → Run (17 solutions, 6 trackers)
|
|
65
|
+
- 📤 **Export** — ONNX export with FP16 auto-generated weights
|
|
66
|
+
- 📦 **Data** — Native `flashdet download` datasets + custom upload (COCO/VOC/YOLO formats)
|
|
67
|
+
- 📊 **Dashboard** — Overview with recent training runs from workspace
|
|
68
|
+
- 🚀 **Colab Support** — ngrok tunneling for remote access
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## UI Tour
|
|
73
|
+
|
|
74
|
+
### Dashboard
|
|
75
|
+
Project overview with key metrics (GPU, Dataset, Model, mAP), pipeline status, quick actions, and recent training runs.
|
|
76
|
+
|
|
77
|
+
<p align="center">
|
|
78
|
+
<img src="demos/01_dashboard.gif" width="800" alt="Dashboard"/>
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
### Data Management
|
|
82
|
+
Upload datasets (ZIP/TAR), download from `flashdet` registry, preview images with navigation, and verify annotations.
|
|
83
|
+
|
|
84
|
+
<p align="center">
|
|
85
|
+
<img src="demos/02_data.gif" width="800" alt="Data Management"/>
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
### Model Configuration
|
|
89
|
+
Choose from 6 FlashDet sizes + YOLO variants. Configure hyperparameters, augmentations, and advanced settings (memory optimization, distributed training).
|
|
90
|
+
|
|
91
|
+
<p align="center">
|
|
92
|
+
<img src="demos/03_model.gif" width="800" alt="Model Configuration"/>
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
### Training
|
|
96
|
+
Create experiments, launch training with preflight checks, and monitor runs with real-time curves, visualizations, ground truth, logs, and file browser.
|
|
97
|
+
|
|
98
|
+
<p align="center">
|
|
99
|
+
<img src="demos/04_training.gif" width="800" alt="Training"/>
|
|
100
|
+
</p>
|
|
101
|
+
|
|
102
|
+
### Export
|
|
103
|
+
Export trained models to ONNX format with configurable opset, image size, and dynamic batching. Auto-detects saved weights from training.
|
|
104
|
+
|
|
105
|
+
<p align="center">
|
|
106
|
+
<img src="demos/05_export.gif" width="800" alt="Export"/>
|
|
107
|
+
</p>
|
|
108
|
+
|
|
109
|
+
### Inference
|
|
110
|
+
Full inference pipeline with 17 built-in solutions (object counting, speed estimation, heatmaps, security alarms, etc.). Interactive zone drawing with Polygon, Rectangle, and Line tools.
|
|
111
|
+
|
|
112
|
+
<p align="center">
|
|
113
|
+
<img src="demos/06_inference.gif" width="800" alt="Inference"/>
|
|
114
|
+
</p>
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Installation
|
|
119
|
+
|
|
120
|
+
### Step 1: Install FlashStudio
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
pip install flashstudio
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Step 2: Install FlashDet (required for training/inference)
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
pip install git+https://github.com/FlashVision/FlashDet.git
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Development install (from source)
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git clone https://github.com/FlashVision/FlashStudio.git
|
|
136
|
+
cd FlashStudio
|
|
137
|
+
pip install -e .
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Usage — Local Machine
|
|
143
|
+
|
|
144
|
+
### Option 1: CLI
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
flashstudio --port 8501
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Option 2: Streamlit directly
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
cd FlashStudio
|
|
154
|
+
streamlit run flashstudio/app.py
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Then open **http://localhost:8501** in your browser.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Usage — Google Colab
|
|
162
|
+
|
|
163
|
+
### Step 1: Install packages
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
!pip install flashstudio
|
|
167
|
+
!pip install git+https://github.com/FlashVision/FlashDet.git
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Step 2: Get ngrok token (free, one-time setup)
|
|
171
|
+
|
|
172
|
+
FlashStudio uses [ngrok](https://ngrok.com) to create a public URL for the Streamlit UI in Colab.
|
|
173
|
+
|
|
174
|
+
1. **Sign up** (free): https://dashboard.ngrok.com/signup
|
|
175
|
+
2. **Get your auth token**: https://dashboard.ngrok.com/get-started/your-authtoken
|
|
176
|
+
3. Copy the token (looks like `2xAbC1234_something...`)
|
|
177
|
+
|
|
178
|
+
### Step 3: Launch
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
from flashstudio import launch
|
|
182
|
+
|
|
183
|
+
# Pass your ngrok token
|
|
184
|
+
launch(ngrok_token="YOUR_NGROK_TOKEN_HERE")
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Or set it as an environment variable:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
import os
|
|
191
|
+
os.environ["NGROK_TOKEN"] = "YOUR_NGROK_TOKEN_HERE"
|
|
192
|
+
|
|
193
|
+
from flashstudio import launch
|
|
194
|
+
launch()
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Step 4: Open the URL
|
|
198
|
+
|
|
199
|
+
After launching, you'll see output like:
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
============================================================
|
|
203
|
+
FlashStudio is running!
|
|
204
|
+
Local: http://localhost:8501
|
|
205
|
+
Public: https://abc123.ngrok-free.app
|
|
206
|
+
============================================================
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Click the **Public URL** to open FlashStudio in a new tab.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Google Colab Notebooks (Ready to Use)
|
|
214
|
+
|
|
215
|
+
| Notebook | Description | Link |
|
|
216
|
+
|----------|-------------|------|
|
|
217
|
+
| Training | Train FlashDet models | [](https://colab.research.google.com/github/FlashVision/FlashStudio/blob/main/notebooks/FlashStudio_Train.ipynb) |
|
|
218
|
+
| Inference | Run detection on images/video | [](https://colab.research.google.com/github/FlashVision/FlashStudio/blob/main/notebooks/FlashStudio_Inference.ipynb) |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Supported Models
|
|
223
|
+
|
|
224
|
+
| Model | Params | Best For |
|
|
225
|
+
|-------|--------|----------|
|
|
226
|
+
| FlashDet-Pico | ~298K | Edge / MCU |
|
|
227
|
+
| FlashDet-Nano | ~790K | Embedded / IoT |
|
|
228
|
+
| FlashDet-Small | ~1.8M | General purpose |
|
|
229
|
+
| FlashDet-Medium | ~3.6M | High accuracy |
|
|
230
|
+
| FlashDet-Large | ~5.8M | High accuracy |
|
|
231
|
+
| FlashDet-X | ~9.0M | Max accuracy / Server |
|
|
232
|
+
| YOLOv8/v9/v10/v11/YOLOX | Varies | General YOLO |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Architecture
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
FlashStudio/
|
|
240
|
+
├── flashstudio/
|
|
241
|
+
│ ├── __init__.py # Package init + launch() export
|
|
242
|
+
│ ├── app.py # Main Streamlit app (wizard flow)
|
|
243
|
+
│ ├── launcher.py # Colab/local launcher with ngrok
|
|
244
|
+
│ ├── cli.py # CLI entrypoint
|
|
245
|
+
│ ├── constants.py # Centralized constants (paths, defaults, models)
|
|
246
|
+
│ │
|
|
247
|
+
│ ├── pages/ # Each page is a sub-package
|
|
248
|
+
│ │ ├── dashboard/
|
|
249
|
+
│ │ │ ├── page.py # Main dashboard render
|
|
250
|
+
│ │ │ ├── pipeline_status.py # Pipeline status cards
|
|
251
|
+
│ │ │ └── recent_runs.py # Recent training runs table
|
|
252
|
+
│ │ ├── data/
|
|
253
|
+
│ │ │ ├── page.py # Main data page render
|
|
254
|
+
│ │ │ ├── upload.py # Upload tab (ZIP/TAR + class config)
|
|
255
|
+
│ │ │ ├── download.py # Download tab (quick start + registries)
|
|
256
|
+
│ │ │ ├── preview.py # Preview tab (image grid + annotations)
|
|
257
|
+
│ │ │ ├── verify.py # Verify tab (dataset validation)
|
|
258
|
+
│ │ │ └── helpers.py # Shared helpers (extract, detect, convert)
|
|
259
|
+
│ │ ├── model/
|
|
260
|
+
│ │ │ ├── page.py # Main model page render
|
|
261
|
+
│ │ │ ├── architecture.py # Architecture tab (FlashDet/YOLO selection)
|
|
262
|
+
│ │ │ ├── hyperparams.py # Hyperparameters tab
|
|
263
|
+
│ │ │ ├── augmentation.py # Augmentation tab
|
|
264
|
+
│ │ │ ├── advanced.py # Advanced tab (memory, distributed)
|
|
265
|
+
│ │ │ └── summary.py # Config summary bar + YAML save/load
|
|
266
|
+
│ │ ├── training/
|
|
267
|
+
│ │ │ ├── page.py # Main training page render
|
|
268
|
+
│ │ │ ├── _common.py # Shared utilities (_get_save_dir)
|
|
269
|
+
│ │ │ ├── launch/ # Launch sub-package
|
|
270
|
+
│ │ │ │ ├── tab.py # Launch tab entry point
|
|
271
|
+
│ │ │ │ ├── preflight.py # Pre-flight checks
|
|
272
|
+
│ │ │ │ ├── runner.py # FlashDet Trainer subprocess
|
|
273
|
+
│ │ │ │ ├── controls.py # Start/stop/pause/resume buttons
|
|
274
|
+
│ │ │ │ └── dialogs.py # Clean/resume/config dialogs
|
|
275
|
+
│ │ │ └── monitor/ # Monitor sub-package
|
|
276
|
+
│ │ │ ├── tab.py # Monitor tab entry point
|
|
277
|
+
│ │ │ ├── run_meta.py # Run metadata extraction
|
|
278
|
+
│ │ │ ├── parsers.py # CSV/log parsing
|
|
279
|
+
│ │ │ ├── dashboard.py # Run dashboard + metrics
|
|
280
|
+
│ │ │ ├── curves.py # Plotly training curves
|
|
281
|
+
│ │ │ ├── visualizations.py # Epoch visualizations
|
|
282
|
+
│ │ │ ├── gt_verification.py # Ground truth verification
|
|
283
|
+
│ │ │ ├── log_viewer.py # Full log viewer
|
|
284
|
+
│ │ │ └── checkpoints.py # File browser + checkpoints
|
|
285
|
+
│ │ ├── export/
|
|
286
|
+
│ │ │ └── page.py # Export page (ONNX/TorchScript)
|
|
287
|
+
│ │ └── inference/
|
|
288
|
+
│ │ ├── page.py # Main inference page render
|
|
289
|
+
│ │ ├── model_tab.py # Model selection tab
|
|
290
|
+
│ │ ├── data_tab.py # Data input tab (images/video/RTSP)
|
|
291
|
+
│ │ ├── solution_tab.py # Solution selection + zone drawing
|
|
292
|
+
│ │ ├── run_tab.py # Run tab + results display
|
|
293
|
+
│ │ ├── detection.py # Detection utilities (real + demo)
|
|
294
|
+
│ │ └── video.py # Video/image inference runners
|
|
295
|
+
│ │
|
|
296
|
+
│ ├── components/
|
|
297
|
+
│ │ ├── sidebar.py # Navigation sidebar
|
|
298
|
+
│ │ ├── styles.py # Custom CSS + UI helpers
|
|
299
|
+
│ │ ├── wizard.py # Step indicator + navigation
|
|
300
|
+
│ │ ├── project_manager.py # Project CRUD + state persistence
|
|
301
|
+
│ │ └── zone_drawer/ # Interactive canvas zone drawing
|
|
302
|
+
│ │
|
|
303
|
+
│ └── utils/
|
|
304
|
+
│ ├── __init__.py # Shared helpers (defaults, state, flash)
|
|
305
|
+
│ ├── device.py # GPU/environment detection
|
|
306
|
+
│ ├── jobs.py # Background process tracking
|
|
307
|
+
│ ├── filesystem.py # Directory size/listing utilities
|
|
308
|
+
│ ├── config.py # Training config build/save/load
|
|
309
|
+
│ └── training_hooks.py # FlashDet training callbacks
|
|
310
|
+
│
|
|
311
|
+
├── tests/ # Pytest test suite
|
|
312
|
+
│ ├── conftest.py # Shared fixtures
|
|
313
|
+
│ ├── test_constants.py # Constants validation
|
|
314
|
+
│ ├── test_cli.py # CLI tests
|
|
315
|
+
│ ├── test_utils/ # Utils sub-package tests
|
|
316
|
+
│ │ ├── test_init.py
|
|
317
|
+
│ │ ├── test_device.py
|
|
318
|
+
│ │ ├── test_filesystem.py
|
|
319
|
+
│ │ ├── test_config.py
|
|
320
|
+
│ │ └── test_jobs.py
|
|
321
|
+
│ ├── test_pages/ # Page logic tests
|
|
322
|
+
│ │ └── test_training_parsers.py
|
|
323
|
+
│ └── test_components/
|
|
324
|
+
│ └── test_project_manager.py
|
|
325
|
+
│
|
|
326
|
+
├── .github/workflows/ci.yml # GitHub Actions CI
|
|
327
|
+
├── notebooks/
|
|
328
|
+
├── .streamlit/config.toml
|
|
329
|
+
├── pyproject.toml
|
|
330
|
+
└── README.md
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Troubleshooting
|
|
336
|
+
|
|
337
|
+
### `ModuleNotFoundError: No module named 'pyngrok'`
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
pip install --upgrade flashstudio
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### ngrok authentication error (`ERR_NGROK_4018`)
|
|
344
|
+
|
|
345
|
+
You need an ngrok auth token. Get one free at:
|
|
346
|
+
https://dashboard.ngrok.com/get-started/your-authtoken
|
|
347
|
+
|
|
348
|
+
Then pass it to `launch(ngrok_token="your_token")`.
|
|
349
|
+
|
|
350
|
+
### Streamlit port already in use
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
# Kill existing Streamlit processes
|
|
354
|
+
pkill -f "streamlit run"
|
|
355
|
+
|
|
356
|
+
# Then restart
|
|
357
|
+
flashstudio --port 8501
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Requirements
|
|
363
|
+
|
|
364
|
+
- Python >= 3.9
|
|
365
|
+
- FlashDet (`pip install git+https://github.com/FlashVision/FlashDet.git`)
|
|
366
|
+
- ngrok account (free) for Google Colab usage
|
|
367
|
+
- GPU recommended for training (T4 or better)
|
|
368
|
+
|
|
369
|
+
## License
|
|
370
|
+
|
|
371
|
+
Apache-2.0
|