Всем привет, меня зовут Арсений, я DS в компании Raft, и сегодня я расскажу вам про 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 записей.
Модели будут предсказывать жанр по картине -- таргет в виде числа. Жанров меньше, чем стилей, и следовательно предсказание модели должно быть проще.
Эксперименты
Теперь перейдем к эксперименту. Всего я оценил 4 модели, используя различные техники промптинга. Скажу сразу, что для более точного решения задачи можно было попробовать prompt-tuning – метод, когда модель при дообучении сама подбирает наиболее значимые токены для промпта, но здесь стояла задача сравнить модели именно “из коробки”.
LLaVa models
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.
Для классификации картин по жанрам я написал промпт, где передавалась информация о художнике и стиле картины. В нем также указывались 11 жанров в формате "число: жанр" (переменная genres_str
). Пример: 0: Portrait, 1: Landscape, 2: Still life,...
Промпт:
"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 токена в секунду. Затем решил добавить системные промпты, чтобы настроить модель на более экспертное поведение. Примеры системных промптов:
"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%. Возможно, модель перенапрягалась или начинала «задумываться», что мешало её производительности.
Тогда я решил поощрить модель, выдавая ей типсы, и немного перефразировал промпт:
Промпт:
"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 такого не было.
В итоге такой промпт хоть и немного, но повысил accuracy – 50.2%. Я ожидал, что она будет лучше LLaVa-Next, но они оказались примерно на одном уровне.
Qwen2-VL-7B
Завершает четверку моделей 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%.
Промпт:
"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 (CoT).
Промпт:
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 не всегда улучшает ответы.
Пример вывода модели для картины на Рис. 4:
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. Посмотреть примеры запуска моделей можно тут.