Qwen-VL 다중 이미지 비교 추론 가이드: 이미지 차이점 분석 실습

1. Qwen-Image 환경 개요

Qwen-Image는 비전-언어 모델 추론을 위해 특별히 최적화된 컨테이너 이미지로, 특히 RTX 4090D GPU 환경에 맞게 설계되었습니다. 이 환경은 Qwen-VL(통이첸원 시각-언어 모델)을 사용한 다중 모드 추론 작업에 필요한 모든 의존성과 도구를 사전 설치하여 제공합니다.

복잡한 환경 설정 없이 바로 이미지 이해, 다중 이미지 비교 같은 작업을 시작할 수 있다는 장점이 있습니다.

2. 환경 확인 및 설정

2.1 하드웨어 검증

먼저 GPU와 CUDA 환경이 정상적으로 동작하는지 확인합니다.

# GPU 상태 확인
nvidia-smi

# CUDA 버전 확인
nvcc -V

다음과 유사한 출력을 기대할 수 있습니다.

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.90.07              Driver Version: 550.90.07    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA RTX 4090D   WDDM  | 00000000:01:00.0 Off |                  Off |
|  0%   38C    P8    15W / 450W |      0MiB / 24576MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

2.2 작업 디렉터리 설정

이미지에는 작업 공간이 준비되어 있습니다.

  • 시스템 디스크: 50GB (시스템 및 기본 환경)
  • 데이터 디스크: 40GB (/data 디렉터리에 마운트, 모델 및 데이터셋 저장 권장)
# 작업 디렉터리로 이동
cd /data

# 디스크 공간 확인
df -h

3. 다중 이미지 비교 추론 실습

3.1 테스트 이미지 준비

두 이미지의 차이점을 찾는 기능을 시연하기 위해 예제 이미지를 준비합니다. 자체 이미지를 사용하거나 웹에서 다운로드할 수 있습니다.

from PIL import Image
import requests
from io import BytesIO

# 예제 이미지 1 다운로드
url_a = "https://example.com/pic_a.jpg"  # 실제 URL로 대체
resp = requests.get(url_a)
img_a = Image.open(BytesIO(resp.content))
img_a.save("/data/pic_a.jpg")

# 예제 이미지 2 다운로드
url_b = "https://example.com/pic_b.jpg"  # 실제 URL로 대체
resp = requests.get(url_b)
img_b = Image.open(BytesIO(resp.content))
img_b.save("/data/pic_b.jpg")

3.2 Qwen-VL 모델 로드

이미지에 사전 설치된 Qwen-VL 모델을 바로 로드합니다.

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# 토크나이저와 모델 로드
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-VL", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen-VL",
    device_map="cuda",
    trust_remote_code=True
).eval()

3.3 이미지 비교 추론 실행

핵심 기능인 이미지 간 차이점 분석을 실행합니다.

# 이미지 경로 지정
path_a = "/data/pic_a.jpg"
path_b = "/data/pic_b.jpg"

# 질의 구성
question = "두 이미지의 주요 차이점을 한국어로 상세히 설명해주세요."

# 추론 실행
answer, history = model.chat(
    tokenizer,
    query=question,
    history=None,
    images=[path_a, path_b]
)

# 결과 출력
print("이미지 차이 분석 결과:")
print(answer)

4. 실제 사례 분석

예를 들어, 두 개의 사무실 사진이 있다고 가정합니다.

  • 이미지 A: 책상 위에 노트북, 커피 한 잔, 휴대폰이 있음
  • 이미지 B: 책상 위에 노트북, 차 한 잔, 휴대폰이 있음

위 코드를 실행하면 모델이 다음과 같은 분석을 반환할 수 있습니다.

두 이미지의 주요 차이점은 다음과 같습니다.
1. 음료 변화: 첫 번째 이미지에는 커피가 있지만, 두 번째 이미지에는 차로 변경되었습니다.
2. 색상 차이: 커피는 진한 갈색이고, 차는 연한 색상입니다.
3. 컵 위치: 두 이미지 모두 컵이 책상 오른쪽에 있지만, 두 번째 이미지에서는 컵이 노트북에 더 가깝게 위치합니다.
노트북과 휴대폰의 위치와 상태는 동일합니다.

5. 고급 활용 팁

5.1 분석 정확도 향상

모델의 답변이 부정확할 경우, 더 구체적인 질문을 시도해 보세요.

question = "두 이미지를 꼼꼼히 비교하여 모든 차이점을 찾아주세요. 다음 항목별로 설명해 주세요.\n1. 추가되거나 사라진 물건\n2. 물건 위치 이동\n3. 색상이나 모양 변화\n4. 기타 시각적 차이점\n목록 형식으로 답변해 주세요."

5.2 여러 이미지 쌍 일괄 처리

여러 이미지 쌍을 비교해야 하는 경우 일괄 처리 스크립트를 작성할 수 있습니다.

import os
from glob import glob

# 비교할 이미지 쌍 리스트
image_sets = [
    ("/data/set1_a.jpg", "/data/set1_b.jpg"),
    ("/data/set2_a.jpg", "/data/set2_b.jpg"),
    # 추가 이미지 쌍
]

for img_x, img_y in image_sets:
    query = f"{os.path.basename(img_x)}와 {os.path.basename(img_y)}의 모든 차이점을 찾아주세요."
    resp, _ = model.chat(tokenizer, query=query, images=[img_x, img_y])
    print(f"비교 결과: {img_x} vs {img_y}")
    print(resp)
    print("\n" + "="*50 + "\n")

6. 자주 발생하는 문제 해결

6.1 GPU 메모리 부족

메모리 부족 문제가 발생하면 다음 방법을 시도해 보세요.

  1. 입력 이미지 해상도를 줄입니다.
  2. 더 작은 모델 버전을 사용합니다(가능한 경우).
  3. 다른 GPU 메모리 사용 프로그램을 종료합니다.
  4. 메모리를 명시적으로 정리하는 코드를 추가합니다.
import torch

torch.cuda.empty_cache()

6.2 모델 로딩 속도 저하

모델을 처음 로드할 때 시간이 오래 걸릴 수 있으며, 다음을 권장합니다.

  1. /data 디렉터리에 모델 파일을 저장하여 재다운로드를 방지합니다.
  2. --no-cache-dir 플래그를 사용하여 시스템 디스크 공간 사용을 줄입니다.
  3. 가능한 경우 모델을 GGUF 같은 효율적인 형식으로 변환합니다.

태그: Qwen-VL 멀티모달 이미지비교 RTX4090 트랜스포머

7월 8일 08:13에 게시됨