{/ Эта страница автоматически передается из навыков SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Ллава

Большой помощник по языку и зрению. Обеспечивает визуальную эффективность процедур и диалогов на основе изображений. Объединяет CLIP-кодировщик изображений с языковыми моделями Vicuna/LLaMA. Поддерживает многопоточный чат с изображениями, ответами на визуальные вопросы и поведением живых. Используйте для создания чат-ботов, работы с изображениями или задачами по распознаванию изображений. Лучше всего подходит для внешнего анализа изображений.

Метаданные навыки

Источник Опционально — установка с помощью hermesskills installofficial/mlops/llava
Путь optional-skills/mlops/llava
Версия 1.0.0
Автор Исследование оркестра
Лицензия Массачусетский технологический институт
Зависимости трансформеры, факел, подушка
Платформы Linux, MacOS, Windows
Теги LLaVA, Vision-Language, Мультимодальный, Визуальный ответ на вопросы, Изображение чата, CLIP, Викунья, Разговорный искусственный интеллект, Настройка инструкций, VQA

Справочник: полный SKILL.md:::информация

Ниже приведено полное определение навыков, которые Hermes загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навыки активны.

LLaVA — Помощник по большому языку и зрению

Модель «язык-зрение» с открытым исходным кодом для внешнего понимания изображений.

Когда использовать LLaVA

Используйте, когда: - Создаете чат-ботов, работающих с изображениями - Нужны ответы на визуальные вопросы (VQA) - Требуется описание и подключение к изображениям. - Ведете многопоточные диалоги с изображениями - Нужно прийти к визуальным людям - Требуется понимание документов с изображениями

Метрики: - 23 000+ звезд на GitHub - Возможности уровня GPT-4V (целевые) - Лицензия Apache 2.0 - Несколько размеров моделей (параметры 7B-34B)

Используйте альтернативы вместо этого: - GPT-4V: Наивысшее качество, на основе API - CLIP: Простая классификация нулевого выстрела - BLIP-2: Лучше только для подписей - Фламинго: Исследовательская, не раскрыт исходный код.

Быстрый старт

Установка

# Клонирование репозитория
git clone https://github.com/haotian-liu/LLaVA
cd LLaVA

# Установка
pip install -e.

Базовое использование

from llava.model.builder import load_pretrained_model
from llava.mm_utils import get_model_name_from_path, process_images, tokenizer_image_token
from llava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN
from llava.conversation import conv_templates
from PIL import Image
import torch

# Загрузка модели
model_path = "liuhaotian/llava-v1.5-7b"
tokenizer, model, image_processor, context_len = load_pretrained_model(
    model_path=model_path,
    model_base=None,
    model_name=get_model_name_from_path(model_path)
)

# Загрузка изображения
image = Image.open("image.jpg")
image_tensor = process_images([image], image_processor, model.config)
image_tensor = image_tensor.to(model.device, dtype=torch.float16)

# Создание диалога
conv = conv_templates["llava_v1"].copy()
conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN + "\nЧто изображено на этой картинке?")
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()

# Генерация ответа
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).to(model.device)

with torch.inference_mode():
    output_ids = model.generate(
        input_ids,
        images=image_tensor,
        do_sample=True,
        temperature=0.2,
        max_new_tokens=512
    )

response = tokenizer.decode(output_ids[0], skip_special_tokens=True).strip()
print(response)

Доступные модели

Модель Параметры видеопамять Качество
LLaVA-v1.5-7B ~14 ГБ Хорошее
LLaVA-v1.5-13B 13Б ~28 ГБ Лучше
LLaVA-v1.6-34B 34Б ~70 ГБ Наилучшее
# Загрузка разных моделей
model_7b = "liuhaotian/llava-v1.5-7b"
model_13b = "liuhaotian/llava-v1.5-13b"
model_34b = "liuhaotian/llava-v1.6-34b"

# 4-битная квантизация для меньшего VRAM
load_4bit = True  # Уменьшает VRAM примерно в 4 раза

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

# Запрос к одному изображению
python -m llava.serve.cli \
    --model-path liuhaotian/llava-v1.5-7b \
    --image-file image.jpg \
    --query "Что изображено на этой картинке?"

# Многопоточный диалог
python -m llava.serve.cli \
    --model-path liuhaotian/llava-v1.5-7b \
    --image-file image.jpg
# Затем вводите вопросы интерактивно

Веб-интерфейс (Gradio)

# Запуск интерфейса Gradio
python -m llava.serve.gradio_web_server \
    --model-path liuhaotian/llava-v1.5-7b \
    --load-4bit  # Опционально: уменьшить VRAM

# Доступ по адресу http://localhost:7860

Многопоточные диалоги

# Инициализация диалога
conv = conv_templates["llava_v1"].copy()

# Шаг 1
conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN + "\nЧто изображено на этой картинке?")
conv.append_message(conv.roles[1], None)
response1 = generate(conv, model, image)  # "Собака играет в парке"

# Шаг 2
conv.messages[-1][1] = response1  # Добавить предыдущий ответ
conv.append_message(conv.roles[0], "Какая порода собаки?")
conv.append_message(conv.roles[1], None)
response2 = generate(conv, model, image)  # "Золотистый ретривер"

# Шаг 3
conv.messages[-1][1] = response2
conv.append_message(conv.roles[0], "Какое время суток?")
conv.append_message(conv.roles[1], None)
response3 = generate(conv, model, image)

Типовые задачи

Создание подписей к изображениям

question = "Опишите это изображение подробно."
response = ask(model, image, question)

Ответы на визуальные вопросы

question = "Сколько людей на изображении?"
response = ask(model, image, question)

Обнаружение объектов (текстовое)

question = "Перечисли все объекты, которые ты видишь на этом изображении."
response = ask(model, image, question)

Понимание сцен

question = "Что происходит в этой сцене?"
response = ask(model, image, question)

Понимание документов

question = "Какова основная тема этого документа?"
response = ask(model, document_image, question)

Обучение собственным моделям

# Этап 1: Выравнивание признаков (558K пар изображение-подпись)
bash scripts/v1_5/pretrain.sh

# Этап 2: Настройка визуальных инструкций (150K данных инструкций)
bash scripts/v1_5/finetune.sh

Квантизация (уменьшение VRAM)

# 4-битная квантизация
tokenizer, model, image_processor, context_len = load_pretrained_model(
    model_path="liuhaotian/llava-v1.5-13b",
    model_base=None,
    model_name=get_model_name_from_path("liuhaotian/llava-v1.5-13b"),
    load_4bit=True  # Уменьшает VRAM ~4×
)

# 8-битная квантизация
load_8bit=True  # Уменьшает VRAM ~2×

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

  1. Начинайте с модели 7B - Хорошее качество, управляемый VRAM.
  2. Используйте 4-битную квантизацию - измеряет уменьшение VRAM
  3. Требуется графический процессор — выводы о процессоре крайне занижены.
  4. Четкие запросы — Конкретные вопросы дают лучшие ответы.
  5. Многопоточные диалоги - Сохраняйте контекст диалога
  6. Температура 0,2-0,7 - Баланс креативности/согласованности.
  7. max_new_tokens 512-1024 - Для подробных ответов
  8. Пакетная обработка — обрабатывайте несколько изображений последовательно.

Производительность

Модель Видеопамять (FP16) Видеопамять (4-битная) Скорость (токенов/с)
~14 ГБ ~4 ГБ ~20
13Б ~28 ГБ ~8 ГБ ~12
34Б ~70 ГБ ~18 ГБ ~5

На графическом процессоре A100

Бенчмарки

LLaVA достигает конкурентных результатов по: - VQAv2: 78,5% - GQA: 62,0% - ММ-Вет: 35,4% - MMBench: 64,3%

Ограничения

  1. Галлюцинации - Может описать то, чего нет на изображении
  2. Пространственное мышление — Плохо справляется с лучшими расположениями.
  3. Мелкий текст - Трудности с чтением мелкого шрифта
  4. Подсчет объектов - Неточен для большого количества объектов.
  5. Требования к VRAM - Нужен наблюдатель ГПУ
  6. Скорость инференса - Медленнее, чем CLIP

Интеграция с фреймворками

Лангчейн

from langchain.llms.base import LLM

class LLaVALLM(LLM):
    def _call(self, prompt, stop=None):
        # Пользовательский инференс LLaVA
        return response

llm = LLaVALLM()

Приложение Градио

import gradio as gr

def chat(image, text, history):
    response = ask_llava(model, image, text)
    return response

demo = gr.ChatInterface(
    chat,
    additional_inputs=[gr.Image(type="pil")],
    title="LLaVA Chat"
)
demo.launch()

Ресурсы