videommu: open-ended predictions corrupted by xlsx round-trip, silently zeroed or crash
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 1/5
- Temps estimé
- Moins d'une heure
- Accessibilité débutants
- 90/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- pandas, python
- Domaine
- data, machine-learning
Piste de recherche
Commencez dans evaluate de vlmeval/dataset/videommmu.py (lignes 668-706), puis examinez parse_open_response et eval_open pour confirmer que les prédictions open-ended sont des listes. Examinez le comportement de dump/load de vlmeval/smp/file.py et reproduisez le round-trip pandas xlsx présenté dans l’issue. C’est terminé lorsque le cache des scores préserve les données list-valued de parsed_pred et que le scoring complet de VideoMMMU n’évalue plus incorrectement en silence et ne plante plus.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug
vlmeval/dataset/videommmu.py, evaluate (lines 668-706):
storage = get_intermediate_file_path(eval_file, '_score') # defaults to .xlsx
...
data['parsed_pred'] = [ans[idx]['parsed_pred'] for idx in data['index']]
dump(data, storage)
...
score = aggregate_results([row for _, row in load(storage).iterrows()])
parse_open_response (line 140) returns a list for open-ended items. Writing a list column to xlsx serializes it as the string "['thirty', 30.0]"; loading it back yields that string. eval_open (line 382) then does for pred in pred_i — iterating a string character-by-character, so every open-ended item is scored wrong (single-char substring matches).
If the list column fails to write, dump (vlmeval/smp/file.py:183-187) falls back to .pkl, but load(storage) still targets the .xlsx path and crashes.
Reproduction
import pandas as pd
df = pd.DataFrame({'parsed_pred': [['thirty', 30.0], 'A']})
df.to_excel('/tmp/t.xlsx', index=False)
print([type(x).__name__ for x in pd.read_excel('/tmp/t.xlsx')['parsed_pred']])
# ['str', 'str'] — list became "['thirty', 30.0]"
Impact
Every full VideoMMMU run (includes the open-ended Adaptation subset) either silently zeroes open-ended accuracy or crashes at the end. MCQ items unaffected (plain-string parsed_pred). Silent / crash, no warning.
Fix
Use pkl for the score cache so list-typed parsed_pred survives the round-trip:
storage = get_intermediate_file_path(eval_file, '_score', 'pkl')
- Langage dominant
- Python
- Étoiles
- 4.4k
- Forks
- 768
- Merge moyen
- 1 j 20 h
- PR mergées (30 j)
- 20
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de open-compass/VLMEvalKit
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
open-compass/VLMEvalKit#1697 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
open-compass/VLMEvalKit#1695 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
open-compass/VLMEvalKit#1690 · 3 commentaires ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
open-compass/VLMEvalKit#1589 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
open-compass/VLMEvalKit#1580 ·
Toutes les issues de open-compass/VLMEvalKit
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100