AI 이미지/Stable Diffusion

Stable Diffusion 무분류기 안내(CFG) 척도란

하늘이푸른오늘 2024. 1. 30. 00:45

무분류기 안내(CFG, Classifier Free Guidance) 척도(scale)은 스테이블 디퓨전 잡음 제거 샘플링 과정에서 프롬프트를 얼마나 잘 따를 것인지를 제어합니다. 이 값은 거의 모든 Stable Diffusion 기반의 인공지능 이미지 생성기에서 사용할 수 있습니다. 

이제까지 제가 올린 글에는 CFG를 언급한 글이 매우 많은데, 이 글에서는 Stable Diffusion에서 CFG 척도가 무엇인지 좀 더 자세히 알아보겠습니다.

CFG 척도가 하는 일

먼저 아래의 프롬프트를 사용하여, CFG 척도를 바꿔가면서 어떤 일이 발생하는지 알아보겠습니다.

모델: ProtoVision XL High Fidelity 3D
프롬프트: full body portrait, close up of a Nerdy Cleopatra, breathtaking, geometric patterns, dynamic pose, Eclectic, colorful,  surreal, Bokeh, Lens Flare

아래는 CFG값을 달리하며 생성한 이미지입니다. 

CFG=1.0 CFG=3.0 CFG=7.0
CFG=10.0 CFG=15.0 CFG=20.0

CFG를 1로 설정하였을 경우, 생성된 결과가 엉망입니다. 이미지에 생동감이 부족하고 일관성이 떨어집니다. 일반적으로 CFG가 7 이상이면 이미지가 거의 비슷해지는데, CFG가 많이 높아지면 채도가 과도하게 높아지는 경향이 보입니다. 

우리는 일반적으로 CFG값을 7에서 10정도 사이에 설정합니다.

LCM과 turbo 모델의 CFG 척도

모든 모델에 CFG값을 7~10으로 사용할 수 없습니다. LCM LoRA 및 SDXL Turbo와 같이 샘플링 단계를 줄여 생성 속도가 빠른 모델의 경우, CFG 값을 훨씬 낮게 잡아야 합니다. 대부분 1~3 정도에서 사용합니다.

무분류기 안내란?

무분류기(Classifier-free)를 이해하기 위해서는 먼저 분류기 안내(classifier guidance)에 대해 알아야 합니다.

분류기 안내

분류기 안내(Classifier guidance)란, 디퓨전 모델에서 이미지 레이블(lable)을 넣는 방법입니다. 이 레이블을 사용해서 디퓨전 프로세스를 이끌 수 있습니다. 예를 들어 cat이라는 이미지 레이블은 모델이 고양이를 생성하도록 만들어줍니다.

분류기 안내 척도(classifier guidance scale)은 디퓨전 프로세스가 얼마나 레이블을 밀접하게 따를지를 제어하기 위한 매개변수입니다.

예를 들어, 고양이, 강아지, 사람 등 세가지 그룹의 이미지가 있다고 하겠습니다. 아무런 안내가 없을 경우 전체 학습된 데이터에서 임의로 이미지를 생성할 것입니다. 하지만 어떨 경우에는 두개의 레이블에 합치하는 (예를 들어 강아지를 안고있는 소년) 이미지를 생성할 수도 있습니다.

분류기 안내. 왼쪽: 안내가 없는 경우, 가운데 작은 안내 척도, 우측 큰 안내 척도

분류기 안내를 크게하면, 디퓨전모델은 극단적인, 모호함이 없는 샘플과 비슷한 이미지를 생성합니다. cat에 대한 이미지를 요청하면, 항상 고양이만 있는 이미지만 생성된다는 뜻입니다. 

분류기 안내 척도는 이 안내를 얼마나 따를지를 제어합니다. 위의 그림에서 오른쪽으로 갈 수록 분류기 안내 척도가 높아집니다. 실제로는 이 척도 값은 해당 레이블이 있는 데이터에 대한 드리프트 항에 대한 승수(multiplier)입니다.

무분류기 안내

분류기 안내가 기록적인 성능을 보이긴 하지만, 이러한 안내를 제공하는 별도의 모델이 필요합니다. 이로인해 학습에서 몇가지 어려움에 처하게 됩니다.

무분류기 안내(Classifier-free guidance)는 거칠게 말해서 분류기가 없이 분류기 안내를 달성하는 방법입니다. 별도의 안내 모델을 사용하는 대신, 이미지 캡션을 사용하여 조건부여 확산 모델(conditional diffusion model)을 학습시킵니다.

이들은 분류기 부분을 잡음 예측기 U-Net의 조건부여로 넣어서, 이른바 이미지 생성에서 "무분류기(별도의 이미지 분류기가 없는)" 안내를 달성한 것입니다.

text-to-image의 경우, 텍스트 프롬프트가 이 안내를 제공합니다.

무분류기 안내 척도

이제 조건부여를 사용하여 무분류기 확산 프로세스를 갖게 되었습니다. 그럼 AI 생성 이미지가 얼마나 안내를 따를지 어떻게 제어할 수 있을까요?

CFG(무분류기 안내) 척도는 텍스트 프롬프트가 디퓨전 프로세스를 얼마나 조정할지를 제어합니다.

그 효과는 분류기 안내와 비슷합니다. 아래의 3가지 이미지 그룹으로 표현되는, a cat, a dog, a human이라는 세가지 프롬프트가 있다고 가정해 보죠. 프롬프트에 아래와 같이 입력했을 경우...

프롬프트: a cat
  • CFG 척도가 -1 인 경우 프롬프트가 완전히 무시됩니다. 그냥 아무렇게나 이미지를 생성하는데, 고양이, 강아지, 사람이 나올 확률이 동일하게 됩니다.
  • CFG 척도가 적절할 경우(7~10), 프롬프트를 따라 이미지가 생성됩니다. 거의 고양이가 생성됩니다.
  • CFG 척도가 높을 경우, 완전히 고양이만 생성됩니다.

무분류기 안내의 학습

무분류기 학습 모델은 조건부여(conditioning)과 함께 그리고 조건부여 없이 잡음을 예측할 필요가 있습니다. 따라서 이론적으로는 조건부여 모델과 조건부여 없는 모델을 학습시켜야 합니다.

이 것을 두가지 모두가 가능한 하나의 모델만 학습하는 방법으로 간략화 시킬 수 있습니다. 이는 학습에서 가끔 조건부여를 떼어내고 조건부여 텍스트를 빈 토큰으로 대처하는 방법으로 이룰 수 있습니다.

가장 좋은 CFG 척도는?

지금까지 CFG가 어떻게 작동하는지를 알아보았습니다. 그럼 가장 좋은 CFG 값은 무엇일까요? 그 해답은 적당한 값(7-10)은 있어도 가장 좋은 값은 없다는 것입니다.

CFG척도는 정확도와 다양성간의 균형을 설정합니다. CFG 값을 높여서 더 정확한 이미지를 얻을 수록 CFG를 낮게 했을 때 생성되는 좀 더 다양한 이미지를 얻지 못하게 됩니다.

CFG 와 샘플링 단계의 관계

그럼 CFG 척도는 어떻게 사용될 까요? 바로 샘플링 단계에서 사용됩니다.

  1. 먼저 임의의 이미지로 시작합니다.
  2. 프롬프트로 조건부여된 이미지의 잡음과, 완전히 조건부여가 없는 이미지 잡음을 예측합니다.
  3. 이미지는 조건부여와 조건부여 없는 그 중간 방향으로 이동합니다. CFG 척도는 각 단계에서 얼마나 크게 이동하는지를 결정합니다.
  4. 이미지의 잡음은 잡음 스케줄에 따라 조정됩니다.

샘플링 단계가 종료될 떄까지 2~4의 단계를 반복합니다.

따라서 CFG를 사용할 때 잡음은 두번 예측할 필요가 있습니다. 하나는 텍스트로 조건부여된 것, 다른 하나는 조건부여가 없는 것입니다.

부정적 프롬프트를 활성화하기위한 CFG 납치

이상의 설명에서 부정적 프롬프트가 들어갈 방법이 없었음을 알아채셨을 수도 있습니다. 실재로 학습과 샘플링에서 부정적 프롬프트는 전혀 사용되지 않습니다.

부정적 프롬프트는 해킹과 비슷합니다. 샘플링 단계에서 부정적 프롬프트로 예측된 노이즈를 사용하여, 조건부여 없는 잡음을 대체함으로써 달성합니다. 

부정적 프롬프트가 없다면, 조건부여 없는 잡음을 예측하는데 비어있는 토큰을 사용합니다. 이미지는 프롬프트를 향하고 임의의 물체로부터 멀어지는 방향으로 이동하게 됩니다.

부정적 프롬프트를 사용할 경우, 부정적 프롬프트를 "조건부여 없는 잡음을 예측하는 데 사용합니다. 그 결과, 이미지는 프롬프트를 향하고, 부정적 프롬프트에서 멀어지는 방향으로 이동하게 되는 것입니다.

부정적 프롬프트에 대한 자세한 사항은 이 글을 읽어보시기 바랍니다. 

이와 동일한 기법이 부정적 이미지 프롬프트를 활성화하는데도 사용됩니다.

이상입니다. 이 글은 https://stable-diffusion-art.com/cfg-scale/ 을 번역하여 작성했습니다.

민, 푸른하늘

====