¡VQAScore permite a los investigadores evaluar automáticamente modelos de texto a imagen/video/3D usando una línea de código Python!
[Página VQAScore] [Demostración de VQAScore] [Página GenAI-Bench] [Demostración GenAI-Bench] [CLIP-FlanT5 Model Zoo]
VQAScore: Evaluación de la generación de texto a imagen con generación de imagen a texto (ECCV 2024) [artículo] [HF]
Zhiqiu Lin, Deepak Pathak, Baiqi Li, Jiayao Li, Xide Xia, Graham Neubig, Pengchuan Zhang, Deva Ramanan
GenAI-Bench: Evaluación y mejora de la generación compositiva de texto a imagen (CVPR 2024, mejor artículo breve en el taller SynData ) [artículo] [HF]
Baiqi Li*, Zhiqiu Lin*, Deepak Pathak, Jiayao Li, Yixin Fei, Kewen Wu, Tiffany Ling, Xide Xia*, Pengchuan Zhang*, Graham Neubig*, Deva Ramanan* (*Coautor primero y coautor principal)
VQAScore supera significativamente métricas anteriores como CLIPScore y PickScore en indicaciones de texto de composición, y es mucho más simple que la técnica anterior (por ejemplo, ImageReward, HPSv2, TIFA, Davidsonian, VPEval, VIEScore) y utiliza comentarios humanos o modelos propietarios como ChatGPT y GPT. -4Visión.
Instale el paquete a través de:
git clone https://github.com/linzhiqiu/t2v_metrics
cd t2v_metrics
conda create -n t2v python=3.10 -y
conda activate t2v
conda install pip -y
pip install torch torchvision torchaudio
pip install git+https://github.com/openai/CLIP.git
pip install -e . # local pip install
O puede instalarlo mediante pip install t2v-metrics
.
Ahora, el siguiente código Python es todo lo que necesita para calcular el VQAScore para la alineación de imagen y texto (las puntuaciones más altas indican una mayor similitud):
import t2v_metrics
clip_flant5_score = t2v_metrics . VQAScore ( model = 'clip-flant5-xxl' ) # our recommended scoring model
### For a single (image, text) pair
image = "images/0.png" # an image path in string format
text = "someone talks on the phone angrily while another person sits happily"
score = clip_flant5_score ( images = [ image ], texts = [ text ])
### Alternatively, if you want to calculate the pairwise similarity scores
### between M images and N texts, run the following to return a M x N score tensor.
images = [ "images/0.png" , "images/1.png" ]
texts = [ "someone talks on the phone angrily while another person sits happily" ,
"someone talks on the phone happily while another person sits angrily" ]
scores = clip_flant5_score ( images = images , texts = texts ) # scores[i][j] is the score between image i and text j
clip-flant5-xxl
y llava-v1.5-13b
. Si tiene una memoria GPU limitada, considere modelos más pequeños como clip-flant5-xl
y llava-v1.5-7b
../hf_cache/
) actualizando HF_CACHE_DIR
en t2v_metrics/constants.py. Con un lote grande de M imágenes x N textos, puede acelerar usando la función batch_forward()
.
import t2v_metrics
clip_flant5_score = t2v_metrics . VQAScore ( model = 'clip-flant5-xxl' )
# The number of images and texts per dictionary must be consistent.
# E.g., the below example shows how to evaluate 4 generated images per text
dataset = [
{ 'images' : [ "images/0/DALLE3.png" , "images/0/Midjourney.jpg" , "images/0/SDXL.jpg" , "images/0/DeepFloyd.jpg" ], 'texts' : [ "The brown dog chases the black dog around the tree." ]},
{ 'images' : [ "images/1/DALLE3.png" , "images/1/Midjourney.jpg" , "images/1/SDXL.jpg" , "images/1/DeepFloyd.jpg" ], 'texts' : [ "Two cats sit at the window, the blue one intently watching the rain, the red one curled up asleep." ]},
#...
]
scores = clip_flant5_score . batch_forward ( dataset = dataset , batch_size = 16 ) # (n_sample, 4, 1) tensor
Actualmente admitimos la ejecución de VQAScore con CLIP-FlanT5, LLaVA-1.5 e InstructBLIP. Para la ablación, también incluimos CLIPScore, BLIPv2Score, PickScore, HPSv2Score e ImageReward:
llava_score = t2v_metrics . VQAScore ( model = 'llava-v1.5-13b' )
instructblip_score = t2v_metrics . VQAScore ( model = 'instructblip-flant5-xxl' )
clip_score = t2v_metrics . CLIPScore ( model = 'openai:ViT-L-14-336' )
blip_itm_score = t2v_metrics . ITMScore ( model = 'blip2-itm' )
pick_score = t2v_metrics . CLIPScore ( model = 'pickscore-v1' )
hpsv2_score = t2v_metrics . CLIPScore ( model = 'hpsv2' )
image_reward_score = t2v_metrics . ITMScore ( model = 'image-reward-v1' )
Puede verificar todos los modelos compatibles ejecutando los siguientes comandos:
print ( "VQAScore models:" )
t2v_metrics . list_all_vqascore_models ()
print ( "ITMScore models:" )
t2v_metrics . list_all_itmscore_models ()
print ( "CLIPScore models:" )
t2v_metrics . list_all_clipscore_models ()
La pregunta y la respuesta afectan ligeramente la puntuación final, como se muestra en el Apéndice de nuestro artículo. Proporcionamos una plantilla predeterminada simple para cada modelo y no recomendamos cambiarla por motivos de reproducibilidad. Sin embargo, queremos señalar que la pregunta y la respuesta se pueden modificar fácilmente. Por ejemplo, CLIP-FlanT5 y LLaVA-1.5 utilizan la siguiente plantilla, que se puede encontrar en t2v_metrics/models/vqascore_models/clip_t5_model.py:
# {} will be replaced by the caption
default_question_template = 'Does this figure show "{}"? Please answer yes or no.'
default_answer_template = 'Yes'
Puedes personalizar la plantilla pasando los parámetros question_template
y answer_template
a las funciones forward()
o batch_forward()
:
# Use a different question for VQAScore
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = 'Is this figure showing "{}"? Please answer yes or no.' ,
answer_template = 'Yes' )
También puede calcular P(título | imagen) (VisualGPTScore) en lugar de P(respuesta | imagen, pregunta):
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = "" , # no question
answer_template = "{}" ) # this computes P(caption | image)
Nuestro eval.py le permite ejecutar fácilmente 10 pruebas comparativas de imagen/visión/alineación 3D (por ejemplo, Winoground/TIFA160/SeeTrue/StanfordT23D/T2VScore):
python eval.py --model clip-flant5-xxl # for VQAScore
python eval.py --model openai:ViT-L-14 # for CLIPScore
# You can optionally specify question/answer template, for example:
python eval.py --model clip-flant5-xxl --question " Is the figure showing '{}'? " --answer " Yes "
Nuestros genai_image_eval.py y genai_video_eval.py pueden reproducir los resultados de GenAI-Bench. Además, genai_image_ranking.py puede reproducir los resultados de GenAI-Rank:
# GenAI-Bench
python genai_image_eval.py --model clip-flant5-xxl
python genai_video_eval.py --model clip-flant5-xxl
# GenAI-Rank
python genai_image_ranking.py --model clip-flant5-xxl --gen_model DALLE_3
python genai_image_ranking.py --model clip-flant5-xxl --gen_model SDXL_Base
Implementamos VQAScore usando GPT-4o para lograr un rendimiento de última generación. Consulte t2v_metrics/gpt4_eval.py para ver un ejemplo. A continuación se explica cómo usarlo en la línea de comando:
openai_key = # Your OpenAI key
score_func = t2v_metrics . get_score_model ( model = "gpt-4o" , device = "cuda" , openai_key = openai_key , top_logprobs = 20 ) # We find top_logprobs=20 to be sufficient for most (image, text) samples. Consider increase this number if you get errors (the API cost will not increase).
Puede implementar fácilmente su propia métrica de puntuación. Por ejemplo, si tiene un modelo VQA que cree que es más efectivo, puede incorporarlo al directorio t2v_metrics/models/vqascore_models. Para obtener orientación, consulte nuestras implementaciones de ejemplo de LLaVA-1.5 e InstructBLIP como puntos de partida.
Para generar textos (subtítulos o tareas VQA) usando CLIP-FlanT5, utilice el siguiente código:
import t2v_metrics
clip_flant5_score = t2v_metrics . VQAScore ( model = 'clip-flant5-xxl' )
images = [ "images/0.png" , "images/0.png" ] # A list of images
prompts = [ "Please describe this image: " , "Does the image show 'someone talks on the phone angrily while another person sits happily'?" ] # Corresponding prompts
clip_flant5_score . model . generate ( images = images , prompts = prompts )
Si encuentra que este repositorio es útil para su investigación, utilice lo siguiente (PARA ACTUALIZAR con ArXiv ID).
@article{lin2024evaluating,
title={Evaluating Text-to-Visual Generation with Image-to-Text Generation},
author={Lin, Zhiqiu and Pathak, Deepak and Li, Baiqi and Li, Jiayao and Xia, Xide and Neubig, Graham and Zhang, Pengchuan and Ramanan, Deva},
journal={arXiv preprint arXiv:2404.01291},
year={2024}
}
Este repositorio está inspirado en el repositorio Perceptual Metric (LPIPS) de Richard Zhang para la evaluación automática de la calidad de la imagen.