Spaces:
Runtime error
Runtime error
| from datasets import load_dataset | |
| import pandas as pd | |
| import gradio as gr | |
| import os | |
| import random | |
| def list_to_string(lst): | |
| return '\n'.join(['{}. {}'.format(i+1, item) for i, item in enumerate(lst)]) | |
| auth_token = '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' | |
| winoground = load_dataset("facebook/winoground", use_auth_token=auth_token)["test"] | |
| df = pd.read_csv('BLIP2_Q2_CM.csv') | |
| winoground_pd = winoground.to_pandas() | |
| filter_id_set = set(df['id']) | |
| winoground_pd = winoground_pd[winoground_pd['id'].isin(filter_id_set)] | |
| for c in ['c0_i0_blip2', 'c0_i1_blip2', 'c1_i0_blip2', 'c1_i1_blip2', 'c0_i0_q2', 'c1_i0_q2', 'c0_i1_q2', 'c1_i1_q2']: | |
| df[c] = df[c].apply(lambda x: round(x, 1)) | |
| print("Load wino") | |
| import json | |
| df['qa_samples'] = df['qa_samples'].apply(json.loads) | |
| def func(index): | |
| print(f"index: {index}") | |
| example = winoground_pd.iloc[int(index)] | |
| values = get_instance_values(example) | |
| # print(f"index: {index}") | |
| # return get_img(example["image_0"]), example["caption_0"], get_img(example["image_1"]), example["caption_1"] | |
| # preds = ['yoyoyo'] | |
| return values | |
| demo = gr.Blocks() | |
| import PIL | |
| def process_key(item): | |
| if 'path' in item: | |
| return PIL.Image.open(item['path']) | |
| return item | |
| def get_vals(items): | |
| values = [] | |
| for idx, e in enumerate(items): | |
| if idx == 0: | |
| gr_val = gr.Image(value=e) | |
| else: | |
| gr_val = gr.Textbox(value=e) | |
| values.append(gr_val) | |
| return values | |
| def get_instance_values(example): | |
| item_q2 = df[df['id'] == example['id']].iloc[0].to_dict() | |
| left_keys = [x for x in example.keys() if '_0' in x] | |
| right_keys = [x for x in example.keys() if '_1' in x] | |
| left = [process_key(example[k]) for k in left_keys] | |
| right = [process_key(example[k]) for k in right_keys] | |
| # for k in left_side_columns + right_side_columns: | |
| # if k in enumerate_cols: | |
| # value = list_to_string(example[k]) | |
| # elif k == QA: | |
| # qa_list = [f"Q: {x[0]} A: {x[1]}" for x in example[k]] | |
| # value = list_to_string(qa_list) | |
| # else: | |
| # value = example[k] | |
| # values.append(value) | |
| blip_preds = {k.split("_blip2")[0]:v for k,v in item_q2.items() if "_blip" in k} | |
| q2_preds = {k.split("_q2")[0]: v for k, v in item_q2.items() if "_q2" in k} | |
| del blip_preds['model'] | |
| del q2_preds['model'] | |
| blip_preds_str = dict2string(blip_preds) | |
| q2_preds_str = dict2string(q2_preds) | |
| qas = pd.DataFrame(item_q2['qa_samples']) | |
| qa_image_0 = qas[qas['img_caption'].apply(lambda x: 'image_0' in x)] | |
| qa_image_1 = qas[qas['img_caption'].apply(lambda x: 'image_1' in x)] | |
| qas_image_0_str = qa_image_0.to_string() | |
| qas_image_1_str = qa_image_1.to_string() | |
| return [blip_preds_str, q2_preds_str, qas_image_0_str, qas_image_1_str] + left + right | |
| def dict2string(d): | |
| s = '' | |
| for idx, (k, v) in enumerate(d.items()): | |
| s += f"{k}: {v}" | |
| if idx < len(d) - 1: | |
| s += '\t|\t' | |
| return s | |
| with demo: | |
| gr.Markdown("# Slide across the slider to see various examples from WinoGround") | |
| with gr.Column(): | |
| index = random.choice(range(0, len(winoground_pd))) | |
| # index = 0 | |
| example = winoground_pd.iloc[index] | |
| example_values = get_instance_values(example) | |
| first_item = example_values[0] | |
| second_item = example_values[1] | |
| third_item = example_values[2] | |
| fourth_item = example_values[3] | |
| rest_values = example_values[4:] | |
| item_q2 = df[df['id'] == example['id']].iloc[0] | |
| slider = gr.Slider(minimum=0, maximum=len(winoground_pd), step=1) | |
| preds_blip2 = gr.Textbox(value=first_item, label='BLIP2') | |
| preds_q2 = gr.Textbox(value=second_item, label='Visual Q^2') | |
| with gr.Row(): | |
| with gr.Column(): | |
| qas_image_0 = gr.Textbox(value=third_item, label='QA Pairs (Image 0)') | |
| with gr.Column(): | |
| qas_image_1 = gr.Textbox(value=fourth_item, label='QA Pairs (Image 1)') | |
| with gr.Row(): | |
| items_left = rest_values[:int(len(rest_values)/2)] | |
| items_right = rest_values[int(len(rest_values)/2):] | |
| with gr.Column(): | |
| # image_input_1 = gr.Image(value=get_img(winoground_pd.iloc[index]["image_0"])) | |
| # text_input_1 = gr.Textbox(value=winoground_pd.iloc[index]["caption_0"]) | |
| items = items_left | |
| gr_values_left = get_vals(items_left) | |
| with gr.Column(): | |
| # image_input_2 = gr.Image(value=get_img(winoground_pd.iloc[index]["image_1"])) | |
| # text_input_2 = gr.Textbox(value=winoground_pd.iloc[index]["caption_1"]) | |
| gr_values_right = get_vals(items_right) | |
| slider.change(func, inputs=[slider], outputs=[preds_blip2, preds_q2, qas_image_0, qas_image_1] + gr_values_left + gr_values_right) | |
| demo.launch(auth=("admin", "visual_q2_secret")) |