Spaces:
Running
Running
File size: 3,118 Bytes
f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 e83848d f216956 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import argparse
import ast
import pickle
import os
import threading
import time
import gradio as gr
import numpy as np
import pandas as pd
from serve.model import model_config
def amend_model_name(config):
if config.page_link:
return '[' + config.model_name + '](' + config.page_link + ')'
elif config.code_link:
return '[' + config.model_name + '](' + config.page_link + ')'
else:
return config.model_name
def amend_rank(rank):
if rank==1:
return "π₯"
elif rank==2:
return "π₯"
elif rank==3:
return 'π₯'
else:
return rank
def get_leaderboard_values(leaderboard_df):
leaderboard_vals = []
for i, row in leaderboard_df.iterrows():
rank = i+1
model_name = row["Method"]
task = row["Task"]
if model_name not in model_config.keys() or model_config[model_name].task != task:
continue
cfg = model_config[model_name]
values = [amend_rank(rank), amend_model_name(cfg), task]
values = values + [row.get(dim, np.NaN) for dim in leaderboard_df.columns[2:]]
# values.append(round(np.sum([v for v in values[3:] if pd.notna(v)]), 4))
values.append(cfg.organization if cfg.organization else "N/A")
leaderboard_vals.append(values)
return leaderboard_vals
def get_topk_ranks(df, k=3):
ranks = {}
for col_idx, col in enumerate(df.columns[2:]): # skip "Model" βTask"
topk = df[col].nlargest(k)
for rank, idx in enumerate(topk.index):
if idx not in ranks:
ranks[idx] = {}
ranks[idx][col_idx] = rank + 1 # 1-based rank
for i in range(k): ranks[i][5] = i + 1
return ranks # dict: row -> {col: rank}
def build_leaderboard_tab(leaderboard_file: str, task: str = ""):
if not isinstance(leaderboard_file, str):
leaderboard_file = leaderboard_file.value
if not isinstance(task, str):
task = task.value
df = pd.read_csv(leaderboard_file)
if task in ["Text-to-3D only", "Image-to-3D only"]:
df = df[df["Task"] == task.split()[0]]
# df = df.drop(df[df["Task"]!=task.split()[0]].index)
leaderboard_df = df.drop(df[df["Method"].isnull()].index)
leaderboard_df = leaderboard_df.reset_index(drop=True)
leaderboard_df = leaderboard_df.sort_values(by="Overall", ascending=False).reset_index(drop=True)
leaderboard_vals = get_leaderboard_values(leaderboard_df)
leaderboard = gr.Dataframe(
headers = ['Rank', "π€ Model", "πͺ§ Task" ]
+ [f"{dim}" for dim in leaderboard_df.keys()[2:-1]]
+ ["β Overall", "ποΈ Orgnization"], # "π Links",
datatype = ["number", "markdown", "markdown"]
+ ["number"] * (len(leaderboard_df.columns) - 3)
+ ["number", "markdown"],
value = leaderboard_vals,
height = 680,
column_widths = [60, 120, 100]
+ [120] * (len(leaderboard_df.columns) - 3)
+ [120, 180],
wrap = True,
type="pandas",
)
return leaderboard |