기존의 text-to-image는 성능이 좋지만, 에서 text 하나로만은 복잡한 표현들을 control 할 수 없다. text-to-image를 원하는 condition 조건에서 end-to-end로 학습시키는 것은, 기존의 데이터보다 학습 시키려는 데이터가 매우작아 어려운 일. 적은 데이터로 기존의 모델을 finetuning하면, 오비피팅이나 치명적인 망각이 일어날 수 있다.
이 논문에서 제안하는 ControlNet에서는 pretrained 된 t2i diffusion model의 parameter를 freeze하여 quality와 capabilities를 보존하고 encoding layer를 copy한다. 학습가능한 copy와, original model은 train과정에서 점진적으로 학습되기 위해서 가중치가 0으로 초기화된 zero convolution layer로 연결된다. 이는 training을 시작할 때 거대한 diffusion model에 deep feature에 noise가 끼는 것을 방지.
Canny edges, Hough lines, user scribbles, human key points, segmentation maps, shape normals, depths에서 잘 작동
원래의 파라미터 Θ를 lock하고 Θ를 복사한 를 학습시킴. 이 복사본은 외부의 control c를 인풋으로 받음. 이때 원본 SD는 모델의 원래 정보를 보존하는 반면, 학습가능한 copy는 기존 모델을 재사용하여 다양한 input condition을 다루기 위한 깊고 강건하고 강력한 백본을 구축한다.
이때 copy는 zero convolution Z(·; ·)에 연결된다. Z(·; ·)는 가중치와 bias가 모두 0으로 초기화된 1x1 conv layer이다. ControlNet에서 , 를 가지는 두개의 zero conv 를 사용한다. 처음 condition에 zero conv 태우고, 복사한 encoder 태우고, 다시 zero conv 태워서 SD에 연결한다. 아래 식에서 F는 파라미터 Θ를 가지는, x를 태우면 y가 나오는 함수(nerual network)
위 식에서 알 수 있듯이, 첫번째 training step에서는 Z의 매개변수는 모두 0이므로 Z의 연산값은 모두 0임. 따라서 = y 임.
이렇게 되면 해로운 noise가 training이 시작될때 학습가능한 copy의 neural network의 hidden state에 영향을 줄 수 없다. =0이고, 학습가능한 copy또한 x를 input으로 받아 원래 large의 capabilities를 모두 유지하고 있기 때문에, pretrained 모델은 추가 학습을 위한 강력한 백본 역할을 할 수 있다.
zero conv는 훈련 초기에 gradient가 흐르는 과정에서, random noise를 제거함으로써 백본을 보호한다.
SD는 인코더 12, 디코더 12, middle block 1개로 총 25개 블럭으로 구성된다. 이때 8개 블럭은 downsampling or upsampling conv layer임. 나머지 17개 블럭은 4개의 resnet layer와 2개의 VIT를 포함함. 각 VIT에는 cross-attention, self-attention mechanism이 포함 된다. 예를 들어 그림 3-a에서 A 블럭은 4개의 resnet과 2개의 VIT가 포함되어 있고, 이 블럭이 3번 반복되는 것을 의미한다. text는 CLIP으로 embedding화 되고 timstep은 positional encoding을 사용한 time encoder로 encoded 된다.
ControlNet은 인코더 12개와 middle block 1개를 copy하여 tranable하게 만든다. 12개의 블럭은 64,32,16,8의 4개의 resolution으로 구성되며 각각 3번 반복된다. output은 skip-connection과 1개의 middle block에 추가된다.
ControlNet을 연결하는 방식은 계산이 효율적이다. SD만 학습한는것 보다 GPU가 23%만 더 필요. 시간은 34%만 더 소요된다.
SD는 VQ-GAN과 유사한 방식으로 512이미지를 64의 latent로 변환시켜 그 space 상에서 diffusion process, reverse process를 거침. SD에 ControlNet를 추가하기 위해 condition image를 512에서 64로 encoding함. 특히 4x4 kernel과 2x2 stride를 가지는 4개의 conv layer를 가지는 작은 인코더 를 사용하여 condition image를 특정 feature space로 보낸다. (인코더는 controlNet과 함께 훈련되며 각 16 32 64 128의 채널을 가짐)
SD는 아래 식의 Classifier-Free Guidance를 사용함.