|
import pandas as pd |
|
import plotly.express as px |
|
import gradio as gr |
|
|
|
|
|
data_path = '0926-OCRBench-opensource.csv' |
|
data_mmlm_path = 'filtered_opencompass.csv' |
|
data = pd.read_csv(data_path).fillna(0) |
|
|
|
|
|
|
|
dtype_dict = { |
|
"Model": str, |
|
"Param (B)": float, |
|
"OCRBench":int, |
|
"Text Recognition":int, |
|
"Scene Text-centric VQA":int, |
|
"Document Oriented VQA":int, |
|
"KIE":int, |
|
"Handwritten Math Expression Recognition":int} |
|
|
|
|
|
|
|
data_valid = data[:25].copy() |
|
data_valid = data_valid.astype(dtype_dict) |
|
data_valid.drop(columns=['Unnamed: 11'], inplace=True) |
|
|
|
|
|
def categorize_model(model): |
|
if model in ["H2OVL-Mississippi-2B", "H2OVL-Mississippi-0.8B"]: |
|
return "H2OVLs" |
|
elif model.startswith("doctr"): |
|
return "traditional ocr models" |
|
else: |
|
return "Other" |
|
|
|
|
|
color_map = {"H2OVLs": "#FEC925", "Other": "#9F9F9D", "traditional ocr models": "#54585A"} |
|
|
|
|
|
data_valid["Category"] = data_valid["Model"].apply(categorize_model) |
|
|
|
|
|
|
|
def plot_metric(selected_metric): |
|
filtered_data = data_valid[data_valid[selected_metric] !=0 ] |
|
|
|
|
|
fig = px.scatter( |
|
filtered_data, |
|
x="Param (B)", |
|
y=selected_metric, |
|
text="Model", |
|
color="Category", |
|
title=f"{selected_metric} vs Model Size", |
|
color_discrete_map=color_map |
|
) |
|
|
|
fig.update_traces(marker=dict(size=10), mode='markers+text', textposition="middle right", textfont=dict(size=10)) |
|
|
|
max_x_value = filtered_data["Param (B)"].max() |
|
fig.update_layout( |
|
xaxis_range=[0, max_x_value + 5], |
|
xaxis_title="Model Size (B)", |
|
yaxis_title=selected_metric, |
|
showlegend=False, |
|
height=800, |
|
margin=dict(t=50, l=50, r=100, b=50), |
|
) |
|
|
|
|
|
fig.update_traces(texttemplate='%{text}') |
|
|
|
return fig |
|
|
|
|
|
|
|
data_mmlm = pd.read_csv(data_mmlm_path).fillna(0) |
|
data_mmlm.rename(columns={"Avg. Score (8 single image benchmarks)": "Average Score"}, inplace=True) |
|
metrics_column = list(data_mmlm.columns)[6:] |
|
|
|
def plot_metric_mmlm_grouped(category): |
|
|
|
filtered_data = data_mmlm[data_mmlm["Category"] == category].copy() |
|
|
|
|
|
melted_data = pd.melt( |
|
filtered_data, |
|
id_vars=["Models"], |
|
value_vars=metrics_column, |
|
var_name="Metrics", |
|
value_name="Score" |
|
) |
|
|
|
|
|
fig = px.bar( |
|
melted_data, |
|
x="Metrics", |
|
y="Score", |
|
color="Models", |
|
barmode="group", |
|
title=f"Scores for All Metrics in {category} Category" |
|
) |
|
|
|
fig.update_layout( |
|
xaxis_title="Metrics", |
|
yaxis_title="Score", |
|
height=600, |
|
margin=dict(t=50, l=50, r=100, b=50), |
|
) |
|
return fig |
|
|
|
|
|
|
|
def create_interface(): |
|
with gr.Blocks() as interface: |
|
with gr.Tabs(): |
|
with gr.Tab("OCRBench"): |
|
with gr.Row(): |
|
with gr.Column(scale=4): |
|
plot = gr.Plot(value=plot_metric("Text Recognition"), label="OCR Benchmark Metrics") |
|
with gr.Column(scale=1): |
|
metrics = list(data_valid.columns[5:-1]) |
|
dropdown = gr.Dropdown(metrics, label="Select Metric", value="Text Recognition") |
|
|
|
|
|
dropdown.change(fn=plot_metric, inputs=dropdown, outputs=plot) |
|
|
|
|
|
with gr.Tab("8 Multi-modal Benchmarks"): |
|
with gr.Row(): |
|
|
|
categories = data_mmlm["Category"].unique().tolist() |
|
category_dropdown = gr.Dropdown(categories, label="Select Category", value=categories[0]) |
|
|
|
with gr.Row(): |
|
mm_plot = gr.Plot(value=plot_metric_mmlm_grouped(categories[0]), label="Grouped Metrics for Models") |
|
|
|
|
|
category_dropdown.change(fn=plot_metric_mmlm_grouped, inputs=category_dropdown, outputs=mm_plot) |
|
|
|
return interface |
|
|
|
|
|
if __name__ == "__main__": |
|
create_interface().launch() |
|
|
|
|