| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Link Prediction
- Road network
- CityJSON
- CNN
- Consistent Video Depth Estimation
- Stable Diffusion #Image generation #Diffusion #AI #Generative model
- Today
- Total
빙글빙글 돌아가는 바람개비
[Study] IP-Adapter-레퍼런스 이미지를 넣는 법 본문
IP-Adapter
"이런 느낌의 이미지를 만들어줘" 라는 요청을 텍스트로만 풀어내는 데는 한계가 있다. 단어 수백 개로도 표현이 어려운 미묘한 분위기, 색감, 구도가 있다. 이럴 때 가장 직접적인 방법은 참고할 이미지 자체를 모델에 보여주는 것이다. 2023년 Tencent AI Lab 이 발표한 IP-Adapter (Image Prompt Adapter) 가 정확히 이 일을 한다.
IP-Adapter 의 핵심 가치는 단순한 기능 추가가 아니라 패러다임의 전환에 있다. 기존의 개념 학습 기법들은 새로운 피사체나 스타일을 모델에 가르치기 위해 매번 학습 과정을 거쳐야 했다. IP-Adapter 는 다르다. 한 번만 학습된 어댑터를 끼워두면, 추론 시점에 어떤 이미지든 바로 프롬프트로 쓸 수 있다. 학습 없이, 즉시.
1. 출발점 — 텍스트 프롬프트의 한계
Stable Diffusion 은 텍스트를 입력으로 받는 모델이다. 단어로 원하는 이미지를 묘사하면, 모델이 그 묘사에 맞는 그림을 그린다. 그런데 텍스트라는 매개체엔 본질적인 한계가 있다.
- 미묘한 화풍과 분위기. "이 일러스트레이터의 느낌" 을 텍스트로 정확히 풀어내려면 단어 수십 개를 동원해도 부족하다.
- 특정 인물 · 캐릭터. 학습에 없던 인물을 "갈색 머리, 둥근 눈, 살짝 웃는 표정" 으로 묘사해도 매번 다른 사람이 나온다.
- 색감과 톤. "빈티지 필름 같은 색감" 이라는 말이 사람마다 다르게 해석된다. 실제 참고 이미지를 보여주는 것보다 부정확하다.
- 구도와 배치. "왼쪽 아래에서 비스듬히 올려다보는 시점" 을 묘사하는 건 가능하지만, 실제 의도와 결과 사이의 간극이 크다.
기존의 해법은 학습 기반이었다. Textual Inversion, DreamBooth, LoRA 모두 새로운 개념을 가르치려면 이미지 몇 장과 학습 시간이 필요하다. 결과는 좋지만 매번 GPU 를 돌려야 하고, 결과물이 나오기까지 수십 분 ~ 수 시간이 걸린다.
IP-Adapter 의 출발점은 다른 질문이다. "학습이 정말 필요한가. 이미지를 그냥 입력으로 던지면 되는 거 아닌가." 사실 텍스트가 들어가는 통로(Cross-Attention) 가 이미 있다. 이미지를 텍스트와 같은 형식의 입력으로 변환할 수만 있다면, 추가 학습 없이 추론 시점에 끼워 넣을 수 있을 것이다.
2. 사전 지식 — Cross-Attention 이 텍스트를 받는 방식
IP-Adapter 를 이해하려면 SD 가 텍스트를 어떻게 이미지 생성에 반영하는지 알아야 한다. 핵심은 U-Net 의 Cross-Attention 블록이다.
U-Net 은 노이즈가 가득한 잠재 이미지를 점진적으로 깨끗한 이미지로 정제하는 신경망이다. 정제 과정에서 매 단계마다 "어떻게 정제할지" 를 결정해야 하는데, 이때 텍스트 프롬프트의 의미가 개입한다. Cross-Attention 블록이 그 개입의 통로다.
Cross-Attention 은 잠재 이미지의 각 위치(Query) 에게 묻는다. "텍스트 임베딩 중 너와 가장 관련 있는 부분이 뭐야?" 잠재 이미지가 답을 찾아 그 부분을 가져다가 자기 자신을 업데이트한다. 이 메커니즘이 U-Net 의 거의 모든 블록에 박혀 있어서, 생성 과정 내내 텍스트가 반복적으로 참조된다.
여기가 핵심이다. 텍스트가 영향력을 행사하는 통로는 정해져 있다. 바로 Cross-Attention 이다. 이 통로를 하나 더 만들어 이미지가 들어오게 하면, 이미지도 텍스트와 같은 권한으로 생성에 개입할 수 있다. IP-Adapter 의 모든 아이디어가 이 한 줄에 담겨 있다.
3. 핵심 아이디어 — Decoupled Cross-Attention
IP-Adapter 의 가장 큰 기여는 Decoupled Cross-Attention(분리된 교차 어텐션) 이라는 구조다. 이름이 길지만 아이디어는 간결하다. U-Net 의 각 Cross-Attention 블록 옆에, 이미지 전용 Cross-Attention 블록을 평행하게 하나 더 만든다.
두 어텐션은 동일한 Query(잠재 이미지) 를 공유한다. 하지만 Key 와 Value 가 다르다. 한쪽은 텍스트 임베딩을, 다른 쪽은 이미지 임베딩을 본다. 두 어텐션의 출력이 더해져서 최종 결과가 만들어진다.
왜 "분리" 가 핵심인가
IP-Adapter 이전에도 이미지를 프롬프트로 쓰려는 시도들이 있었다. 가장 직관적인 접근은 이미지 임베딩과 텍스트 임베딩을 그냥 이어붙이거나(concatenate) 평균내는 것이었다. 하지만 이 방식엔 큰 문제가 있다.
- 텍스트 따르기 능력의 손실. 이미지와 텍스트를 같은 통로에 섞어 넣으면 모델이 학습한 "텍스트 해석 방식" 이 망가진다. 결과적으로 텍스트 프롬프트의 영향력이 크게 떨어진다.
- 둘 사이의 충돌. 텍스트와 이미지가 다른 것을 요구하면 모델이 혼란스러워한다. 둘 중 하나가 다른 하나를 덮어버리거나, 둘 다 어중간하게 반영된다.
Decoupled Cross-Attention 은 이 문제를 우아하게 해결한다. 두 통로를 끝까지 분리해두면, 각각이 자신만의 영향력을 독립적으로 행사한다. 텍스트 어텐션은 기존과 동일하게 동작하므로 텍스트 따르기 능력이 보존된다. 이미지 어텐션은 새로운 영향력을 추가할 뿐이다.
비유로 풀어보자. 무대에 마이크가 하나뿐이라면, 한 사람이 말하는 음성과 다른 사람이 노래하는 소리를 같이 넣을 때 둘 다 뭉개진다. 마이크를 두 개 두고 각자에게 하나씩 주면, 두 소리가 또렷하게 함께 들린다. Decoupled Cross-Attention 은 이미지와 텍스트에 각각의 마이크를 주는 것이다. 둘이 서로의 영역을 침범하지 않으면서 함께 작동한다.
4. 작동방식 정리
참고 이미지가 입력되어 최종 출력에 영향을 미치기까지의 흐름을 단계별로 보면 이렇다.
- 이미지 인코딩 — 참고 이미지를 CLIP 이미지 인코더에 통과시킨다. 결과는 그 이미지의 시각적 의미를 담은 임베딩 벡터(혹은 벡터 시퀀스) 다.
- 이미지 토큰으로 변환 — 작은 프로젝션 네트워크가 이미지 임베딩을 텍스트 임베딩과 동일한 차원의 시퀀스로 바꾼다. 이를 "이미지 토큰" 이라 부른다. 보통 4 ~ 16 개의 토큰으로 이미지 한 장을 표현한다.
- U-Net 진입 — 이미지 토큰이 U-Net 에 전달된다. 동시에 텍스트 프롬프트도 평소대로 Text Encoder 를 거쳐 텍스트 임베딩으로 변환된다.
- 각 블록에서 두 어텐션 동시 계산 — U-Net 의 모든 Cross-Attention 블록에서 두 가지 어텐션이 동시에 일어난다. 텍스트 어텐션과 이미지 어텐션이 각자 자신의 출력을 만든다.
- 가중 합산 — 두 어텐션의 출력이 가중치 λ 로 합쳐진다. λ 가 0 이면 이미지 영향력 0, 1 이면 텍스트와 동등한 영향력이다.
- 이후 일반적인 디퓨전 진행 — 합쳐진 결과가 다음 단계로 흘러가 평소대로 노이즈 제거가 이어진다.
학습되는 부분과 동결되는 부분
IP-Adapter 의 모든 학습 비용은 이 새로 추가된 부분에만 들어간다.
| 구분 | 대상 |
|---|---|
| 학습되는 것 (어댑터) | 이미지 토큰 프로젝션 네트워크 + 새 Cross-Attention 블록들의 가중치 |
| 동결되는 것 | U-Net 본체, Text Encoder, CLIP 이미지 인코더, 기존 Cross-Attention 블록 |
중요한 점은 이 학습이 특정 피사체나 스타일을 위한 학습이 아니라는 것이다. 어댑터는 "이미지를 프롬프트로 사용하는 일반적인 능력" 을 학습한다. 거대한 이미지-캡션 데이터셋(LAION 등) 에서 한 번 학습되고 나면, 이후 어떤 이미지가 들어와도 학습 없이 즉시 처리할 수 있다.
5. 학습 없이도 가능한 이유
처음 들으면 의아하다. 학습 데이터에 우리 캐릭터가 없었는데, 그 캐릭터를 참고 이미지로 던지면 어떻게 알아보는 걸까. 답은 두 단계로 나뉜다.
CLIP 이미지 인코더가 이미 일반화돼 있다
CLIP 은 4억 장 이상의 이미지로 학습된 모델이다. 본 적 없는 이미지가 들어와도 그 시각적 특성을 의미 벡터로 정확히 인코딩할 수 있다. 이 점이 IP-Adapter 의 토대다. 새 캐릭터의 사진이 들어오면, CLIP 은 "갈색 머리, 둥근 안경, 빨간 후드티, 약간 옆으로 기울인 자세" 같은 시각적 특성들을 추출한 임베딩을 만들어낸다. 학습 데이터에 없던 인물이라도 그 인물의 시각적 좌표는 얻을 수 있다.
어댑터가 "이미지 → 영향력" 변환을 학습했다
어댑터의 학습 과정에서 모델은 다음과 같은 일반적인 능력을 익힌다. "임의의 이미지 임베딩이 들어왔을 때, 그것을 U-Net 이 이해할 수 있는 형식의 어텐션 입력으로 어떻게 바꿔야 하는가." 특정 이미지가 아니라, 이 변환 자체를 배운다. 한 번 변환 능력이 생기고 나면, 새 이미지에 대해서도 같은 변환을 적용할 수 있다.
번역기를 만든 셈이다. 특정 영어 문장을 한국어로 옮기는 법을 외우는 게 아니라, 영어를 한국어로 번역하는 일반 능력을 익히는 것. IP-Adapter 어댑터는 "이미지 임베딩 → U-Net 이 사용할 수 있는 어텐션 입력" 이라는 번역기다. 한 번 만들어 두면 어떤 이미지든 번역할 수 있다.
'Image Generation > Study' 카테고리의 다른 글
| [Study] SDXL 살펴보기 (0) | 2026.03.26 |
|---|---|
| [Study] Rectified Flow (0) | 2026.03.25 |
| [Study] ControlNet으로 이미지 제어하기 (0) | 2026.03.20 |
| [Study] Textual Inversion의 원리 (0) | 2026.03.18 |
| [Study] LoRA(Low-Rank Adaptation)를 이용한 스타일 학습 (0) | 2026.03.17 |