콘텐츠로 이동

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 지원 포맷

  • JPEG
  • PNG
  • WebP

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

6.1 Hugging Face Transformers

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)

모델 토큰/초
CogVLM2-19B 35

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