Ali Mohsin commited on
Commit
283a139
Β·
1 Parent(s): 78db21d

final fixes

Browse files
Files changed (1) hide show
  1. app.py +23 -23
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 (2000 samples for better early stopping)
260
- sys.argv = ["prepare_polyvore.py", "--root", ds_root, "--max_samples", "2000"]
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", "50",
275
- "--batch_size", "16", "--lr", "1e-3", "--early_stopping_patience", "10",
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", "50",
282
- "--batch_size", "16", "--lr", "5e-4", "--early_stopping_patience", "10",
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", "50",
685
- "--batch_size", "16", "--lr", "1e-3", "--early_stopping_patience", "10",
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", "50",
712
- "--batch_size", "16", "--lr", "5e-4", "--early_stopping_patience", "10",
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 **2000 samples by default**\nβ€’ **Training**: Uses 2000 samples (good for early stopping demonstration!)\nβ€’ **Apply Button**: Regenerates splits with your selected size limit")
789
 
790
  with gr.Row():
791
  global_dataset_size = gr.Dropdown(
792
- choices=["160", "2000", "5000", "10000", "25000", "50000", "full"],
793
- value="2000",
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: 2000 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**: **2000 samples by default** (good for early stopping!)\nβ€’ **Training will use**: 2000 samples (good for early stopping demonstration!)\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,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="2000",
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=10, step=1, label="ResNet epochs")
948
- epochs_vit = gr.Slider(1, 100, value=20, step=1, label="ViT epochs")
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="2000",
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=10, step=1, label="ResNet epochs")
1060
- epochs_vit = gr.Slider(1, 100, value=20, step=1, label="ViT epochs")
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")