From 375cf1626448d0acc8c2934a5256c52016c530ca Mon Sep 17 00:00:00 2001 From: Benjamin Elizalde <26778834+bmartin1@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:03:10 -0800 Subject: [PATCH] Update README.md --- README.md | 76 +++++-------------------------------------------------- 1 file changed, 7 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 2099031..3775ba0 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,6 @@ https://arxiv.org/pdf/2206.04769.pdf https://forms.office.com/r/ULb4k9GL1F ``` -``` ### Usage - Load model @@ -28,19 +27,18 @@ https://forms.office.com/r/ULb4k9GL1F from CLAP_API import CLAP clap_model = CLAP("", use_cuda=False) +``` - Extract text embeddings ```python text_embeddings = clap_model.get_text_embeddings(class_labels: List[str]) -text_embeddings = text_embeddings/torch.norm(text_embeddings, dim=-1, keepdim=True) ``` - Extract audio embeddings ```python audio_embeddings = clap_model.get_audio_embeddings(file_paths: List[str]) -audio_embeddings = audio_embeddings/torch.norm(audio_embeddings, dim=-1, keepdim=True) ``` - Compute similarity @@ -49,64 +47,7 @@ audio_embeddings = audio_embeddings/torch.norm(audio_embeddings, dim=-1, keepdim sim = clap_model.compute_similarity(audio_embeddings, text_embeddings) ``` -## Examples - -### Zero-Shot Prediction - -The code below performs zero-shot prediction using CLAP. This example takes an audio from the [ESC50 dataset](https://github.com/karolpiczak/ESC-50), and predicts the most likely labels among the 50 textual labels from the dataset. - -```python -from CLAP_API import CLAP -from esc50 import ESC50 -import time -import torch.nn.functional as F - -# Load CLAP -weights_path = # Add weight path here -model = CLAP(weights_path, use_cuda=False) - -# Load dataset -dataset = ESC50(root='data', download=False) -x, target = dataset[1000] -y = dataset.classes - -# Add prompt -prompt = 'this is a sound of ' -y = dataset.classes -y_queries = [prompt + x for x in y] - -# Compute embeddings and similarity matrix -text_embeddings = model.get_text_embeddings(y) -audio_embeddings = model.get_audio_embeddings(x, resample=True) -similarity = model.compute_similarity(audio_embeddings, text_embeddings) -similarity = F.softmax(similarity, dim=1) -values, indices = similarity[0].topk(5) - -# Print the result -print("Ground Truth: {}".format(target)) -print("Top predictions:\n") -for value, index in zip(values, indices): - print(f"{y[index]:>16s}: {100 * value.item():.2f}%") -``` - -The output (the exact numbers may vary): - -``` -Ground Truth: coughing -Top predictions: - - coughing: 86.34% - sneezing: 9.30% -drinking sipping: 1.31% - laughing: 1.20% - glass breaking: 0.81% -``` - -Note that this example uses the `get_text_embeddings()` and `get_audio_embeddings()` methods that return the encoded features of given inputs. - -### Zero-Shot Evaluation - -The code below performs zero-shot evaluation using CLAP to compute performance on [ESC50 dataset](https://github.com/karolpiczak/ESC-50) dataset. +### Zero-Shot Classification of [ESC50 dataset](https://github.com/karolpiczak/ESC-50) ```python from CLAP_API import CLAP @@ -117,23 +58,24 @@ from tqdm import tqdm from sklearn.metrics import accuracy_score # Load CLAP -weights_path = # Add weight path +weights_path = # Add weight path here clap_model = CLAP(weights_path, use_cuda=False) # Load dataset -dataset = ESC50(root='data', download=False) +dataset = ESC50(root='path/ESC-50-master', download=False) prompt = 'this is a sound of ' Y = [prompt + x for x in dataset.classes] # Computing text embeddings text_embeddings = clap_model.get_text_embeddings(Y) + # Computing audio embeddings y_preds, y_labels = [], [] for i in tqdm(range(len(dataset))): x, _, one_hot_target = dataset.__getitem__(i) - audio_embedding = clap_model.get_audio_embeddings([x], resample=True) - similarity = clap_model.compute_similarity(audio_embedding, text_embeddings) + audio_embeddings = clap_model.get_audio_embeddings([x], resample=True) + similarity = clap_model.compute_similarity(audio_embeddings, text_embeddings) y_pred = F.softmax(similarity.detach().cpu(), dim=1).numpy() y_preds.append(y_pred) y_labels.append(one_hot_target.detach().cpu().numpy()) @@ -148,10 +90,6 @@ The output: ESC50 Accuracy: 82.6% ``` - - - - ## Contributing This project welcomes contributions and suggestions. Most contributions require you to agree to a