지난 1편부터 12편까지 Stable Diffusion의 기본적인 사용법에 대해서 알아보았습니다. 설치방법부터 메뉴에 대한 설명, 그리고 각종 모델들과 LoRA, 그리고 컨트롤넷까지 살펴보았는데요. 이정도면 어느정도 원하는 이미지를 만드는데는 무리가 없을 것이라 생각합니다.

기존 12편에 이어 13편부터는 좀 더 심화과정에 해당하는 기술들을 알아볼까 합니다. 메뉴설명 하는 중에 보셨겠지만 하이퍼네트워크 모델에 대해 살펴보죠.

하이퍼네트워크 (HyperNetwork)

하이퍼네트워크는 주로 더 큰 네트워크의 가중치를 생성하거나 조정하는데 사용되는 작은 신경망을 의미합니다. Stable Diffusion에서는 하이퍼네트워크가 이미지 생성과정을 조절하고, 생성될 이미지의 세부사항과 스타일을 결정하는 데에 중요한 역할을 합니다.

이러한 방식으로 하이퍼네트워크는 다양한 스타일과 텍스처를 생성할 수 있는 능력을 갖추고 있습니다. 이를 통해 사용자가 원하는 특정 스타일이나 주제에 맞는 이미지를 더 효과적으로 생성할 수 있습니다.

Stable Diffusion에서 하이퍼네트워크는 Novel AI에서 처음 개발한 미세 조정 기법입니다. SD 초기부터 개발에 참여했다고 하네요. Stable Diffusion에 부착하여 스타일을 변경시키는데 사용되는 작은 신경망입니다.

Cross-attention(교차인지)모듈을 수정한다는 부분에서 LoRA 모델과 비슷하지만, 이 둘은 동작하는 방식에 차이가 있습니다.

*Static Hypernetwork: Target network의 weight을 결정

Stable Diffusion에서 쓰이는 HyperNetwork는 “하나의 network가 다른 network의 weight를 생성“한다는 일반적으로 쓰이는 개념과는 다릅니다. Conditioning을 위한 cross-attention layer에 HyperNetwork를 추가해서 Key-Value 값을 미세조정하는 기술입니다.

HyperNetwork가 적용되어 키와 밸류를 변형시킨 모습

원리를 설명하려고 하다보니 갑자기 많이 어려워진 것 같은데요. 하이퍼네트워크는 머신러닝 쪽에서 이야기하는 간단한 신경망으로 선형 네트워크입니다. 두개의 네트워크를 삽입해서 키와 벨류 벡터를 변환함으로써 교차인지 모듈을 가로채는 방식입니다. 아래 그림은 하이퍼네트워크가 적용되기 전의 아키텍쳐를 도식화 한겁니다.

Stable Diffusion의 원래 교차인지(Cross-attention) 모듈

Textual Inversion이나 LoRA처럼 파인튜닝 모델 중에 하나인 하이퍼네트워크는 크기가 작아서 훈련속도가 빠르고 가볍다는 장점이 있습니다.

다른 (Fine-tuning) Model과의 차이점

Checkpoint Model

체크포인트 모델은 앞서 설명했듯이 이미지 생성에 필요한 모든 정보가 포함된 거대한 모델입니다. 보통 파일의 크기가 매우 큰 편으로 약 2~6GB에 육박합니다. 하지만 하이퍼네트워크 모델은 보통 200MB 이하입니다.

체크포인트는 단독으로 이미지를 생성할 수 있지만, 하이퍼네트워크는 파인튜닝 모델이기 때문에 단독으로 사용이 불가하고 체크포인트 모델과 함께 사용해야 합니다.

체크포인트 모델은 용량이 큰 대신 하이퍼네트워크보다 더 강력하고 스타일을 훨씬 잘 저장할 수 있습니다. 체크포인트 모델은 모든 정보가 포함되어있기 때문에 학습시키면 전체 모델이 미세조정 되는데 반해, 하이퍼네트워크를 학습시키면 하이퍼네트워크만 미세 조정됩니다.

LoRA (Low-Rank Adaptation)

Pre-trained LLM을 summarization, question and answering 등과 같은 특정 작업에 대해 full fine-tuning하는 것은 시간이 많이 걸리고 몇 달이 걸릴 수 있습니다. 이를 해결하기 위한 LoRA(Low-Rank Adaptation) 이론에서 이 문제는 과다 매개변수화된 모델이 이 작업에 효과적이라고 제안함으로써 해결되었습니다.

h = W₀x + ΔWx = W₀x + BAx
  1. h: 이는 출력(output)을 의미합니다.
  2. W₀x: 여기서 W₀는 초기 가중치(initial weights), x는 입력(input)을 나타냅니다. W₀x는 입력에 초기 가중치를 적용한 결과입니다.
  3. ΔWx: ΔW는 가중치의 변화(change in weights), x는 여전히 입력을 의미합니다. 이 부분은 입력에 대한 가중치 변화를 나타냅니다.
  4. BAx: 여기서 BA는 행렬 또는 변환(transformations)을 의미할 수 있으며, 이들은 가중치의 변화(ΔW)를 계산하는 데 사용됩니다. A는 일반적으로 어떤 형태의 정보 또는 속성을 나타내며, B는 이 정보를 변환하거나 조정하는 역할을 할 수 있습니다.

기본 가중치(W₀)에 더해지는 추가적인 조정(여기서는 BA)을 통해 출력(h)이 결정된다는 것을 나타냅니다. 특정 작업에 할당된 가중치만 별도로 저장하는 것이 가능하므로 효율적인 저장과 작업 간 전환이 용이해집니다.
( Textual Inversion과 DreamBooth의 중간 용량에 해당: 2~200MB)

구체적으로, 텍스트-이미지 모델에서는 Dreambooth를 기반으로 Cross-attention(교차인지) 레이어의 가중치에 대해 low-rank matrix decomposition이 사용됩니다. 즉, DreamBooth의 학습 방법을 반영하지만 기존의 일관된 stable diffusion ckpt 모델을 유지하면서 특정 작업에 특화된 LoRA 파일을 가지고 있습니다.

Textual Inversion (Embedding)

임베딩이라고도 하는 텍스트 반전은 새로운 개체 또는 스타일을 생성하기 위해 새로운 키워드를 정의하는 작은 파일입니다. 일반적으로 10~100KB의 작은 크기입니다. 반드시 체크포인트 모델과 함께 사용해야 합니다.

  • 특정 object에 대한 3~5장의 이미지만으로 textual embedding vector를 찾아 customized model 생성. 해당 subject의 pseudo-word S∗​에 대해, ‘A photo of S∗​’의 문장이 예시 이미지를 다시 reconstruct할 수 있도록 S∗​의 embedding을 LDM loss로 optimize(text encoder와 diffusion model은 frozen), 이를 textual inversion이라 칭함.
  • Embedding space가 특정 object의 image semantics를 잡아내기에 충분히 expressive하다는 사실에 기인하여, 해당 공간에서 주어진 object를 가장 정확히 근사하는 vector를 찾아내는 방법론. 모델 자체에 대한 추가 학습이 불필요하며 DreamBooth가 생성하는 파일 크기가 2-7GB에 달하는 것에 반해, textual inversion은 100KB 내외의 embedding vector만을 생성하며 용량 면에서 큰 이점을 지님. 단, 그만큼 성능은 떨어지는 듯.

DreamBooth (CVPR 2023, Google)

구글(이미지 생성 AI ‘Imagen’용으로 개발된 이미지 최적화 기술)에서 개발한 Dreambooth는 Text-to-image 모델에 사용자 지정 피사체를 삽입하는 기법입니다. 최소 3~5개의 사용자 지정 이미지로 동작합니다. 자신의 사진을 몇 장 넣고 드림부스를 통해 모델에 자신을 넣을 수 있습니다. 드림부스로 훈련된 모델에는 프롬프트에 특수 키워드를 입력해줘야합니다.

https://arxiv.org/pdf/2208.12242 Figure 4. Comparison with textual Inversion [20]
  • Pre-trained Imagen을 특정 class명 및 그와 연관된 3~5장의 이미지로 fine-tuning하여 customized text-to-image model 생성.
  • 추가하려는 subject를 ‘a [identifier] [class noun]‘의 형식으로 labeling하였으며, identifier의 경우 ‘unique’와 같이 자주 쓰이는 단어로 지정하면 기존의 의미를 새로운 의미로 disentangle-entangle해야 하기에 학습시간이 늘어나고 성능이 떨어짐. 반면 자주 쓰이는 단어나 ‘aaabbxx00’과 같은 랜덤 문자열의 경우 문자열 자체가 그림으로 묘사되거나 성능이 떨어지는 문제 발생. → Vocabulary에서 상대적으로 rare한 token(language/diffusion model에서 weak prior를 가짐)을 text space로 invert하여 identifier 지정 (Rare-token identifier)
  • 적은 장수의 예시 이미지와 기존의 conditioned diffusion loss로 fine-tuning을 진행할 경우, overfitting(예시 이미지의 pose, texture 등의 feature를 그대로 묘사)과 language-drift(identifier를 부여하지 않아도 부여된 object만을 생성하며 기존의 class noun에 대한 prior가 손실되는 현상) 문제 발생.
  • Frozen pre-trained model로 생성한 이미지로 supervise함과 동시에 customize하려는 예시 이미지에 대해 학습하며 문제 해결.

하이퍼네트워크 사용방법

1. Hypernetwork 다운받기

LoRA를 다운받는 것처럼 HyperNetwork 도 Civitai.com 에서 활발하게 공유되고 있습니다. 메인화면에서 화면 우측에 필터아이콘을 누르고 Hypernetwork를 선택해서 찾으면 됩니다.

2. 다운받은 파일 적용하기

LoRA처럼 Hypernetwork 폴더에 파일을 넣어주면 되는데요. 경로는 아래와 같습니다.

{SD설치폴더} /models/hypernetworks

3. 프롬프트에 포함하기

LoRA를 적용하는 것과 비슷한 방식으로 프롬프트에 적어주면 됩니다. LoRA처럼 WebUI에서 선택하면 자동으로 입력됩니다. LoRA하고 사용법이 거의 동일합니다.

<hypernet:FILENAME:multiplier>

하이퍼네트워크 적용사례

Dispersion Hypernet

이 하이퍼네트워크는 2가지 효과를 가지고 있습니다. Dispersion Effect, Ink Smudge Effect
트리거 키워드는 “in the style of dispersion” 입니다. 아래 이미지 같은 효과를 얻을 수 있습니다.

photo of beautiful woman standing, in the style of dispersion, 8k,4k,highres,masterpiece
Dispersion Effect
Ink Smudge Effect

Water Elemental

material을 물로 만들어주는 하이퍼네트워크 입니다. SD 1.5에서 사용하면 되는데, 제작자가 강조하기를 프롬프트에 배경에 대해서 뭐라도 묘사를 하라고 합니다. 그리고 주제어 앞에 “water elemental” 트리거 키워드를 넣으라고 합니다.

example “water elemental man walking”, “water elemental girl playing in the backyard”, etc…

Use instructions.

Use between 0.55-1.0 hypernetwork strength, more strength will give a more transparent elemental look but starts to overfit. I find .7 works well enough.

Use DPM++ SDE Karras sampler with 15 steps and CFG of 7.0.

마치며

Fine-tuning technique 중에 하나인 하이퍼네트워크에 대해서 알아보았습니다. 목적에 따라 LoRA, HyperNetwork, Embedding 모델들을 잘 활용하면 됩니다. 누군가 만들어놓은 것을 활용하는 입장에서는 크게 차이가 없을 수도 있는데, 이를 학습을 목적으로 보면 차이가 있을겁니다.

가지고 있는 소스의 종류나 양에 따라서 어떤 방식으로 학습시킬지 정하면 되겠습니다.

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here