AI Image/News & Tips

[Stable Diffusion] Web UI의 기능들 정리

PLAI 2023. 4. 3. 22:58

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features

 

Features

Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.

github.com

위 주소에 web UI의 여러 가지 기능들에 대해서 소개하고 있다. 틈틈이 정리하는 대로 업데이트 예정. 특히 중요한 기능에 대해서는 굵은 글씨체로 표시하였다.

  • SD2 Variation Models: 이미지 변형 모델 (ckpt). img2img 탭에서 사용할 수 있으며, 이미지로부터 정보를 뽑아서 text prompt와 함께 새로운 이미지를 생성한다 (denoising strength: 1).
  • InstructPix2Pix: GTP 모델을 활용하여 사용자의 지시를 받으면 해당 지시에 맞추어 이미지를 변환해주는 모델. Checkpoint 포맷으로 저장되어 img2img에서 쓸 수 있다.
  • Extra networks: Generate 버튼 밑 카드 버튼을 누르면 text inversion, Lora, hypernetworks 카드들이 나온다. 카드를 선택하면 모델을 프롬프트에 넣을 수 있다.
    • Textual Inversion: (Stable diffusion에서 사용한 언어 모델인) CLIP에서 토큰의 가중치를 fine tuning하는 방법. 프롬프트에 파일명을 넣어서 사용할 수 있다.
      유저가 제시하는 input 이미지셋에 대한 새로운 단어를 만들어주는 역할을 한다 (https://textual-inversion.github.io/). 고정되어있는 Checkpoint model에 새로운 단어를 추가해준다는 느낌에서 Textual inversion이라고 부르는 것 같다.
      구체적으로는 각 checkpoint model은 단어를 토큰으로 바꿔주면 토큰 별로 해당되는 가중치 벡터인 embedding이 존재한다. 이때 유저의 이미지셋을 바탕으로 새로운 embedding을 만들고 (유저가 학습시킨 tiny bit of neural networks) 이를 새로운 토큰, 단어와 이어준다. 이를 프롬프트에 사용하면 이미지셋의 특성을 불러올 수 있다.
      그래서 프롬프트 생성을 좀 더 맞춤형으로 할 수 있는 기능으로 보인다. 이미지셋의 스타일을 가져올 수 있고, bias를 줄일 수도 있다. 또한 inpainting 기능에서 활용하거나 새로운 단어들끼리 합칠 수도 있다 (relational prompt에는 동작하지 않는다고 하는데 무엇인지 모르겠다). 
      webUI에서 직접 embeddings를 학습시킬 수 있다 (https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion)
    • Lora (Low-Rank Adaptation): 언어 모델인 CLIP과 Stable diffusion의 이미지 denoiser인 Unet을 fine tuning하는 방법이다.
      논문에 따르면 LoRA는 기존에 학습된 모델에서 (각각의 레이어에 trainable rank decomposition matrices를 적용하여) 학습 파라미터의 수를 크게 줄여서 효율적으로 fine tuning할 수 있는 방법이라고 한다 (https://arxiv.org/abs/2106.09685).
      아래 스크립트를 통해 LoRA를 학습시킬 수 있다 (https://github.com/kohya-ss/sd-scripts)
      현재 2.0이상의 모델에 대한 LoRA 및 [<lora:one:1.0>|<lora:two:1.0>]와 같은 prompt editing은 web UI에서 지원되지 않는다 ("A batch with multiple different prompts will only use the Lora from the first prompt").
    • Hypernetworks: (기존 모델의 가중치 변경 없이) LoRA와 마찬가지로 CLIP과 Unet을 fine tuning하는 방법이다.
      LoRA와의 차이점은 일부 레이어에서 가중치를 공유한다는 점이다.
      Textual inversion과 같은 탭에서 hypernetworks 학습도 가능하다 (https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion).
      자세한 학습 방법은 아래 글을 참조할 수 있다 (https://rentry.org/hypernetwork4dumdums).

Multipliers는 보통 0과 1사이, 강도, LoRA는 네거티브 프롬프트에 사용 불가 (https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features)

  • Alt-Diffusion: (영어가 아닌) 다른 언어로 된 input을 받을 수 있는 모델 (ckpt). --xformers로 돌리기가 추천된다.
  • Stable Diffusion 2.0 (https://github.com/Stability-AI/stablediffusion)
    • Depth Guided Model: img2img에서 Depth controlNet을 쓴 효과를 주는 모델 (ckpt).
    • Inpainting Model SD2: inpainting에 특화된 모델 (ckpt).
  • Outpainting: 기존 그림 밖의 영역을 그림과 유사하게 칠해준다. img2img tab 내 Script -> Poor man's outpainting에서 기능을 사용할 수 있다. 일반적인 이미지 생성과 달리 스텝 수가 굉장히 클수록 퀄리티가 높아진다. 
    "recipe for a good outpainting is a (1) good prompt that matches the picture, (2) sliders for denoising and CFG scale set to max, and (3) step count of 50 to 100 with (4) Euler ancestral or DPM2 ancestral samplers."
  • Inpainting: 특정 부분을 다시 칠해준다. 직접 web UI에서 마스크를 그리거나, 투명도가 있는 그림을 넣어주면 된다.
    • Inpainting model: RunwayML이나 stable-diffusion-2-inpainting 등 전용 모델도 있다.
    • Masked content: inpainting의 중간 과정을 어떻게 칠할 것인지 정해주는 부분이다 (fill, original, latent noise, latent nothing).
    • Inpaint area: 마스크된 부분의 크기로만 그림을 그릴 것인지 (Only masked), 전체 크기로 그림을 그릴 것인지 (Whole picture) 선택할 수 있다. 예를 들어, 바다 배경의 탁자 그림에서 탁자를 새로 그리려고 할 때 탁자 부분을 마스킹을 했다면 Only masked를 선택하고 프롬프트에 "탁자"를 넣거나, Whole picture를 선택하고 프롬프트에 "탁자, 바다"를 할 수 있다.
    • Masking mode: 마스킹을 한 부분에 inpainting을 할지 (inpaint masked), 그 외의 부분에 inpainting을 할지 (inpaint not masked)를 정할 수 있다.
    • Alpha mask
    • Color Sketch: inpainting을 할 때 마스크에 색깔을 미리 지정할 수 있다.
  • Prompt matrix: 여러 프롬프트 조합을 한눈에 확인할 수 있게 해주는 스크립트다. Script -> Prompt matrix에서 확인할 수 있다.
  • Stable Diffusion upscale: 사진을 더 크게 만들 수 있다. img2img 탭의 Script -> SD upscale에서 가능하며, 크기를 몇배로 늘릴지, tile의 크기는 어떻게 할지 지정할 수 있다.
  • Infinite prompt length: SD는 최대 75 tokens만 받을 수 있지만, 이 길이보다 길어져도 75 tokens 단위의 chunks로 나눈 후 CLIP에서 processing되어 합쳐져고, Unet으로 들어간다. 그래서 prompt를 무한히 늘릴 수 있다.
    • BREAK keyword: 75 tokens 단위로 chunk를 나누는 것이 아니라 BREAK keyword를 사용하면 앞 뒤를 각각 chunks로 나누어 CLIP에서 processing한 후 합쳐준다.
  • Attention/emphasis: ()는 1.1배만큼 model의 attention을 강화하고, []는 1.1배만큼 감소시킨다. (word:1.5)나 (word:0.25) 등으로 원하는 수치만큼 attention을 증가시키거나 감소시킬 수 있다. ()를 프롬프트 자체로 사용하고 싶다면 \(word\) 등으로 사용한다.
  • Loopback: img2img에서 나온 output을 다시 img2img의 input으로 사용하는 과정을 반복하게 해주는 기능. 그 과정을 수동으로 할 때보다 더 빠르게 할 수 있다. Script에서 선택할 수 있다.
  • X/Y/Z plot: 여러 파라미터 조합을 한눈에 확인할 수 있게 해주는 스크립트다.
  • Prompts from file or textbox: 순서대로 돌아갈 작업을 text 형식으로 한번에 넣어줄 수 있다.
  • Resizing: img2img에서 이미지의 크기를 바꿀 수 있는데, 이때 사용할 수 있는 옵션들이 존재한다.
    • Just resize (원본 이미지를 특정 사이즈로 그냥 맞춰줘서 기존의 비율이 망가질 수 있다)
    • Crop and resize (기존의 비율을 유지한채로 크기를 바꾸고, 벗어나는 부분은 버려준다)
    • Resize and fill (기존의 비율을 유지한채로 크기를 바꾸고, 부족한 부분은 채워준다)
  • Sampling method selection: Euler나 등 sampling method를 선택할 수 있다. 개인적으로는 "DPM++ SDE Karras"을 주로 사용한다.
  • Seed resize: 이미지의 크기를 바꾸면 동일한 seed라도 이미지가 크게 달라지게 되는데, 이 기능을 사용하면 이미지를 어느 정도 유지하면서 크기가 다른 이미지를 생성할 수 있다. Seed 옆의 Extra 체크박스를 클릭하여 사용할 수 있다.
  • Variations: 생성한 이미지에서 조금씩 변화된 이미지를 얻을 수 있는 기능이다. Variation seed와 Variation strength를 조정할 수 있는데, variation seed는 이미지를 생성할 때 사용한 seed와 별개로 variation 과정에서 사용할 seed를 의미한다. Seed 옆의 Extra 체크박스를 클릭하여 사용할 수 있다.
  • Styles: 작성한 프롬프트를 CSV 형태로 저장하여 불러올 수 있다. Generate 버튼 밑에 존재한다.
  • Negative prompt: 원하지 않는 특징들에 대한 프롬프트
  • CLIP interrogator (Interrogate CLIP, DeepBooru): 이미지에서 프롬프트를 뽑아낼 수 있는 기능 (img2img 에서 가능)
  • Prompt editing: SD에서 이미지는 지정한 steps를 거치면서 생성되는데, [from:to:when]와 같은 표현으로 특정 step 전까지는 from으로 이미지를 생성하다가, 이후부터 to로 이미지를 생성할 수 있다. 그래서 두 태그를 섞은 듯한 이미지를 만들 수 있다.
    • Alternating Words: [word1|word2|word3] 등으로 표시를 하면 각 스텝마다 word1, 2, 3가 반복된다.
  • Hires. fix: txt2img는 너무 높은 해상도에서 좋은 결과가 나오지 않는데, Hires. fix 기능을 사용하여 먼저 낮은 해상도로 그림을 뽑고, 후에 해상도를 높이고 디테일을 더할 수 있다.
  • Composable Diffusion: AND 키워드를 통해 여러가지 프롬프트를 합할 수 있다.
  • Interrupt: 이미지 생성을 중단하고 싶을 때 누를 수 있다.
  • 4GB videocard support: 더 적은 RAM 메모리를 사용할 수 있는 옵션
  • Face restoration: 얼굴 부분을 향상시킬 수 있는 옵션. GFPGAN이나 CodeFormer를 사용할 수 있는데 무엇을 쓸지, 어느 정도로 영향을 미칠지는 setting에서 선택할 수 있다.
  • Checkpoint Merger: Checkpoint Merger 탭에서 최대 3가지의 모델을 합할 수 있다. 보통 이름 뒤에 mix가 붙은 모델 (ckpt)들이 기존 모델들을 merger로 합쳐서 만들어 모델이다.
  • Saving
  • Loading
  • Prompt validation
  • Png info: 생성한 이미지의 정보를 불러올 수 있는 탭.
  • Settings: 세팅 변경 가능. config.js 파일에 저장된다.
  • Filenames format: 세팅에서 파일 이름 포멧 변경 가능.
  • User scripts: 커스텀 스크립트 생성 관련 내용.
  • UI config
  • ESRGAN
  • img2img alternative test: 원본 이미지에서 일부의 특징만 변형시킬 때 사용해볼 수 있는 스크립트.
  • user.css
  • notification.mp3
  • Tweaks
    • Clip Skip: CLIP은 SD에서 사용하는 3가지 모델 중의 하나로 프롬프트를 숫자 벡터로 변형시켜 준다. CLIP은 neural network로, 여러가지 레이어로 이루어져 있는데, 프롬프트는 첫 번째 레이어에서 숫자 벡터로 변형되고, 이는 다시 두 번째, 세 번째, ... 레이어를 거치게 된다. 마지막 레이어에서의 결과(숫자 벡터)가 SD에서 사용되는데, 마지막에서 하나 이전 레이어의 결과를 사용하고 싶다면 Clip Skip 값을 2로 두면 된다.

 

 

 

참조

  1. https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features
  2. https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion
  3. https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Negative-prompt

 

 

 

 

유튜브 채널도 놀러오세요 😊 좋아요·구독 감사합니다 🥹

반응형