Esta es la implementación del documento ECCV 2022 Respuesta visual confiable a preguntas: abstenerse en lugar de responder incorrectamente. Si encuentra útil nuestro artículo o este repositorio para su propio trabajo, cite:
@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}
}
Este repositorio utiliza PyTorch y está construido sobre MMF. Contiene lo siguiente:
Actualización: la versión anterior de este repositorio usó involuntariamente las respuestas reales predeterminadas en MMF en el campo answers
que tiene respuestas de referencia ligeramente diferentes (por ejemplo, reemplaza algunas entradas si no están en el vocabulario de 3k respuestas). Por lo tanto, proporcionamos un script de evaluación independiente (eval_scripts/) que utiliza las anotaciones originales de VQA v2 como referencias para las evaluaciones. Esta actualización se refleja en la versión de arXiv (consulte el Registro de cambios en el apéndice) y el trabajo futuro debería utilizar las evaluaciones actualizadas para informar los resultados.
Las carpetas de este repositorio están estructuradas de la siguiente manera:
configs/
:experiments/
contiene configuraciones YAML para entrenar cada uno de los modelos VQA y las funciones de selección correspondientes.datasets/
contiene la configuración YAML para el conjunto de datos vqa2_extended
personalizado.datasets/
: contiene la implementación del conjunto de datos y el generador para vqa2_extended
. Este conjunto de datos es el mismo que VQA v2 dentro de MMF, pero también admite resultados de confianza del modelo adicionales para las funciones de selección y anotaciones de opción múltiple para la evaluación de la calibración.eval_scripts/
: contiene scripts de evaluación para calcular la cobertura de riesgos y las métricas de confiabilidad efectiva en el documento.reliable_vqa_eval.py
: contiene un objeto evaluador que calcula las diferentes métricas.run.py
: script para ejecutar las evaluaciones dadas las predicciones del modelo y las anotaciones de verdad sobre el terreno.vqa.py
: contiene un objeto para interactuar con las anotaciones y predicciones de VQA v2.models/
: para cada modelo VQA en nuestros experimentos, registramos una versión encima del modelo original que devuelve confianza adicional y resultados de características intermedias necesarios para las funciones de selección.selective_predictors.py
contiene implementaciones para los modelos de calibración y Selector.modules/
:losses.py
contiene la función de pérdida de predicción de corrección para los modelos de Selector aprendidos.metrics.py
contiene implementaciones de las métricas de confiabilidad efectiva y cobertura de riesgos en MMF para su validación.__init__.py
: importa componentes MMF personalizados para que MMF los utilice. Siga las instrucciones de instalación de MMF aquí: https://mmf.sh/docs/. Recomendamos instalar desde la fuente. Tenga en cuenta que al realizar la instalación desde el código fuente, no es necesario clonar el repositorio MMF en este repositorio. Simplemente puedes clonar MMF en su propio directorio. También recomendamos utilizar un entorno conda para la instalación y ejecución, que se puede utilizar tanto para MMF como para este repositorio.
Después de la instalación de MMF, su entorno debe tener instalados Python 3.7+ y PyTorch 1.6+. También necesitarás scikit-learn 1.0+ y pandas 1.3.4+.
TL;DR: Utilizamos el conjunto de datos VQA v2. Dividimos el conjunto de validación VQA v2 en 3 partes y proporcionamos las anotaciones a continuación. También extraemos características de cuadrícula personalizadas para el modelo CLIP-ViL, que se proporcionan a continuación. MMF descarga automáticamente todas las demás anotaciones y funciones, según lo especificado en cada una de las configuraciones de este repositorio.
Primero, descargue los archivos JSON de anotaciones de respuestas y preguntas de validación VQA v2 originales desde aquí: https://visualqa.org/download.html. Estos se utilizarán para las evaluaciones.
Al ejecutar MMF con uno de nuestros archivos de configuración por primera vez, MMF debería descargar automáticamente las funciones y anotaciones para VQA v2. Estos directorios/archivos se almacenarán en $MMF_DATA_DIR
( env.data_dir
) en un directorio vqa2
. Consulte MMF para obtener más detalles sobre esto. Recomendamos comenzar ejecutando Pythia+MaxProb a través de este repositorio, que descargará las anotaciones y funciones utilizadas para Pythia, ViLBERT y VisualBERT (consulte Capacitación para obtener más detalles).
También recomendamos guardar nuestras divisiones de validación y funciones CLIP (descritas en las siguientes secciones) dentro de estos directorios, y la siguiente configuración asume que este es el caso. Si decide estructurar sus directorios de manera diferente, deberá actualizar su ruta de configuración, etc., en consecuencia.
El conjunto de entrenamiento estándar VQA v2 se utiliza para entrenar modelos VQA. Sin embargo, dado que las anotaciones de respuestas no están disponibles para las divisiones de VQA v2 test-dev y test-std, dividimos el conjunto de validación de VQA v2 en 3 conjuntos separados (es decir, no se comparten imágenes ni preguntas) para fines de evaluación:
dev
: conjunto de validación para el entrenamiento del modelo VQA y conjunto de entrenamiento para los predictores selectivos.val
: conjunto de validación para los predictores selectivos.test
: conjunto de pruebas para todos los modelos y sobre qué informamos los resultados en nuestro artículo.Estos archivos de anotaciones divididas se pueden descargar aquí: descargar
Una vez descargado, coloque el archivo comprimido en el directorio
. La descompresión del archivo debería configurar la siguiente estructura de directorios:
vqa2/
reliable_vqa/
annotations/
imdb_val2014-dev.npy
imdb_val2014-test.npy
imdb_val2014-val.npy
Para usar nuestros archivos de configuración tal como están, estos archivos de anotaciones deben colocarse en la ruta
. De lo contrario, deberá editar los archivos de configuración y anotaciones para que coincidan con sus rutas. Por ejemplo, las anotaciones del conjunto de datos en una configuración para entrenar un modelo VQA son:
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
Mientras que las anotaciones para entrenar un Selector son:
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
Para entrenar todos los modelos VQA, utilizamos funciones previamente extraídas en lugar de imágenes para mayor velocidad y coherencia. Los modelos Pythia, ViLBERT y VisualBERT utilizan funciones que se pueden descargar automáticamente al ejecutarse a través de MMF. Sin embargo, CLIP-ViL utiliza funciones de imagen de cuadrícula de CLIP. Proporcionamos nuestras funciones precalculadas, así como una versión ligeramente ajustada del script de extracción del repositorio CLIP-ViL que se puede utilizar para extraer funciones CLIP de forma independiente.
/vqa2/
, lo que produce: 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
. La estructura de su directorio debe reflejar la 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
a CLIP-ViL/CLIP-ViL-Direct/vqa
en el repositorio de CLIP-ViL.OUTPUT_DIR
en CLIP-ViL/CLIP-ViL-Direct/vqa/configs/R-50-grid.yaml
al directorio deseado para las funciones (es decir, /vqa2/reliable_vqa-clip/features
).coco_2014_val
para ejecutar en imágenes 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
Proporcionamos puntos de control de modelos capacitados para cada combinación de los 4 modelos VQA y 3 funciones de selección en nuestro documento. Tenga en cuenta que los puntos de control del modelo MaxProb son simplemente los modelos VQA. Los predictores selectivos de Calibración y Selector son mucho más pequeños que los modelos VQA; sin embargo, incluimos el modelo VQA en sus puntos de control correspondientes por conveniencia.
Tenga en cuenta que MaxProb ViLBERT y VisualBERT son los mismos que los de MMF (preentrenados y ajustados), por lo que también se pueden descargar a través del zoológico de modelos de MMF. Del zoológico modelo MMF, ViLBERT corresponde a vilbert.finetuned.vqa2.from_vqa2_train
y VisualBERT corresponde a visual_bert.finetuned.vqa2.from_coco_train
.
maxprob | Calibración | Selector | |
---|---|---|---|
pitia | descargar | descargar | descargar |
ViLBERT | descargar mmf | descargar | descargar |
VisualBERT | descargar mmf | descargar | descargar |
CLIP-ViL | descargar | descargar | descargar |
Aquí, proporcionamos comandos de muestra para entrenar y evaluar modelos. Estos ejemplos utilizan el modelo CLIP-ViL (denominado movie_mcan
, que es la arquitectura del modelo correspondiente). Ejecutar con otros modelos simplemente implica cambiar la config
a la ruta correcta y cambiar el argumento model
a uno de pythia
, vilbert
, visual_bert
o movie_mcan
(cuando se usa MaxProb) o usar select_*
para un modelo *
(cuando se usa Calibración o un Selector, por ejemplo, select_visual_bert
). Tenga en cuenta que los archivos de anotaciones para CLIP-ViL son diferentes porque se utilizan funciones CLIP (consulte, por ejemplo, configs/experiments/movie_mcan/vqa2/defaults.yaml
), mientras que todos los demás modelos usan el mismo conjunto de archivos de anotaciones, así que asegúrese de Utilice los archivos de anotaciones y rutas de características correspondientes correctos.
Todos los comandos deben ejecutarse desde el directorio reliable_vqa
y configurar env.user_dir=
en las opciones de la línea de comando MMF (o, equivalentemente, MMF_USER_DIR=$PWD
antes del comando).
Para entrenar un modelo 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
Para entrenar una función de selección multimodal aprendida (Selector) para el modelo 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
La opción checkpoint.resume_file
también podría ser uno de los archivos model.pth
descargados anteriormente. Además, es mejor asegurarse de que env.save_dir
para MaxProb y Selector sean diferentes. De lo contrario, se sobrescribirán entre sí.
Para ViLBERT y VisualBERT, utilizamos los modelos ya ajustados en VQA v2 proporcionados por MMF. Estos sirven como nuestros modelos selectivos MaxProb para ViLBERT y VisualBERT. Para entrenar el Selector con ViLBERT o VisualBERT, debe proporcionar la ruta checkpoint.resume_file
al archivo .pth
del modelo MMF descargado del zoológico de modelos (o el enlace de arriba):
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
Primero hacemos predicciones sobre los conjuntos de prueba y valores, y luego los evaluamos utilizando los scripts de evaluación.
Para obtener predicciones, cambie el tipo de ejecución a prueba ( run_type=test
), agregue el argumento evaluation.predict=True
y reemplace la ruta de anotación test
en la configuración con la de las anotaciones para obtener predicciones (por ejemplo, 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
Para obtener predicciones de ViLBERT y VisualBERT con MaxProb, también puede simplemente usar las versiones del zoológico modelo de estas:
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
Esto producirá un archivo JSON (formato similar al formato de resultado VQA v2) dentro de env.save_dir
que contiene las respuestas y confianzas del modelo que usamos para evaluar. Repita esto usando imdb_val2014-val.npy
como conjunto de prueba para obtener resultados en los datos val para elegir umbrales.
A continuación, utilizamos un script de evaluación independiente para obtener las métricas de evaluación, que acepta la pregunta VQA v2 original y los JSON de anotaciones como referencias:
python eval_scripts/run.py
--questions /v2_OpenEnded_mscoco_val2014_questions.json
--annotations .json
--threshold_predictions .json
Este comando generará precisión VQA , cobertura@riesgo , AUC para la curva de cobertura de riesgo y confiabilidad efectiva . Tenga en cuenta que, dado que utiliza las anotaciones VQA v2 originales y un formato similar al formato de resultados VQA, este script de evaluación debe ser compatible con predicciones de modelos fuera de este repositorio simplemente proporcionando un campo confidence
adicional en las predicciones.
Nos gustaría agradecer a los creadores de MMF por sus implementaciones de código abierto. Agradecemos a Sheng Shen y a los autores de ¿Cuánto puede beneficiar CLIP las tareas de visión y lenguaje? por brindar asistencia para extraer funciones y reproducir su modelo, así como para publicar su código. También agradecemos a Aishwarya Agrawal por sus aportes sobre las evaluaciones. Por último, agradecemos a Grace Luo por su asistencia temprana con MMF.
La mayoría de Reliable VQA tiene licencia CC-BY-NC (consulte LICENCIA para obtener más detalles), sin embargo, fix_mcan_clip_grid_feature.py, que se modifica a partir del script mcan_clip_grid_feature.py en https://github.com/clip-vil/CLIP-ViL /tree/master/CLIP-ViL-Direct/vqa, tiene la licencia Apache 2.0 y eval_scripts/vqa.py como así como eval_scripts/reliable_vqa_eval.py, que se modifican de vqa.py y vqaEval.py en https://github.com/GT-Vision-Lab/VQA, tienen la licencia BSD de 2 cláusulas.