하얀 기둥이 솟아오르는 사진을 봤다고 해봅시다. smoke, steam, water vapor, mist, plume 모두 그럴듯합니다. 하지만 생성 모델은 단어마다 배운 이미지가 달라 결과도 달라집니다.
smokesteamwater vapormistplume
🔦 목표: 정답 단어 하나를 판정하려는 것이 아닙니다. 공개 모델이 각 표현을 이미지의 어디와 연결하는지 보고, 원하는 장면을 더 잘 설명하는 문구를 고르는 것입니다.
STEP 1 · CLIP
사진을 14×14개의 의미 조각으로 본다
CLIP은 이미지와 글을 같은 숫자 공간에 놓는 모델입니다. 이 프로젝트는 CLIP ViT-B/16을 사용합니다. 224×224 입력을 16픽셀씩 나눠 14×14=196개 패치를 만들고, 각 패치 특징과 후보 문구의 방향이 얼마나 비슷한지 계산합니다.
입력 이미지224×224
→
패치 특징14×14×512
↘
cosine−1 ~ 1
후보 문구smoke, steam…
→
텍스트 특징후보마다 512개
↗
Cosine similarity(코사인 유사도)는 두 숫자 벡터가 같은 방향을 보는지 재는 값입니다. 오른쪽 범례에서 빨강에 가까운 HIGH는 해당 단어와 유사도가 높은 패치, 파랑에 가까운 LOW는 낮은 패치입니다.
중요: CLIP의 패치 투영은 실용적인 근사입니다. 생성 모델의 실제 attention이나 인과관계를 직접 읽은 값은 아닙니다.
STEP 2 · 독립 시각화
한 단어에는 히트맵 한 장
smoke와 steam을 한 이미지에 섞지 않습니다. 후보마다 원본 이미지 전체에 해당 단어의 반응만 칠하고, 실제 계산 단위가 보이도록 흰 격자를 그립니다.
smoke → 이미지 1장·steam → 이미지 1장·mist → 이미지 1장
CLIP은 고정 14×14 패치, Qwen은 입력 비율에 따라 달라지는 실제 시각 토큰 격자를 사용합니다. Qwen의 14픽셀 패치를 2×2씩 병합한 뒤의 행×열을 그대로 읽습니다. 확대할 때 NEAREST를 사용해 이웃 칸의 색을 섞지 않습니다.
STEP 3 · Qwen-VL
한 칸을 가렸을 때 판단이 얼마나 바뀌나?
Qwen-VL은 CLIP처럼 패치와 문구를 바로 cosine으로 비교하도록 학습된 모델이 아닙니다. 대신 후보를 선택형 질문으로 주고, 각 후보의 선택 확률을 측정합니다.
① 원본에서 후보 확률 측정
→
② 격자 한 칸을 평균색으로 가림
→
③ 확률이 떨어진 만큼 중요 영역으로 표시
격자는 사용자가 정하지 않습니다. Qwen processor의 image_grid_thw를 읽고 spatial merge 2를 적용합니다. 따라서 이미지마다 16×23, 22×22처럼 달라지며, 원본 1회와 시각 토큰 수만큼 다시 추론합니다.
단어별 가림 격자: 후보 하나마다 별도 지도를 만듭니다. 예를 들어 fog 지도에서 각 칸을 하나씩 가리고 원본 fog 확률 − 가린 뒤 fog 확률을 계산합니다. 오른쪽 범례의 HIGH는 가렸을 때 확률이 크게 떨어진 중요한 칸, LOW는 영향이 작거나 가렸을 때 오히려 확률이 오른 칸입니다.
ACTUAL CASES · COCO 2017 VAL
실제 데이터로 돌려보면
아래 수치는 로컬 COCO 검증셋 원본에 현재 구현을 그대로 실행한 결과입니다. 각 이미지 오른쪽 범례에는 빨강 HIGH·파랑 LOW와 실제 최소·최댓값이 표시됩니다. CLIP은 cosine, Qwen은 가림 전후 probability drop이므로 서로 단위가 다릅니다.
CLIP 전체 이미지smoke 0.20524steam 0.25567white vapor 0.18160cloud 0.21319
Qwen 후보 확률smoke 15.73%steam 79.88%white vapor 0.89%cloud 3.51%
COCO의 사람 캡션도 같은 기둥을 각각 Steam rising…, billowing smoke…라고 표현했습니다. 두 모델 모두 전체 순위에서는 steam을 골랐습니다. 실제 프롬프트는 steam locomotive emitting a thick white plume처럼 물체와 형태를 같이 쓰는 편이 낫습니다.
CASE 2
안개 속 오토바이
COCO image 165518 · fog vs mist
CLIP · 단어별 14×14 패치
fog · 0.27525mist · 0.26855haze · 0.25886smoke · 0.25882
Qwen-VL · 실제 22×22 시각 토큰 격자 · 485회
fog · 54.00%mist · 15.47%haze · 25.51%smoke · 5.02%
CLIP 전체 이미지fog 0.27525mist 0.26855haze 0.25886smoke 0.25882
Qwen 후보 확률fog 54.00%mist 15.47%haze 25.51%smoke 5.02%
CLIP에서는 네 표현의 점수 차가 작지만 Qwen은 fog를 더 분명히 선택했습니다. COCO 캡션에도 a foggy road가 두 번 등장합니다. 생성 프롬프트에서는 a motorcyclist emerging through dense road fog처럼 대상·동작·밀도를 함께 적을 수 있습니다.
출처: COCO 2017 validation images와 captions annotation. 원본은 /home/son/data_hdd/public/datasets/coco/에서 읽었고 모델 결과는 2026-08-06에 생성했습니다.
STEP 4 · 폐쇄형 생성 모델에 적용
내부를 못 보더라도 표현은 비교할 수 있다
Nano Banana와 Seedance는 가중치와 내부 attention을 공개하지 않습니다. 따라서 이 결과는 두 모델의 내부를 설명하는 증거가 아니라, 프롬프트 후보를 좁히는 대리 지표입니다.
애매한 명사와 문구를 한 줄씩 넣습니다.
CLIP에서 원하는 물체 영역에 집중하는 후보를 찾습니다.
Qwen-VL에서 후보 순위와 중요한 영역이 비슷한지 확인합니다.
남은 2~3개 문구를 실제 생성 모델에서 같은 seed·설정으로 비교합니다.
단어보다 문구도 비교하세요. smoke → a column of pale gray smoke steam → white steam rising from a vent
LIVE DEMO
직접 이미지와 후보 문구를 넣어보기
CLIP은 빠르고, Qwen-VL은 격자 수만큼 반복 추론해 시간이 더 걸립니다. 처음 누를 때 모델을 GPU에 올리는 시간이 추가됩니다.