Learnly
LLM Fine Tuning/Глава 4/Урок 2

Использование предобученных VLM

Использование предобученных VLM

Визуальные языковые модели (VLM) обрабатывают изображения и текст одновременно, позволяя решать продвинутые задачи: генерация подписей к изображениям, ответы на визуальные вопросы или рассуждения между модальностями. В этом разделе мы сосредоточимся на том, как работают VLM и практическом их использовании.

Обзор архитектуры

Архитектура VLM

VLM объединяют компоненты обработки изображений и текстового генерирования для единого понимания многомодальной информации. Основные элементы:

  • Кодировщик изображений/визуальный компонент: Преобразует изображения в компактные числовые представления. Примеры: CLIP, SigLIP.
  • Проектор эмбеддингов: Выравнивает визуальные признаки с текстовыми эмбеддингами (чаще всего небольшая MLP или линейный слой, дообучаемый для конкретной многомодальной задачи).
  • Многомодальный проектор/модуль слияния: Объединяет и усиливает связи между визуальными и текстовыми представлениями. Этот шаг выходит за рамки выравнивания, позволяя обеспечить богатое взаимодействие.
  • Декодер текста: Генерирует текст (или другие выходы) из объединенных многомодальных представлений.

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

Практическое применение

VLM могут применяться для таких задач как:

  • Генерация описаний изображений (Image Captioning)
  • Визуальный ответ на вопросы (VQA)
  • Кроссмодальная выборка (Cross-Modal Retrieval): сопоставление изображений с текстом и наоборот
  • Креативные приложения: проектирование, генерация арта, создание мультимедийного контента

Качественные сопряженные наборы данных играют ключевую роль, а трансформеры предоставляют предобученные модели и упрощенные рабочие процессы дообучения.

Использование VLM

Формат диалога

Многие VLM поддерживают диалогоподобные взаимодействия, с сообщениями в виде:

  1. Системное сообщение: задает контекст: "You are an assistant analyzing visual data."
  2. Запросы пользователя: комбинация текста и изображений.
  3. Ответы ассистента: сгенерированный текст на основе многомодального анализа.

Пример:

[
  {
    "role": "system",
    "content": []
  },,
      
    ]
  },
  ]
  }
]

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

Использование VLM через pipeline

Как мы видели в Unit 1, проще всего использовать VLM через абстракцию pipeline:

from transformers import pipeline

# Инициализация pipeline с VLM
pipe = pipeline("image-text-to-text", "HuggingFaceTB/SmolVLM2-2.2B-Instruct", device_map="auto")

# Определение диалога с изображением
messages = [
     {
         "role": "user",
         "content": [
             {
                 "type": "image",
                 "image": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg",
             },
             # Дополнительный текст контента, если нужен
             # {
             #   "type": "text",
             #   "text": "Describe this bee."
             # }
         ],
     }
 ]

outputs = pipe(text=messages, max_new_tokens=60, return_full_text=False)

Generate response - pipeline handles multimodal inputs automatically

response = pipe(messages, max_new_tokens=128, temperature=0.7)

print(response[0]['generated_text'][-1]['content']) # Print the model's description


<details>
<summary>Output</summary>

```text
The image depicts a close-up view of a flower garden, specifically focusing on a pink flower. The flower is the central subject of the image, and it is a prominent feature due to its vibrant color and intricate details. The flower has a circular shape, with petals that are slightly curled and have a gradient from light to dark pink. The petals are arranged symmetrically around the central pistil, which is visible in the center of the flower. The pistil is a small, yellow structure that is surrounded by a cluster of stamens, which are visible as small, yellow structures. The flower also has a small, black

Using a VLM via Transformers (Full Control)

For advanced use, you can access a VLM directly via Transformers, giving you full control over each component.
To reduce memory usage and speed up inference, we can apply 4-bit quantization using bitsandbytes.

Unlike standard LLM usage, VLMs require a processor instead of just a tokenizer. The processor handles both text tokenization and image preprocessing, streamlining the workflow for multimodal inputs.

import torch
from transformers import AutoProcessor, AutoModelForImageTextToText, BitsAndBytesConfig
from transformers.image_utils import load_image

device = "cuda" if torch.cuda.is_available() else "cpu"

# Quantization for efficiency
quant_config = BitsAndBytesConfig(load_in_4bit=True)
model_name = "HuggingFaceTB/SmolVLM2-2.2B-Instruct"
model = AutoModelForImageTextToText.from_pretrained(model_name, quantization_config=quant_config).to(device)
processor = AutoProcessor.from_pretrained(model_name)

Example: Describe an Image

We can use the chat template to describe images. Each image is represented as `` in the message, and the actual image data is passed to the processor via the images argument. The processor handles both text and visual inputs seamlessly.

# Load image
image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"
image = load_image(image_url)

# Create input messages
messages = [,
            
        ]
    },
]

# Prepare inputs
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(text=prompt, images=[image], return_tensors="pt")
inputs = inputs.to(device)

# Generate outputs
generated_ids = model.generate(**inputs, max_new_tokens=500)
generated_texts = processor.batch_decode(
    generated_ids,
    skip_special_tokens=True,
)[0]

# Extract only the assistant response
assistant_response = generated_texts.split("Assistant:")[-1].strip()

print(assistant_response)

Обработчик объединяет текстовые и визуальные входные данные, чтобы модель могла генерировать осмысленные мультипредметные выходы.

Аналогичные шаблоны могут обрабатывать несколько изображений, задачи OCR или даже видеокадры, что делает VLM очень гибкими.

Ресурсы

AI-тест
1 / 5

В чем основное преимущество визуально-языковых моделей VLM?