VQAScore позволяет исследователям автоматически оценивать модели преобразования текста в изображение/видео/3D, используя одну строку кода Python!
[Страница VQAScore] [Демо-версия VQAScore] [Страница GenAI-Bench] [Демо-версия GenAI-Bench] [Зоопарк моделей CLIP-FlanT5]
VQAScore: Оценка преобразования текста в изображение с помощью преобразования изображения в текст (ECCV 2024) [Документ] [HF]
Чжицю Линь, Дипак Патхак, Байци Ли, Цзяяо Ли, Сиде Ся, Грэм Нойбиг, Пэнчуань Чжан, Дева Раманан
GenAI-Bench: оценка и улучшение композиционного преобразования текста в изображение (CVPR 2024, лучшая короткая статья @ SynData Workshop ) [Документ] [HF]
Байци Ли*, Чжицю Линь*, Дипак Патхак, Цзяяо Ли, Исинь Фэй, Кьюэнь Ву, Тиффани Линг, Сиде Ся*, Пэнчуань Чжан*, Грэм Нойбиг*, Дева Раманан* (*соавтор и состарший автор)
VQAScore значительно превосходит предыдущие метрики, такие как CLIPScore и PickScore, для композиционных текстовых подсказок, и он намного проще, чем предшествующий уровень техники (например, ImageReward, HPSv2, TIFA, Davidsonian, VPEval, VIEScore), используя отзывы людей или собственные модели, такие как ChatGPT и GPT. -4Видение.
Установите пакет через:
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
Или вы можете установить через pip install t2v-metrics
.
Теперь следующий код Python — это все, что вам нужно для вычисления VQAScore для выравнивания изображения и текста (более высокие оценки указывают на большее сходство):
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
и llava-v1.5-13b
. Если у вас ограниченная память графического процессора, рассмотрите модели меньшего размера, такие как clip-flant5-xl
и llava-v1.5-7b
../hf_cache/
), обновив HF_CACHE_DIR
в t2v_metrics/constants.py. При большом пакете из M изображений x 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
В настоящее время мы поддерживаем запуск VQAScore с CLIP-FlanT5, LLaVA-1.5 и InstructBLIP. Для удаления мы также включаем CLIPScore, BLIPv2Score, PickScore, HPSv2Score и 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' )
Вы можете проверить все поддерживаемые модели, выполнив следующие команды:
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 ()
Вопрос и ответ незначительно влияют на итоговую оценку, как показано в Приложении к нашей статье. Мы предоставляем простой шаблон по умолчанию для каждой модели и не рекомендуем изменять его ради воспроизводимости. Однако мы хотим отметить, что вопрос и ответ можно легко изменить. Например, CLIP-FlanT5 и LLaVA-1.5 используют следующий шаблон, который можно найти по адресу 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'
Вы можете настроить шаблон, передав параметры question_template
и answer_template
в функции forward()
или 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' )
Вы также можете вычислить P(caption | image) (VisualGPTScore) вместо P(ответ | изображение, вопрос):
scores = clip_flant5_score ( images = images ,
texts = texts ,
question_template = "" , # no question
answer_template = "{}" ) # this computes P(caption | image)
Наш eval.py позволяет вам легко запустить 10 тестов выравнивания изображений/видений/3D (например, 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 "
Наши genai_image_eval.py и genai_video_eval.py могут воспроизводить результаты GenAI-Bench. Дополнительно genai_image_ranking.py может воспроизводить результаты 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
Мы внедрили VQAScore с использованием GPT-4o для достижения нового уровня производительности. Пример см. в t2v_metrics/gpt4_eval.py. Вот как использовать его в командной строке:
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).
Вы можете легко реализовать свою собственную метрику оценки. Например, если у вас есть модель VQA, которую вы считаете более эффективной, вы можете включить ее в каталог t2v_metrics/models/vqascore_models. Для получения рекомендаций обратитесь к нашим примерам реализации LLaVA-1.5 и InstructBLIP в качестве отправной точки.
Чтобы генерировать тексты (субтитры или задачи VQA) с помощью CLIP-FlanT5, используйте приведенный ниже код:
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 )
Если вы считаете этот репозиторий полезным для своих исследований, используйте следующее (ОБНОВИТЬ с помощью 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}
}
Этот репозиторий создан на основе репозитория Perceptual Metric (LPIPS) Ричарда Чжана для автоматической оценки качества изображения.