learn.ericfromkorea.com / prompt-lens

이건 연기일까,
수증기일까?

이미지의 작은 영역마다 후보 표현을 대입해 보고, 생성 모델에 넣을 더 정확한 프롬프트를 찾는 과정입니다.

바로 데모 사용하기
STEP 0 · 문제

사람도 애매하면 모델도 애매하다

하얀 기둥이 솟아오르는 사진을 봤다고 해봅시다. 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 · 독립 시각화

한 단어에는 히트맵 한 장

smokesteam을 한 이미지에 섞지 않습니다. 후보마다 원본 이미지 전체에 해당 단어의 반응만 칠하고, 실제 계산 단위가 보이도록 흰 격자를 그립니다.

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이므로 서로 단위가 다릅니다.

CASE 1

증기기관차의 흰 기둥

COCO image 316054 · smoke vs steam

CLIP · 단어별 14×14 패치

smoke CLIP 히트맵
smoke · 0.20524
steam CLIP 히트맵
steam · 0.25567
white vapor CLIP 히트맵
white vapor · 0.18160
cloud CLIP 히트맵
cloud · 0.21319

Qwen-VL · 실제 16×23 시각 토큰 격자 · 369회

smoke Qwen 히트맵
smoke · 15.73%
steam Qwen 히트맵
steam · 79.88%
white vapor Qwen 히트맵
white vapor · 0.89%
cloud Qwen 히트맵
cloud · 3.51%
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 CLIP 히트맵
fog · 0.27525
mist CLIP 히트맵
mist · 0.26855
haze CLIP 히트맵
haze · 0.25886
smoke CLIP 히트맵
smoke · 0.25882

Qwen-VL · 실제 22×22 시각 토큰 격자 · 485회

fog Qwen 히트맵
fog · 54.00%
mist Qwen 히트맵
mist · 15.47%
haze Qwen 히트맵
haze · 25.51%
smoke Qwen 히트맵
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을 공개하지 않습니다. 따라서 이 결과는 두 모델의 내부를 설명하는 증거가 아니라, 프롬프트 후보를 좁히는 대리 지표입니다.

  1. 애매한 명사와 문구를 한 줄씩 넣습니다.
  2. CLIP에서 원하는 물체 영역에 집중하는 후보를 찾습니다.
  3. Qwen-VL에서 후보 순위와 중요한 영역이 비슷한지 확인합니다.
  4. 남은 2~3개 문구를 실제 생성 모델에서 같은 seed·설정으로 비교합니다.

단어보다 문구도 비교하세요.
smokea column of pale gray smoke
steamwhite steam rising from a vent

LIVE DEMO

직접 이미지와 후보 문구를 넣어보기

CLIP은 빠르고, Qwen-VL은 격자 수만큼 반복 추론해 시간이 더 걸립니다. 처음 누를 때 모델을 GPU에 올리는 시간이 추가됩니다.

데모를 전체 화면으로 열기 ↗