videommu: open-ended predictions corrupted by xlsx round-trip, silently zeroed or crash

Ouverte Adaptée aux débutants
#1,698 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de open-compass/VLMEvalKit

Toutes les issues de open-compass/VLMEvalKit

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.