AI 이미지/Stable Diffusion

교란 어텐션 유도(Perturbed Attention Guide)

하늘이푸른오늘 2024. 6. 10. 09:38

교란 어텐션 유도(Perturbed Attention Guide)은 샘플링 프로세스를 간단히 수정하여 스테이블 디퓨전 이미지를 향상시키는 것을 말합니다. 

아래는 목차입니다.

교란 어텐션 유도란?

Perturbed Attention Guide(PAG)는 샘플링 프로세스를 변경하여 이미지 품질을 높이는 것입니다. 이 기법은 SD1.5와 SDXL 모델에 적용할 수 있습니다.

좀 더 자세한 사항은 안동훈 님외의 Self-Rectifying Diffusion Sampling with Perturbed-Attention Guide를 참고하세요.

U-Net에서의 어텐션(Attention)

스테이블 디퓨전 SD1.5 및 SDXL 모델은 U-Net이라는 심층 신경망을 사용하여 샘플링 과정에서 이미지의 잡음을 제거합니다. U-Net에는 많은 어텐션 작업이 있는데, 아래와 같이 두가지 종류로 나눌 수 있습니다.

  1. 교차-어텐션(Cross-attention) : 프롬프트와 잠상간
  2. 자기-어텐션(Self- attention) : 잠상 간

이들은 각각 긍정적 프롬프트와 부정적 프롬프트에 제어를 받는 긍정적 잠상과 부정적 잠상에 적용됩니다. 부정적 프롬프트는 선택적이지만, 사용하면 이미지의 품질이 향상됩니다.

부정적 잠상은 무제어 잠상(unconditioned latent image)라도도 합니다. 원래는 부정적 프롬프트가 없었기 때문입니다. 디퓨전 프로세스는 무작위의 조건없는 이미지로부터 멀어지는 방향으로 진행됩니다.

부정적 프롬프트는 추후 개발된 것으로, 무제어 잠상을 해킹하여 부정적 프롬프트로 주어진 개념으로부터 멀어지도록 한 것입니다.

교란 어텐션 유도

교란 어텐션 유도(PAG)는 부정적 프롬프트로 명시된 이미지에 해당하는 무제어 잠상의 디퓨전을 수정합니다. 또한 샘플링 단계중 단 하나의 단계, 즉 U-Net의 중간 블록에대한 자기 어텐션 연산만을 수정합니다.

저자는 무제어 잠상이 (부정적 프롬프트를 사용하지 않을 경우) 지침이 없기 때문에 형성 속도가 떨어진다고 주장합니다. 무제어 잠상중 중요한 부분을 결정하기 위한 자기 어텐션을 수행하는 대신, PAG는 모든 이미지가 동등하게 중요하다고 말하고 있습니다.

실제에서 ComfyUI와 Automatic1111에서 구현된 바로는, PAG는 무분류기 유도(CFG)를 대체하지 않습니다. PAG와 CFG 두개가 모두 사용됩니다. PAG 디퓨전은 CFG의 확산 방향에 추가되어, CFG 첮도와 유사한 독립적인 스테일 척도로 제어됩니다.

디퓨전 단계는 CFG와 PAG의 결합입니다.

수학적으로 샘플링 프로세스중 총 유도(guidance)는 다음과 같습니다.

Total Guidance = CFG 척도 + PAG 척도

이 때문에 기본 설정값은 CFG 척도 4 와 PAG 척도 3이 됩니다. 이 둘을 합치면 널리 사용되는 CFG 값인 7이 됩니다.

ComfyUI에서 PAG 사용법

ComfyUI는 기본으로 교란 어텐션 유도(PAG)를 지원합니다. 사용하려면 먼저 ComfyUI를 최신 버전으로 업그레이드 해야 합니다.

그 다음 어떤 워크플로이든, 모델과 KSampler 사이에 PerturbedAttentionGuidance 노드를 추가해주시면 됩니다.

아니면 아래의 txt2img  워크플로를 다운로드 받아 사용하셔도 됩니다.

perturbedAttentionGuidance_txt2img.json
0.01MB

동일한 씨드와 동일한 조건하에 PAG 효과를 비교해 볼 수 있는 워크플로입니다. 위쪽은 일반적인 워크플로이고, 아래쪽은 PAG를 추가한 워크플로입니다.

perturbedAttentionGuidance_compare.json
0.01MB

아래는 이렇게 생성한 이미지를 비교한 것입니다. 확실히 표현이 살아나는 듯 하네요.

Standard Workflow : CFG=7 PAG Workflow : CFG=4, PAG=3

PAG 설정

여기에서는 Juggernaut XL v7 모델을 사용해서 비교해 보겠습니다.

프롬프트 : realistic anime half body dark and gritty cinematic lighting vibrant and Final Fantasy, goth, dark angel, dynamic pose, japanese, asymmetrical goth fashion, sorcerer’s stronghold, silver hair, dimly lit, empty hall

위의 이미지들은 CFG를 4로 고정한 상태에서 PAG값을 0~5로 설정하며 비교해본 결과입니다(PAG=0이면 PAG를 사용하지 않습니다). PAG 척도를 1~3 정도로 주었을 때 가장 좋은 결과를 볼 수 있습니다. 3 이상으로 설정할 경우 (CFG 척도를 크게할 때와 비슷하게) 조금 과한 표현이 나옵니다.

총 유도 척도를 고정할 경우

위의 비교는 각 이미지의 총 유도 척도(CFG 척도 + PAG 척도)가 다르기 때문에 완전히 공정하다고 할 수 없습니다. 이 경우 CFG 척도를 점차 올리는 것과 비슷한 효과가 발생한다고 볼 수 있습니다. 

아래에서는 총 유도 척도를 7로 고정하고 비교합니다.

보시는 것처럼 PAG 척도가 적을 때(1~3) 이미지 품질이 증가함을 알 수 있습니다.

부정적 프롬프트 사용시 테스트

논문에서는 부정적프롬프트를 사용하지 않고 시험했습니다. PAG를 사용하지 않을 경우, 무제어 잠상을 부정적 프롬프트로 조건을 지정한 잠상으로 대체하면 더 높은 품질의 이미지를 얻을 수 있습니다. 

그러면 부정적 프롬프트와 PAG를 함께 사용하면 어떤 결과를 볼 수 있을까요? 부정적 프롬프트를 아래와 같이 추가하여 시험해 보겠습니다.

프롬프트:realistic anime half body dark and gritty cinematic lighting vibrant and Final Fantasy, goth, dark angel, dynamic pose, japanese, asymmetrical goth fashion, sorcerer’s stronghold, silver hair, dimly lit, empty hall
부정적 프롬프트: disfigured, ugly, deformed, low quality, beginner

왼쪽은 PAG를 사용하지 않고 CFG를 7로 설정한 경우, 오른쪽은 PAG=3, CFG=4로 설정한 경우입니다.

Seed = 1, no PAG Seed = 1,  PAG on
Seed = 2, no PAG Seed = 2,  PAG on
Seed = 3, no PAG Seed = 3,  PAG on

결과는 놀랍게도 부정적 프롬프트를 사용했을 경우에도 PAG를 사용하면 이미지 품질이 더욱 향상됩니다. 잘 비교해보시면 인물의 디테일도 올라갔을 뿐 아니라, 대부분 배경까지도 분위기가 더 잘 살아납니다.

이 정도면 상당히 쓸만하다 싶네요.

참고문헌

이상입니다. 이 글은 https://stable-diffusion-art.com/perturbed-attention-guidance/ 을 번역하면서 일부 예제는 직접 생성해 작성했습니다.

민, 푸른하늘