VQAScore permite que os pesquisadores avaliem automaticamente modelos de texto para imagem/vídeo/3D usando uma linha de código Python!
[Página VQAScore] [Demonstração do VQAScore] [Página GenAI-Bench] [Demonstração GenAI-Bench] [Zoo modelo CLIP-FlanT5]
VQAScore: Avaliando a geração de texto para visual com geração de imagem para texto (ECCV 2024) [Artigo] [HF]
Zhiqiu Lin, Deepak Pathak, Baiqi Li, Jiayao Li, Xide Xia, Graham Neubig, Pengchuan Zhang, Deva Ramanan
GenAI-Bench: Avaliando e Melhorando a Geração Composicional de Texto para Visual (CVPR 2024, Melhor Artigo Curto no Workshop SynData ) [Artigo] [HF]
Baiqi Li*, Zhiqiu Lin*, Deepak Pathak, Jiayao Li, Yixin Fei, Kewen Wu, Tiffany Ling, Xide Xia*, Pengchuan Zhang*, Graham Neubig*, Deva Ramanan* (*Co-Primeiros e co-autores seniores)
VQAScore supera significativamente as métricas anteriores, como CLIPScore e PickScore em prompts de texto composicional, e é muito mais simples do que a técnica anterior (por exemplo, ImageReward, HPSv2, TIFA, Davidsonian, VPEval, VIEScore) fazendo uso de feedback humano ou modelos proprietários como ChatGPT e GPT -4Visão.
Instale o pacote 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 você pode instalar via pip install t2v-metrics
.
Agora, o seguinte código Python é tudo que você precisa para calcular o VQAScore para alinhamento imagem-texto (pontuações mais altas indicam maior similaridade):
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
e llava-v1.5-13b
. Se você tiver memória GPU limitada, considere modelos menores, como clip-flant5-xl
e llava-v1.5-7b
../hf_cache/
) atualizando HF_CACHE_DIR
em t2v_metrics/constants.py. Com um lote grande de M imagens x N textos, você pode acelerar usando a função 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
Atualmente oferecemos suporte à execução de VQAScore com CLIP-FlanT5, LLaVA-1.5 e InstructBLIP. Para ablação, também incluímos 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' )
Você pode verificar todos os modelos suportados executando os comandos abaixo:
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 ()
A pergunta e a resposta afetam ligeiramente a pontuação final, conforme mostrado no Apêndice do nosso artigo. Fornecemos um modelo padrão simples para cada modelo e não recomendamos alterá-lo por questão de reprodutibilidade. No entanto, queremos salientar que a pergunta e a resposta podem ser facilmente modificadas. Por exemplo, CLIP-FlanT5 e LLaVA-1.5 usam o seguinte modelo, que pode ser encontrado em 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'
Você pode personalizar o modelo passando os parâmetros question_template
e answer_template
nas funções 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' )
Você também pode calcular P(caption | image) (VisualGPTScore) em vez de P(answer | image, question):
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = "" , # no question
answer_template = "{}" ) # this computes P(caption | image)
Nosso eval.py permite que você execute facilmente 10 benchmarks de imagem/visão/alinhamento 3D (por exemplo, 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 "
Nossos genai_image_eval.py e genai_video_eval.py podem reproduzir os resultados do GenAI-Bench. Além disso, genai_image_ranking.py pode reproduzir os resultados do 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 obter um novo desempenho de última geração. Consulte t2v_metrics/gpt4_eval.py para ver um exemplo. Veja como usá-lo na linha 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).
Você pode implementar facilmente sua própria métrica de pontuação. Por exemplo, se você tiver um modelo VQA que acredita ser mais eficaz, poderá incorporá-lo ao diretório em t2v_metrics/models/vqascore_models. Para orientação, consulte nossos exemplos de implementações de LLaVA-1.5 e InstructBLIP como pontos de partida.
Para gerar textos (legendas ou tarefas VQA) usando CLIP-FlanT5, use o código abaixo:
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 )
Se você achar este repositório útil para sua pesquisa, use o seguinte (PARA ATUALIZAR com 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 repositório é inspirado no repositório Perceptual Metric (LPIPS) de Richard Zhang para avaliação automática da qualidade da imagem.