На этой странице
Large Language and Vision Assistant (LLaVA). Обеспечивает визуальную настройку инструкций и диалоги на основе изображений. Объединяет CLIP-видеокодер с языковыми моделями Vicuna/LLaMA. Поддерживает многопоточный чат с изображениями, визуальные ответы на вопросы и следование инструкциям. Используйте для создания чат-ботов вида «язык+зрение» или задач понимания изображений. Лучше всего подходит для диалогового анализа изображений.
Метаданные навыка¶
| Source |
| Path |
| Version |
| Author |
| License |
| Dependencies |
| Tags |
Справочник: полный SKILL.md¶
info Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Это те инструкции, которые видит агент, когда навык активен.
LLaVA — Large Language and Vision Assistant¶
Модель «зрение-язык» с открытым исходным кодом для диалогового понимания изображений.
Когда использовать LLaVA¶
Используйте когда: * Строите чат-ботов вида «зрение-язык» * Нужны визуальные ответы на вопросы (VQA) * Требуется описание и подписи к изображениям * Ведёте многопоточные диалоги об изображениях * Нужно следование визуальным инструкциям * Работаете с документами, содержащими изображения
Показатели: * 23 000+ звёзд на GitHub * Возможности на уровне GPT-4V (целевой показатель) * Лицензия Apache 2.0 * Несколько размеров модели (7B–34B параметров)
Альтернативы: * GPT-4V : Наивысшее качество, на основе API * CLIP : Простая zero-shot классификация * BLIP-2 : Лучше только для подписей * Flamingo : Исследовательская, не open-source
Быстрый старт¶
Установка¶
[code]
# Clone repository
git clone https://github.com/haotian-liu/LLaVA
cd LLaVA
# Install
pip install -e .
[/code]
Базовое использование¶
[code]
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
# Load model
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)
)
# Load image
image = Image.open("image.jpg")
image_tensor = process_images([image], image_processor, model.config)
image_tensor = image_tensor.to(model.device, dtype=torch.float16)
# Create conversation
conv = conv_templates["llava_v1"].copy()
conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN + "\nWhat is in this image?")
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
# Generate response
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)
[/code]
Доступные модели¶
Модель| Параметры| VRAM| Качество
---|---|---|---|---
LLaVA-v1.5-7B| 7B| ~14 ГБ| Хорошее
LLaVA-v1.5-13B| 13B| ~28 ГБ| Лучше
LLaVA-v1.6-34B| 34B| ~70 ГБ| Наилучшее
[code]
# Load different models
model_7b = "liuhaotian/llava-v1.5-7b"
model_13b = "liuhaotian/llava-v1.5-13b"
model_34b = "liuhaotian/llava-v1.6-34b"
# 4-bit quantization for lower VRAM
load_4bit = True # Reduces VRAM by ~4×
[/code]
Использование в CLI¶
[code]
# Single image query
python -m llava.serve.cli \
--model-path liuhaotian/llava-v1.5-7b \
--image-file image.jpg \
--query "What is in this image?"
# Multi-turn conversation
python -m llava.serve.cli \
--model-path liuhaotian/llava-v1.5-7b \
--image-file image.jpg
# Then type questions interactively
[/code]
Веб-интерфейс (Gradio)¶
[code]
# Launch Gradio interface
python -m llava.serve.gradio_web_server \
--model-path liuhaotian/llava-v1.5-7b \
--load-4bit # Optional: reduce VRAM
# Access at http://localhost:7860
[/code]
Многопоточные диалоги¶
[code]
# Initialize conversation
conv = conv_templates["llava_v1"].copy()
# Turn 1
conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN + "\nWhat is in this image?")
conv.append_message(conv.roles[1], None)
response1 = generate(conv, model, image) # "A dog playing in a park"
# Turn 2
conv.messages[-1][1] = response1 # Add previous response
conv.append_message(conv.roles[0], "What breed is the dog?")
conv.append_message(conv.roles[1], None)
response2 = generate(conv, model, image) # "Golden Retriever"
# Turn 3
conv.messages[-1][1] = response2
conv.append_message(conv.roles[0], "What time of day is it?")
conv.append_message(conv.roles[1], None)
response3 = generate(conv, model, image)
[/code]
Типовые задачи¶
Описание изображений¶
[code]
question = "Describe this image in detail."
response = ask(model, image, question)
[/code]
Визуальные ответы на вопросы¶
[code]
question = "How many people are in the image?"
response = ask(model, image, question)
[/code]
Обнаружение объектов (текстовое)¶
[code]
question = "List all the objects you can see in this image."
response = ask(model, image, question)
[/code]
Понимание сцены¶
[code]
question = "What is happening in this scene?"
response = ask(model, image, question)
[/code]
Понимание документов¶
[code]
question = "What is the main topic of this document?"
response = ask(model, document_image, question)
[/code]
Обучение собственной модели¶
[code]
# Stage 1: Feature alignment (558K image-caption pairs)
bash scripts/v1_5/pretrain.sh
# Stage 2: Visual instruction tuning (150K instruction data)
bash scripts/v1_5/finetune.sh
[/code]
Квантование (снижение VRAM)¶
[code]
# 4-bit quantization
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 # Reduces VRAM ~4×
)
# 8-bit quantization
load_8bit=True # Reduces VRAM ~2×
[/code]
Рекомендации¶
- Начните с модели 7B — хорошее качество, умеренный расход VRAM
- Используйте 4-битное квантование — существенно снижает потребление VRAM
- Требуется GPU — инференс на CPU крайне медленный
- Чёткие промпты — конкретные вопросы дают лучшие ответы
- Многопоточные диалоги — сохраняйте контекст беседы
- Temperature 0.2–0.7 — баланс между креативностью и согласованностью
- max_new_tokens 512–1024 — для развёрнутых ответов
- Пакетная обработка — обрабатывайте несколько изображений последовательно
Производительность¶
Модель| VRAM (FP16)| VRAM (4-bit)| Скорость (токен/с)
---|---|---|---|---
7B| ~14 ГБ| ~4 ГБ| ~20
13B| ~28 ГБ| ~8 ГБ| ~12
34B| ~70 ГБ| ~18 ГБ| ~5
На GPU A100
Бенчмарки¶
LLaVA достигает конкурентных показателей на: * VQAv2 : 78,5% * GQA : 62,0% * MM-Vet : 35,4% * MMBench : 64,3%
Ограничения¶
- Галлюцинации — может описывать то, чего нет на изображении
- Пространственное мышление — плохо справляется с точным определением местоположения
- Мелкий текст — сложности с чтением мелкого шрифта
- Подсчёт объектов — неточен при большом количестве объектов
- Требования к VRAM — необходим мощный GPU
- Скорость инференса — медленнее, чем CLIP
Интеграция с фреймворками¶
LangChain¶
[code] from langchain.llms.base import LLM
class LLaVALLM(LLM):
def _call(self, prompt, stop=None):
# Custom LLaVA inference
return response
llm = LLaVALLM()
[/code]
Gradio App¶
[code] 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()
[/code]
Ресурсы¶
- GitHub : https://github.com/haotian-liu/LLaVA ⭐ 23 000+
- Статья : https://arxiv.org/abs/2304.08485
- Демо : https://llava.hliu.cc
- Модели : https://huggingface.co/liuhaotian
-
Лицензия : Apache 2.0
- Справочник: полный SKILL.md
- Когда использовать LLaVA
- Быстрый старт
- Доступные модели
- Использование в CLI
- Веб-интерфейс (Gradio)
- Многопоточные диалоги
- Типовые задачи
- Обучение собственной модели
- Квантование (снижение VRAM)
- Рекомендации
- Производительность
- Бенчмарки
- Ограничения
- Интеграция с фреймворками
- Ресурсы