Skip to content

A lightweight library for Frechet Audio Distance calculation.

License

Notifications You must be signed in to change notification settings

synth-is/kromosynth-frechet-audio-distance

 
 

Repository files navigation

A fork from https://github.com/gudgud96/frechet-audio-distance with the main difference of adding the function score_eval_embeddings, which instead of accepting two file system paths, for background and evaluation audio files (or pre-computed embeddings) like score does, it accepts the evaluaton embeddings as an incmoing parameter, while looking up pre-computed background embeddings from a file path.

Also there is a extract_and_save_embeddings function, for pre-computing embeddings from audio files in a directory, used by the CLI in compute_and_save_embeddings_from_dir.py; example usage of the CLI can be found in compute_and_save_embeddings.sh.

Frechet Audio Distance in PyTorch

A lightweight library of Frechet Audio Distance calculation.

Currently, we support embedding from:

Installation

pip install frechet_audio_distance

Demo

from frechet_audio_distance import FrechetAudioDistance

# to use `vggish`
frechet = FrechetAudioDistance(
    model_name="vggish",
    sample_rate=16000,
    use_pca=False, 
    use_activation=False,
    verbose=False
)
# to use `PANN`
frechet = FrechetAudioDistance(
    model_name="pann",
    sample_rate=16000,
    use_pca=False, 
    use_activation=False,
    verbose=False
)
# to use `CLAP`
frechet = FrechetAudioDistance(
    model_name="clap",
    sample_rate=48000,
    submodel_name="630k-audioset",  # for CLAP only
    verbose=False,
    enable_fusion=False,            # for CLAP only
)
fad_score = frechet.score("/path/to/background/set", "/path/to/eval/set", dtype="float32")

You can also have a look at this notebook for a better understanding of how each model is used.

Save pre-computed embeddings

When computing the Frechet Audio Distance, you can choose to save the embeddings for future use.

This capability not only ensures consistency across evaluations but can also significantly reduce computation time, especially if you're evaluating multiple times using the same dataset.

# Specify the paths to your saved embeddings
background_embds_path = "/path/to/saved/background/embeddings.npy"
eval_embds_path = "/path/to/saved/eval/embeddings.npy"

# Compute FAD score while reusing the saved embeddings (or saving new ones if paths are provided and embeddings don't exist yet)
fad_score = frechet.score(
    "/path/to/background/set",
    "/path/to/eval/set",
    background_embds_path=background_embds_path,
    eval_embds_path=eval_embds_path,
    dtype="float32"
)

Result validation

Test 1: Distorted sine waves on vggish (as provided here) [notes]

FAD scores comparison w.r.t. to original implementation in google-research/frechet-audio-distance

baseline vs test1 baseline vs test2
google-research 12.4375 4.7680
frechet_audio_distance 12.7398 4.9815

Test 2: Distorted sine waves on PANN

baseline vs test1 baseline vs test2
frechet_audio_distance 0.000465 0.00008594

To contribute

Contributions are welcomed! Kindly raise a PR and ensure that all CI checks are passed.

NOTE: For now, the CI only checks for vggish as PANN takes a long time to download.

References

VGGish in PyTorch: https://github.com/harritaylor/torchvggish

Frechet distance implementation: https://github.com/mseitzer/pytorch-fid

Frechet Audio Distance paper: https://arxiv.org/abs/1812.08466

PANN paper: https://arxiv.org/abs/1912.10211

About

A lightweight library for Frechet Audio Distance calculation.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 84.6%
  • Jupyter Notebook 13.7%
  • Shell 1.7%