FVD (Fréchet Video Distance) Benchmark
Evaluate generated video quality using FVD with the I3D feature extractor.
Quick Start
Run the benchmark:
bash benchmarks/scripts/run.sh
That's it! The script auto-installs dependencies and runs the benchmark.
To customize: Edit benchmarks/fvd/run_fvd.py to change:
- Video paths (
real_dir,gen_dir) - Number of videos, frames, sampling strategy
- Device, batch size, caching, etc.
Advanced Usage (CLI)
For more control without editing Python files, use the CLI.
First-time setup (one-time per pod/environment):
bash benchmarks/scripts/setup_fvd.sh
Then run any configuration you want:
# Custom configuration
python -m benchmarks.fvd.cli \
--real-path data/real/ \
--gen-path outputs/gen/ \
--num-videos 1024 \
--num-frames 32 \
--clip-strategy random \
--batch-size 32 \
--seed 42 \
--extractor clip
Standard protocols:
# Use predefined protocols
python -m benchmarks.fvd.cli \
--real-path data/real/ \
--gen-path outputs/gen/ \
--protocol fvd2048_16f # or fvd2048_128f, quick_test, etc.
This would use i3d model by default as the feature extractor
Feature caching (speed up repeated evaluations):
python -m benchmarks.fvd.cli \
--real-path data/real/ \
--gen-path outputs/gen/ \
--protocol fvd2048_16f \
--cache-real-features fvd-cache/extractor_name # Directory path (will save/load fvd-cache/extractor_name/extractor-name_real_features.pkl)
Run python -m benchmarks.fvd.cli --help for all options.
Available Protocols
fvd2048_16f- Standard (2048 videos, 16 frames)fvd2048_128f- Long videos (128 frames)fvd2048_128f_subsample8- Subsampled long videosquick_test- Fast testing (10 videos)
Configuration Options
Key options in FVDConfig:
num_videos=2048, # Videos to evaluate
num_frames_per_clip=16, # Frames per clip
clip_strategy='beginning', # beginning|random|uniform|middle|sliding
frame_stride=1, # Frame subsampling
batch_size=32, # GPU batch size
device='cuda', # cuda|cpu
cache_real_features=None, # Cache path for speed
seed=42, # Reproducibility
extractor='i3d', # i3d|clip|videomae
Programmatic Usage
from benchmarks.fvd import compute_fvd_with_config, FVDConfig
config = FVDConfig.fvd2048_16f() # or custom config
results = compute_fvd_with_config('data/real/', 'outputs/gen/', config)
print(f"FVD: {results['fvd']:.2f}")
Notes
- Requires minimum 10 frames per clip
- Supports both video files (.mp4, .avi, etc.) and frame directories
--cache-real-featuresexpects a directory path (e.g.,cache/real), it will automatically create/loadreal_features.pklinside that directory