Spaces:
Paused
Paused
Ali Mohsin
commited on
Commit
Β·
283a139
1
Parent(s):
78db21d
final fixes
Browse files
app.py
CHANGED
|
@@ -256,8 +256,8 @@ def _background_bootstrap():
|
|
| 256 |
import sys
|
| 257 |
argv_bak = sys.argv
|
| 258 |
try:
|
| 259 |
-
# Use official splits from nondisjoint/ and disjoint/ folders with default size limit (
|
| 260 |
-
sys.argv = ["prepare_polyvore.py", "--root", ds_root, "--max_samples", "
|
| 261 |
prepare_main()
|
| 262 |
finally:
|
| 263 |
sys.argv = argv_bak
|
|
@@ -271,15 +271,15 @@ def _background_bootstrap():
|
|
| 271 |
if not os.path.exists(resnet_ckpt):
|
| 272 |
BOOT_STATUS = "training-resnet"
|
| 273 |
subprocess.run([
|
| 274 |
-
"python", "train_resnet.py", "--data_root", ds_root, "--epochs", "
|
| 275 |
-
"--batch_size", "
|
| 276 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 277 |
], check=False)
|
| 278 |
if not os.path.exists(vit_ckpt):
|
| 279 |
BOOT_STATUS = "training-vit"
|
| 280 |
subprocess.run([
|
| 281 |
-
"python", "train_vit_triplet.py", "--data_root", ds_root, "--epochs", "
|
| 282 |
-
"--batch_size", "
|
| 283 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 284 |
], check=False)
|
| 285 |
service.reload_models()
|
|
@@ -681,8 +681,8 @@ def start_training_simple(dataset_size: str, res_epochs: int, vit_epochs: int):
|
|
| 681 |
# Train ResNet first and wait for completion
|
| 682 |
log_message += f"\nπ Starting ResNet training on {dataset_size} samples...\n"
|
| 683 |
resnet_result = subprocess.run([
|
| 684 |
-
"python", "train_resnet.py", "--data_root", DATASET_ROOT, "--epochs",
|
| 685 |
-
"--batch_size", "
|
| 686 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 687 |
] + dataset_args, capture_output=True, text=True, check=False)
|
| 688 |
|
|
@@ -708,8 +708,8 @@ def start_training_simple(dataset_size: str, res_epochs: int, vit_epochs: int):
|
|
| 708 |
|
| 709 |
log_message += f"\nπ Starting ViT training on {dataset_size} samples...\n"
|
| 710 |
vit_result = subprocess.run([
|
| 711 |
-
"python", "train_vit_triplet.py", "--data_root", DATASET_ROOT, "--epochs",
|
| 712 |
-
"--batch_size", "
|
| 713 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 714 |
] + dataset_args, capture_output=True, text=True, check=False)
|
| 715 |
|
|
@@ -785,12 +785,12 @@ with gr.Blocks(fill_height=True, title="Dressify - Advanced Outfit Recommendatio
|
|
| 785 |
|
| 786 |
with gr.Row():
|
| 787 |
gr.Markdown("#### π **Current Behavior**")
|
| 788 |
-
gr.Markdown("β’ **Bootstrap**: Downloads full dataset (53K outfits) + generates splits with **
|
| 789 |
|
| 790 |
with gr.Row():
|
| 791 |
global_dataset_size = gr.Dropdown(
|
| 792 |
-
choices=["160", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 793 |
-
value="
|
| 794 |
label="Global Dataset Size (Affects Prep + Training)"
|
| 795 |
)
|
| 796 |
gr.Markdown("**160**: Ultra-fast testing (~30 sec prep, ~1-2 min training)\n**2000**: Fast testing (~1-2 min prep, ~2-5 min training)\n**5000**: Fast testing (~2-3 min prep, ~5-10 min training)\n**10000**: Good testing (~3-5 min prep, ~10-20 min training)\n**full**: Production (~5-10 min prep, ~1-4 hours training)")
|
|
@@ -798,11 +798,11 @@ with gr.Blocks(fill_height=True, title="Dressify - Advanced Outfit Recommendatio
|
|
| 798 |
with gr.Row():
|
| 799 |
# Apply dataset size button
|
| 800 |
apply_size_btn = gr.Button("π Apply Dataset Size & Regenerate Splits", variant="primary")
|
| 801 |
-
size_status = gr.Textbox(label="Dataset Size Status", value="Dataset size:
|
| 802 |
|
| 803 |
# Current dataset info
|
| 804 |
gr.Markdown("#### π **Current Dataset Status**")
|
| 805 |
-
gr.Markdown("β’ **Full dataset downloaded**: 53,306 outfits (required for system)\nβ’ **Splits generated**: **
|
| 806 |
|
| 807 |
def apply_dataset_size(size: str):
|
| 808 |
"""Apply global dataset size and regenerate splits."""
|
|
@@ -855,8 +855,8 @@ with gr.Blocks(fill_height=True, title="Dressify - Advanced Outfit Recommendatio
|
|
| 855 |
gr.Markdown("#### π Dataset Size Control")
|
| 856 |
gr.Markdown("Start small for testing, increase for production training")
|
| 857 |
dataset_size = gr.Dropdown(
|
| 858 |
-
choices=["160", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 859 |
-
value="
|
| 860 |
label="Training Dataset Size"
|
| 861 |
)
|
| 862 |
gr.Markdown("**2000**: Quick testing (~2-5 min)\n**5000**: Fast validation (~5-10 min)\n**10000**: Good validation (~10-20 min)\n**25000+**: Production training")
|
|
@@ -944,8 +944,8 @@ with gr.Blocks(fill_height=True, title="Dressify - Advanced Outfit Recommendatio
|
|
| 944 |
|
| 945 |
# Quick training
|
| 946 |
gr.Markdown("**Quick Training (Basic Parameters)**")
|
| 947 |
-
epochs_res = gr.Slider(1, 50, value=
|
| 948 |
-
epochs_vit = gr.Slider(1, 100, value=
|
| 949 |
start_btn = gr.Button("π Start Quick Training", variant="secondary")
|
| 950 |
|
| 951 |
# Advanced training
|
|
@@ -1048,16 +1048,16 @@ with gr.Blocks(fill_height=True, title="Dressify - Advanced Outfit Recommendatio
|
|
| 1048 |
gr.Markdown("#### π Dataset Size Control")
|
| 1049 |
gr.Markdown("Start small for testing, increase for production training")
|
| 1050 |
dataset_size = gr.Dropdown(
|
| 1051 |
-
choices=["160", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 1052 |
-
value="
|
| 1053 |
label="Training Dataset Size"
|
| 1054 |
)
|
| 1055 |
gr.Markdown("**2000**: Quick testing (~2-5 min)\n**5000**: Fast validation (~5-10 min)\n**10000**: Good validation (~10-20 min)\n**25000+**: Production training")
|
| 1056 |
|
| 1057 |
with gr.Column(scale=1):
|
| 1058 |
gr.Markdown("#### βοΈ Training Parameters")
|
| 1059 |
-
epochs_res = gr.Slider(1, 50, value=
|
| 1060 |
-
epochs_vit = gr.Slider(1, 100, value=
|
| 1061 |
|
| 1062 |
train_log = gr.Textbox(label="Training Log", lines=10)
|
| 1063 |
start_btn = gr.Button("Start Training")
|
|
|
|
| 256 |
import sys
|
| 257 |
argv_bak = sys.argv
|
| 258 |
try:
|
| 259 |
+
# Use official splits from nondisjoint/ and disjoint/ folders with default size limit (500 samples for faster training)
|
| 260 |
+
sys.argv = ["prepare_polyvore.py", "--root", ds_root, "--max_samples", "500"]
|
| 261 |
prepare_main()
|
| 262 |
finally:
|
| 263 |
sys.argv = argv_bak
|
|
|
|
| 271 |
if not os.path.exists(resnet_ckpt):
|
| 272 |
BOOT_STATUS = "training-resnet"
|
| 273 |
subprocess.run([
|
| 274 |
+
"python", "train_resnet.py", "--data_root", ds_root, "--epochs", "3",
|
| 275 |
+
"--batch_size", "8", "--lr", "1e-3", "--early_stopping_patience", "3",
|
| 276 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 277 |
], check=False)
|
| 278 |
if not os.path.exists(vit_ckpt):
|
| 279 |
BOOT_STATUS = "training-vit"
|
| 280 |
subprocess.run([
|
| 281 |
+
"python", "train_vit_triplet.py", "--data_root", ds_root, "--epochs", "3",
|
| 282 |
+
"--batch_size", "8", "--lr", "5e-4", "--early_stopping_patience", "3",
|
| 283 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 284 |
], check=False)
|
| 285 |
service.reload_models()
|
|
|
|
| 681 |
# Train ResNet first and wait for completion
|
| 682 |
log_message += f"\nπ Starting ResNet training on {dataset_size} samples...\n"
|
| 683 |
resnet_result = subprocess.run([
|
| 684 |
+
"python", "train_resnet.py", "--data_root", DATASET_ROOT, "--epochs", str(res_epochs),
|
| 685 |
+
"--batch_size", "8", "--lr", "1e-3", "--early_stopping_patience", "3",
|
| 686 |
"--out", os.path.join(export_dir, "resnet_item_embedder.pth")
|
| 687 |
] + dataset_args, capture_output=True, text=True, check=False)
|
| 688 |
|
|
|
|
| 708 |
|
| 709 |
log_message += f"\nπ Starting ViT training on {dataset_size} samples...\n"
|
| 710 |
vit_result = subprocess.run([
|
| 711 |
+
"python", "train_vit_triplet.py", "--data_root", DATASET_ROOT, "--epochs", str(vit_epochs),
|
| 712 |
+
"--batch_size", "8", "--lr", "5e-4", "--early_stopping_patience", "3",
|
| 713 |
"--export", os.path.join(export_dir, "vit_outfit_model.pth")
|
| 714 |
] + dataset_args, capture_output=True, text=True, check=False)
|
| 715 |
|
|
|
|
| 785 |
|
| 786 |
with gr.Row():
|
| 787 |
gr.Markdown("#### π **Current Behavior**")
|
| 788 |
+
gr.Markdown("β’ **Bootstrap**: Downloads full dataset (53K outfits) + generates splits with **500 samples by default**\nβ’ **Training**: Uses 500 samples (ultra-fast training!)\nβ’ **Apply Button**: Regenerates splits with your selected size limit")
|
| 789 |
|
| 790 |
with gr.Row():
|
| 791 |
global_dataset_size = gr.Dropdown(
|
| 792 |
+
choices=["160", "500", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 793 |
+
value="500",
|
| 794 |
label="Global Dataset Size (Affects Prep + Training)"
|
| 795 |
)
|
| 796 |
gr.Markdown("**160**: Ultra-fast testing (~30 sec prep, ~1-2 min training)\n**2000**: Fast testing (~1-2 min prep, ~2-5 min training)\n**5000**: Fast testing (~2-3 min prep, ~5-10 min training)\n**10000**: Good testing (~3-5 min prep, ~10-20 min training)\n**full**: Production (~5-10 min prep, ~1-4 hours training)")
|
|
|
|
| 798 |
with gr.Row():
|
| 799 |
# Apply dataset size button
|
| 800 |
apply_size_btn = gr.Button("π Apply Dataset Size & Regenerate Splits", variant="primary")
|
| 801 |
+
size_status = gr.Textbox(label="Dataset Size Status", value="Dataset size: 500 samples (click Apply to regenerate splits)", interactive=False)
|
| 802 |
|
| 803 |
# Current dataset info
|
| 804 |
gr.Markdown("#### π **Current Dataset Status**")
|
| 805 |
+
gr.Markdown("β’ **Full dataset downloaded**: 53,306 outfits (required for system)\nβ’ **Splits generated**: **500 samples by default** (ultra-fast training!)\nβ’ **Training will use**: 500 samples (ultra-fast training!)\nβ’ **Scale up**: Use Apply button to increase to larger sizes")
|
| 806 |
|
| 807 |
def apply_dataset_size(size: str):
|
| 808 |
"""Apply global dataset size and regenerate splits."""
|
|
|
|
| 855 |
gr.Markdown("#### π Dataset Size Control")
|
| 856 |
gr.Markdown("Start small for testing, increase for production training")
|
| 857 |
dataset_size = gr.Dropdown(
|
| 858 |
+
choices=["160", "500", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 859 |
+
value="500",
|
| 860 |
label="Training Dataset Size"
|
| 861 |
)
|
| 862 |
gr.Markdown("**2000**: Quick testing (~2-5 min)\n**5000**: Fast validation (~5-10 min)\n**10000**: Good validation (~10-20 min)\n**25000+**: Production training")
|
|
|
|
| 944 |
|
| 945 |
# Quick training
|
| 946 |
gr.Markdown("**Quick Training (Basic Parameters)**")
|
| 947 |
+
epochs_res = gr.Slider(1, 50, value=3, step=1, label="ResNet epochs")
|
| 948 |
+
epochs_vit = gr.Slider(1, 100, value=3, step=1, label="ViT epochs")
|
| 949 |
start_btn = gr.Button("π Start Quick Training", variant="secondary")
|
| 950 |
|
| 951 |
# Advanced training
|
|
|
|
| 1048 |
gr.Markdown("#### π Dataset Size Control")
|
| 1049 |
gr.Markdown("Start small for testing, increase for production training")
|
| 1050 |
dataset_size = gr.Dropdown(
|
| 1051 |
+
choices=["160", "500", "2000", "5000", "10000", "25000", "50000", "full"],
|
| 1052 |
+
value="500",
|
| 1053 |
label="Training Dataset Size"
|
| 1054 |
)
|
| 1055 |
gr.Markdown("**2000**: Quick testing (~2-5 min)\n**5000**: Fast validation (~5-10 min)\n**10000**: Good validation (~10-20 min)\n**25000+**: Production training")
|
| 1056 |
|
| 1057 |
with gr.Column(scale=1):
|
| 1058 |
gr.Markdown("#### βοΈ Training Parameters")
|
| 1059 |
+
epochs_res = gr.Slider(1, 50, value=3, step=1, label="ResNet epochs")
|
| 1060 |
+
epochs_vit = gr.Slider(1, 100, value=3, step=1, label="ViT epochs")
|
| 1061 |
|
| 1062 |
train_log = gr.Textbox(label="Training Log", lines=10)
|
| 1063 |
start_btn = gr.Button("Start Training")
|