Конспект 10: Multimodal AI - Текст, изображения, аудио, видео

Pavel 13.12.2025 22:13 12 просмотров

Оглавление

  1. Введение в Multimodal AI
  2. Типы модальностей
  3. Современные multimodal модели
  4. Vision Language Models (VLM)
  5. Audio и Speech Processing
  6. Video Understanding
  7. Multimodal embeddings
  8. Cross-modal retrieval
  9. Практические примеры
  10. Лучшие практики

Введение в Multimodal AI

Что такое Multimodal AI?

Определение: Multimodal AI — это системы, которые могут обрабатывать и интегрировать информацию из нескольких типов данных (текст, изображения, аудио, видео).

Отличие от unimodal:

Unimodal (один тип данных):
- Текстовый LLM: только текст → текст
- Image classifier: только изображения → класс
- Speech-to-text: только аудио → текст

Multimodal (несколько типов):
- GPT-4 Vision: текст + изображения → текст
- CLIP: текст + изображения → embeddings
- LLaVA: изображение + вопрос → ответ

Зачем multimodal?

Реальный мир multimodal:
❌ Никогда нет чистого текста или чистых картинок
✅ Всё комбинации текста, изображений, видео, аудио

Примеры:
- Документы со скриншотами (PDF анализ)
- Видео с субтитрами (понимание контента)
- Изображения с подписями (caption generation)
- Таблицы с иконками (table understanding)

История multimodal

2015: VGG + LSTM (базовая vision-language)
2016: Attention механизм между модальностями
2019: CLIP (OpenAI) - революция
2021: ViT (Vision Transformer)
2023: GPT-4 Vision (понимание любых изображений)
2024: Gemini 2.0 (лучше всех в multimodal)
2025: Reasoning models с vision

Типы модальностей

1. Text (Текст)

Характеристики: - Последовательная информация - Дискретная (слова, токены) - Легко обрабатывать

Обработка: - Tokenizer → embeddings → LLM

2. Image (Изображения)

Характеристики: - 2D сетка пикселей - Непрерывная информация - Содержит пространственные отношения

Обработка: - Image encoder (CNN, ViT) - Patch embedding - Vision transformer

Размеры изображений:

Маленькие (32×32): Классификация, быстро
Средние (224×224): Standard для большинства
Большие (512×512+): Детали, но медленнее

3. Audio (Аудио)

Характеристики: - Временные последовательности - Частоты (спектрограммы) - Фонетическая информация

Обработка: - Mel-spectrogram (визуализация звука) - Audio embeddings - Speech recognition → текст

Типы:

Speech: говорение (можно convert в текст)
Music: музыкальное аудио (análisis ритма, жанра)
Sound: звуковые эффекты

4. Video (Видео)

Характеристики: - Последовательность фреймов (изображений) - Временная информация - Содержит движение и изменения

Обработка: - Извлечение ключевых фреймов - Optical flow (движение) - 3D convolutions (temporal)

Применение: - Действия (action recognition) - Понимание событий - Описание видео (captioning)


Современные multimodal модели

GPT-4 Vision (OpenAI)

Возможности: - ✅ Анализ изображений любого размера - ✅ Понимание диаграмм, графиков, таблиц - ✅ OCR (извлечение текста из изображений) - ✅ Детали и мелкий текст - ✅ Понимание контекста

Цена:

Input: $0.01 per 1K tokens + $0.25 per image
Output: $0.03 per 1K tokens

Пример: 5 изображений + 100 токенов текста
= (100 × $0.01 + 5 × $0.25) / 1000 + 0 = $0.00135

Пример использования:

import openai

response = openai.ChatCompletion.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/image.jpg"
                    }
                },
                {
                    "type": "text",
                    "text": "Что ты видишь на этом изображении?"
                }
            ]
        }
    ]
)

Gemini 2.0 (Google)

Возможности: - ✅ Лучше GPT-4 в image understanding - ✅ Лучше в мультиязычности - ✅ Аудио понимание (native) - ✅ 1 миллион токенов контекста

Цена:

Дешевле чем GPT-4 Vision
Input: $0.075 per 1M tokens
Images: включены в токен count

Claude 3 (Anthropic)

Возможности: - ✅ Очень хорошее понимание изображений - ✅ Честность и безопасность - ✅ Длинный контекст (200K токенов)

Модели:

Claude 3 Haiku: быстро, дешево
Claude 3 Sonnet: баланс
Claude 3 Opus: лучше всех

Llama 2 Vision (Meta)

Возможности: - ✅ Open source (бесплатно) - ✅ Можно локально развернуть - ✅ Fine-tuning возможен

Ограничения: - ❌ Не так хорош как GPT-4 - ❌ Требует GPU - ❌ Медленнее

LLaVA (Open Source)

Характеристики: - Combining LLaMA + CLIP - Хорошо для image captioning - Fine-tunable


Vision Language Models (VLM)

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

┌──────────────┐
│   Изображение│
└──────┬───────┘
       │
   ┌───▼────────────┐
   │ Vision Encoder │ (ViT)
   │ (извлекает     │
   │  features)     │
   └───┬────────────┘
       │
   ┌───▼─────────────────┐
   │  Feature Projection │ (привести к размеру токенов)
   └───┬─────────────────┘
       │
   ┌───▼────────────────────────────┐
   │  LLM (например, GPT)           │ ◄──── ┌──────────────┐
   │  (понимает и отвечает)         │       │   Текстовый  │
   │                                │       │   вопрос     │
   └───┬────────────────────────────┘       └──────────────┘
       │
   ┌───▼────────────┐
   │ Текстовый ответ│
   └────────────────┘

Процесс обработки изображения

Шаг 1: Image Encoding

Изображение (H×W×3)
    ↓
Vision Transformer (ViT)
    ↓
Фичи изображения (N×D)
где N = количество патчей, D = размерность

Шаг 2: Projection

Фичи изображения (N×D_vision)
    ↓
Linear projection
    ↓
Токен-подобное представление (N×D_language)

Шаг 3: LLM Processing

[<image_tokens> + <text_tokens>]
    
LLM (например, GPT)
    
Текстовый ответ

Типы задач VLM

Задача Описание Пример
Image Captioning Описать что на картинке "На картинке собака в парке"
VQA (Visual Q&A) Ответить на вопрос про картинку "Сколько людей?" → "3"
OCR Извлечь текст из картинки "Прочитай текст на вывеске"
Image Classification Классифицировать картинку "Это кот или собака?"
Diagram Understanding Понять диаграммы/графики "Какой тренд в данных?"
Table Understanding Понимать таблицы "Сумма по столбцу?"

Audio и Speech Processing

Speech-to-Text (STT)

Модели:

OpenAI Whisper:
- Точность: 95%+
- Языки: 98
- Бесплатно (может быть локально)

Google Cloud Speech-to-Text:
- Accuracy: 95%+
- Real-time streaming

Azure Speech Services:
- Multilingual
- Custom models

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

import openai

audio_file = open("audio.mp3", "rb")
transcript = openai.Audio.transcribe(
    model="whisper-1",
    file=audio_file,
    language="ru"  # Опционально
)

print(transcript["text"])

Text-to-Speech (TTS)

OpenAI TTS:

import openai

speech = openai.Audio.create(
    model="tts-1",
    voice="nova",
    input="Привет, это голосовое сообщение",
    speed=1.0
)

speech.stream_to_file("output.mp3")

Голоса:

alloy, echo, fable, onyx, nova, shimmer

Качество:

tts-1: быстро, дешево (используй для real-time)
tts-1-hd: лучше качество (используй для записей)

Audio Understanding

Анализ музыки:

Жанр классификации
Mood recognition
Beat detection
Instrument identification

Анализ речи:

Эмоции (happiness, anger, sadness)
Уверенность говорящего
Скорость речи
Акцент/язык

Video Understanding

Video Analysis Tasks

Key Frame Extraction:

import cv2

video = cv2.VideoCapture("video.mp4")
frames = []
while True:
    ret, frame = video.read()
    if not ret:
        break
    frames.append(frame)

# Выбрать ключевые фреймы (каждый N-й)
key_frames = frames[::30]  # Каждый 30-й фрейм

Action Recognition:

Определить действия в видео:
- Ходьба, бег, прыжок
- Сидение, стояние
- Взаимодействия между людьми

Video Captioning:

Input: видео
Output: "Люди играют в футбол в парке"

Обработка видео с LLM

Метод 1: Extract key frames → VLM

# 1. Извлечь ключевые фреймы
key_frames = extract_key_frames(video)

# 2. Описать каждый фрейм с VLM
descriptions = []
for frame in key_frames:
    desc = gpt4_vision(frame, "Опиши что происходит")
    descriptions.append(desc)

# 3. Объединить в сценарий видео
full_description = " → ".join(descriptions)

Метод 2: Video embedding → search

# Используй video embedding модели
# Например: ViViT, TimeSformer

# Все видео в датасете → embeddings
video_embeddings = []
for video in videos:
    embedding = video_encoder(video)
    video_embeddings.append(embedding)

# Search похожих видео
query_embedding = video_encoder(query_video)
similar = search_nearest(query_embedding, video_embeddings)

Multimodal embeddings

Что такое multimodal embedding?

Определение: Вектор который представляет информацию из нескольких модальностей в единном пространстве.

Пример CLIP:

Изображение: "Кот спит"
    ↓
CLIP Image Encoder
    ↓
[0.123, -0.456, ..., 0.789] (512D)

Текст: "Спящий кот"
    ↓
CLIP Text Encoder
    ↓
[0.125, -0.450, ..., 0.791] (512D)

Similarity: cosine_sim = 0.98 (очень похожи!)

CLIP (OpenAI)

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

Image Encoder (ViT)
    ↓
    └─→ Image embeddings (512D)

Text Encoder (Transformer)
    ↓
    └─→ Text embeddings (512D)

Обучение: Maximal similarity между paired images и текстов

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

from PIL import Image
import clip
import torch

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

image = preprocess(Image.open("photo.jpg")).unsqueeze(0).to(device)
text = clip.tokenize(["собака", "кот", "птица"]).to(device)

with torch.no_grad():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)

    # Вычислить similarity
    logits_per_image = image_features @ text_features.T
    probs = logits_per_image.softmax(dim=-1)

print(probs)  # [0.85, 0.10, 0.05] - скорее всего собака

Multimodal embedding models

Модель Модальности Размерность Цена Качество
CLIP текст + изображение 512 Бесплатно ⭐⭐⭐⭐
Jina multimodal текст + изображение 768 $0.10/1M ⭐⭐⭐⭐⭐
BLIP текст + изображение 256 Бесплатно ⭐⭐⭐⭐
ImageBind текст + изображение + аудио + видео 1024 Бесплатно ⭐⭐⭐⭐

Cross-modal retrieval

Текст → Изображение поиск

Как это работает:

Пользователь: "Красная роза"
    ↓
Text encoder (CLIP)
    ↓
Text embedding
    ↓
Vector DB поиск
    ↓
Найти похожие изображения
    ↓
Результаты: [foto1.jpg, foto2.jpg, ...]

Реализация:

import clip
from qdrant_client import QdrantClient
import torch
from PIL import Image

# 1. Загрузить модель
device = "cuda"
model, preprocess = clip.load("ViT-B/32", device=device)
qdrant = QdrantClient("http://localhost:6333")

# 2. Индексировать изображения
images = load_all_images()
for i, img_path in enumerate(images):
    img = Image.open(img_path)
    img_tensor = preprocess(img).unsqueeze(0).to(device)

    with torch.no_grad():
        embedding = model.encode_image(img_tensor)[0].cpu().numpy()

    qdrant.upsert(
        collection_name="images",
        points=[{"id": i, "vector": embedding, "payload": {"path": img_path}}]
    )

# 3. Поиск по тексту
query = "красная роза"
query_tokens = clip.tokenize(query).to(device)
with torch.no_grad():
    query_embedding = model.encode_text(query_tokens)[0].cpu().numpy()

results = qdrant.search(
    collection_name="images",
    query_vector=query_embedding,
    limit=5
)

# Вывод результатов
for result in results:
    print(f"Image: {result.payload['path']}, Score: {result.score:.3f}")

Изображение → Текст поиск

Как это работает:

Пользователь загружает изображение
    ↓
Image encoder (CLIP)
    ↓
Image embedding
    ↓
Vector DB поиск (в текстовых embeddings)
    ↓
Найти похожий текст
    ↓
Результаты: [document1.txt, document2.txt, ...]

Практические примеры

Пример 1: Image-based Document Q&A

import openai
from PIL import Image
import base64

def image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode()

def analyze_document(image_path, question):
    """Анализ документа с изображением"""

    image_data = image_to_base64(image_path)

    response = openai.ChatCompletion.create(
        model="gpt-4-vision-preview",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/jpeg;base64,{image_data}"
                        }
                    },
                    {
                        "type": "text",
                        "text": question
                    }
                ]
            }
        ]
    )

    return response.choices[0].message.content

# Использование
answer = analyze_document(
    "invoice.jpg",
    "Какая общая сумма счета?"
)

Пример 2: Video summarization

import cv2
import openai

def summarize_video(video_path):
    """Резюме видео через анализ ключевых фреймов"""

    video = cv2.VideoCapture(video_path)
    frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

    # Извлечь ключевые фреймы
    key_frames = []
    for i in range(0, frame_count, frame_count // 5):  # 5 фреймов
        video.set(cv2.CAP_PROP_POS_FRAMES, i)
        ret, frame = video.read()
        if ret:
            key_frames.append(frame)

    # Описать каждый фрейм
    descriptions = []
    for frame in key_frames:
        # Конвертировать frame → base64
        # Отправить в GPT-4 Vision
        # Получить описание
        pass

    # Объединить в итоговое резюме
    summary = "\n".join(descriptions)

    return summary

Пример 3: Audio transcription + Analysis

import openai

def analyze_podcast(audio_path):
    """Транскрибировать и проанализировать подкаст"""

    # 1. Транскрибировать
    with open(audio_path, "rb") as audio_file:
        transcript = openai.Audio.transcribe(
            model="whisper-1",
            file=audio_file
        )

    text = transcript["text"]

    # 2. Анализировать с LLM
    analysis = openai.ChatCompletion.create(
        model="gpt-4-turbo",
        messages=[
            {
                "role": "system",
                "content": "Ты аналитик подкастов"
            },
            {
                "role": "user",
                "content": f"""Проанализируй этот транскрипт подкаста:

{text}

Дай:
1. Основные темы
2. Ключевые выводы
3. Интересные моменты
"""
            }
        ]
    )

    return {
        "transcript": text,
        "analysis": analysis.choices[0].message.content
    }

Лучшие практики

Do's ✅

  1. Используйте GPT-4 Vision для сложного анализа изображений Диаграммы, таблицы, OCR - GPT-4 Vision отлично справляется

  2. Используйте CLIP для поиска изображений Бесплатный, быстрый, хороший результат

  3. Извлекайте ключевые фреймы из видео Не обрабатывайте все фреймы (дорого) Вместо этого: каждый N-й фрейм

  4. Используйте Whisper для транскрибирования аудио Точный, многоязычный, дешевый

  5. Кэшируйте multimodal embeddings Embedding часто переиспользуется

  6. Комбинируйте модальности для лучшего понимания Текст + изображение > только текст

Don'ts ❌

  1. Не обрабатывайте все фреймы видео 30 фреймов × 60 секунд = 1800 вызовов API 😱 Вместо этого: выбирайте ключевые фреймы

  2. Не игнорируйте качество изображений Плохое качество → плохой результат

  3. Не отправляйте огромные изображения Ресайз перед отправкой (max 1024×1024 обычно)

  4. Не забывайте про privacy Изображения отправляются на сервер OpenAI Убедись что нет приватных данных

  5. Не переплачивайте за vision Если нужна только классификация: используй cheaper моделей

Чек-лист multimodal

Выбор модели:
☑️ Задача определена (caption, QA, search)
☑️ Модель выбрана (GPT-4V, Gemini, Claude)
☑️ Цена проверена
☑️ Качество протестировано

Подготовка данных:
☑️ Изображения отресайзены
☑️ Аудио в правильном формате
☑️ Видео ключевые фреймы извлечены
☑️ Нет приватных данных

Обработка:
☑️ Batch обработка (если много)
☑️ Кэширование включено
☑️ Error handling настроено
☑️ Rate limiting соблюдается

Оценка:
☑️ Результаты проверены вручную
☑️ Метрики считаются (если возможно)
☑️ A/B тестирование сделано
☑️ Performance оптимизирован

Дата создания: December 2025
Версия: 1.0
Автор: Pavel
Применение: Vision Language Models, Audio Processing, Video Understanding, Cross-modal Retrieval

Комментарии (0)

Для добавления комментария необходимо войти в аккаунт

Войти / Зарегистрироваться