Mit VQAScore können Forscher Text-zu-Bild-/Video-/3D-Modelle mithilfe einer Zeile Python-Code automatisch bewerten!
[VQAScore-Seite] [VQAScore-Demo] [GenAI-Bench-Seite] [GenAI-Bench-Demo] [CLIP-FlanT5 Model Zoo]
VQAScore: Evaluierung der Text-zu-Visual-Generierung mit der Bild-zu-Text-Generierung (ECCV 2024) [Aufsatz] [HF]
Zhiqiu Lin, Deepak Pathak, Baiqi Li, Jiayao Li, Xide Xia, Graham Neubig, Pengchuan Zhang, Deva Ramanan
GenAI-Bench: Evaluierung und Verbesserung der kompositorischen Text-zu-Visual-Generierung (CVPR 2024, Best Short Paper @ SynData Workshop ) [Paper] [HF]
Baiqi Li*, Zhiqiu Lin*, Deepak Pathak, Jiayao Li, Yixin Fei, Kewen Wu, Tiffany Ling, Xide Xia*, Pengchuan Zhang*, Graham Neubig*, Deva Ramanan* (*Co-First- und Co-Senior-Autoren)
VQAScore übertrifft frühere Metriken wie CLIPScore und PickScore bei Eingabeaufforderungen für kompositorischen Text erheblich und ist viel einfacher als der Stand der Technik (z. B. ImageReward, HPSv2, TIFA, Davidsonian, VPEval, VIEScore), indem es menschliches Feedback oder proprietäre Modelle wie ChatGPT und GPT nutzt -4Vision.
Installieren Sie das Paket über:
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
Oder Sie können über pip install t2v-metrics
installieren.
Nun ist der folgende Python-Code alles, was Sie brauchen, um den VQAScore für die Bild-Text-Ausrichtung zu berechnen (höhere Werte bedeuten eine größere Ähnlichkeit):
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
und llava-v1.5-13b
. Wenn Sie nur über begrenzten GPU-Speicher verfügen, sollten Sie kleinere Modelle wie clip-flant5-xl
und llava-v1.5-7b
in Betracht ziehen../hf_cache/
), indem Sie HF_CACHE_DIR
in t2v_metrics/constants.py aktualisieren. Bei einem großen Stapel von M Bildern x N Texten können Sie die Geschwindigkeit mit der Funktion batch_forward()
erhöhen.
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
Wir unterstützen derzeit die Ausführung von VQAScore mit CLIP-FlanT5, LLaVA-1.5 und InstructBLIP. Für die Ablation beziehen wir auch CLIPScore, BLIPv2Score, PickScore, HPSv2Score und ImageReward ein:
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' )
Sie können alle unterstützten Modelle überprüfen, indem Sie die folgenden Befehle ausführen:
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 ()
Die Frage und die Antwort wirken sich geringfügig auf das Endergebnis aus, wie im Anhang unserer Arbeit gezeigt. Wir stellen für jedes Modell eine einfache Standardvorlage zur Verfügung und raten aus Gründen der Reproduzierbarkeit davon ab, diese zu ändern. Wir möchten jedoch darauf hinweisen, dass die Frage und die Antwort leicht geändert werden können. CLIP-FlanT5 und LLaVA-1.5 verwenden beispielsweise die folgende Vorlage, die unter t2v_metrics/models/vqascore_models/clip_t5_model.py zu finden ist:
# {} will be replaced by the caption
default_question_template = 'Does this figure show "{}"? Please answer yes or no.'
default_answer_template = 'Yes'
Sie können die Vorlage anpassen, indem Sie die Parameter question_template
und answer_template
an die Funktionen forward()
oder batch_forward()
übergeben:
# 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' )
Sie können auch P(Beschriftung | Bild) (VisualGPTScore) anstelle von P(Antwort | Bild, Frage) berechnen:
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = "" , # no question
answer_template = "{}" ) # this computes P(caption | image)
Mit unserem eval.py können Sie ganz einfach 10 Bild-/Vision-/3D-Ausrichtungs-Benchmarks ausführen (z. B. 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 "
Unsere genai_image_eval.py und genai_video_eval.py können die GenAI-Bench-Ergebnisse reproduzieren. Zusätzlich kann genai_image_ranking.py die GenAI-Rank-Ergebnisse reproduzieren:
# 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
Wir haben VQAScore mit GPT-4o implementiert, um eine neue Leistung auf dem neuesten Stand der Technik zu erreichen. Ein Beispiel finden Sie unter t2v_metrics/gpt4_eval.py. So verwenden Sie es in der Befehlszeile:
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).
Sie können ganz einfach Ihre eigene Bewertungsmetrik implementieren. Wenn Sie beispielsweise über ein VQA-Modell verfügen, das Ihrer Meinung nach effektiver ist, können Sie es in das Verzeichnis unter t2v_metrics/models/vqascore_models integrieren. Als Orientierungshilfe nutzen Sie bitte unsere Beispielimplementierungen von LLaVA-1.5 und InstructBLIP als Ausgangspunkte.
Um Texte (Untertitel oder VQA-Aufgaben) mit CLIP-FlanT5 zu generieren, verwenden Sie bitte den folgenden Code:
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 )
Wenn Sie dieses Repository für Ihre Forschung nützlich finden, verwenden Sie bitte Folgendes (ZUM AKTUALISIEREN mit 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}
}
Dieses Repository ist vom Perceptual Metric (LPIPS)-Repository von Richard Zhang zur automatischen Bewertung der Bildqualität inspiriert.