SAG(Self-attention Guidance, 자기 주의 안내)는 전체적인 두고를 보존하면서 이미지의 디테일을 향상시킵니다. 따라서 이미지가 생성하는 무의미한 디테일을 수정하는데 유용합니다.
아래의 예에서는 신사분이 매고 있는 보우타이를 수정하고, 배경에 있는 기타 디테일을 수정하였습니다.
원 이미지 | SAG 적용 |
소프트웨어
이 글에서는 ComfyUI를 사용합니다. ComfyUI는 약간 복잡해 보이지만, AUTOMATIC1111보다 빠르면서도 워크플로를 마음대로 수정할 수 있어서 인기가 높아지고 있는 Web UI입니다.
ComfyUI가 처음이시라면, 설치 및 기본 사용방법 및 초보가이드를 확인하시기 바랍니다.
SAG의 원리
SAG에 대한 상세한 내용은 홍수성 님 등이 작성한 논문, "Improving Sample Quality of Diffusion Models Using Self-Attention Guidance"을 참고하세요. 이 논문에 대한 "한글" 리뷰는 이 글을 읽어보세요.
SAG는 무분류기 안내(CFG, Classifier-free Guidance) 척도위에 또다른 안내를 추가하는 방식으로 작동한다. 일반적인 아이디어는 교란 어텐션 유도(PAG, Perturbed Attention Guidance)와 비슷하다. SAG는 같은 연구팀에서 만든 PAG의 선행 작업입니다.
블러링 디퓨전(Blurring diffusion)
SAG를 이해하기 위해서는 우선 그 이전의 모델인 Blurring diffusion을 이해할 필요가 있습니다. 아이디어는 간단합니다. 부정적 프롬프트에 사용된 이미지를 흐릿하게 바꾸는 것입니다.
흐릿하게 만드는 프로세스는 이미지에서 상세한 디테일을 제거하고, 모델이 전반적인 구도에만 초점을 집중하도록 합니다.
SAG
SAG(Self-attention Guidance, 자기 주의 안내)는 한발자국 더 나아가서, self-attention map에 기반해 이미지에서 중요하다고 판단되는 부분을 선택적으로 흐리게 처리합니다. Stable Diffusion 모델은 이미지 생성 과정에서 self-attention map을 생성하는데, 이를 사용해 어떤 부분에 초점을 맞추어야 하는지 결정하는데 사용합니다.
SAG 는 선택적으로 흐리게 만든 이미지를 기반으로 부정적 프롬프트를 처리합니다. SAG는 모델로 하여금 선택된 영역의 전반적인 구도에 집중하게끔 강제합니다. attention map은 부정적 잠재 이미지(negative latent image)로부터 유도되므로, 주 주제 대신 배경에 있는 디테일을 수정하는 경향이 있습니다.
달리 표현하자면, SAG는 새로운 모델이 아니라, 안내 방법의 대안입니다. SAG는 스테이블 디퓨전 모델 및 샘플링 방법과 함께 작동됩니다. 그런데, Stable Diffusion Lighting 또는 하이퍼 모델의 경우, 부정적 프롬프트를 무시하는 경향이 있기 때문에 SAG는 효과를 보기가 힘들다는 점은 감안하셔야 합니다.
하지만, SAG를 사용하려면 대가가 있습니다. 샘플링 단계 당 한번 더 U-Net 을 호출합니다(2번 아닌 3번). 따라서 이미지 생성시간이 50% 정도 늘어나게 됩니다.
ComfyUI
ComfyUI는 SAG를 지원합니다. 그냥 [Self-Attention Guidance] 노드를 [Load Checkpoint] 노드와 [KSampler]노드 사이에 넣어주기만 하면 됩니다.
아래는 예제 워크플로입니다. 아래쪽이 SAG를 적용한 이미지를 생성합니다.
아래는 이 워크플로로 생성한 이미지입니다. 왼쪽은 SAG를 적용하지 않은 이미지입니다.
파라미터
SAG Scale
이 값을 올리면 SAG의 효과가 올라갑니다. 0 일 경우엔 적용되지 않으며, 1.5 정도에서 포화됩니다. 대부분 0.5에서 1 정도 내외에서 가장 좋은 효과를 볼 수 있습니다.
0 | 0.5 |
1.0 | 1.5 |
Blur Sigma
이론적으로 이 값이 높을수록 부정적 이미지의 흐림이 증가합니다. 그런데 이 값의 변화 효과는 거의 미미합ㄴ디ㅏ. 그냥 기본값인 3으로 두고 사용하시면 될 것 같습니다.
다른 예제
아래는 SAG scale =1, Blur sigma=3으로 두고 생성한 예입니다. 잘 보시면 배경에서 약간의 미묘한 변화가 있음을 보실 수 있습니다. 항상 나아지는 것은 아니지만, 전반적으로 괜찮아지는 것을 느끼실 수 있을 것입니다.
원 이미지 | SAG 적용 이미지 |
원 이미지 | SAG 적용 이미지 |
SAG를 사용한 많은 사용자들이 배경에서 의미없는 물체들이 사라진다고 이야기하고 있습니다. 저의 시험에서는 주요 객체보다는 배경에서 더 많이 변화하는 경향이 있었습니다. 항상 좋아지는 것은 아니지만, 향상되는 경우가 더 많았습니다. 따라서, SAG를 배경 정리용으로 사용하면 괜찮을 듯싶습니다. 좋아하는 이미지가 생성되면 SAG 노드를 추가해서 변화를 찾아보는 것도 좋을 것 같습니다.
이상입니다.
이 글은 https://stable-diffusion-art.com의 글을 번역하고 테스트하여 작성하였습니다.
- ComfyUI로 설치 및 사용법 기초
- ComfyUI 투토리얼
- ComfyUI를 위한 유용한 정보
- ComfyUI와 SDXL 사용법(1) - 기초
- ComfyUI에서 ControlNet 사용법
- 편리한 ComfyUI 워크플로 모음
- LCM-LoRA - 초고속 스테이블 디퓨전
- Stable Video Diffusion(비디오 스테이블 디퓨전)
- Stable Diffusion 인공지능 이미지 생초보 가이드
- Stable Diffusion 대표 UI - AUTOMATIC1111 설치방법
- Automatic1111 GUI: 초보자 가이드(메뉴 해설)
- Stable Diffusion에 대한 기본적인 이론
- ChatGPT로 스테이블 디퓨전 프롬프트 만들기