vintage-gan / verify_installation.py
msrishav's picture
Upload academic VintageGAN project
059f915 verified
Raw
History Blame Contribute Delete
8.37 kB
#!/usr/bin/env python
"""
VintageGAN Installation Verification Script
Verifies that all components are correctly installed and integrated.
Usage:
python verify_installation.py
Author: VintageGAN Project
Date: 2024
"""
import sys
import importlib
from pathlib import Path
from typing import List, Tuple
def check_python_version() -> bool:
"""Check Python version >= 3.9"""
version = sys.version_info
if version.major == 3 and version.minor >= 9:
print(f"✅ Python version: {version.major}.{version.minor}.{version.micro}")
return True
else:
print(f"❌ Python version: {version.major}.{version.minor}.{version.micro} (requires >= 3.9)")
return False
def check_dependencies() -> Tuple[List[str], List[str]]:
"""Check required dependencies."""
print("\n" + "="*60)
print("Checking Dependencies")
print("="*60)
required = [
'torch',
'torchvision',
'numpy',
'opencv-python',
'PIL',
'yaml',
'tqdm',
]
installed = []
missing = []
for pkg in required:
# Handle package name variations
import_name = pkg
if pkg == 'opencv-python':
import_name = 'cv2'
elif pkg == 'PIL':
import_name = 'PIL'
elif pkg == 'yaml':
import_name = 'yaml'
try:
mod = importlib.import_module(import_name)
version = getattr(mod, '__version__', 'unknown')
print(f"✅ {pkg:20s} (version: {version})")
installed.append(pkg)
except ImportError:
print(f"❌ {pkg:20s} (NOT INSTALLED)")
missing.append(pkg)
return installed, missing
def check_project_structure() -> bool:
"""Check project directory structure."""
print("\n" + "="*60)
print("Checking Project Structure")
print("="*60)
project_root = Path(__file__).parent
required_dirs = [
'models',
'training',
'defects',
'evaluation',
'inference',
'tests',
'configs',
'notebooks',
]
all_exist = True
for dirname in required_dirs:
dirpath = project_root / dirname
if dirpath.exists():
print(f"✅ {dirname:20s} directory exists")
else:
print(f"❌ {dirname:20s} directory MISSING")
all_exist = False
return all_exist
def check_module_imports() -> bool:
"""Check that all modules can be imported."""
print("\n" + "="*60)
print("Checking Module Imports")
print("="*60)
modules_to_test = [
('models', ['Generator', 'Discriminator', 'SelfAttention', 'DefectDetector']),
('defects', ['apply_vintage_defects', 'generate_film_grain', 'generate_scratches']),
('training', ['VintageGANLoss', 'VGGPerceptualLoss', 'create_dataloaders']),
('evaluation', ['calculate_fid', 'calculate_ssim', 'calculate_psnr']),
('inference', ['VintageFilter']),
]
all_ok = True
for module_name, items in modules_to_test:
try:
module = importlib.import_module(module_name)
missing_items = []
for item in items:
if not hasattr(module, item):
missing_items.append(item)
if missing_items:
print(f"⚠️ {module_name:20s} - Missing: {', '.join(missing_items)}")
all_ok = False
else:
print(f"✅ {module_name:20s} - All items present")
except ImportError as e:
print(f"❌ {module_name:20s} - Import failed: {e}")
all_ok = False
return all_ok
def check_config_files() -> bool:
"""Check that configuration files exist."""
print("\n" + "="*60)
print("Checking Configuration Files")
print("="*60)
project_root = Path(__file__).parent
config_files = [
'configs/training_config.yaml',
'requirements.txt',
'README.md',
'LICENSE',
]
all_exist = True
for config_file in config_files:
filepath = project_root / config_file
if filepath.exists():
size = filepath.stat().st_size
print(f"✅ {config_file:35s} ({size:,} bytes)")
else:
print(f"❌ {config_file:35s} MISSING")
all_exist = False
return all_exist
def check_model_instantiation() -> bool:
"""Try to instantiate models."""
print("\n" + "="*60)
print("Checking Model Instantiation")
print("="*60)
try:
import torch
from models import Generator, Discriminator
# Generator
print("Testing Generator...")
gen = Generator()
test_img = torch.randn(1, 3, 512, 512)
test_cond = torch.rand(1, 6)
with torch.no_grad():
output = gen(test_img, test_cond)
if output.shape == test_img.shape:
print(f"✅ Generator instantiation OK (output shape: {output.shape})")
else:
print(f"❌ Generator output shape incorrect: {output.shape}")
return False
# Discriminator
print("Testing Discriminator...")
disc = Discriminator()
with torch.no_grad():
pred = disc(output, test_cond)
# Accept 31x31 or 32x32 depending on architecture
if pred.shape[0] == 1 and pred.shape[1] == 1 and pred.shape[2] in [31, 32]:
print(f"✅ Discriminator instantiation OK (output shape: {pred.shape})")
else:
print(f"❌ Discriminator output shape incorrect: {pred.shape}")
return False
return True
except Exception as e:
print(f"❌ Model instantiation failed: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Run all verification checks."""
print("="*60)
print("VINTAGEGAN INSTALLATION VERIFICATION")
print("="*60)
checks = []
# Check 1: Python version
checks.append(("Python Version", check_python_version()))
# Check 2: Dependencies
installed, missing = check_dependencies()
checks.append(("Dependencies", len(missing) == 0))
# Check 3: Project structure
checks.append(("Project Structure", check_project_structure()))
# Check 4: Config files
checks.append(("Config Files", check_config_files()))
# Check 5: Module imports (only if PyTorch installed)
if 'torch' in installed:
checks.append(("Module Imports", check_module_imports()))
checks.append(("Model Instantiation", check_model_instantiation()))
else:
print("\n⚠️ Skipping module and model tests (PyTorch not installed)")
# Summary
print("\n" + "="*60)
print("VERIFICATION SUMMARY")
print("="*60)
passed = sum(1 for _, result in checks if result)
total = len(checks)
for check_name, result in checks:
status = "✅ PASS" if result else "❌ FAIL"
print(f"{check_name:30s} {status}")
print(f"\nResult: {passed}/{total} checks passed")
if passed == total:
print("\n🎉 ALL CHECKS PASSED!")
print("\n✅ VintageGAN is correctly installed and integrated.")
print("\nNext steps:")
print(" 1. Download ImageNet dataset (10k images)")
print(" 2. Run: python training/pretrain.py")
print(" 3. Run: python training/gan_train.py --generator-checkpoint checkpoints/generator_pretrain_best.pth")
return 0
else:
print(f"\n⚠️ {total - passed} check(s) failed.")
print("\nTo fix:")
if 'torch' not in installed:
print(" • Install PyTorch: pip install torch torchvision")
if missing:
print(f" • Install missing packages: pip install {' '.join(missing)}")
return 1
if __name__ == "__main__":
sys.exit(main())