これは、ECCV 2022 論文「Reliable Visual Question Answering: Abstain Both Than Answer Incorrectly」の実装です。私たちの論文やこのリポジトリがあなた自身の研究に役立つと思われる場合は、以下を引用してください。
@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}
}
このリポジトリは PyTorch を使用し、MMF 上に構築されています。これには次の内容が含まれます。
更新:このリポジトリの前のバージョンでは、わずかに異なる参照回答を持つフィールドanswers
で MMF のデフォルトのグラウンド トゥルース回答が意図せず使用されていました (たとえば、3,000 件の回答の語彙にない場合、一部のエントリが置き換えられます)。したがって、元の VQA v2 アノテーションを評価の参照として使用するスタンドアロンの評価スクリプト (eval_scripts/) を提供します。この更新は arXiv バージョンに反映されており (付録の変更ログを参照してください)、今後の作業では結果を報告するために更新された評価を使用する必要があります。
このリポジトリ内のフォルダーは次のように構成されています。
configs/
:experiments/
各 VQA モデルと対応する選択関数をトレーニングするための YAML 構成が含まれています。datasets/
は、カスタムvqa2_extended
データセットの YAML 構成が含まれています。datasets/
: vqa2_extended
のデータセット実装とビルダーが含まれています。このデータセットは MMF 内の VQA v2 と同じですが、選択関数用の追加のモデル信頼性出力と、キャリブレーション評価用の複数選択アノテーションもサポートしています。eval_scripts/
: 論文内のリスク カバレッジと有効な信頼性のメトリクスを計算するための評価スクリプトが含まれています。reliable_vqa_eval.py
: さまざまなメトリックを計算するエバリュエーター オブジェクトが含まれています。run.py
: モデル予測とグラウンド トゥルース アノテーションを指定して評価を実行するためのスクリプト。vqa.py
: VQA v2 アノテーションおよび予測とインターフェイスするためのオブジェクトが含まれています。models/
: 実験の各 VQA モデルについて、選択関数に必要な追加の信頼度および中間特徴出力を返す元のモデルの上にバージョンを登録します。selective_predictors.py
には、キャリブレーション モデルとセレクター モデルの両方の実装が含まれています。modules/
:losses.py
は、学習されたセレクター モデルの正確性予測損失関数が含まれています。metrics.py
検証用の MMF でのリスク カバレッジと有効な信頼性のメトリクスの実装が含まれています。__init__.py
: MMF で使用されるカスタム MMF コンポーネントをインポートします。 ここで MMF のインストール手順に従ってください: https://mmf.sh/docs/。ソースからインストールすることをお勧めします。ソースからインストールする場合、このリポジトリの下に MMF リポジトリのクローンを作成する必要がないことに注意してください。 MMF を独自のディレクトリに複製するだけです。また、インストールと実行には MMF とこのリポジトリの両方で使用できる conda 環境を使用することをお勧めします。
MMF のインストール後、環境には Python 3.7 以降と PyTorch 1.6 以降がインストールされている必要があります。 scikit-learn 1.0 以降と pandas 1.3.4 以降も必要です。
TL;DR: VQA v2 データセットを使用します。 VQA v2 検証セットを 3 つの部分に分割し、以下の注釈を提供します。また、以下に示すように、CLIP-ViL モデルのカスタム グリッド機能も抽出します。他のすべての注釈と機能は、このリポジトリの各構成で指定されているように、MMF によって自動的にダウンロードされます。
まず、元の VQA v2 検証の質問と回答の注釈 JSON ファイルを https://visualqa.org/download.html からダウンロードします。これらは評価に使用されます。
構成ファイルのいずれかを使用して MMF を初めて実行する場合、MMF は VQA v2 の機能と注釈を自動的にダウンロードする必要があります。これらのディレクトリ/ファイルは、 vqa2
ディレクトリの下の$MMF_DATA_DIR
( env.data_dir
) に保存されます。詳細については、MMF を参照してください。このリポジトリを通じて Pythia+MaxProb を実行することから始めることをお勧めします。これにより、Pythia、ViLBERT、および VisualBERT で使用される注釈と機能がダウンロードされます (詳細については、「トレーニング」を参照してください)。
また、検証分割と CLIP 機能 (次のセクションで説明) もこれらのディレクトリ内に保存することをお勧めします。次のセットアップはこれが当てはまることを前提としています。ディレクトリを別の構造にする場合は、それに応じて設定パスなどを更新する必要があります。
標準 VQA v2 トレーニング セットは、VQA モデルのトレーニングに使用されます。ただし、test-dev および test-std の VQA v2 分割では回答の注釈が利用できないため、評価目的で VQA v2 検証セットを 3 つの素のセット (つまり、画像や質問は共有されません) に分割しました。
dev
: VQA モデルのトレーニング用の検証セットと選択的予測子のトレーニング セット。val
: 選択的予測子の検証セット。test
: すべてのモデルのテスト セット、および論文で結果を報告するもの。これらの分割された注釈ファイルは、ここからダウンロードできます: ダウンロード
ダウンロードしたら、圧縮ファイルを
ディレクトリに配置します。ファイルを解凍すると、次のディレクトリ構造が設定されます。
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
構成ファイルをそのまま使用するには、これらのアノテーション ファイルをパス
に配置する必要があります。それ以外の場合は、パスに一致するように構成ファイルと注釈ファイルを編集する必要があります。たとえば、VQA モデルをトレーニングするための構成内のデータセット アノテーションは次のとおりです。
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
一方、セレクターをトレーニングするためのアノテーションは次のとおりです。
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
すべての VQA モデルのトレーニングでは、速度と一貫性を確保するために、画像の代わりに事前に抽出された特徴を使用します。 Pythia、ViLBERT、および VisualBERT モデルはすべて、MMF 経由で実行すると自動的にダウンロードできる機能を使用します。ただし、CLIP-ViL は CLIP のグリッド イメージ機能を使用します。事前に計算された特徴と、CLIP 特徴を個別に抽出するために使用できる抽出スクリプトのわずかに調整されたバージョンが CLIP-ViL リポジトリから提供されます。
/vqa2/
内のファイル内の注釈を解凍すると、次の結果が得られます。 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
ディレクトリ内の機能を解凍します。ディレクトリ構造は 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
CLIP-ViL リポジトリのCLIP-ViL/CLIP-ViL-Direct/vqa
にコピー/移動します。CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
のOUTPUT_DIR
、機能に必要なディレクトリ (つまり、 /vqa2/reliable_vqa-clip/features
) に変更します。coco_2014_val
を使用して繰り返します)。 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
この論文では、4 つの VQA モデルと 3 つの選択関数の組み合わせごとに、トレーニング済みモデルのチェックポイントを提供します。 MaxProb モデルのチェックポイントは単なる VQA モデルであることに注意してください。キャリブレーションおよびセレクターの選択的予測子自体は VQA モデルよりもはるかに小さいですが、便宜上、対応するチェックポイントに VQA モデルを含めています。
MaxProb ViLBERT および VisualBERT は MMF のものと同じである (事前トレーニングおよび微調整済み) ため、MMF モデル ズーを介してダウンロードすることもできることに注意してください。 MMF モデル Zoo から、 ViLBERT はvilbert.finetuned.vqa2.from_vqa2_train
に対応し、 VisualBERT はvisual_bert.finetuned.vqa2.from_coco_train
に対応します。
マックスプロブ | 較正 | セレクタ | |
---|---|---|---|
ピティア | ダウンロード | ダウンロード | ダウンロード |
ビルバート | MMFダウンロード | ダウンロード | ダウンロード |
VisualBERT | MMFダウンロード | ダウンロード | ダウンロード |
クリップヴィル | ダウンロード | ダウンロード | ダウンロード |
ここでは、モデルのトレーニングと評価のためのサンプル コマンドを提供します。これらの例では、CLIP-ViL モデル (対応するモデル アーキテクチャであるmovie_mcan
と呼ばれます) を使用します。他のモデルで実行するには、 config
正しいパスに変更し、 model
引数をpythia
、 vilbert
、 visual_bert
またはmovie_mcan
(MaxProb を使用する場合) のいずれかに変更するか、モデルにselect_*
使用する*
(Calibration または Selector を使用する場合) だけです。例: select_visual_bert
)。 CLIP-ViL の注釈ファイルは、CLIP 機能が使用されるため異なります (たとえば、 configs/experiments/movie_mcan/vqa2/defaults.yaml
を参照) が、他のすべてのモデルは同じ注釈ファイルのセットを使用するため、必ず異なることに注意してください。対応する正しいアノテーション ファイルとフィーチャ パスを使用してください。
すべてのコマンドは、 reliable_vqa
ディレクトリから実行する必要があり、MMF コマンド ライン オプションでenv.user_dir=
を設定します (または、コマンドの前にMMF_USER_DIR=$PWD
設定します)。
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
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
checkpoint.resume_file
オプションは、上でダウンロードしたmodel.pth
ファイルの 1 つであることもできます。また、MaxProb と Selector のenv.save_dir
が異なることを確認することをお勧めします。そうしないと、相互に上書きされます。
ViLBERT と VisualBERT については、MMF が提供する VQA v2 ですでに微調整されたモデルを利用します。これらは、ViLBERT および VisualBERT の MaxProb 選択モデルとして機能します。 ViLBERT または VisualBERT を使用してセレクターをトレーニングするには、Model Zoo (または上記のリンク) からダウンロードした MMF モデル.pth
ファイルへのcheckpoint.resume_file
パスを指定する必要があります。
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
まず val セットと test セットに対して予測を行い、次に評価スクリプトを使用してこれらを評価します。
予測を取得するには、実行タイプをテスト ( run_type=test
) に変更し、引数evaluation.predict=True
追加し、構成内のtest
アノテーション パスを、予測を取得するアノテーションのパス (例: vqa2/reliable_vqa/annotations/imdb_val2014-test.npy
に置き換えます。 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
MaxProb を使用して ViLBERT および VisualBERT から予測を取得するには、これらの Model Zoo バージョンを単純に使用することもできます。
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
これにより、評価に使用するモデルの回答と信頼度を含む JSON ファイル (VQA v2 結果形式と同様の形式) がenv.save_dir
内に生成されます。 imdb_val2014-val.npy
テスト セットとして使用してこれを繰り返し、しきい値を選択するための val データの結果を取得します。
次に、スタンドアロン評価スクリプトを使用して評価メトリクスを取得します。これは、元の VQA v2 質問と注釈 JSON を参照として受け入れます。
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
このコマンドは、 VQA 精度、カバレッジ@リスク、リスクカバレッジ曲線のAUC 、および有効信頼性を出力します。これは元の VQA v2 アノテーションと VQA 結果形式と同様の形式を使用するため、この評価スクリプトは、予測に追加のconfidence
度フィールドを提供するだけで、このリポジトリ外のモデルからの予測と互換性がある必要があることに注意してください。
オープンソース実装について MMF の作成者に感謝します。 Sheng Shen と『CLIP Benefit Vision-and-Language Tasks?』の著者に感謝します。機能の抽出とモデルの再現、およびコードのリリースに関する支援を提供していただきました。また、評価に関する意見を提供してくれた Aishwarya Agrawal にも感謝します。最後に、MMF に対する初期の支援に対して Grace Luo に感謝します。
Reliable VQA の大部分は CC-BY-NC (詳細についてはライセンスを参照) に基づいてライセンスされていますが、fixed_mcan_clip_grid_feature.py は https://github.com/clip-vil/CLIP-ViL の mcan_clip_grid_feature.py スクリプトから変更されています。 /tree/master/CLIP-ViL-Direct/vqa は、Apache 2.0 ライセンスに基づいてライセンスされており、 https://github.com/GT-Vision-Lab/VQA の vqa.py および vqaEval.py を変更した eval_scripts/vqa.py および eval_scripts/reliable_vqa_eval.py は、BSD 2 条項に基づいてライセンスされています。ライセンス。