Skip to content

Latest commit

 

History

History
341 lines (255 loc) · 6.47 KB

File metadata and controls

341 lines (255 loc) · 6.47 KB

Training Commands

This file is the command checklist for getting data, verifying it, training the baseline, running multi-attribute comparisons, and reading results.

Run all commands from the repo root:

cd /home/carl/sujosh/APPR-PHOTOS

1. Environment

If your environment already exists, activate it:

conda activate appr-photos

Choose one create command below if the environment does not exist yet.

If you need to create a CUDA-enabled environment:

bash scripts/setup_env.sh appr-photos 3.10 cuda:cu128
conda activate appr-photos

If you need a portable CPU environment:

bash scripts/setup_env.sh appr-photos 3.10 cpu
conda activate appr-photos

Check that PyTorch sees the selected runtime:

python - <<'PY'
import torch
from aapr.utils.device import get_device

print("torch:", torch.__version__)
print("cuda_available:", torch.cuda.is_available())
print("selected_device:", get_device("auto"))
PY

2. Download Dataset

CelebA is the prepared dataset path for this repo.

bash scripts/download_data.sh celeba data/raw/celeba

This creates:

data/raw/celeba/
  metadata.csv
  celeba/
    img_align_celeba/
      000001.jpg
      ...

The default prepared metadata uses:

utility: smiling / not_smiling
privacy: speaker_id, gender

3. Verify Dataset

Run this before training:

python scripts/prepare_datasets.py --verify --stats --root data/raw/celeba

Expected successful shape:

status: OK
num_images: 202599
has_metadata_csv: True
Photos: 202599 samples | 10177 speakers
Class names: ['not_smiling', 'smiling']

4. Quick Smoke Tests

Smoke test the original single-utility training path:

python scripts/train.py \
  --config configs/experiment/celeba_baseline.yaml \
  training.num_epochs=1 \
  dataset.batch_size=16 \
  dataset.num_workers=0 \
  output.dir=outputs/smoke_baseline \
  output.checkpoint_dir=outputs/smoke_baseline/checkpoints \
  output.log_dir=outputs/smoke_baseline/logs \
  output.tensorboard_dir=outputs/smoke_baseline/tensorboard

Smoke test the multi-utility, multi-privacy comparison path:

python scripts/run_celeba_attribute_comparison.py \
  --mode multi \
  --epochs 1 \
  --batch-size 16 \
  --num-workers 0 \
  --limit-samples 512 \
  --output-root outputs/smoke_attribute_comparison

Do not use --limit-samples for final results.

5. Main Baseline Training

Run the baseline smiling utility task:

python scripts/train.py --config configs/experiment/celeba_baseline.yaml

Run the larger-batch baseline:

python scripts/train.py \
  --config configs/experiment/celeba_accelerated.yaml \
  dataset.batch_size=128 \
  dataset.num_workers=8

If memory is tight, reduce batch size:

python scripts/train.py \
  --config configs/experiment/celeba_accelerated.yaml \
  dataset.batch_size=64 \
  dataset.num_workers=4

6. Main Multi-Attribute Comparison

This is the main command for the current expanded work. It trains separate single-utility runs and one combined multi-utility run.

python scripts/run_celeba_attribute_comparison.py \
  --mode both \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8

The default comparison uses:

utilities:
  Smiling
  Mouth_Slightly_Open
  Eyeglasses
  Wearing_Hat
  Blurry

privacy heads:
  speaker_id
  gender
  young

If the full run is too large, use:

python scripts/run_celeba_attribute_comparison.py \
  --mode both \
  --epochs 10 \
  --batch-size 64 \
  --num-workers 4

7. Custom Comparison Sets

Run only the combined multi-utility model:

python scripts/run_celeba_attribute_comparison.py \
  --mode multi \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8

Run only separate utility experiments:

python scripts/run_celeba_attribute_comparison.py \
  --mode single \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8

Choose a custom set of utility labels:

python scripts/run_celeba_attribute_comparison.py \
  --mode both \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8 \
  --utilities Smiling Eyeglasses Wearing_Hat Mouth_Slightly_Open Blurry \
  --privacy speaker_id gender young

Print planned commands without training:

python scripts/run_celeba_attribute_comparison.py --dry-run --mode both

Prepare generated metadata only:

python scripts/run_celeba_attribute_comparison.py --prepare-only --mode both

8. Run In Background

For a longer run:

mkdir -p outputs/logs
nohup python scripts/run_celeba_attribute_comparison.py \
  --mode both \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8 \
  > outputs/logs/attribute_comparison.out 2>&1 &
echo $!

Watch progress:

tail -f outputs/logs/attribute_comparison.out

9. Evaluate Individual Checkpoints

Evaluate the baseline checkpoint:

python scripts/evaluate.py \
  --checkpoint outputs/celeba_baseline/checkpoints/best_model.pt

Evaluate the combined multi-utility checkpoint:

python scripts/evaluate.py \
  --checkpoint outputs/celeba_attribute_comparison/multi_utility/checkpoints/best_model.pt

10. Read Results

Main comparison files:

outputs/celeba_attribute_comparison/comparison_manifest.json
outputs/celeba_attribute_comparison/comparison_results.json
outputs/celeba_attribute_comparison/comparison_results.csv

Print a compact table:

python - <<'PY'
import pandas as pd

path = "outputs/celeba_attribute_comparison/comparison_results.csv"
df = pd.read_csv(path)
cols = [
    "run",
    "best_epoch",
    "test_utility_uar",
    "test_utility_wa",
    "test_utility_f1",
    "test_privacy_gender_uar",
    "test_privacy_young_uar",
    "test_privacy_speaker_id_acc",
    "test_mi_speaker",
]
print(df[[c for c in cols if c in df.columns]].to_string(index=False))
PY

Inspect one run:

tail -n 80 outputs/celeba_attribute_comparison/multi_utility/train.log
cat outputs/celeba_attribute_comparison/multi_utility/test_results.json

11. TensorBoard

For all comparison runs:

tensorboard --logdir outputs/celeba_attribute_comparison

For the baseline:

tensorboard --logdir outputs/celeba_baseline/tensorboard

12. Recommended Final Result Command

Use this for the main report table:

python scripts/run_celeba_attribute_comparison.py \
  --mode both \
  --epochs 10 \
  --batch-size 128 \
  --num-workers 8

Then report from:

outputs/celeba_attribute_comparison/comparison_results.csv