VQAScore permet aux chercheurs d'évaluer automatiquement les modèles texte-image/vidéo/3D à l'aide d'une seule ligne de code Python !
[Page VQAScore] [Démo VQAScore] [Page GenAI-Bench] [Démo GenAI-Bench] [Zoo modèle CLIP-FlanT5]
VQAScore : Évaluation de la génération texte-visuel avec génération image-texte (ECCV 2024) [Paper] [HF]
Zhiqiu Lin, Deepak Pathak, Baiqi Li, Jiayao Li, Xide Xia, Graham Neubig, Pengchuan Zhang, Deva Ramanan
GenAI-Bench : Évaluation et amélioration de la génération compositionnelle de texte en visuel (CVPR 2024, meilleur article court à l'atelier SynData ) [Papier] [HF]
Baiqi Li*, Zhiqiu Lin*, Deepak Pathak, Jiayao Li, Yixin Fei, Kewen Wu, Tiffany Ling, Xide Xia*, Pengchuan Zhang*, Graham Neubig*, Deva Ramanan* (*Co-premier et co-auteurs principaux)
VQAScore surpasse considérablement les métriques précédentes telles que CLIPScore et PickScore sur les invites de texte de composition, et il est beaucoup plus simple que l'art antérieur (par exemple, ImageReward, HPSv2, TIFA, Davidsonian, VPEval, VIEScore) en utilisant des commentaires humains ou des modèles propriétaires comme ChatGPT et GPT. -4Vision.
Installez le package via :
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
Ou vous pouvez installer via pip install t2v-metrics
.
Désormais, le code Python suivant est tout ce dont vous avez besoin pour calculer le VQAScore pour l'alignement image-texte (des scores plus élevés indiquent une plus grande similarité) :
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
et llava-v1.5-13b
. Si vous disposez d'une mémoire GPU limitée, envisagez des modèles plus petits tels que clip-flant5-xl
et llava-v1.5-7b
../hf_cache/
) en mettant à jour HF_CACHE_DIR
dans t2v_metrics/constants.py. Avec un grand lot de M images x N textes, vous pouvez accélérer en utilisant la fonction 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
Nous prenons actuellement en charge l'exécution de VQAScore avec CLIP-FlanT5, LLaVA-1.5 et InstructBLIP. Pour l'ablation, nous incluons également CLIPScore, BLIPv2Score, PickScore, HPSv2Score et 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' )
Vous pouvez vérifier tous les modèles pris en charge en exécutant les commandes ci-dessous :
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 question et la réponse affectent légèrement le score final, comme le montre l'annexe de notre article. Nous fournissons un modèle simple par défaut pour chaque modèle et ne recommandons pas de le modifier par souci de reproductibilité. Cependant, nous tenons à souligner que la question et la réponse peuvent être facilement modifiées. Par exemple, CLIP-FlanT5 et LLaVA-1.5 utilisent le modèle suivant, disponible dans 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'
Vous pouvez personnaliser le modèle en passant les paramètres question_template
answer_template
dans les fonctions forward()
ou 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' )
Vous pouvez également calculer P(légende | image) (VisualGPTScore) au lieu de P(réponse | image, question) :
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = "" , # no question
answer_template = "{}" ) # this computes P(caption | image)
Notre eval.py vous permet d'exécuter facilement 10 benchmarks d'alignement image/vision/3D (par exemple, 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 "
Nos genai_image_eval.py et genai_video_eval.py peuvent reproduire les résultats de GenAI-Bench. En plus, genai_image_ranking.py peut reproduire les résultats 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
Nous avons implémenté VQAScore à l'aide de GPT-4o pour obtenir de nouvelles performances de pointe. Veuillez consulter t2v_metrics/gpt4_eval.py pour un exemple. Voici comment l'utiliser en ligne de commande :
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).
Vous pouvez facilement implémenter votre propre métrique de notation. Par exemple, si vous disposez d'un modèle VQA que vous jugez plus efficace, vous pouvez l'incorporer dans le répertoire t2v_metrics/models/vqascore_models. Pour obtenir des conseils, veuillez vous référer à nos exemples d’implémentations de LLaVA-1.5 et InstructBLIP comme points de départ.
Pour générer des textes (sous-titres ou tâches VQA) à l'aide de CLIP-FlanT5, veuillez utiliser le code ci-dessous :
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 vous trouvez ce référentiel utile pour votre recherche, veuillez utiliser ce qui suit (POUR METTRE À JOUR avec l'ID ArXiv).
@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}
}
Ce référentiel est inspiré du référentiel Perceptual Metric (LPIPS) de Richard Zhang pour l'évaluation automatique de la qualité de l'image.