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

VLM объединяют компоненты обработки изображений и текстового генерирования для единого понимания многомодальной информации. Основные элементы:
- Кодировщик изображений/визуальный компонент: Преобразует изображения в компактные числовые представления. Примеры: CLIP, SigLIP.
- Проектор эмбеддингов: Выравнивает визуальные признаки с текстовыми эмбеддингами (чаще всего небольшая MLP или линейный слой, дообучаемый для конкретной многомодальной задачи).
- Многомодальный проектор/модуль слияния: Объединяет и усиливает связи между визуальными и текстовыми представлениями. Этот шаг выходит за рамки выравнивания, позволяя обеспечить богатое взаимодействие.
- Декодер текста: Генерирует текст (или другие выходы) из объединенных многомодальных представлений.
Большинство VLM используют предобученные кодировщики изображений и декодеры текста, затем дообучают на сопряженных наборах изображений и текста для эффективной тренировки и обобщения.
Практическое применение
VLM могут применяться для таких задач как:
- Генерация описаний изображений (Image Captioning)
- Визуальный ответ на вопросы (VQA)
- Кроссмодальная выборка (Cross-Modal Retrieval): сопоставление изображений с текстом и наоборот
- Креативные приложения: проектирование, генерация арта, создание мультимедийного контента
Качественные сопряженные наборы данных играют ключевую роль, а трансформеры предоставляют предобученные модели и упрощенные рабочие процессы дообучения.

Формат диалога
Многие VLM поддерживают диалогоподобные взаимодействия, с сообщениями в виде:
- Системное сообщение: задает контекст:
"You are an assistant analyzing visual data." - Запросы пользователя: комбинация текста и изображений.
- Ответы ассистента: сгенерированный текст на основе многомодального анализа.
Пример:
[
{
"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 очень гибкими.