Mars-Board / app /app.py
gremlin97's picture
gremlin97: hf setup
ed881c4
"""Main Gradio application for the Mars Vision Leaderboard."""
import gradio as gr
from .leaderboard import update_leaderboard
from .data import TASK_DATA
import pandas as pd
TASKS = ["Classification", "Object Detection", "Segmentation"]
def get_available_models(task: str) -> list:
"""Get list of available models for a task."""
data, _ = TASK_DATA[task]
return sorted(list(set(data['Model'])))
def create_interface():
"""Create the Gradio interface."""
with gr.Blocks(title="Mars Vision Leaderboard", theme=gr.themes.Default()) as demo:
gr.Markdown(
"""
# Mars Vision Leaderboard
A comprehensive evaluation of computer vision models on Mars-specific datasets.
This leaderboard tracks performance across multiple tasks including classification,
object detection, and segmentation.
"""
)
with gr.Tabs():
with gr.TabItem("πŸ“Š General Datasets"):
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("""
#### Surface Analysis
β€’ **Robins & Hynek** - Craters
β€’ **Lagain** - Surface Features
β€’ **SPOC** - Surface Properties
β€’ **AI4MARS** - Surface Analysis
β€’ **MarsData** - General Surface
""")
with gr.Column(scale=1):
gr.Markdown("""
#### Classification
β€’ **DoMars16k** - Surface Types
β€’ **Mars Image** - Content Analysis
β€’ **Deep Mars** - Deep Learning
β€’ **Dusty vs Non-dusty** - Dust Analysis
""")
with gr.Column(scale=1):
gr.Markdown("""
#### Segmentation
β€’ **S5Mars** - Surface
β€’ **Mars-Seg** - Features
β€’ **Martian Landslide**
β€’ **Martian Frost**
""")
with gr.TabItem("🎯 Specialized Tasks"):
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("""
#### Detection Tasks
β€’ **Change Detection**
β€’ **Outlier Detection**
β€’ **Novelty Detection**
""")
with gr.Column(scale=1):
gr.Markdown("""
#### Feature Analysis
β€’ **Cone Detection**
β€’ **Dust Devil Tracks**
β€’ **Cone Segmentation**
""")
with gr.Row():
task_dropdown = gr.Dropdown(
choices=TASKS,
value=TASKS[0],
label="Select Task",
)
model_multiselect = gr.Dropdown(
choices=get_available_models(TASKS[0]),
value=None,
label="Filter Models (Optional)",
multiselect=True,
)
with gr.Column():
gr.Markdown("### Best Performing Models Across Datasets")
best_models_output = gr.Dataframe(
interactive=False,
wrap=True,
headers=["Metric", "Rank", "Model", "Average Score"],
)
gr.Markdown("### Detailed Results")
table_output = gr.Dataframe(interactive=False, wrap=True)
with gr.Row():
plot_output1 = gr.Plot(label="Performance Plot 1")
plot_output2 = gr.Plot(label="Performance Plot 2")
def update_models(task):
return gr.Dropdown(choices=get_available_models(task))
def update_with_filters(task, models):
return update_leaderboard(task, models)
# Event handlers
task_dropdown.change(
fn=update_models,
inputs=[task_dropdown],
outputs=[model_multiselect],
)
for component in [task_dropdown, model_multiselect]:
component.change(
fn=update_with_filters,
inputs=[task_dropdown, model_multiselect],
outputs=[table_output, plot_output1, plot_output2, best_models_output],
)
# Initial update
demo.load(
fn=update_with_filters,
inputs=[task_dropdown, model_multiselect],
outputs=[table_output, plot_output1, plot_output2, best_models_output],
)
return demo
if __name__ == "__main__":
demo = create_interface()
demo.launch()