Spaces:
Paused
Paused
Ali Mohsin
commited on
Commit
Β·
72af8c3
1
Parent(s):
7669ee7
folder reorganise
Browse files- app.py +5 -5
- RECOMMENDATION_PIPELINE_EXPLAINED.md β docs/PIPELINE.md +0 -0
- TRAINING_PARAMETERS.md β docs/TRAINING.md +0 -0
- setup_hf.sh β scripts/setup_hf.sh +0 -0
- startup_fix.py β scripts/startup_fix.py +0 -0
- training/__init__.py +0 -0
- integrate_advanced_training.py β training/integrate.py +7 -1
- test_training.py β training/test_training.py +9 -29
- train_resnet.py β training/train_resnet.py +2 -2
- train_vit_triplet.py β training/train_vit.py +2 -2
- ui/__init__.py +0 -0
- advanced_training_ui.py β ui/advanced_training.py +4 -4
- artifact_management_ui.py β ui/artifact_management.py +5 -0
- training_monitor.py β ui/monitor.py +0 -0
app.py
CHANGED
|
@@ -152,7 +152,7 @@ def download_all_files():
|
|
| 152 |
def get_training_status():
|
| 153 |
"""Get current training status from the monitor."""
|
| 154 |
try:
|
| 155 |
-
from
|
| 156 |
monitor = create_monitor()
|
| 157 |
status = monitor.get_status()
|
| 158 |
return status if status else {"status": "no-training"}
|
|
@@ -1092,7 +1092,7 @@ def start_training_advanced(
|
|
| 1092 |
dataset_args = ["--max_samples", dataset_size]
|
| 1093 |
|
| 1094 |
resnet_cmd = [
|
| 1095 |
-
"python", "train_resnet.py",
|
| 1096 |
"--data_root", DATASET_ROOT,
|
| 1097 |
"--epochs", str(resnet_epochs),
|
| 1098 |
"--batch_size", str(resnet_batch_size),
|
|
@@ -1137,7 +1137,7 @@ def start_training_advanced(
|
|
| 1137 |
log_message += f"Optimizer: {vit_optimizer}, Triplet Margin: {vit_triplet_margin}\n"
|
| 1138 |
|
| 1139 |
vit_cmd = [
|
| 1140 |
-
"python", "
|
| 1141 |
"--data_root", DATASET_ROOT,
|
| 1142 |
"--epochs", str(vit_epochs),
|
| 1143 |
"--batch_size", str(vit_batch_size),
|
|
@@ -1225,7 +1225,7 @@ def start_training_simple(dataset_size: str, res_epochs: int, vit_epochs: int):
|
|
| 1225 |
# Train ResNet first and wait for completion
|
| 1226 |
log_message += f"\nπ Starting ResNet training on {dataset_size} samples...\n"
|
| 1227 |
resnet_result = subprocess.run([
|
| 1228 |
-
"python", "train_resnet.py", "--data_root", DATASET_ROOT, "--epochs", str(res_epochs),
|
| 1229 |
"--batch_size", "4", "--lr", "1e-3", "--early_stopping_patience", "3",
|
| 1230 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 1231 |
] + dataset_args, capture_output=True, text=True, check=False)
|
|
@@ -1252,7 +1252,7 @@ def start_training_simple(dataset_size: str, res_epochs: int, vit_epochs: int):
|
|
| 1252 |
|
| 1253 |
log_message += f"\nπ Starting ViT training on {dataset_size} samples...\n"
|
| 1254 |
vit_result = subprocess.run([
|
| 1255 |
-
"python", "
|
| 1256 |
"--batch_size", "4", "--lr", "5e-4", "--early_stopping_patience", "5",
|
| 1257 |
"--max_samples", "5000", "--triplet_margin", "0.5", "--gradient_clip", "1.0",
|
| 1258 |
"--warmup_epochs", "2", "--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
|
|
|
| 152 |
def get_training_status():
|
| 153 |
"""Get current training status from the monitor."""
|
| 154 |
try:
|
| 155 |
+
from ui.monitor import create_monitor
|
| 156 |
monitor = create_monitor()
|
| 157 |
status = monitor.get_status()
|
| 158 |
return status if status else {"status": "no-training"}
|
|
|
|
| 1092 |
dataset_args = ["--max_samples", dataset_size]
|
| 1093 |
|
| 1094 |
resnet_cmd = [
|
| 1095 |
+
"python", "training/train_resnet.py",
|
| 1096 |
"--data_root", DATASET_ROOT,
|
| 1097 |
"--epochs", str(resnet_epochs),
|
| 1098 |
"--batch_size", str(resnet_batch_size),
|
|
|
|
| 1137 |
log_message += f"Optimizer: {vit_optimizer}, Triplet Margin: {vit_triplet_margin}\n"
|
| 1138 |
|
| 1139 |
vit_cmd = [
|
| 1140 |
+
"python", "training/train_vit.py",
|
| 1141 |
"--data_root", DATASET_ROOT,
|
| 1142 |
"--epochs", str(vit_epochs),
|
| 1143 |
"--batch_size", str(vit_batch_size),
|
|
|
|
| 1225 |
# Train ResNet first and wait for completion
|
| 1226 |
log_message += f"\nπ Starting ResNet training on {dataset_size} samples...\n"
|
| 1227 |
resnet_result = subprocess.run([
|
| 1228 |
+
"python", "training/train_resnet.py", "--data_root", DATASET_ROOT, "--epochs", str(res_epochs),
|
| 1229 |
"--batch_size", "4", "--lr", "1e-3", "--early_stopping_patience", "3",
|
| 1230 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 1231 |
] + dataset_args, capture_output=True, text=True, check=False)
|
|
|
|
| 1252 |
|
| 1253 |
log_message += f"\nπ Starting ViT training on {dataset_size} samples...\n"
|
| 1254 |
vit_result = subprocess.run([
|
| 1255 |
+
"python", "training/train_vit.py", "--data_root", DATASET_ROOT, "--epochs", str(vit_epochs),
|
| 1256 |
"--batch_size", "4", "--lr", "5e-4", "--early_stopping_patience", "5",
|
| 1257 |
"--max_samples", "5000", "--triplet_margin", "0.5", "--gradient_clip", "1.0",
|
| 1258 |
"--warmup_epochs", "2", "--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
RECOMMENDATION_PIPELINE_EXPLAINED.md β docs/PIPELINE.md
RENAMED
|
File without changes
|
TRAINING_PARAMETERS.md β docs/TRAINING.md
RENAMED
|
File without changes
|
setup_hf.sh β scripts/setup_hf.sh
RENAMED
|
File without changes
|
startup_fix.py β scripts/startup_fix.py
RENAMED
|
File without changes
|
training/__init__.py
ADDED
|
File without changes
|
integrate_advanced_training.py β training/integrate.py
RENAMED
|
@@ -5,7 +5,13 @@ Shows how to add comprehensive parameter controls to the main Gradio app
|
|
| 5 |
"""
|
| 6 |
|
| 7 |
import gradio as gr
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
|
| 11 |
def create_enhanced_app():
|
|
|
|
| 5 |
"""
|
| 6 |
|
| 7 |
import gradio as gr
|
| 8 |
+
import sys
|
| 9 |
+
import os
|
| 10 |
+
|
| 11 |
+
# Add parent directory to path to find ui module
|
| 12 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 13 |
+
|
| 14 |
+
from ui.advanced_training import create_advanced_training_interface, start_advanced_training, start_simple_training
|
| 15 |
|
| 16 |
|
| 17 |
def create_enhanced_app():
|
test_training.py β training/test_training.py
RENAMED
|
@@ -8,38 +8,18 @@ import os
|
|
| 8 |
import sys
|
| 9 |
import torch
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
def test_imports():
|
| 12 |
"""Test if all required modules can be imported."""
|
| 13 |
print("π Testing imports...")
|
| 14 |
-
|
| 15 |
-
try:
|
| 16 |
-
from models.resnet_embedder import ResNetItemEmbedder
|
| 17 |
-
print("β
ResNet embedder imported successfully")
|
| 18 |
-
except Exception as e:
|
| 19 |
-
print(f"β Failed to import ResNet embedder: {e}")
|
| 20 |
-
return False
|
| 21 |
-
|
| 22 |
-
try:
|
| 23 |
-
from models.vit_outfit import OutfitCompatibilityModel
|
| 24 |
-
print("β
ViT outfit model imported successfully")
|
| 25 |
-
except Exception as e:
|
| 26 |
-
print(f"β Failed to import ViT outfit model: {e}")
|
| 27 |
-
return False
|
| 28 |
-
|
| 29 |
-
try:
|
| 30 |
-
from data.polyvore import PolyvoreTripletDataset
|
| 31 |
-
print("β
Polyvore dataset imported successfully")
|
| 32 |
-
except Exception as e:
|
| 33 |
-
print(f"β Failed to import Polyvore dataset: {e}")
|
| 34 |
-
return False
|
| 35 |
-
|
| 36 |
-
try:
|
| 37 |
-
from utils.transforms import build_train_transforms
|
| 38 |
-
print("β
Transforms imported successfully")
|
| 39 |
-
except Exception as e:
|
| 40 |
-
print(f"β Failed to import transforms: {e}")
|
| 41 |
-
return False
|
| 42 |
-
|
| 43 |
return True
|
| 44 |
|
| 45 |
def test_models():
|
|
|
|
| 8 |
import sys
|
| 9 |
import torch
|
| 10 |
|
| 11 |
+
# Add parent directory to path to find models, data, utils
|
| 12 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 13 |
+
|
| 14 |
+
from data.polyvore import PolyvoreTripletDataset
|
| 15 |
+
from models.resnet_embedder import ResNetItemEmbedder
|
| 16 |
+
from models.vit_outfit import OutfitCompatibilityModel
|
| 17 |
+
from utils.transforms import build_train_transforms
|
| 18 |
+
|
| 19 |
def test_imports():
|
| 20 |
"""Test if all required modules can be imported."""
|
| 21 |
print("π Testing imports...")
|
| 22 |
+
print("β
All modules imported successfully at top level")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
return True
|
| 24 |
|
| 25 |
def test_models():
|
train_resnet.py β training/train_resnet.py
RENAMED
|
@@ -9,7 +9,7 @@ import torch.optim as optim
|
|
| 9 |
from torch.utils.data import DataLoader
|
| 10 |
|
| 11 |
# Fix import paths
|
| 12 |
-
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
| 13 |
|
| 14 |
from data.polyvore import PolyvoreTripletDataset
|
| 15 |
from models.resnet_embedder import ResNetItemEmbedder
|
|
@@ -51,7 +51,7 @@ def main() -> None:
|
|
| 51 |
os.makedirs(splits_dir, exist_ok=True)
|
| 52 |
try:
|
| 53 |
# Try to import and run the prepare script
|
| 54 |
-
sys.path.append(os.path.join(os.path.dirname(__file__), "scripts"))
|
| 55 |
from prepare_polyvore import main as prepare_main
|
| 56 |
print("β
Successfully imported prepare_polyvore")
|
| 57 |
|
|
|
|
| 9 |
from torch.utils.data import DataLoader
|
| 10 |
|
| 11 |
# Fix import paths
|
| 12 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 13 |
|
| 14 |
from data.polyvore import PolyvoreTripletDataset
|
| 15 |
from models.resnet_embedder import ResNetItemEmbedder
|
|
|
|
| 51 |
os.makedirs(splits_dir, exist_ok=True)
|
| 52 |
try:
|
| 53 |
# Try to import and run the prepare script
|
| 54 |
+
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), "scripts"))
|
| 55 |
from prepare_polyvore import main as prepare_main
|
| 56 |
print("β
Successfully imported prepare_polyvore")
|
| 57 |
|
train_vit_triplet.py β training/train_vit.py
RENAMED
|
@@ -9,7 +9,7 @@ import torch.optim as optim
|
|
| 9 |
from torch.utils.data import DataLoader
|
| 10 |
|
| 11 |
# Fix import paths
|
| 12 |
-
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
| 13 |
|
| 14 |
from data.polyvore import PolyvoreOutfitTripletDataset
|
| 15 |
from models.vit_outfit import OutfitCompatibilityModel
|
|
@@ -70,7 +70,7 @@ def main() -> None:
|
|
| 70 |
os.makedirs(splits_dir, exist_ok=True)
|
| 71 |
try:
|
| 72 |
# Try to import and run the prepare script
|
| 73 |
-
sys.path.append(os.path.join(os.path.dirname(__file__), "scripts"))
|
| 74 |
from prepare_polyvore import main as prepare_main
|
| 75 |
print("β
Successfully imported prepare_polyvore")
|
| 76 |
|
|
|
|
| 9 |
from torch.utils.data import DataLoader
|
| 10 |
|
| 11 |
# Fix import paths
|
| 12 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 13 |
|
| 14 |
from data.polyvore import PolyvoreOutfitTripletDataset
|
| 15 |
from models.vit_outfit import OutfitCompatibilityModel
|
|
|
|
| 70 |
os.makedirs(splits_dir, exist_ok=True)
|
| 71 |
try:
|
| 72 |
# Try to import and run the prepare script
|
| 73 |
+
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), "scripts"))
|
| 74 |
from prepare_polyvore import main as prepare_main
|
| 75 |
print("β
Successfully imported prepare_polyvore")
|
| 76 |
|
ui/__init__.py
ADDED
|
File without changes
|
advanced_training_ui.py β ui/advanced_training.py
RENAMED
|
@@ -259,7 +259,7 @@ def start_advanced_training(
|
|
| 259 |
train_log.value += f"Optimizer: {resnet_optimizer}, Triplet Margin: {resnet_triplet_margin}\n"
|
| 260 |
|
| 261 |
resnet_cmd = [
|
| 262 |
-
"python", "train_resnet.py",
|
| 263 |
"--data_root", dataset_root,
|
| 264 |
"--epochs", str(resnet_epochs),
|
| 265 |
"--batch_size", str(resnet_batch_size),
|
|
@@ -288,7 +288,7 @@ def start_advanced_training(
|
|
| 288 |
train_log.value += f"Optimizer: {vit_optimizer}, Triplet Margin: {vit_triplet_margin}\n"
|
| 289 |
|
| 290 |
vit_cmd = [
|
| 291 |
-
"python", "
|
| 292 |
"--data_root", dataset_root,
|
| 293 |
"--epochs", str(vit_epochs),
|
| 294 |
"--batch_size", str(vit_batch_size),
|
|
@@ -333,12 +333,12 @@ def start_simple_training(res_epochs: int, vit_epochs: int, dataset_root: str =
|
|
| 333 |
os.makedirs(export_dir, exist_ok=True)
|
| 334 |
train_log.value = "Training ResNetβ¦\n"
|
| 335 |
subprocess.run([
|
| 336 |
-
"python", "train_resnet.py", "--data_root", dataset_root, "--epochs", str(res_epochs),
|
| 337 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 338 |
], check=False)
|
| 339 |
train_log.value += "\nTraining ViT (triplet)β¦\n"
|
| 340 |
subprocess.run([
|
| 341 |
-
"python", "
|
| 342 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 343 |
], check=False)
|
| 344 |
train_log.value += "\nDone. Artifacts in models/exports."
|
|
|
|
| 259 |
train_log.value += f"Optimizer: {resnet_optimizer}, Triplet Margin: {resnet_triplet_margin}\n"
|
| 260 |
|
| 261 |
resnet_cmd = [
|
| 262 |
+
"python", "training/train_resnet.py",
|
| 263 |
"--data_root", dataset_root,
|
| 264 |
"--epochs", str(resnet_epochs),
|
| 265 |
"--batch_size", str(resnet_batch_size),
|
|
|
|
| 288 |
train_log.value += f"Optimizer: {vit_optimizer}, Triplet Margin: {vit_triplet_margin}\n"
|
| 289 |
|
| 290 |
vit_cmd = [
|
| 291 |
+
"python", "training/train_vit.py",
|
| 292 |
"--data_root", dataset_root,
|
| 293 |
"--epochs", str(vit_epochs),
|
| 294 |
"--batch_size", str(vit_batch_size),
|
|
|
|
| 333 |
os.makedirs(export_dir, exist_ok=True)
|
| 334 |
train_log.value = "Training ResNetβ¦\n"
|
| 335 |
subprocess.run([
|
| 336 |
+
"python", "training/train_resnet.py", "--data_root", dataset_root, "--epochs", str(res_epochs),
|
| 337 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 338 |
], check=False)
|
| 339 |
train_log.value += "\nTraining ViT (triplet)β¦\n"
|
| 340 |
subprocess.run([
|
| 341 |
+
"python", "training/train_vit.py", "--data_root", dataset_root, "--epochs", str(vit_epochs),
|
| 342 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 343 |
], check=False)
|
| 344 |
train_log.value += "\nDone. Artifacts in models/exports."
|
artifact_management_ui.py β ui/artifact_management.py
RENAMED
|
@@ -6,8 +6,13 @@ Provides download, upload, and organization features for all system artifacts.
|
|
| 6 |
|
| 7 |
import os
|
| 8 |
import json
|
|
|
|
| 9 |
import gradio as gr
|
| 10 |
from typing import Dict, List, Any
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
from utils.artifact_manager import create_artifact_manager
|
| 12 |
|
| 13 |
def create_artifact_management_interface():
|
|
|
|
| 6 |
|
| 7 |
import os
|
| 8 |
import json
|
| 9 |
+
import sys
|
| 10 |
import gradio as gr
|
| 11 |
from typing import Dict, List, Any
|
| 12 |
+
|
| 13 |
+
# Add parent directory to path to find utils
|
| 14 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 15 |
+
|
| 16 |
from utils.artifact_manager import create_artifact_manager
|
| 17 |
|
| 18 |
def create_artifact_management_interface():
|
training_monitor.py β ui/monitor.py
RENAMED
|
File without changes
|