LLaVA-NeXT (LLaVA 1.6+)
1. 개요
| 항목 |
내용 |
| 개발사 |
NTU, ByteDance, University of Wisconsin-Madison |
| 공개일 |
2024.01 (LLaVA 1.6), 2024.05 (Stronger LLMs) |
| 모델 타입 |
Open Source (Apache 2.0) |
| 접근 방식 |
Hugging Face, GitHub |
LLaVA-NeXT는 LLaVA 1.5의 후속작으로, 동적 해상도(AnyRes), 더 큰 LLM, 개선된 OCR 능력을 제공한다. 오픈소스 VLM 중 최고 수준의 성능을 달성했다.
2. 모델 패밀리
2.1 LLaVA-NeXT (LLaVA 1.6)
| 모델 |
Vision Encoder |
LLM |
특징 |
| llava-v1.6-mistral-7b |
CLIP ViT-L/14@336 |
Mistral-7B |
Mistral 기반 |
| llava-v1.6-vicuna-7b |
CLIP ViT-L/14@336 |
Vicuna-7B |
Vicuna 기반 |
| llava-v1.6-vicuna-13b |
CLIP ViT-L/14@336 |
Vicuna-13B |
더 큰 모델 |
| llava-v1.6-34b |
CLIP ViT-L/14@336 |
Yi-34B |
최대 성능 |
2.2 LLaVA-NeXT (Stronger LLMs, 2024.05)
| 모델 |
Vision Encoder |
LLM |
특징 |
| llava-next-8b |
CLIP ViT-L/14@336 |
LLaMA-3-8B |
LLaMA 3 기반 |
| llava-next-72b |
CLIP ViT-L/14@336 |
Qwen-1.5-72B |
Qwen 기반 |
| llava-next-110b |
CLIP ViT-L/14@336 |
Qwen-1.5-110B |
최대 규모 |
2.3 LLaVA-NeXT-Video
| 모델 |
특징 |
| LLaVA-NeXT-Video-7B |
비디오 이해 |
| LLaVA-NeXT-Video-34B |
비디오 + 이미지 |
3. 아키텍처
3.1 핵심 개선: AnyRes (Dynamic High Resolution)
[고해상도 이미지]
|
v
[그리드 분할] --> [타일 1] [타일 2] [타일 3] ...
| | | |
v v v v
[전체 썸네일] [336x336] [336x336] [336x336]
| | | |
v v v v
[CLIP ViT] [CLIP ViT] [CLIP ViT] [CLIP ViT]
| | | |
+-------+------+--------+--------+
|
v
[Concatenate]
|
v
[MLP Projection]
|
v
[LLM]
3.2 AnyRes 상세
| 그리드 설정 |
최대 타일 |
최대 이미지 토큰 |
| 2x2 |
4+1 |
2,880 |
| 3x3 |
9+1 |
5,760 |
| 최대 |
6+1 |
4,032 (실제 사용) |
3.3 핵심 컴포넌트
| 컴포넌트 |
사양 |
| Vision Encoder |
CLIP ViT-L/14@336 (Frozen) |
| Projection |
2-Layer MLP |
| LLM |
다양한 백본 선택 가능 |
| 해상도 |
동적 (최대 672x672 ~ 2016x672) |
4. 이미지 처리
4.1 지원 해상도 그리드
| 그리드 |
해상도 |
| 1x1 |
336x336 |
| 1x2, 2x1 |
672x336, 336x672 |
| 2x2 |
672x672 |
| 1x3, 3x1 |
1008x336, 336x1008 |
| ... |
... |
| 2x3, 3x2 |
1344x672, 672x1344 |
4.2 멀티 이미지
| 항목 |
지원 |
| 최대 이미지 수 |
컨텍스트 제한 내 |
| 이미지 인터리빙 |
지원 |
| 비디오 프레임 |
지원 (Video 버전) |
5. 벤치마크 성능
5.1 LLaVA-NeXT-34B (Yi)
| 벤치마크 |
점수 |
GPT-4V 대비 |
| MMMU (val) |
51.1% |
90% |
| MathVista |
46.5% |
93% |
| AI2D |
74.9% |
96% |
| ChartQA |
68.7% |
87% |
| DocVQA |
78.0% |
88% |
| TextVQA |
69.5% |
89% |
| MMBench |
79.3% |
- |
| MM-Vet |
57.4% |
- |
5.2 LLaVA-NeXT-72B/110B
| 벤치마크 |
72B |
110B |
| MMMU |
56.7% |
58.8% |
| MathVista |
54.3% |
56.1% |
| AI2D |
82.1% |
83.4% |
| DocVQA |
82.4% |
85.2% |
5.3 모델별 비교
| 모델 |
MMMU |
MathVista |
DocVQA |
| LLaVA-1.5-13B |
36.4% |
27.6% |
- |
| LLaVA-NeXT-7B (Mistral) |
35.8% |
37.7% |
72.5% |
| LLaVA-NeXT-13B |
36.2% |
35.3% |
74.7% |
| LLaVA-NeXT-34B |
51.1% |
46.5% |
78.0% |
6. 사용 방법
from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
from PIL import Image
import torch
model_id = "llava-hf/llava-v1.6-mistral-7b-hf"
processor = LlavaNextProcessor.from_pretrained(model_id)
model = LlavaNextForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
image = Image.open("image.jpg")
prompt = "[INST] <image>\nDescribe this image in detail. [/INST]"
inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=True,
temperature=0.2
)
result = processor.decode(outputs[0], skip_special_tokens=True)
print(result)
6.2 멀티 이미지 처리
images = [Image.open("img1.jpg"), Image.open("img2.jpg")]
prompt = "[INST] <image>\n<image>\nCompare these two images. [/INST]"
inputs = processor(images=images, text=prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512)
6.3 vLLM 서빙
python -m vllm.entrypoints.openai.api_server \
--model llava-hf/llava-v1.6-mistral-7b-hf \
--max-model-len 8192 \
--image-input-type pixel_values \
--image-token-id 32000 \
--image-input-shape 1,3,336,336
6.4 LLaVA-NeXT-Video
from llava.model.builder import load_pretrained_model
from llava.mm_utils import process_video
# 비디오 로드 및 처리
video_path = "video.mp4"
video_frames = process_video(video_path, num_frames=32)
# 추론
prompt = "Describe what is happening in this video."
response = model.generate(video_frames, prompt)
7. VRAM 요구량
| 모델 |
FP16 |
INT8 |
INT4 |
| LLaVA-NeXT-7B |
16GB |
9GB |
6GB |
| LLaVA-NeXT-13B |
28GB |
15GB |
9GB |
| LLaVA-NeXT-34B |
68GB |
36GB |
20GB |
| LLaVA-NeXT-72B |
144GB |
76GB |
40GB |
| LLaVA-NeXT-110B |
220GB |
116GB |
60GB |
7.1 추론 속도 (A100 80GB, FP16)
| 모델 |
토큰/초 |
| LLaVA-NeXT-7B |
52 |
| LLaVA-NeXT-34B |
22 |
| LLaVA-NeXT-72B |
12 |
8. 장점
| 장점 |
설명 |
| 동적 해상도 |
AnyRes로 고해상도 처리 |
| OCR 개선 |
LLaVA 1.5 대비 크게 향상 |
| 다양한 크기 |
7B ~ 110B 선택 가능 |
| 비디오 지원 |
Video 버전 제공 |
| 오픈소스 |
완전 공개, Apache 2.0 |
| 강력한 LLM |
LLaMA 3, Qwen 백본 |
9. 단점
| 단점 |
설명 |
| 토큰 증가 |
고해상도 시 토큰 수 급증 |
| 복잡한 설정 |
AnyRes 구성 필요 |
| VRAM 요구 |
큰 모델은 고사양 필요 |
| 환각 |
여전히 존재 |
10. 사용 사례
10.1 적합한 사용 사례
- 고해상도 문서 분석
- OCR 및 텍스트 추출
- 복잡한 차트/다이어그램
- 비디오 이해 (Video 버전)
- 연구 및 실험
- 프로덕션 배포 (양자화)
10.2 부적합한 사용 사례
- 저사양 환경 (큰 모델)
- 실시간 처리 (고해상도)
11. LLaVA 1.5 vs LLaVA-NeXT 비교
| 항목 |
LLaVA 1.5 |
LLaVA-NeXT |
| 해상도 |
336x336 고정 |
동적 (AnyRes) |
| 이미지 토큰 |
576 |
최대 4,032 |
| OCR |
약함 |
크게 개선 |
| 멀티 이미지 |
미지원 |
지원 |
| 비디오 |
미지원 |
Video 버전 |
| 최대 모델 |
13B |
110B |
12. 참고 자료