wentao commited on
Commit
e783f64
·
1 Parent(s): fb93e31
Files changed (3) hide show
  1. app.py +24 -7
  2. constants.py +23 -0
  3. utils.py +7 -5
app.py CHANGED
@@ -3,24 +3,41 @@ import pandas as pd
3
  from utils import load_all_results
4
 
5
 
6
- def sort_leaderboard(sort_by="Video-MME", descending=True):
7
  df = load_all_results()
8
- return df.sort_values(by=sort_by, ascending=not descending).reset_index(drop=True)
 
9
 
10
 
11
  def build_interface():
12
  with gr.Blocks() as demo:
13
- gr.Markdown("## 📊 LVU VLM Leaderboard")
14
- gr.Markdown("Benchmarks: Video-MME, MLVU, LVBench, LongVideoBench")
15
 
16
  with gr.Row():
17
- sort_metric = gr.Dropdown(choices=["Video-MME", "MLVU", "LVBench", "LongVideoBench"], label="Sort by", value="Video-MME")
18
  descending = gr.Checkbox(label="Descending", value=True)
19
 
 
 
 
 
 
20
  leaderboard = gr.Dataframe(label="Leaderboard")
21
 
22
- sort_metric.change(fn=sort_leaderboard, inputs=[sort_metric, descending], outputs=leaderboard)
23
- descending.change(fn=sort_leaderboard, inputs=[sort_metric, descending], outputs=leaderboard)
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  return demo
26
 
 
3
  from utils import load_all_results
4
 
5
 
6
+ def filter_and_sort_leaderboard(category_filters, sort_by="Video-MME", descending=True):
7
  df = load_all_results()
8
+ filtered_df = df[df["Category"].isin(category_filters)]
9
+ return filtered_df.sort_values(by=sort_by, ascending=not descending).reset_index(drop=True)
10
 
11
 
12
  def build_interface():
13
  with gr.Blocks() as demo:
14
+ gr.Markdown("## 🎥 LVU VLM Leaderboard")
15
+ gr.Markdown("Benchmarks: Video-MME, MLVU, LongVideoBench")
16
 
17
  with gr.Row():
18
+ sort_metric = gr.Dropdown(choices=["Video-MME", "MLVU", "LongVideoBench"], label="Sort by", value="Video-MME")
19
  descending = gr.Checkbox(label="Descending", value=True)
20
 
21
+ with gr.Row():
22
+ proprietary = gr.Checkbox(label="Proprietary Models", value=True)
23
+ transformer = gr.Checkbox(label="Open-source Transformer-based LMMs", value=True)
24
+ efficient = gr.Checkbox(label="Open-source Efficient LMMs", value=True)
25
+
26
  leaderboard = gr.Dataframe(label="Leaderboard")
27
 
28
+ def update_board(sort_by, descending, proprietary, transformer, efficient):
29
+ filters = []
30
+ if proprietary:
31
+ filters.append("Proprietary Models")
32
+ if transformer:
33
+ filters.append("Open-source Transformer-based LMMs")
34
+ if efficient:
35
+ filters.append("Open-source Efficient LMMs")
36
+ return filter_and_sort_leaderboard(filters, sort_by, descending)
37
+
38
+ inputs = [sort_metric, descending, proprietary, transformer, efficient]
39
+ for inp in inputs:
40
+ inp.change(fn=update_board, inputs=inputs, outputs=leaderboard)
41
 
42
  return demo
43
 
constants.py CHANGED
@@ -4,3 +4,26 @@ HF_TOKEN = os.environ.get("HF_TOKEN")
4
 
5
 
6
  RESULTS_DIR = "static/eval_results"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
 
6
  RESULTS_DIR = "static/eval_results"
7
+
8
+
9
+ CATEGORY_MAP = {
10
+ "GPT-4V": ("-", "Proprietary Models"),
11
+ "GPT-4o": ("-", "Proprietary Models"),
12
+ "Gemini-1.5-Pro": ("-", "Proprietary Models"),
13
+
14
+ "VideoChat2": ("7B", "Open-source Transformer-based LMMs"),
15
+ "ShareGPT4Video": ("7B", "Open-source Transformer-based LMMs"),
16
+ "LongVA": ("7B", "Open-source Transformer-based LMMs"),
17
+ "Video-CCAM": ("9B", "Open-source Transformer-based LMMs"),
18
+ "Kangaroo": ("8B", "Open-source Transformer-based LMMs"),
19
+ "InternVL2": ("8B", "Open-source Transformer-based LMMs"),
20
+ "LLaVA-OneVision": ("7B", "Open-source Transformer-based LMMs"),
21
+ "Qwen2-VL": ("7B", "Open-source Transformer-based LMMs"),
22
+ "Phi-4-Mini": ("5.6B", "Open-source Transformer-based LMMs"),
23
+
24
+ "LLaVA-Mini": ("7B", "Open-source Efficient LMMs"),
25
+ "LongLLaVA": ("9B", "Open-source Efficient LMMs"),
26
+ "LongVU": ("9B", "Open-source Efficient LMMs"),
27
+ "Video-XL": ("7B", "Open-source Efficient LMMs"),
28
+ "VAMBA": ("10B", "Open-source Efficient LMMs")
29
+ }
utils.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
2
  import json
3
  import pandas as pd
4
- from constants import RESULTS_DIR
5
 
6
 
7
  def load_all_results():
@@ -10,8 +10,10 @@ def load_all_results():
10
  if file.endswith(".json"):
11
  with open(os.path.join(RESULTS_DIR, file), "r") as f:
12
  data = json.load(f)
13
- if isinstance(data, list):
14
- all_data.extend(data)
15
- elif isinstance(data, dict):
16
- all_data.append(data)
 
 
17
  return pd.DataFrame(all_data)
 
1
  import os
2
  import json
3
  import pandas as pd
4
+ from constants import RESULTS_DIR, CATEGORY_MAP
5
 
6
 
7
  def load_all_results():
 
10
  if file.endswith(".json"):
11
  with open(os.path.join(RESULTS_DIR, file), "r") as f:
12
  data = json.load(f)
13
+ for entry in data:
14
+ model = entry["Model"]
15
+ size, category = CATEGORY_MAP.get(model, ("N/A", "Unknown"))
16
+ entry["Size"] = size
17
+ entry["Category"] = category
18
+ all_data.append(entry)
19
  return pd.DataFrame(all_data)