Это реализация документа 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. Он содержит следующее:
Реализация показателей, используемых в нашей статье, включая риск, покрытие и эффективную надежность.
Реализации для максимальной вероятности (MaxProb), калибровки и изученных функций мультимодального выбора (Selector).
Тренировочные конфиги для моделей в нашей работе.
Ссылки для скачивания разделений набора данных VQA v2, контрольных точек обученной модели и предварительно извлеченных функций, используемых в нашей работе.
Обновление: предыдущая версия этого репозитория непреднамеренно использовала основные ответы по умолчанию в MMF в answers
на поля, которые имеют немного другие справочные ответы (например, заменяют некоторые записи, если их нет в словаре ответов 3k). Поэтому мы предоставляем отдельный сценарий оценки (eval_scripts/), который использует исходные аннотации VQA v2 в качестве ссылок для оценок. Это обновление отражено в версии arXiv (см. список изменений в приложении), и в будущей работе следует использовать обновленные оценки для отчетности о результатах.
Папки в этом репозитории структурированы следующим образом:
configs/
:
experiments/
содержит конфигурации YAML для обучения каждой модели VQA и соответствующих функций выбора.
datasets/
содержит конфигурацию YAML для пользовательского набора данных vqa2_extended
.
datasets/
: содержит реализацию набора данных и построитель для vqa2_extended
. Этот набор данных аналогичен VQA v2 в MMF, но он также поддерживает дополнительные выходные данные достоверности модели для функций выбора и аннотации с множественным выбором для оценки калибровки.
eval_scripts/
: содержит сценарии оценки для расчета показателей покрытия рисков и эффективной надежности в документе.
reliable_vqa_eval.py
: содержит объект оценщика, который вычисляет различные метрики.
run.py
: скрипт для запуска оценок с учетом прогнозов модели и аннотаций основной истины.
vqa.py
: содержит объект для взаимодействия с аннотациями и прогнозами VQA v2.
models/
: для каждой модели VQA в наших экспериментах мы регистрируем версию поверх исходной модели, которая возвращает дополнительные достоверные и промежуточные выходные данные функций, необходимые для функций выбора.
selective_predictors.py
содержит реализации как для моделей калибровки, так и для моделей Selector.
modules/
:
losses.py
содержит функцию потерь прогнозирования правильности для изученных моделей селектора.
metrics.py
содержит реализации метрик покрытия рисков и эффективной надежности в MMF для проверки.
__init__.py
: импортирует пользовательские компоненты MMF, которые будут использоваться MMF.
Следуйте инструкциям по установке MMF здесь: https://mmf.sh/docs/. Мы рекомендуем установку из исходного кода. Обратите внимание: при установке из исходного кода вам не нужно клонировать репозиторий MMF в этом репозитории. Вы можете просто клонировать MMF в отдельный каталог. Мы также рекомендуем использовать среду conda для установки и запуска, которую можно использовать как для MMF, так и для этого репозитория.
После установки 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, как указано в каждой конфигурации в этом репозитории.
Сначала загрузите исходный JSON-файл проверки VQA v2 и аннотацию к ответу отсюда: https://visualqa.org/download.html. Они будут использоваться для оценок.
При первом запуске MMF с одним из наших файлов конфигурации MMF должен автоматически загрузить функции и аннотации для VQA v2. Эти каталоги/файлы будут храниться в $MMF_DATA_DIR
( env.data_dir
) в каталоге vqa2
. Пожалуйста, посетите MMF для получения более подробной информации об этом. Мы рекомендуем начать с запуска Pythia+MaxProb через этот репозиторий, который загрузит аннотации и функции, используемые для Pythia, ViLBERT и VisualBERT (подробности см. в разделе «Обучение»).
Мы также рекомендуем сохранять наши разделения проверки и функции CLIP (описанные в следующих разделах) в этих каталогах, и следующая настройка предполагает, что это так. Если вы решите структурировать свои каталоги по-другому, вам необходимо будет соответствующим образом обновить путь к конфигурации и т. д.
Для обучения моделей VQA используется стандартный обучающий набор VQA v2. Однако, поскольку аннотации к ответам недоступны для разделения VQA v2 test-dev и test-std, мы разделили набор проверки VQA v2 на 3 непересекающихся набора (т. е. без общих изображений или вопросов) в целях оценки:
dev
: набор проверки для обучения модели VQA и набор обучения для выборочных предикторов.
val
: набор проверки для выборочных предикторов.
test
: набор тестов для всех моделей и результаты, о которых мы сообщаем в нашей статье.
Эти разделенные файлы аннотаций можно скачать здесь: скачать
После загрузки поместите сжатый файл в каталог <env.data_dir>/vqa2/
. Распаковка файла должна создать следующую структуру каталогов:
vqa2/ reliable_vqa/ annotations/ imdb_val2014-dev.npy imdb_val2014-test.npy imdb_val2014-val.npy
Чтобы использовать наши файлы конфигурации как есть, эти файлы аннотаций следует разместить по пути <env.data_dir>/vqa2/reliable_vqa/annotations
. В противном случае вам придется отредактировать файлы конфигурации и аннотаций в соответствии с вашими путями. Например, аннотации набора данных в конфигурации для обучения модели 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-ViL, которую можно использовать для независимого извлечения функций CLIP.
Загрузите объекты (загрузить) и обновленные файлы аннотаций к ним (загрузить). ВАЖНО: функции очень большие (~ 150 ГБ в сжатом виде), и их загрузка может занять много времени.
Распакуйте аннотации внутри файла в <env.data_dir>/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/
[Необязательно] Мы рекомендуем создать отдельную среду conda (с Python 3.7+) для извлечения функций.
Клонируйте репозиторий CLIP-ViL и следуйте инструкциям по установке/настройке (т. е. установите Detectron2 из локального клона, предоставленного CLIP-ViL). Обратите внимание, что репозиторий CLIP-ViL не нужно клонировать в этом репозитории.
Загрузите изображения и аннотации COCO train+val 2014 и поместите их в каталог со следующей структурой и именами путей:
coco_2014/ annotations/ instances_train2014.json instances_val2014.json images/ train2014/ val2014/
Скопируйте/переместите fixed_mcan_clip_grid_feature.py
в CLIP-ViL/CLIP-ViL-Direct/vqa
в репозитории CLIP-ViL.
Измените OUTPUT_DIR
в CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
на желаемый каталог для функций (т. е. <env.data_dir>/vqa2/reliable_vqa-clip/features
).
Запустите следующее на изображениях train2014 (повторите использование coco_2014_val
для запуска изображений val2014):
DETECTRON2_DATASETS=<PATH_TO_PARENT_DIR_OF_coco_2014> python fixed_mcan_clip_grid_feature.py --config-file configs/R-50-grid.yaml --dataset coco_2014_train --model_type RN50x4
Вы можете загрузить обновленные аннотации в разделе «Предварительно извлеченные функции» или запустить сценарий сопоставления, чтобы создать обновленные файлы аннотаций для CLIP-ViL:
python clipvil_anns_conversion.py --input_dir <env.data_dir>/vqa2/reliable_vqa/annotations --output_dir <env.data_dir>/vqa2/reliable_vqa-clip/annotations
В нашей статье мы предоставляем обученные контрольные точки модели для каждой комбинации из 4 моделей VQA и 3 функций выбора. Обратите внимание, что контрольные точки модели MaxProb — это просто модели VQA. Сами по себе селективные предикторы калибровки и селектора намного меньше, чем модели VQA, однако для удобства мы включаем модель VQA в соответствующие контрольные точки.
Обратите внимание, что MaxProb ViLBERT и VisualBERT такие же, как и из MMF (предварительно обученные и точно настроенные), поэтому их также можно загрузить через зоопарк моделей MMF. В зоопарке моделей MMF ViLBERT соответствует vilbert.finetuned.vqa2.from_vqa2_train
, а VisualBERT соответствует visual_bert.finetuned.vqa2.from_coco_train
.
МаксПроб | Калибровка | Селектор | |
---|---|---|---|
Пифия | скачать | скачать | скачать |
ВИЛБЕРТ | ММФ скачать | скачать | скачать |
ВизуальныйBERT | ММФ скачать | скачать | скачать |
КЛИП-ВиЛ | скачать | скачать | скачать |
Здесь мы предоставляем примеры команд для обучения и оценки моделей. В этих примерах используется модель CLIP-ViL (называемая movie_mcan
, которая представляет собой соответствующую архитектуру модели). Запуск с другими моделями просто включает изменение config
на правильный путь и изменение аргумента model
на один из pythia
, vilbert
, visual_bert
или movie_mcan
(при использовании MaxProb) или использование select_*
для модели *
(при использовании калибровки или селектора, например, select_visual_bert
). Обратите внимание, что файлы аннотаций для CLIP-ViL отличаются, поскольку используются функции CLIP (см., например, configs/experiments/movie_mcan/vqa2/defaults.yaml
), тогда как все остальные модели используют один и тот же набор файлов аннотаций, поэтому обязательно используйте правильные соответствующие файлы аннотаций и пути к объектам.
Все команды следует запускать из каталога reliable_vqa
и установить env.user_dir=<PATH_TO_REPO>/reliable_vqa
в параметрах командной строки MMF (или, что то же самое, MMF_USER_DIR=$PWD
перед командой).
Чтобы обучить модель VQA:
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_MAXPROB_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=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_SELECTOR_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=<YOUR_MAXPROB_SAVE_DIR>/best.ckpt
Параметр checkpoint.resume_file
также может быть одним из файлов model.pth
загруженных выше. Кроме того, лучше убедиться, что env.save_dir
для MaxProb и Selector различаются. В противном случае они перезапишут друг друга.
Для ViLBERT и VisualBERT мы используем модели, уже настроенные на VQA v2, предоставленные MMF. Они служат нашими выборочными моделями MaxProb для ViLBERT и VisualBERT. Чтобы обучить селектор с помощью ViLBERT или VisualBERT, вы должны указать путь checkpoint.resume_file
к файлу .pth
модели MMF, загруженному из зоопарка моделей (или по ссылке выше):
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_SELECTOR_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=<YOUR_MMF_MODEL_SAVE_DIR>/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-val.npy
):
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_RESULT_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=<YOUR_SELECTOR_SAVE_DIR>/best.ckpt dataset_config.vqa2_extended.annotations.test=vqa2/reliable_vqa-clip/annotations/imdb_val2014-test.npy
Для получения прогнозов от ViLBERT и VisualBERT с помощью MaxProb вы также можете просто использовать их версии зоопарка моделей:
mmf_run env.user_dir=<PATH_TO_REPO>/reliable_vqa env.data_dir=<YOUR_DATA_DIR> env.save_dir=<YOUR_RESULT_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 <PATH>/v2_OpenEnded_mscoco_val2014_questions.json --annotations <PATH/v2_mscoco_val2014_annotations.json --predictions <RESULTS_ON_TEST_DATA>.json --threshold_predictions <RESULTS_ON_VAL_DATA>.json
Эта команда выведет точность VQA , покрытие@риск , AUC для кривой покрытия риска и эффективную надежность . Обратите внимание: поскольку здесь используются исходные аннотации VQA v2 и формат, аналогичный формату результатов VQA, этот сценарий оценки должен быть совместим с прогнозами моделей за пределами этого репозитория, просто предоставляя дополнительное поле confidence
в прогнозах.
Мы хотели бы поблагодарить создателей MMF за их реализации с открытым исходным кодом. Мы благодарим Шэн Шена и авторов книги «Какую пользу CLIP может принести при решении задач по зрению и языку?» за помощь в извлечении функций и воспроизведении их модели, а также в выпуске их кода. Мы также благодарим Айшварию Агравал за вклад в оценку. Наконец, мы благодарим Грейс Луо за раннюю помощь с MMF.
Большая часть Reliable VQA лицензируется по лицензии CC-BY-NC (подробности см. в разделе «ЛИЦЕНЗИЯ»), однако файл fix_mcan_clip_grid_feature.py является модификацией сценария mcan_clip_grid_feature.py в https://github.com/clip-vil/CLIP-ViL. /tree/master/CLIP-ViL-Direct/vqa распространяется по лицензии Apache 2.0 и eval_scripts/vqa.py, а также eval_scripts/reliable_vqa_eval.py, которые являются модификациями vqa.py и vqaEval.py в https://github.com/GT-Vision-Lab/VQA, лицензируются в соответствии с BSD 2-Clause. Лицензия.