Понимает ли Vision Llama импрессионистов?

Всем привет, меня зовут Арсений, я Data Scientist в компании Raft, и сегодня я расскажу вам про Visual Language Models (VLM).

Большие языковые модели уже стали частью нашей жизни и мы применяем их, чтобы упростить современную рутину, а так же используем для решения бизнес задач. Недавно вышло новое поколение vision transformer моделей, которые заметно упростили анализ изображений, из какой бы сферы эти изображения не были.

Особенно заметным был сентябрьский релиз Llama-3.2–11b, и не только потому что это первая vision модель от Llama, сколько потому, что с ней вместе вышло целое семейство моделей, включая маленькие на 1B и 3B параметров. А как вы знаете, меньше, значит юзабельнее.
За этот месяц на Llama-3.2–11b уже появилось множество крутых обзоров. Например, блог Амазона и еще один не менее подробный обзор. Из этих обзоров можно вынести следующее:

Llama способна анализировать экономические отчеты, рентген снимки, сложные композиции, графики, болезни растений, распознавать текст и вообще модель кажется афигенно крутой.


Однако я решил проверить насколько модель может воспринимать и оценивать искусство.

Чтобы было не скучно, я выбрал еще несколько Vision Transfromer моделей для сравнения: Qwen2-VL-7B, LLaVa-NeXT (или LLaVa-1.6) и LLaVa-1.5.

Про данные

Я использовал датасет WikiArt. В нем содержится 81 444 произведения искусства различных художников с WikiArt.org. Датасет включает метки классов для каждого изображения:

  • artist — 129 классов художников, включая класс «Unknown Artist» (неизвестный художник);

  • genre — 11 классов жанров, включая класс «Unknown Genre» (неизвестный жанр);

  • style — 27 классов стилей.

На WikiArt.org жанры и стили классифицируются в соответствии с изображёнными темами и объектами:

Николай Рерих. Лахул. Пейзаж, символизм

Николай Рерих. Лахул. Пейзаж, символизм

Клод Моне. Сан-Джорджо Маджоре. Городской пейзаж, импрессионизм.

Клод Моне. Сан-Джорджо Маджоре. Городской пейзаж, импрессионизм.

Борис Кустодиев. Портрет Ф.И. Шаляпина. Портрет, реализм.

Борис Кустодиев. Портрет Ф.И. Шаляпина. Портрет, реализм.

Больше всего в датасете картин в стиле импрессионизма и реализма — 29,5% и 18,9% всех записей, а преобладающие жанры — пейзаж и портрет — 23,2% и 15,1% записей. Датасет довольно объёмный — около 35 Гб данных, поэтому для исследования я выбрал лишь небольшую часть: 1130 записей. 

Чтобы упростить работу моделей они будут предсказывать жанр по картине — таргет в виде числа.

Эксперименты

Теперь перейдем к экспериментам. Я использовал различные техники промптинга: zero-shot, Chain-of-Thought (CoT) и системный промпт. Для более точного решения задачи можно было попробовать prompt-tuning — метод, когда модель при дообучении сама подбирает наиболее значимые токены для промпта, но передо мной стояла задача сравнить модели «из коробки».

LLaVa models

LLaVa architecture

LLaVa architecture

LLaVa-1.5 влезает даже в colab, на T4 GPU, занимая порядка 14Гб в весах torch.fp16. Новая модель LLaVa-NeXT-7b (LLaVa-1.6) в torch.fp16 занимает порядка 16ГБ на RTX 4090. У новой модели LLaVa значительные технические отличия, например, LLaVa-1.5 использует языковую модель Vicuna-7B и работает в связке с визуальным кодировщиком CLIP ViT-L/14, но в LLaVa-1.6 произошло несколько улучшений. Ключевым из них стало использование новой языковой модели Mistral-7B, благодаря чему у модели стало лучше знание о мире и логическое мышление. Также сделали увеличение разрешения входного изображения в 4 раза, что позволяет получить больше визуальных деталей. В общем модель сохраняет минималистичный дизайн и эффективность обработки данных предыдущей модели LLaVa-1.5. Старшая модель LlaVa-NeXT-34B превосходит Gemini Pro и Qwen-VL-Plus на MMB-ENG, SEED-IMG.

LLaVA модели на разных бенчмарках

LLaVA модели на разных бенчмарках

Для классификации картин по жанрам я написал промпт, где передавалась информация о художнике и стиле картины. В нем также указывались 11 жанров в формате «число: жанр» (переменная genres_str). Пример: 0: Portrait, 1: Landscape, 2: Still life,...

Prompt:

"There are 11 possible genres: {genres_str}. What is the genre of painting by {artist} in style {style}? Choose from the given list. If you do not know the genre exactly, choose '10: Unknown Genre'. Say only the number of genre, do not output anything else."

Эта инструкция давала моделям ясную структуру, задавая конкретные параметры (автор, стиль) и требуя строгий ответ в формате номера жанра. Такой подход позволил модели не только анализировать визуальные данные, но и опираться на её исходные знания о художниках и стилях.

В итоге для llava-1.5–7b accuracy оказалась очень низкой — 28,1%, а вот для новой версии показатели оказались сравнительно высокими — 50,3%.

Дополнительно я модифицировал промпт, чтобы модели провели «цепочку размышлений» (Chain-of-Thought). При данной технике промптинга модель анализирует картину «вслух», то есть шаг за шагом объясняет свои мысли, прежде чем принять окончательное решение. Однако увеличения accuracy это не дало — результаты оставались на прежнем уровне, и дальше изобретать велосипед я не стал.

Llama-3.2–11B

А что же недавно вышедшая llama? Ее оказалось легко уместить на 4090 в torch.bf16 весах. Всего она занимает порядка 21Gb. В бой пошел все тот же промпт с авторами, стилями и предложением выбрать жанр. Инференс модели довольно быстрый — 462 токена в секунду. Затем решил добавить системные промпты, чтобы настроить модель на более экспертное поведение.

System prompts:

  • "You are an art history and painting styles expert."

  • "You are an art expert. You know all artwork genres, styles, and artists and carefully adjust your knowledge thinking step by step."

  • "You are an expert in art history and painting styles. You are engaged in a discussion with a user who is asking for your expert opinion on the genre classification of famous paintings."

Однако, эти системные промпты не улучшили анализ модели. Accuracy колебалась в диапазоне 45–49%. Возможно, модель перенапрягалась или начинала «задумываться», что мешало её производительности.

Тогда я решил поощрить модель, выдавая ей типсы, и немного перефразировал промпт:

Prompt v2.0:

"The task is to classify an image into one of the following 11 genres: {genres_str}.\nYou are provided with the name of the artist: and the painting style of the image.\nArtist: {artist}\nStyle: {style}\nUse all your knowledge and given information to determine the correct genre. Choose the genre from the list by providing only the corresponding number. Say **ONLY** the number of the genre and **do not say anything else**. THIS IS VEY IMPORTANT FOR MY CAREER I WILL TIP YOU 1000000000$ for the correct answer."

Хочется отметить, что Llama 3.2 намного послушнее следует инструкциям и легче промптится. Если у LLaVa моделей были некорректные выводы, когда вместо цифры ответа модели начинали выводить текст и рассуждения, то у Llama 3.2 такого не было.

Llama 3.2 выводит ответы в правильном формате, показывает accuracy 50.2% -- это больше чем у LLaVa моделей, но разрыв небольшой.

Qwen2-VL-7B

Qwen2-VL Model Architecture

Qwen2-VL Model Architecture

Завершает четверку моделей Qwen2-VL-7B. С ней были самые большие проблемы: долго не получалось уместить на карточку. Сама модель легко помещается на RTX 4090 в torch.bfl16 и занимает 17 Gb. Однако при попытке подать на вход изображение, сразу кончалась память. Оказалось, что надо менять формат картин из датасета, поскольку некоторые имели размер порядка 4000×3072, и при подаче модели такого изображения сразу же съедали оставшуюся память GPU.

Самый большой формат, который уместился на GPU это 1600×900. А вот 1920×1080 уже не проходит. Так что пришлось ресайзить изображения картин перед тем как подать на вход модели.

Я начал опять с самого простого первого промпта, где нужно вывести лишь цифру жанра. На изображениях картин размера 1600×900 это заняло 45 минут. Тогда я решил уменьшить размер, в итоге качество не упало, а прогон на размерах 512×512 занял 16 минут. В итоге accuracy 60.2%.

Prompt v3.0:

"There are 11 possible genres: {genres_str}. What is the genre of painting by {artist}? Choose from a list. Say only the number of genre, do not output anything else."

Получив такие результаты с zero-shot техникой, я был уверен, что позволив модели подумать перед ответом, точно улучшу accuracy. Я опять применил технику Chain-of-Thought.

Prompt v4.0:

"You are an art expert. The task is to classify an image into one of the following 11 genres: {genres_str}. You are provided with the name of the artist and the painting style of the image.\nArtist: {artist}\nStyle: {style}\nUse all your knowledge, thought, and given information to determine the most appropriate genre.\n"Thoughts: (Provide chain of thought here)"\n"Answer: (Provide the genre number here)"


Вопреки моим ожиданиям, с CoT accuracy стала 59.9%. Это нельзя назвать улучшением по сравнению с предыдущим результатом, да и погрешность имеет место быть. В общем техники можно назвать идентичными, разве что первый промпт легче приходит в голову.

Что порадовало — модель строго следовала инструкциям. Каждый запрос занимал около 1,4 секунды, что дало общее время эксперимента в 35 минут, с ответами длиной до 512 токенов. CoT показал, как под капотом модель принимала решения на более простых промптах, приводя ее размышления в ответе. Это показывает, что модель действительно обладает потенциалом для углубленного анализа, но CoT не всегда улучшает ответы.

Пример вывода модели для картины Клод Моне:

Thoughts: The painting features a cathedral, which is a common subject in cityscapes. The style is Impressionism, which is known for its focus on capturing the effects of light and atmosphere. The use of light and color to create a sense of movement and mood is characteristic of Impressionist art.

Answer: 1

Клод Моне. Руанский собор, туман. Городской пейзаж, импрессионизм.

Клод Моне. Руанский собор, туман. Городской пейзаж, импрессионизм.

Какие выводы?

До эксперта-искусствоведа моделям далеко, но потенциал этих моделей огромен. Новые VLM справляются с огромным пулом задач, которые применимы в задачах бизнеса. Исходя из результатов, если не так много вычислительных мощностей, то можно взять llava-1.5–7b, она помещается без квантования на довольно базовую карточку T4. Для более качественных результатов лучше брать модели новее. LlaVa-NEXT-7b, Llama-3.2–11b и Qwen2-VL-7B показали себя намного лучше, выбив более высокий accuracy для моей задачи предсказания жанра по картине. Результаты и наши внутренние эксперименты с другими задачами показывают, что Qwen2-VL-7B к тому же хорош в распознавании русского языка с pdf документов, но об этом в другой раз!

P.S. Посмотреть примеры запуска моделей можно тут.

© Habrahabr.ru