CogVLM / CogVLM2
1. 개요
| 항목 |
내용 |
| 개발사 |
Zhipu AI, Tsinghua University |
| 공개일 |
CogVLM: 2023.11, CogVLM2: 2024.05 |
| 모델 타입 |
Open Source (Apache 2.0) |
| 접근 방식 |
Hugging Face, GitHub |
CogVLM은 Zhipu AI와 칭화대학이 개발한 오픈소스 VLM으로, Visual Expert 모듈을 통해 비전과 언어의 깊은 융합을 달성했다. CogVLM2는 LLaMA-3 기반으로 GPT-4V 수준의 성능을 보인다.
2. 모델 패밀리
2.1 CogVLM (v1)
| 모델 |
파라미터 |
Vision Encoder |
LLM |
| CogVLM-17B |
17B |
EVA2-CLIP-E |
Vicuna-7B |
| CogVLM-Chat |
17B |
EVA2-CLIP-E |
Vicuna-7B |
| CogVLM-Grounding |
17B |
EVA2-CLIP-E |
Vicuna-7B |
2.2 CogVLM2
| 모델 |
파라미터 |
Vision Encoder |
LLM |
| CogVLM2-llama3-chat-19B |
19B |
EVA2-CLIP-E |
LLaMA-3-8B |
| CogVLM2-llama3-chinese-chat |
19B |
EVA2-CLIP-E |
LLaMA-3-8B |
| CogVLM2-Video |
13B |
- |
- |
3. 아키텍처
3.1 CogVLM 핵심 혁신: Visual Expert
기존 VLM은 이미지와 텍스트를 같은 파라미터로 처리하여 모달리티 간 간섭 발생. CogVLM은 Visual Expert 모듈로 이를 해결.
[이미지] [텍스트]
| |
v v
[EVA2-CLIP-E] [토큰 임베딩]
| |
v v
[MLP Adapter] |
| |
+------------+-------------+
|
v
[Transformer Layer]
+-------------------+
| Attention |
| (공유) |
+-------------------+
| FFN (Visual) | <-- Visual Expert
| FFN (Language) | <-- Language Expert
+-------------------+
|
v
[출력 토큰]
3.2 핵심 컴포넌트
| 컴포넌트 |
CogVLM |
CogVLM2 |
| Vision Encoder |
EVA2-CLIP-E (4.4B) |
EVA2-CLIP-E |
| Adapter |
MLP |
MLP |
| LLM |
Vicuna-7B |
LLaMA-3-8B |
| Visual Expert |
QKV + FFN (6B) |
QKV + FFN |
| 총 파라미터 |
17B |
19B |
3.3 Visual Expert 상세
각 Transformer 레이어에서:
- QKV Projection: 이미지 토큰용 별도 QKV 가중치
- FFN: 이미지 토큰용 별도 FFN
이를 통해 텍스트 성능 저하 없이 비전 능력 추가.
4. 이미지 처리
4.1 해상도 지원
| 버전 |
해상도 |
이미지 토큰 |
| CogVLM |
490x490 |
1,225 |
| CogVLM2 |
1344x1344 |
2,500+ |
4.2 CogVLM2 개선점
| 항목 |
CogVLM |
CogVLM2 |
| 최대 해상도 |
490x490 |
1344x1344 |
| 멀티 이미지 |
제한적 |
지원 |
| 비디오 |
미지원 |
Video 버전 |
4.3 지원 포맷
5. 벤치마크 성능
5.1 CogVLM2-llama3-chat-19B
| 벤치마크 |
점수 |
비고 |
| MMMU (val) |
44.3% |
- |
| MathVista |
38.4% |
- |
| TextVQA |
84.2% |
텍스트 인식 우수 |
| OCRBench |
756 |
CogVLM 대비 +32% |
| DocVQA |
92.4% |
- |
| ChartQA |
81.0% |
- |
| AI2D |
73.4% |
- |
| MMBench |
80.5% |
- |
| MM-Vet |
60.4% |
- |
5.2 CogVLM (v1) vs CogVLM2
| 벤치마크 |
CogVLM |
CogVLM2 |
| TextVQA |
70.4% |
84.2% |
| OCRBench |
590 |
756 |
| DocVQA |
84.5% |
92.4% |
| VQAv2 |
82.3% |
85.6% |
5.3 GPT-4V와 비교
| 항목 |
CogVLM2 |
GPT-4V |
| TextVQA |
84.2% |
78.0% |
| OCRBench |
756 |
645 |
| 일반 VQA |
동등 수준 |
- |
CogVLM2는 OCR/텍스트 인식에서 GPT-4V를 능가.
6. 사용 방법
import torch
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "THUDM/cogvlm2-llama3-chat-19B"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
).eval()
image = Image.open("image.jpg").convert("RGB")
query = "Describe this image in detail."
inputs = model.build_conversation_input_ids(
tokenizer,
query=query,
images=[image],
template_version='chat'
)
inputs = {
'input_ids': inputs['input_ids'].unsqueeze(0).to(model.device),
'token_type_ids': inputs['token_type_ids'].unsqueeze(0).to(model.device),
'attention_mask': inputs['attention_mask'].unsqueeze(0).to(model.device),
'images': [[inputs['images'][0].to(model.device).to(torch.bfloat16)]]
}
gen_kwargs = {
"max_new_tokens": 2048,
"pad_token_id": 128002,
"do_sample": True,
"temperature": 0.6
}
with torch.no_grad():
outputs = model.generate(**inputs, **gen_kwargs)
response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
print(response)
6.2 Grounding (객체 탐지)
# CogVLM-Grounding 모델 사용
model_id = "THUDM/cogvlm-grounding-generalist-hf"
query = "Find the red car in this image."
# 출력 형식: [[x1, y1, x2, y2]]
# 좌표는 0-1000 범위로 정규화됨
6.3 양자화
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_quant_type="nf4"
)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
trust_remote_code=True,
device_map="auto"
)
6.4 CLI 인터페이스
python cli_demo.py --model_path THUDM/cogvlm2-llama3-chat-19B --image_path image.jpg
7. VRAM 요구량
7.1 CogVLM2-19B
| 정밀도 |
VRAM |
| BF16 |
42GB |
| INT8 |
24GB |
| INT4 |
14GB |
7.2 추론 속도 (A100 40GB, INT4)
8. 장점
| 장점 |
설명 |
| Visual Expert |
텍스트 성능 저하 없음 |
| OCR 우수 |
GPT-4V 능가 |
| Grounding |
객체 탐지 기능 |
| 중국어 지원 |
중국어 버전 제공 |
| LLaMA-3 기반 |
최신 LLM 백본 |
| 오픈소스 |
Apache 2.0 |
9. 단점
| 단점 |
설명 |
| 큰 모델 크기 |
19B로 VRAM 많이 필요 |
| 복잡한 아키텍처 |
Fine-tuning 어려움 |
| trust_remote_code |
보안 고려 필요 |
| 제한된 생태계 |
LLaVA 대비 도구 부족 |
10. 사용 사례
10.1 적합한 사용 사례
- OCR 및 문서 텍스트 추출
- 객체 탐지 및 위치 지정 (Grounding)
- 중국어 VQA
- 상세한 이미지 설명
- 차트/표 데이터 추출
10.2 부적합한 사용 사례
- 저사양 환경
- 실시간 처리
- 커스텀 Fine-tuning (복잡함)
- 비디오 분석 (Video 버전 제외)
11. 특수 기능: Grounding
CogVLM은 이미지 내 객체 위치를 출력하는 Grounding 기능을 제공.
11.1 지원 쿼리 유형
| 유형 |
예시 |
| Referring Expression |
"Find the red ball" |
| Phrase Grounding |
텍스트 내 명사구 위치 |
| Grounded Captioning |
캡션 + 바운딩 박스 |
11.2 출력 형식
Input: "Where is the cat?"
Output: "The cat is at [[234, 156, 567, 489]]"
좌표: [x1, y1, x2, y2], 0-1000 정규화
12. CogVLM2-Video
비디오 이해를 위한 확장 버전.
| 항목 |
사양 |
| 프레임 처리 |
최대 64 프레임 |
| Temporal Grounding |
타임스탬프 출력 |
| 용도 |
비디오 QA, 요약 |
13. 참고 자료