LLaVA (Large Language and Vision Assistant)
1. 개요
| 항목 |
내용 |
| 개발사 |
University of Wisconsin-Madison, Microsoft Research |
| 공개일 |
LLaVA: 2023.04, LLaVA 1.5: 2023.10 |
| 모델 타입 |
Open Source (Apache 2.0) |
| 접근 방식 |
Hugging Face, GitHub |
LLaVA는 Visual Instruction Tuning을 통해 GPT-4V 수준의 멀티모달 능력을 목표로 한 오픈소스 VLM이다. 간단하고 효율적인 아키텍처로 VLM 연구의 표준이 되었다.
2. 모델 패밀리
| 버전 |
모델 |
Vision Encoder |
LLM |
특징 |
| LLaVA |
llava-7b |
CLIP ViT-L/14 |
Vicuna-7B |
최초 버전 |
| LLaVA 1.5 |
llava-1.5-7b |
CLIP ViT-L/14@336 |
Vicuna-7B |
MLP Connector |
| LLaVA 1.5 |
llava-1.5-13b |
CLIP ViT-L/14@336 |
Vicuna-13B |
더 큰 LLM |
| LLaVA 1.6 |
llava-v1.6-7b |
CLIP ViT-L/14@336 |
Vicuna-7B |
AnyRes |
3. 아키텍처
3.1 구조
[이미지 336x336]
|
v
[CLIP ViT-L/14 (Frozen)]
|
v
[2-Layer MLP Projection]
|
v
[Vicuna LLM] <-- [텍스트 토큰]
|
v
[출력 토큰]
3.2 핵심 컴포넌트
| 컴포넌트 |
LLaVA 1.0 |
LLaVA 1.5 |
| Vision Encoder |
CLIP ViT-L/14 (224px) |
CLIP ViT-L/14 (336px) |
| Projection |
Linear |
2-Layer MLP |
| LLM |
Vicuna-7B/13B |
Vicuna-7B/13B |
| 이미지 토큰 |
256 |
576 |
3.3 학습 단계
Stage 1: Feature Alignment Pre-training
- 데이터: CC3M (595K 이미지-텍스트 쌍)
- 학습 대상: Projection layer만
- Vision Encoder, LLM: Frozen
Stage 2: Visual Instruction Tuning
- 데이터: LLaVA-Instruct-150K
- 학습 대상: Projection + LLM
- Vision Encoder: Frozen
4. 이미지 처리
4.1 해상도
| 버전 |
입력 해상도 |
이미지 토큰 |
| LLaVA 1.0 |
224x224 |
256 |
| LLaVA 1.5 |
336x336 |
576 |
| LLaVA 1.6 |
Dynamic (AnyRes) |
가변 |
4.2 지원 포맷
- JPEG
- PNG
- WebP
- GIF (첫 프레임)
4.3 멀티 이미지
| 버전 |
지원 |
| LLaVA 1.0/1.5 |
단일 이미지만 |
| LLaVA 1.6+ |
멀티 이미지 지원 |
5. 벤치마크 성능
5.1 LLaVA 1.5-13B
| 벤치마크 |
점수 |
| MMMU (val) |
36.4% |
| MathVista |
27.6% |
| VQAv2 |
80.0% |
| GQA |
63.3% |
| TextVQA |
61.3% |
| POPE |
85.9% |
| MMBench |
67.7% |
| MM-Vet |
35.4% |
| LLaVA-Bench (Wild) |
70.7% |
5.2 모델 크기별 비교
| 벤치마크 |
7B |
13B |
| VQAv2 |
78.5 |
80.0 |
| GQA |
62.0 |
63.3 |
| TextVQA |
58.2 |
61.3 |
| POPE |
85.9 |
85.9 |
5.3 GPT-4V 대비 상대 점수
LLaVA 1.5는 GPT-4V 대비 약 85% 수준의 상대 점수 달성 (LLaVA-Bench 기준).
6. 사용 방법
from transformers import LlavaForConditionalGeneration, AutoProcessor
from PIL import Image
import torch
model_id = "llava-hf/llava-1.5-7b-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = LlavaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
image = Image.open("image.jpg")
prompt = "USER: <image>\nDescribe this image in detail.\nASSISTANT:"
inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=256,
do_sample=True,
temperature=0.2
)
result = processor.decode(outputs[0], skip_special_tokens=True)
print(result)
6.2 원본 저장소 사용
from llava.model.builder import load_pretrained_model
from llava.mm_utils import get_model_name_from_path
from llava.eval.run_llava import eval_model
model_path = "liuhaotian/llava-v1.5-7b"
model_name = get_model_name_from_path(model_path)
tokenizer, model, image_processor, context_len = load_pretrained_model(
model_path,
None,
model_name
)
# 추론
args = type('Args', (), {
"model_path": model_path,
"model_base": None,
"query": "Describe this image.",
"conv_mode": None,
"image_file": "image.jpg",
"sep": ",",
"temperature": 0.2,
"top_p": None,
"num_beams": 1,
"max_new_tokens": 512
})()
output = eval_model(args)
6.3 양자화 (BitsAndBytes)
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True
)
model = LlavaForConditionalGeneration.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto"
)
6.4 vLLM 서빙
python -m vllm.entrypoints.openai.api_server \
--model llava-hf/llava-1.5-7b-hf \
--chat-template template_llava.jinja
7. VRAM 요구량
| 모델 |
FP16 |
INT8 |
INT4 |
| LLaVA 1.5-7B |
14GB |
8GB |
5GB |
| LLaVA 1.5-13B |
26GB |
14GB |
8GB |
7.1 추론 속도 (RTX 4090)
| 모델 |
FP16 |
INT4 |
| LLaVA 1.5-7B |
45 tok/s |
80 tok/s |
| LLaVA 1.5-13B |
28 tok/s |
55 tok/s |
8. 장점
| 장점 |
설명 |
| 오픈소스 |
Apache 2.0, 완전 공개 |
| 간단한 구조 |
이해/수정 용이 |
| 효율적 학습 |
1일 8x A100으로 학습 가능 |
| 검증된 성능 |
다수 벤치마크 검증 |
| 풍부한 생태계 |
많은 파생 모델, 도구 |
| Fine-tuning 용이 |
LoRA, Full fine-tuning 지원 |
9. 단점
| 단점 |
설명 |
| 단일 이미지 |
1.5는 멀티 이미지 미지원 |
| 고정 해상도 |
336x336 고정 |
| 환각 |
세부 사항 오류 가능 |
| OCR 약함 |
텍스트 인식 제한적 |
| 영어 중심 |
다국어 성능 제한 |
10. 사용 사례
10.1 적합한 사용 사례
- VLM 연구/실험
- 이미지 캡셔닝
- 시각 질의응답
- 교육 목적
- 커스텀 데이터셋 Fine-tuning
- 경량 배포
10.2 부적합한 사용 사례
- 프로덕션 챗봇 (성능 제한)
- 고정밀 OCR
- 멀티 이미지 비교 (1.5)
- 비디오 분석
11. 학습 데이터
11.1 Pre-training
| 데이터셋 |
크기 |
용도 |
| CC3M (Filtered) |
595K |
Feature alignment |
11.2 Instruction Tuning
| 데이터셋 |
크기 |
용도 |
| LLaVA-Instruct |
150K |
Visual chat |
| ShareGPT |
- |
대화 형식 |
| VQA 데이터셋 |
- |
질의응답 |
12. 파생 모델
| 모델 |
특징 |
| LLaVA-NeXT |
동적 해상도, 더 큰 LLM |
| ShareGPT4V |
더 많은 학습 데이터 |
| LLaVA-Med |
의료 도메인 특화 |
| MobileVLM |
모바일 최적화 |
| TinyLLaVA |
초경량 버전 |
13. 참고 자료