GitHub - lllyasviel/ControlNet: Let us control diffusion models!
Let us control diffusion models! Contribute to lllyasviel/ControlNet development by creating an account on GitHub.
github.com
- ICCV 2023
- 3626회 인용
1. Introduction
- 기존 Text-Image 모델(Stable Diffusion, DALL·E 2, MidJourney, etc.)은 이미지 생성은 뛰어났지만 프롬프트를 수정하며 원하는 결과를 얻기까지 반복 작업이 필요하고 Fine-tuning에서는 데이터셋과 훈련 비용 등에 문제가 있었음
- ControlNet은 기존의 diffusion model을 사용하여 모델의 성능을 유지하면서도 텍스트 프롬프트 없이도 다양한 조건(Edge, Depth, Segmentation, Human Pose) 등을 학습하고 반영하는데 성공하였음
- ControlNet에서의 Image와 Text를 Condition으로 입력한 결과로 구체적이고 정확한 이미지가 생성되는 것을 볼 수 있음
2. Related Work
(1) Text-Image Diffusion Model
- Stable Diffusion, DALL·E 2, MidJourney 등
- 높은 품질의 이미지 생성을 가능하게 하지만 공간적 구성 제어가 어려운 문제를 가지고 있음
(2) Fine-tuning
- LoRA, Adapter Methods 등
- 원본 네트워크와 병렬로 새로운 네트워크를 학습하여 기능을 확장
(3) Image-to-Image Translation
- GAN의 CycleGAN, Pix2Pix와 Diffusion의 PITI, Palette
- 텍스트-이미지 모델과 달리 이미지-이미지 변환 모델은 특정 입력 조건을 반영하여 결과를 생성하는 데 강점이 있음
⇒ ControlNet은 기존 Diffusion Model이 이미지를 잘 생성한다는 점에서 모델 구조와 학습 파라미터를 그대로 가져오고 Condition Image가 입력으로 들어간 Diffusion Model을 구성하였음
3. Method
(1) Block Architecture
- ControlNet은 Diffusion Model의 신경망 블록을 고정(locked)한 상태에서 Trainable copy를 추가하여 학습 방식으로 동작함
- Trainable copy는 기존 Architecture와 파라미터를 복사하여 사용하고 zero convolution layer를 통해 연결됨
- LoRA, Adapter처럼 별도의 Trainable Parameter를 Pretrained Model에 병렬로 구성하였는데 학습 시 Loss를 안정화 해줄 방법이 필요 → zero convolution
Zero convolution layer
- 모든 wegiht와 bias가 0으로 초기화된 1 x 1 convolution layer ⇒ feature map의 크기 유지
$$
y = \mathcal{F}(x; \Theta)
$$
- input feature map $x$와 파라미터 $\Theta$가 있고 이를 함수 $F$로 표현하여 output feature $y$ 출력됨
- Trainable copy는 함수 $F$에 해당하는 구조와 파라미터 $\Theta$를 그대로 복제한 layer
$$
y_c = \mathcal{F}(x; \Theta) + \mathcal{Z} \left( \mathcal{F} \left( x + \mathcal{Z}(c; \Theta_{z1}); \Theta_c \right); \Theta_{z2} \right)
$$
- $x$에 zero convolution으로 인코딩된 condition feature $Z(c;\Theta{}_{z_1})$를 합산
($\mathcal{Z}$ : zero convolution) - trainable copy layer를 통과하여 $y$와 동일한 크기의 condition feature를 추출
- 두번째 zero convolution을 통과하여 원래 layer의 출력값 $y$에 합산
- zero convolution을 활용하면 trainable copy에 있는 hidden layer가 backpropagation에서 생기는 noise에 영향을 받는 문제를 해결할 수 있음
- zero convolution 적용과 prompt의 따른 이미지 생성 결과로 zero convolution을 적용했을 때 성능이 좋은 것을 확인할 수 있음
(2) Overall Architecture
- ControlNet은 Stable Diffusion의 U-net 구조 사용
- SD의 Encoder Block 12개와 Middle Block 1개 ⇒ 총 13개의 블럭 복제하여 Trainable copy 생성
- SD와 동일한 크기의 feature를 추출하기 위해 512 x 512 이미지를 컨디션 입력 $c$로 받아 64 x 64의 latent image를 추출하도록 별도의 인코딩 레이어를 구성
(3) Training
① Loss function
$$
\mathbf{c}_f = \mathcal{E}(\mathbf{c}_i)\\\mathcal{L} = \mathbb{E}_{z_0, t, c_t, c_f, \epsilon \sim \mathcal{N}(0,1)}\left[ \left\| \epsilon - \epsilon_{\theta} (z_t, \mathbf{t}, c_t, c_f) \right\|_2^2 \right]
$$
- Loss function은 nosie를 예측하는 형태 [Stable Diffusion Loss 계산방식]
- $t$ 시점 실제로 추가된 노이즈 - 예측된 노이즈
- $z_t$ : input latent
- $t$ : time step
- $c_t$ : input text prompt
- $c_f$ : input condition
② Randomly replace 50% text prompts $c_t$
- 학습 데이터의 절반은 $c_t$를 빈문자열로 변환하여 프롬프트에 의존하지 않고 모델이 condition에 맞는 이미지 결과를 생성할 수 있도록 함
③ Sudden convergence phenomenon
- 모델이 점진적으로 학습하지 않고 어느 순간 입력 condition을 정확히 따라가는 것을 관찰
(4) Inference
① Classifier-free guidance resolution weighting
- 최종 output인 $\epsilon_{pred}$와 조건 정보를 반영한 output인 $\epsilon_{c}$와 그렇지 않은 $\epsilon_{uc}$
$$
\epsilon_{pred} = \epsilon_{uc} + \beta_{cfg} (\epsilon_{c} - \epsilon_{uc})
$$ - $\beta_{cfg}$에 따라 예측 노이즈에 input prompt가 얼마나 영향을 끼칠 것인지 결정
CFG guidance에 따른 영향 - (b) CFG를 사용하지 않은 경우
- 조건 정보 모두 사용 $\epsilon_c=\epsilon_{uc},\epsilon_{pred}=\epsilon_{uc}$
- (c) $\epsilon_c$에만 조건 정보를 사용하는 경우
- 조건 정보 강하게 나타남 ⇒ CFG guidance strength을 줄이는 방법을 제안함
- $w_i = \frac{64}{h_i}, \text{ where } h_i \text{ is the size of the } i^\text{th} \text{ block, e.g., } h_1 = 8, h_2 = 16, \dots, h_{13}=64.$
② Composing multiple ControlNets
- 여러 컨디션(etc. Pose, Depth )은 여러 ControlNet을 두어 이미지를 생성할 수 있음
4. Conclusion
(1) Influence of training dataset sizes
- 학습 데이터셋이 많을수록 이미지 Condition을 더 잘 반영하고 1k만을 사용하더라도 잘 반영하는 것을 확인할 수 있음
(2) Capability to interpret contents
- 모호한 입력 이미지를 사용하고 사용자가 프롬프트에서 객체에 대한 내용을 언급하지 않아도 모델이 해석하려는 시도를 보임
(3) Transferring to community models
- 기존 모델을 수정하지 않고 다양한 모델에 적용할 수 있음
QnA
1. Decoder 부분에는 추가되는 Trainable copy가 없는지?
- Decoder에는 추출된 특징을 사용하여 이미지를 생성하기 때문에 학습 과정에서 Trainable copy를 두지 않아도 이미지 생성에 문제가 없었을 것이다.
2. 기존 모델인 Stable Diffusion과 비교하여 메모리 사용량 변화는 어떨 것인지?
- 병렬로 model을 구성해주었기 때문에 메모리 사용량 증가할 것이다.
- 논문 저자도 SD를 그냥 최적화하는 것 보다 23% GPU 메모리와 34%의 시간의 더 소요되었다고 하였다.