clip_eval / app.py
wanzin's picture
update README
1a9bde9
import gradio as gr
import evaluate
clip_metric = evaluate.load("d-matrix/clip_eval")
print("Successfully loaded CLIP evaluation metric")
AVAILABLE_MODELS = [
"openai/clip-vit-base-patch32",
"openai/clip-vit-large-patch14",
"openai/clip-vit-base-patch16",
]
AVAILABLE_DATASETS = ["mscoco", "flickr"]
with gr.Blocks(title="CLIP Evaluation") as demo:
gr.Markdown("# CLIP Model Evaluation")
gr.Markdown(
"""
This tool evaluates CLIP models on image-text retrieval tasks using standard datasets.
"""
)
with gr.Row():
with gr.Column():
model_input = gr.Dropdown(
choices=AVAILABLE_MODELS, value=AVAILABLE_MODELS[0], label="CLIP Model"
)
dataset_input = gr.Dropdown(
choices=AVAILABLE_DATASETS, value="mscoco", label="Dataset"
)
samples_input = gr.Slider(
minimum=1, maximum=10, value=1, step=1, label="Number of samples"
)
evaluate_button = gr.Button("Evaluate Model")
with gr.Column():
results_output = gr.Markdown("Results will appear here")
def evaluate_clip(model_name, dataset, num_samples, progress=gr.Progress()):
progress(0, desc="Evaluating CLIP model...")
results = clip_metric.compute(
model_name=[model_name],
dataset_names=[dataset],
n_examples=[int(num_samples)],
)
output = f"## CLIP Evaluation Results\n\n"
output += f"**Model:** {model_name}\n"
output += f"**Dataset:** {dataset}\n"
output += f"**Samples:** {num_samples}\n\n"
output += "**Image Retrieval (Text→Image):**\n"
for k in [1, 5, 10]:
metric_name = f"{dataset}:image_recall@{k}"
if metric_name in results:
output += f"* Recall@{k}: {results[metric_name]:.4f}\n"
output += "\n**Text Retrieval (Image→Text):**\n"
for k in [1, 5, 10]:
metric_name = f"{dataset}:text_recall@{k}"
if metric_name in results:
output += f"* Recall@{k}: {results[metric_name]:.4f}\n"
return output
evaluate_button.click(
fn=evaluate_clip,
inputs=[model_input, dataset_input, samples_input],
outputs=results_output,
)
if __name__ == "__main__":
demo.launch()