이는 ECCV 2022 논문 신뢰할 수 있는 시각적 질문 답변: 잘못된 답변보다 기권을 구현한 것입니다. 우리 논문이나 이 저장소가 귀하의 작업에 유용하다고 생각되면 다음을 인용해 주십시오.
@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의 기본 실제 답변을 의도치 않게 사용했습니다(예: 3k 답변의 어휘에 없는 경우 일부 항목을 대체합니다). 따라서 원래 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+가 필요합니다.
핵심요약: 우리는 VQA v2 데이터세트를 사용합니다. VQA v2 검증 세트를 3개 부분으로 나누고 아래에 주석을 제공합니다. 또한 아래에 제공된 CLIP-ViL 모델에 대한 사용자 정의 그리드 기능을 추출합니다. 다른 모든 주석 및 기능은 이 저장소의 각 구성에 지정된 대로 MMF에 의해 자동으로 다운로드됩니다.
먼저 여기(https://visualqa.org/download.html)에서 원본 VQA v2 유효성 검사 질문과 답변 주석 JSON 파일을 다운로드하세요. 이는 평가에 사용됩니다.
처음으로 구성 파일 중 하나로 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/
CLIP-ViL/CLIP-ViL-Direct/vqa
에 fixed_mcan_clip_grid_feature.py
복사/이동합니다.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 모델입니다. Calibration 및 Selector 선택적 예측자 자체는 VQA 모델보다 훨씬 작지만 편의를 위해 해당 체크포인트에 VQA 모델을 포함합니다.
MaxProb ViLBERT 및 VisualBERT는 MMF(사전 학습 및 미세 조정)의 것과 동일하므로 MMF 모델 동물원을 통해 다운로드할 수도 있습니다. MMF 모델 동물원에서 ViLBERT는 vilbert.finetuned.vqa2.from_vqa2_train
에 해당하고 VisualBERT는 visual_bert.finetuned.vqa2.from_coco_train
에 해당합니다.
MaxProb | 구경 측정 | 선택자 | |
---|---|---|---|
피티아 | 다운로드 | 다운로드 | 다운로드 |
빌버트 | MMF 다운로드 | 다운로드 | 다운로드 |
비주얼버트 | MMF 다운로드 | 다운로드 | 다운로드 |
CLIP-ViL | 다운로드 | 다운로드 | 다운로드 |
여기에서는 모델 학습 및 평가를 위한 샘플 명령을 제공합니다. 이 예제에서는 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
파일 중 하나일 수도 있습니다. 또한 MaxProb와 Selector의 env.save_dir
이 다른지 확인하는 것이 가장 좋습니다. 그렇지 않으면 서로 덮어쓰게 됩니다.
ViLBERT 및 VisualBERT의 경우 MMF에서 제공하는 VQA v2에서 이미 미세 조정된 모델을 활용합니다. 이는 ViLBERT 및 VisualBERT에 대한 MaxProb 선택 모델 역할을 합니다. ViLBERT 또는 VisualBERT를 사용하여 Selector를 교육하려면 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 및 테스트 세트에 대해 예측한 다음 평가 스크립트를 사용하여 이를 평가합니다.
예측을 얻으려면 실행 유형을 테스트( 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
그러면 env.save_dir
내에서 평가에 사용하는 모델의 답변과 신뢰도가 포함된 JSON 파일(VQA v2 결과 형식과 유사한 형식)이 생성됩니다. 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 정확도 , Coverage@risk , 위험 범위 곡선의 AUC 및 Effective Reliability를 출력합니다. 이는 원본 VQA v2 주석 및 VQA 결과 형식과 유사한 형식을 사용하므로 이 평가 스크립트는 예측에 추가 confidence
필드를 제공하기만 하면 이 저장소 외부 모델의 예측과 호환되어야 합니다.
오픈 소스 구현에 대해 MMF 제작자에게 감사의 말씀을 전하고 싶습니다. Sheng Shen과 CLIP이 시각 및 언어 작업에 얼마나 많은 이점을 줄 수 있습니까?의 저자에게 감사드립니다. 기능 추출과 모델 재생산, 코드 공개에 대한 지원을 제공합니다. 또한 평가에 대한 의견을 주신 Aishwarya Agrawal에게도 감사드립니다. 마지막으로 MMF 초기 지원에 대해 Grace Luo에게 감사드립니다.
Reliable VQA의 대부분은 CC-BY-NC에 따라 라이센스가 부여되지만(자세한 내용은 라이센스 참조), 고정_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 라이선스 및 eval_scripts/vqa.py에 따라 라이선스가 부여됩니다. https://github.com/GT-Vision-Lab/VQA의 vqa.py 및 vqaEval.py에서 수정된 eval_scripts/reliable_vqa_eval.py는 BSD 2조 라이선스에 따라 라이선스가 부여됩니다.