Dies ist die Implementierung für den ECCV 2022-Artikel „Zuverlässige visuelle Beantwortung von Fragen: Enthalten statt falsch antworten“. Wenn Sie unseren Artikel oder dieses Repository für Ihre eigene Arbeit nützlich finden, zitieren Sie bitte:
@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}
}
Dieses Repository verwendet PyTorch und basiert auf MMF. Es enthält Folgendes:
Update: In der vorherigen Version dieses Repos wurden unbeabsichtigt die Standard-Ground-Truth-Antworten in MMF in den answers
verwendet, die leicht unterschiedliche Referenzantworten haben (z. B. werden einige Einträge ersetzt, wenn sie nicht im Vokabular von 3k-Antworten enthalten sind). Daher stellen wir ein eigenständiges Bewertungsskript (eval_scripts/) bereit, das die ursprünglichen VQA v2-Anmerkungen als Referenzen für Bewertungen verwendet. Dieses Update spiegelt sich in der arXiv-Version wider (siehe Changelog im Anhang) und zukünftige Arbeiten sollten die aktualisierten Auswertungen für die Ergebnisberichterstattung verwenden.
Die Ordner in diesem Repo sind wie folgt aufgebaut:
configs/
:experiments/
enthält YAML-Konfigurationen zum Trainieren jedes der VQA-Modelle und der entsprechenden Auswahlfunktionen.datasets/
enthält die YAML-Konfiguration für den benutzerdefinierten vqa2_extended
Datensatz.datasets/
: enthält die Datensatzimplementierung und den Builder für vqa2_extended
. Dieser Datensatz ist derselbe wie VQA v2 in MMF, unterstützt aber auch zusätzliche Modellkonfidenzausgaben für die Auswahlfunktionen und Multiple-Choice-Anmerkungen für die Kalibrierungsbewertung.eval_scripts/
: enthält Bewertungsskripte zur Berechnung der Risikoabdeckung und der effektiven Zuverlässigkeitsmetriken im Papier.reliable_vqa_eval.py
: enthält ein Evaluatorobjekt, das die verschiedenen Metriken berechnet.run.py
: Skript zum Ausführen der Auswertungen anhand der Modellvorhersagen und der Ground-Truth-Anmerkungen.vqa.py
: enthält ein Objekt für die Schnittstelle zu den VQA v2-Anmerkungen und -Vorhersagen.models/
: Für jedes VQA-Modell in unseren Experimenten registrieren wir eine Version über dem Originalmodell, die zusätzliches Vertrauen und Zwischenmerkmalsausgaben zurückgibt, die für die Auswahlfunktionen benötigt werden.selective_predictors.py
enthält Implementierungen sowohl für Kalibrierungs- als auch für Selector-Modelle.modules/
:losses.py
enthält die Korrektheitsvorhersage-Verlustfunktion für erlernte Selector-Modelle.metrics.py
enthält Implementierungen der Metriken Risikoabdeckung und effektive Zuverlässigkeit in MMF zur Validierung.__init__.py
: importiert benutzerdefinierte MMF-Komponenten zur Verwendung durch MMF. Bitte folgen Sie den MMF-Installationsanweisungen hier: https://mmf.sh/docs/. Wir empfehlen die Installation von der Quelle. Beachten Sie, dass Sie bei der Installation von der Quelle das MMF-Repository nicht unter diesem Repo klonen müssen. Sie können MMF einfach in ein eigenes Verzeichnis klonen. Wir empfehlen außerdem, für die Installation und Ausführung eine Conda-Umgebung zu verwenden, die sowohl für MMF als auch für dieses Repo verwendet werden kann.
Nach der MMF-Installation sollten in Ihrer Umgebung Python 3.7+ und PyTorch 1.6+ installiert sein. Sie benötigen außerdem Scikit-Learn 1.0+ und Pandas 1.3.4+.
TL;DR: Wir verwenden den VQA v2-Datensatz. Wir teilen den VQA v2-Validierungssatz in drei Teile auf und stellen die folgenden Anmerkungen bereit. Wir extrahieren auch benutzerdefinierte Rasterfunktionen für das CLIP-ViL-Modell (siehe unten). Alle anderen Anmerkungen und Funktionen werden automatisch von MMF heruntergeladen, wie in den einzelnen Konfigurationen in diesem Repo angegeben.
Laden Sie zunächst die ursprünglichen VQA v2-Validierungsfrage- und Antwortanmerkungs-JSON-Dateien von hier herunter: https://visualqa.org/download.html. Diese werden für die Auswertungen verwendet.
Wenn Sie MMF zum ersten Mal mit einer unserer Konfigurationsdateien ausführen, sollte MMF automatisch die Funktionen und Anmerkungen für VQA v2 herunterladen. Diese Verzeichnisse/Dateien werden im $MMF_DATA_DIR
( env.data_dir
) unter einem vqa2
-Verzeichnis gespeichert. Weitere Informationen hierzu finden Sie im MMF. Wir empfehlen, zunächst Pythia+MaxProb über dieses Repo auszuführen, wodurch die Anmerkungen und Funktionen heruntergeladen werden, die für Pythia, ViLBERT und VisualBERT verwendet werden (Einzelheiten finden Sie unter Schulung).
Wir empfehlen außerdem, unsere Validierungsaufteilungen und CLIP-Funktionen (in den nächsten Abschnitten beschrieben) ebenfalls in diesen Verzeichnissen zu speichern, und das folgende Setup geht davon aus, dass dies der Fall ist. Wenn Sie Ihre Verzeichnisse anders strukturieren möchten, müssen Sie Ihren Konfigurationspfad usw. entsprechend aktualisieren.
Für das Training von VQA-Modellen wird das Standard-VQA-v2-Trainingsset verwendet. Da jedoch für die VQA v2-Aufteilungen test-dev und test-std keine Antwortanmerkungen verfügbar sind, teilen wir den VQA v2-Validierungssatz zu Bewertungszwecken in drei disjunkte Sätze auf (d. h. es werden keine Bilder oder Fragen geteilt):
dev
: Validierungssatz für das VQA-Modelltraining und Trainingssatz für die selektiven Prädiktoren.val
: Validierungssatz für die selektiven Prädiktoren.test
: Testsatz für alle Modelle und worüber wir in unserem Artikel über die Ergebnisse berichten.Diese geteilten Anmerkungsdateien können hier heruntergeladen werden: Download
Platzieren Sie die komprimierte Datei nach dem Herunterladen im Verzeichnis
. Durch das Dekomprimieren der Datei sollte die folgende Verzeichnisstruktur eingerichtet werden:
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
Um unsere Konfigurationsdateien unverändert zu verwenden, sollten diese Annotationsdateien unter dem Pfad
abgelegt werden. Andernfalls müssen Sie die Konfigurations- und Anmerkungsdateien bearbeiten, damit sie Ihren Pfaden entsprechen. Die Datensatzanmerkungen in einer Konfiguration zum Trainieren eines VQA-Modells lauten beispielsweise:
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
Während die Anmerkungen zum Training eines Selektors lauten:
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
Für das Training aller VQA-Modelle verwenden wir aus Geschwindigkeits- und Konsistenzgründen vorextrahierte Funktionen anstelle von Bildern. Die Modelle Pythia, ViLBERT und VisualBERT verwenden alle Funktionen, die bei der Ausführung über MMF automatisch heruntergeladen werden können. CLIP-ViL verwendet jedoch Rasterbildfunktionen von CLIP. Wir stellen unsere vorberechneten Funktionen sowie eine leicht angepasste Version des Extraktionsskripts aus dem CLIP-ViL-Repo zur Verfügung, mit dem CLIP-Funktionen unabhängig extrahiert werden können.
/vqa2/
, was Folgendes ergibt: 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
. Ihre Verzeichnisstruktur sollte der von MMFs entsprechen: 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
nach CLIP-ViL/CLIP-ViL-Direct/vqa
im CLIP-ViL-Repository.OUTPUT_DIR
in CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
in das gewünschte Verzeichnis für die Features (d. h. /vqa2/reliable_vqa-clip/features
).coco_2014_val
um es auf val2014-Bildern auszuführen): 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
Wir stellen in unserem Artikel trainierte Modellprüfpunkte für jede Kombination der 4 VQA-Modelle und 3 Auswahlfunktionen bereit. Beachten Sie, dass es sich bei den MaxProb-Modellprüfpunkten einfach um die VQA-Modelle handelt. Die selektiven Prädiktoren „Calibration“ und „Selector“ selbst sind viel kleiner als die VQA-Modelle, dennoch beziehen wir das VQA-Modell der Einfachheit halber in die entsprechenden Prüfpunkte ein.
Beachten Sie, dass MaxProb ViLBERT und VisualBERT mit denen von MMF identisch sind (vorab trainiert und fein abgestimmt), sodass sie auch über den MMF-Modellzoo heruntergeladen werden können. Aus dem MMF-Modellzoo entspricht ViLBERT vilbert.finetuned.vqa2.from_vqa2_train
und VisualBERT entspricht visual_bert.finetuned.vqa2.from_coco_train
.
MaxProb | Kalibrierung | Wähler | |
---|---|---|---|
Pythia | herunterladen | herunterladen | herunterladen |
ViLBERT | MMF-Download | herunterladen | herunterladen |
VisualBERT | MMF-Download | herunterladen | herunterladen |
CLIP-ViL | herunterladen | herunterladen | herunterladen |
Hier stellen wir Beispielbefehle zum Trainieren und Bewerten von Modellen bereit. Diese Beispiele verwenden das CLIP-ViL-Modell (bezeichnet als movie_mcan
, was der entsprechenden Modellarchitektur entspricht). Die Ausführung mit anderen Modellen erfordert lediglich das Ändern der config
auf den richtigen Pfad und das Ändern des model
in eines von pythia
, vilbert
, visual_bert
oder movie_mcan
(bei Verwendung von MaxProb) oder die Verwendung select_*
für ein Modell *
(bei Verwendung von Calibration oder einem Selector). zB select_visual_bert
). Beachten Sie, dass die Anmerkungsdateien für CLIP-ViL unterschiedlich sind, da CLIP-Funktionen verwendet werden (siehe z. B. configs/experiments/movie_mcan/vqa2/defaults.yaml
), während alle anderen Modelle denselben Satz von Anmerkungsdateien verwenden. Stellen Sie daher sicher, dass dies der Fall ist Verwenden Sie die richtigen entsprechenden Annotationsdateien und Feature-Pfade.
Alle Befehle sollten aus dem Verzeichnis reliable_vqa
ausgeführt werden und in den MMF-Befehlszeilenoptionen env.user_dir=
(oder entsprechend MMF_USER_DIR=$PWD
vor dem Befehl) festgelegt werden.
So trainieren Sie ein VQA-Modell:
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
So trainieren Sie eine erlernte multimodale Auswahlfunktion (Selektor) für das VQA-Modell:
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
Die Option checkpoint.resume_file
könnte auch eine der oben heruntergeladenen model.pth
-Dateien sein. Stellen Sie außerdem am besten sicher, dass env.save_dir
für MaxProb und Selector unterschiedlich sind. Andernfalls überschreiben sie sich gegenseitig.
Für ViLBERT und VisualBERT verwenden wir die bereits auf VQA v2 optimierten Modelle, die von MMF bereitgestellt werden. Diese dienen als unsere MaxProb-Selektivmodelle für ViLBERT und VisualBERT. Um den Selector mit ViLBERT oder VisualBERT zu trainieren, sollten Sie den checkpoint.resume_file
Pfad zur vom Model Zoo heruntergeladenen MMF-Modell .pth
-Datei (oder über den Link oben) angeben:
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
Wir treffen zunächst Vorhersagen zu den Val- und Testsätzen und werten diese dann mithilfe der Auswertungsskripte aus.
Um Vorhersagen zu erhalten, ändern Sie den Ausführungstyp in „test“ ( run_type=test
), fügen Sie das Argument evaluation.predict=True
hinzu und ersetzen Sie den test
in der Konfiguration durch den der Annotationen, für die Vorhersagen abgerufen werden sollen (z. B. 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
Um Vorhersagen von ViLBERT und VisualBERT mit MaxProb zu erhalten, können Sie auch einfach die Modell-Zoo-Versionen davon verwenden:
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
Dadurch wird eine JSON-Datei (ähnliches Format wie das VQA v2-Ergebnisformat) in env.save_dir
erstellt, die die Antworten und Konfidenzen des Modells enthält, die wir zur Auswertung verwenden. Wiederholen Sie diesen Vorgang mit imdb_val2014-val.npy
als Testsatz, um Ergebnisse zu den Val-Daten für die Auswahl von Schwellenwerten zu erhalten.
Als Nächstes verwenden wir ein eigenständiges Bewertungsskript, um die Bewertungsmetriken abzurufen, das die ursprünglichen VQA v2-Fragen- und Anmerkungs-JSONs als Referenzen akzeptiert:
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
Dieser Befehl gibt VQA-Genauigkeit , Coverage@Risk , AUC für die Risiko-Deckungskurve und effektive Zuverlässigkeit aus. Beachten Sie, dass dieses Bewertungsskript mit Vorhersagen von Modellen außerhalb dieses Repositorys kompatibel sein sollte, da hierbei die ursprünglichen VQA v2-Anmerkungen und ein ähnliches Format wie das VQA-Ergebnisformat verwendet werden, indem einfach ein zusätzliches confidence
in den Vorhersagen bereitgestellt wird.
Wir möchten den Machern von MMF für ihre Open-Source-Implementierungen danken. Wir danken Sheng Shen und den Autoren von How Much Can CLIP Benefit Vision-and-Language Tasks? für die Bereitstellung von Unterstützung beim Extrahieren von Features und der Reproduktion ihres Modells sowie der Veröffentlichung ihres Codes. Wir danken auch Aishwarya Agrawal für ihren Beitrag zu den Bewertungen. Abschließend danken wir Grace Luo für die frühe Unterstützung bei MMF.
Der Großteil von Reliable VQA ist unter CC-BY-NC lizenziert (Einzelheiten finden Sie unter LIZENZ), jedoch unter „fixed_mcan_clip_grid_feature.py“, das aus dem Skript „mcan_clip_grid_feature.py“ in https://github.com/clip-vil/CLIP-ViL geändert wurde /tree/master/CLIP-ViL-Direct/vqa, ist unter der Apache 2.0-Lizenz lizenziert und eval_scripts/vqa.py sowie eval_scripts/reliable_vqa_eval.py, die von vqa.py und vqaEval.py in https://github.com/GT-Vision-Lab/VQA geändert wurden, sind unter der BSD 2-Klausel lizenziert Lizenz.