Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import plotly.graph_objects as go | |
| import numpy as np | |
| import pandas as pd | |
| def create_sota_plot(): | |
| # State-of-the-art models data | |
| sota_models = { | |
| 'SIFT + FVs': (2012, 53), | |
| 'AlexNet': (2012.5, 65), | |
| 'SPPNet': (2014.5, 74), | |
| 'Inception V3': (2015.5, 81), | |
| 'NASNET-A(6)': (2017, 82.7), | |
| 'CoAtNet-7': (2021.5, 90.88), | |
| '': (2022, 87.79), # Last point | |
| '': (2022.2, 87.73) # Final value shown | |
| } | |
| # Extract data for SOTA models | |
| sota_years = [year for year, _ in sota_models.values() if year != ''] | |
| sota_accuracy = [acc for _, acc in sota_models.values() if acc != ''] | |
| sota_labels = [name for name in sota_models.keys() if name != ''] | |
| # Generate synthetic "other models" data (gray points) | |
| np.random.seed(42) | |
| n_other = 300 | |
| other_years = np.random.uniform(2010, 2023, n_other) | |
| # Create a distribution that's mostly below SOTA but with some variance | |
| other_accuracy = [] | |
| for year in other_years: | |
| # Find approximate SOTA accuracy for this year | |
| sota_at_year = np.interp(year, sota_years[:len(sota_accuracy)], sota_accuracy[:len(sota_accuracy)]) | |
| # Add models mostly below SOTA with some variance | |
| if year < 2012: | |
| acc = np.random.normal(45, 8) | |
| else: | |
| acc = np.random.normal(sota_at_year - 10, 5) | |
| # Some models can be close to SOTA | |
| if np.random.random() < 0.1: | |
| acc = sota_at_year - np.random.uniform(0, 3) | |
| other_accuracy.append(max(30, min(92, acc))) # Clip to reasonable range | |
| # Create the plot | |
| fig = go.Figure() | |
| # Add other models (gray scatter points) | |
| fig.add_trace(go.Scatter( | |
| x=other_years, | |
| y=other_accuracy, | |
| mode='markers', | |
| name='Other models', | |
| marker=dict( | |
| color='lightgray', | |
| size=6, | |
| opacity=0.5 | |
| ), | |
| hovertemplate='Year: %{x:.1f}<br>Accuracy: %{y:.1f}%<extra></extra>' | |
| )) | |
| # Add SOTA models line | |
| fig.add_trace(go.Scatter( | |
| x=sota_years[:len(sota_accuracy)], | |
| y=sota_accuracy, | |
| mode='lines+markers', | |
| name='State-of-the-art models', | |
| line=dict(color='#00CED1', width=3), | |
| marker=dict(size=10, color='#00CED1'), | |
| hovertemplate='%{text}<br>Year: %{x:.1f}<br>Accuracy: %{y:.1f}%<extra></extra>', | |
| text=sota_labels[:len(sota_accuracy)] | |
| )) | |
| # Add labels for SOTA models | |
| for i, (name, (year, acc)) in enumerate(sota_models.items()): | |
| if name and i < len(sota_accuracy): # Only label points with names | |
| fig.add_annotation( | |
| x=year, | |
| y=acc, | |
| text=name, | |
| showarrow=False, | |
| yshift=15, | |
| font=dict(size=12) | |
| ) | |
| # Add the final accuracy values | |
| fig.add_annotation( | |
| x=2022, | |
| y=87.79, | |
| text="87.79", | |
| showarrow=False, | |
| xshift=30, | |
| font=dict(size=12, weight='bold') | |
| ) | |
| fig.add_annotation( | |
| x=2022.2, | |
| y=87.73, | |
| text="87.73", | |
| showarrow=False, | |
| xshift=30, | |
| yshift=-10, | |
| font=dict(size=12) | |
| ) | |
| # Update layout | |
| fig.update_layout( | |
| title='Evolution of Model Performance on ImageNet', | |
| xaxis_title='Year', | |
| yaxis_title='TOP-1 ACCURACY', | |
| xaxis=dict( | |
| range=[2010, 2023], | |
| tickmode='linear', | |
| tick0=2012, | |
| dtick=2, | |
| showgrid=True, | |
| gridcolor='lightgray' | |
| ), | |
| yaxis=dict( | |
| range=[35, 100], | |
| tickmode='linear', | |
| tick0=40, | |
| dtick=10, | |
| showgrid=True, | |
| gridcolor='lightgray' | |
| ), | |
| plot_bgcolor='white', | |
| paper_bgcolor='white', | |
| height=500, | |
| legend=dict( | |
| yanchor="bottom", | |
| y=0.01, | |
| xanchor="center", | |
| x=0.5, | |
| orientation="h" | |
| ) | |
| ) | |
| return fig | |
| # Create Gradio interface | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# State-of-the-Art Models Timeline") | |
| gr.Markdown( | |
| "This visualization shows the evolution of state-of-the-art models' performance over time, similar to the ImageNet benchmark progression.") | |
| plot = gr.Plot(label="Model Performance Evolution") | |
| # Create plot on load | |
| demo.load(fn=create_sota_plot, outputs=plot) | |
| # Add interactive controls | |
| with gr.Row(): | |
| refresh_btn = gr.Button("Refresh Plot") | |
| refresh_btn.click(fn=create_sota_plot, outputs=plot) | |
| gr.Markdown(""" | |
| ### About this visualization: | |
| - **Cyan line**: State-of-the-art models showing the progression of best performance | |
| - **Gray dots**: Other models representing the broader research landscape | |
| - The plot shows how breakthrough models like AlexNet, Inception, and NASNET pushed the boundaries | |
| - Notice the rapid improvement from 2012-2018, followed by more incremental gains | |
| """) | |
| if __name__ == "__main__": | |
| demo.launch() |