콘텐츠로 이동

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. 사용 방법

6.1 Hugging Face Transformers

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. 참고 자료