Il s'agit de l'implémentation de l'article ECCV 2022 Réponse visuelle fiable aux questions : s'abstenir plutôt que de répondre de manière incorrecte. Si vous trouvez notre article ou ce référentiel utile pour votre propre travail, veuillez citer :
@inproceedings{whitehead2022reliablevqa,
title={Reliable Visual Question Answering: Abstain Rather Than Answer Incorrectly},
author={Whitehead, Spencer and Petryk, Suzanne and Shakib, Vedaad and Gonzalez, Joseph and Darrell, Trevor and Rohrbach, Anna and Rohrbach, Marcus},
booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
year={2022}
}
Ce référentiel utilise PyTorch et est construit sur MMF. Il contient les éléments suivants :
Mise à jour : la version précédente de ce référentiel utilisait involontairement les réponses de vérité terrain par défaut dans MMF dans les answers
de champ qui ont des réponses de référence légèrement différentes (par exemple, elle remplace certaines entrées si elles ne sont pas dans le vocabulaire des 3 000 réponses). Par conséquent, nous fournissons un script d'évaluation autonome (eval_scripts/) qui utilise les annotations VQA v2 d'origine comme références pour les évaluations. Cette mise à jour est reflétée dans la version arXiv (veuillez consulter le journal des modifications en annexe) et les travaux futurs devraient utiliser les évaluations mises à jour pour rapporter les résultats.
Les dossiers de ce dépôt sont structurés comme suit :
configs/
:experiments/
contient des configurations YAML pour entraîner chacun des modèles VQA et les fonctions de sélection correspondantes.datasets/
contient la configuration YAML pour l'ensemble de données vqa2_extended
personnalisé.datasets/
: contient l'implémentation et le générateur de l'ensemble de données pour vqa2_extended
. Cet ensemble de données est identique à VQA v2 dans MMF, mais il prend également en charge des sorties de confiance de modèle supplémentaires pour les fonctions de sélection et des annotations à choix multiples pour l'évaluation de l'étalonnage.eval_scripts/
: contient des scripts d'évaluation pour calculer les mesures de couverture des risques et de fiabilité efficace dans le document.reliable_vqa_eval.py
: contient un objet évaluateur qui calcule les différentes métriques.run.py
: script pour exécuter les évaluations à partir des prédictions du modèle et des annotations de vérité terrain.vqa.py
: contient un objet pour s'interfacer avec les annotations et prédictions VQA v2.models/
: pour chaque modèle VQA dans nos expériences, nous enregistrons une version au-dessus du modèle d'origine qui renvoie une confiance supplémentaire et des sorties de caractéristiques intermédiaires nécessaires aux fonctions de sélection.selective_predictors.py
contient des implémentations pour les modèles d'étalonnage et de sélection.modules/
:losses.py
contient la fonction de perte de prédiction d'exactitude pour les modèles de sélecteur appris.metrics.py
contient des implémentations des métriques de couverture des risques et de fiabilité efficace dans MMF pour validation.__init__.py
: importe des composants MMF personnalisés à utiliser par MMF. Veuillez suivre les instructions d'installation de MMF ici : https://mmf.sh/docs/. Nous vous recommandons d'installer à partir des sources. Notez que lors de l'installation à partir des sources, vous n'avez pas besoin de cloner le référentiel MMF sous ce référentiel. Vous pouvez simplement cloner MMF dans son propre répertoire. Nous vous recommandons également d'utiliser un environnement conda pour l'installation et l'exécution, qui peut être utilisé à la fois pour MMF et ce dépôt.
Après l'installation de MMF, Python 3.7+ et PyTorch 1.6+ doivent être installés sur votre environnement. Vous aurez également besoin de scikit-learn 1.0+ et de pandas 1.3.4+.
TL;DR : Nous utilisons l'ensemble de données VQA v2. Nous divisons l'ensemble de validation VQA v2 en 3 parties et fournissons les annotations ci-dessous. Nous extrayons également des fonctionnalités de grille personnalisées pour le modèle CLIP-ViL, fournies ci-dessous. Toutes les autres annotations et fonctionnalités sont automatiquement téléchargées par MMF, comme spécifié par chacune des configurations de ce dépôt.
Tout d’abord, téléchargez les fichiers JSON d’annotation de questions et réponses de validation VQA v2 d’origine à partir d’ici : https://visualqa.org/download.html. Ceux-ci seront utilisés pour les évaluations.
Lors de l'exécution de MMF avec l'un de nos fichiers de configuration pour la première fois, MMF devrait automatiquement télécharger les fonctionnalités et les annotations pour VQA v2. Ces répertoires/fichiers seront stockés dans le $MMF_DATA_DIR
( env.data_dir
) sous un répertoire vqa2
. Veuillez consulter MMF pour plus de détails à ce sujet. Nous vous recommandons de commencer par exécuter Pythia+MaxProb via ce dépôt, qui téléchargera les annotations et les fonctionnalités utilisées pour Pythia, ViLBERT et VisualBERT (voir Formation pour plus de détails)
Nous vous recommandons également de sauvegarder nos fractionnements de validation et nos fonctionnalités CLIP (décrites dans les sections suivantes) dans ces répertoires également, et la configuration suivante suppose que c'est le cas. Si vous décidez de structurer vos répertoires différemment, vous devrez alors mettre à jour votre chemin de configuration, etc. en conséquence.
L'ensemble de formation VQA v2 standard est utilisé pour la formation des modèles VQA. Cependant, comme les annotations de réponse ne sont pas disponibles pour les divisions test-dev et test-std VQA v2, nous divisons l'ensemble de validation VQA v2 en 3 ensembles disjoints (c'est-à-dire qu'aucune image ou question n'est partagée) à des fins d'évaluation :
dev
: ensemble de validation pour la formation du modèle VQA et ensemble de formation pour les prédicteurs sélectifs.val
: ensemble de validation pour les prédicteurs sélectifs.test
: ensemble de tests pour tous les modèles et sur quoi nous rapportons les résultats dans notre article.Ces fichiers d'annotations fractionnées peuvent être téléchargés ici : télécharger
Une fois téléchargé, placez le fichier compressé dans le répertoire
. La décompression du fichier devrait configurer la structure de répertoires suivante :
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
Pour utiliser nos fichiers de configuration tels quels, ces fichiers d'annotation doivent être placés sous le chemin
. Sinon, vous devrez modifier les fichiers de configuration et d'annotation pour qu'ils correspondent à vos chemins. Par exemple, les annotations de l'ensemble de données dans une configuration pour entraîner un modèle VQA sont :
dataset_config:
vqa2_extended:
annotations:
train:
- vqa2/defaults/annotations/imdb_train2014.npy
val:
- vqa2/reliable_vqa/annotations/imdb_val2014-dev.npy
test:
- vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
Alors que les annotations pour la formation d'un sélecteur sont :
dataset_config:
vqa2_extended:
annotations:
train:
- vqa2/reliable_vqa/annotations/imdb_val2014-dev.npy
val:
- vqa2/reliable_vqa/annotations/imdb_val2014-val.npy
test:
- vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
Pour entraîner tous les modèles VQA, nous utilisons des fonctionnalités pré-extraites au lieu d'images pour plus de rapidité et de cohérence. Les modèles Pythia, ViLBERT et VisualBERT utilisent tous des fonctionnalités qui peuvent être téléchargées automatiquement lors de l'exécution via MMF. Cependant, CLIP-ViL utilise les fonctionnalités d'image de grille de CLIP. Nous fournissons nos fonctionnalités pré-calculées ainsi qu'une version légèrement ajustée du script d'extraction du référentiel CLIP-ViL qui peut être utilisée pour extraire les fonctionnalités CLIP indépendamment.
/vqa2/
, ce qui donne : vqa2/
reliable_vqa-clip/
annotations/
imdb_train2014.npy
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
vqa2/
reliable_vqa-clip/
annotations/
...
clip_features.tar.gz
reliable_vqa-clip
. Votre structure de répertoires doit refléter celle de MMF : vqa2/
reliable_vqa-clip/
annotations/
...
features/
train2014/
val2014/
coco_2014/
annotations/
instances_train2014.json
instances_val2014.json
images/
train2014/
val2014/
fixed_mcan_clip_grid_feature.py
vers CLIP-ViL/CLIP-ViL-Direct/vqa
dans le référentiel CLIP-ViL.OUTPUT_DIR
dans CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
par le répertoire souhaité pour les fonctionnalités (c'est-à-dire /vqa2/reliable_vqa-clip/features
).coco_2014_val
pour exécuter sur les images val2014) : DETECTRON2_DATASETS= python fixed_mcan_clip_grid_feature.py --config-file configs/R-50-grid.yaml --dataset coco_2014_train --model_type RN50x4
python clipvil_anns_conversion.py --input_dir /vqa2/reliable_vqa/annotations --output_dir /vqa2/reliable_vqa-clip/annotations
Nous fournissons des points de contrôle de modèles entraînés pour chaque combinaison des 4 modèles VQA et des 3 fonctions de sélection dans notre article. Notez que les points de contrôle du modèle MaxProb sont simplement les modèles VQA. Les prédicteurs sélectifs d'étalonnage et de sélection eux-mêmes sont beaucoup plus petits que les modèles VQA, mais nous incluons le modèle VQA dans leurs points de contrôle correspondants pour plus de commodité.
Notez que MaxProb ViLBERT et VisualBERT sont les mêmes que ceux de MMF (pré-entraînés et affinés), ils peuvent donc également être téléchargés via le zoo modèle MMF. Du zoo modèle MMF, ViLBERT correspond à vilbert.finetuned.vqa2.from_vqa2_train
et VisualBERT correspond à visual_bert.finetuned.vqa2.from_coco_train
.
MaxProb | Étalonnage | Sélecteur | |
---|---|---|---|
Pythie | télécharger | télécharger | télécharger |
ViLBERT | Téléchargement MMF | télécharger | télécharger |
VisuelBERT | Téléchargement MMF | télécharger | télécharger |
CLIP-ViL | télécharger | télécharger | télécharger |
Ici, nous fournissons des exemples de commandes pour la formation et l’évaluation des modèles. Ces exemples utilisent le modèle CLIP-ViL (appelé movie_mcan
, qui est l'architecture de modèle correspondante). Exécuter avec d'autres modèles implique simplement de changer la config
sur le chemin correct et de changer l'argument model
en l'un des pythia
, vilbert
, visual_bert
ou movie_mcan
(lors de l'utilisation de MaxProb) ou d'utiliser select_*
pour un modèle *
(lors de l'utilisation de l'étalonnage ou d'un sélecteur, par exemple, select_visual_bert
). Notez que les fichiers d'annotation pour CLIP-ViL sont différents car les fonctionnalités CLIP sont utilisées (voir, par exemple, configs/experiments/movie_mcan/vqa2/defaults.yaml
), alors que tous les autres modèles utilisent le même ensemble de fichiers d'annotation, alors assurez-vous de utilisez les fichiers d'annotations et les chemins d'accès aux fonctionnalités correspondants.
Toutes les commandes doivent être exécutées à partir du répertoire reliable_vqa
et définir env.user_dir=
dans les options de ligne de commande MMF (ou, de manière équivalente, MMF_USER_DIR=$PWD
avant la commande).
Pour entraîner un modèle VQA :
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=movie_mcan config=configs/experiments/movie_mcan/vqa2/defaults.yaml run_type=train_val
Pour entraîner une fonction de sélection multimodale apprise (Sélecteur) pour le modèle VQA :
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_movie_mcan config=configs/experiments/movie_mcan/vqa2/select_pred.yaml run_type=train_val checkpoint.resume_pretrained=True checkpoint.resume_file=/best.ckpt
L'option checkpoint.resume_file
peut également être l'un des fichiers model.pth
téléchargés ci-dessus. En outre, il est préférable de s'assurer que les env.save_dir
pour MaxProb et Selector sont différents. Sinon, ils s’écraseront.
Pour ViLBERT et VisualBERT, nous utilisons les modèles déjà affinés sur VQA v2 fournis par MMF. Ceux-ci servent de modèles sélectifs MaxProb pour ViLBERT et VisualBERT. Pour entraîner le sélecteur avec ViLBERT ou VisualBERT, vous devez fournir le chemin checkpoint.resume_file
vers le fichier .pth
du modèle MMF téléchargé depuis le zoo modèle (ou le lien ci-dessus) :
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_visual_bert config=configs/experiments/visual_bert/vqa2/select_pred.yaml run_type=train_val checkpoint.resume_pretrained=True checkpoint.resume_file=/visual_bert.finetuned.vqa2.from_coco_train/model.pth
Nous faisons d’abord des prédictions sur les ensembles val et test, puis nous les évaluons à l’aide des scripts d’évaluation.
Pour obtenir des prédictions, changez le type d'exécution en test ( run_type=test
), ajoutez l'argument evaluation.predict=True
et remplacez le chemin d'annotation test
dans la configuration par celui des annotations sur lesquelles obtenir des prédictions (par exemple, vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
, vqa2/reliable_vqa/annotations/imdb_val2014-val.npy
) :
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=select_movie_mcan config=configs/experiments/movie_mcan/vqa2/select_pred.yaml run_type=test evaluation.predict=True checkpoint.resume=True checkpoint.resume_file=/best.ckpt dataset_config.vqa2_extended.annotations.test=vqa2/reliable_vqa-clip/annotations/imdb_val2014-test.npy
Pour obtenir des prédictions de ViLBERT et VisualBERT avec MaxProb, vous pouvez également simplement utiliser les versions de zoo modèle de celles-ci :
mmf_run env.user_dir=/reliable_vqa env.data_dir= env.save_dir= dataset=vqa2_extended model=visual_bert config=configs/experiments/visual_bert/vqa2/defaults.yaml run_type=test evaluation.predict=True checkpoint.resume=True checkpoint.resume_zoo=visual_bert.finetuned.vqa2.from_coco_train dataset_config.vqa2_extended.annotations.test=vqa2/reliable_vqa-clip/annotations/imdb_val2014-test.npy
Cela produira un fichier JSON (format similaire au format de résultat VQA v2) dans env.save_dir
contenant les réponses et les confiances du modèle que nous utilisons pour évaluer. Répétez cette opération en utilisant imdb_val2014-val.npy
comme ensemble de tests pour obtenir des résultats sur les données val pour le choix des seuils.
Ensuite, nous utilisons un script d'évaluation autonome pour obtenir les métriques d'évaluation, qui accepte la question VQA v2 d'origine et les annotations JSON comme références :
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
Cette commande affichera la précision VQA , la couverture@risque , l'AUC pour la courbe de couverture des risques et la fiabilité effective . Notez que, étant donné qu'il utilise les annotations VQA v2 d'origine et un format similaire au format de résultat VQA, ce script d'évaluation doit être compatible avec les prédictions de modèles extérieurs à ce référentiel en fournissant simplement un champ confidence
supplémentaire dans les prédictions.
Nous tenons à remercier les créateurs de MMF pour leurs implémentations open source. Nous remercions Sheng Shen et les auteurs de How Much Can CLIP Benefit Vision-and-Language Tasks ? pour fournir une assistance sur l'extraction de fonctionnalités et la reproduction de leur modèle ainsi que la publication de leur code. Nous remercions également Aishwarya Agrawal pour sa contribution aux évaluations. Enfin, nous remercions Grace Luo pour son aide précoce avec MMF.
La majorité de Reliable VQA est sous licence CC-BY-NC (voir LICENCE pour plus de détails), cependant,fixed_mcan_clip_grid_feature.py, qui est modifié à partir du script mcan_clip_grid_feature.py dans https://github.com/clip-vil/CLIP-ViL /tree/master/CLIP-ViL-Direct/vqa, est sous licence Apache 2.0 et eval_scripts/vqa.py ainsi que eval_scripts/reliable_vqa_eval.py, qui sont modifiés à partir de vqa.py et vqaEval.py dans https:/ /github.com/GT-Vision-Lab/VQA, sont sous licence BSD 2-Clause.