스테이블 디퓨전을 처음 접하면 영어로 된 메뉴들이 가득해서 어디부터 시작해야 하나 시작하기도 전에 전의를 상실하게 된다. 다 숙지할 필요는 없지만 전체적인 내용을 알고 시작한다면 한걸음 떼기가 수월해질 것 같아서 정리해 본다.
Stable Diffusion이란
Stable Diffusion은 이미지 생성을 위한 Text-to-image 딥러닝 모델로 CompVis, Stability AI 및 LAION의 연구자와 엔지니어들이 개발했습니다. 이 모델은 Diffusers 라이브러리와 함께 사용하여 효과적이고 효율적인 이미지생성을 가능하게 합니다. Stable Diffusion은 크게 두 가지 핵심 아이디어를 기반으로 합니다.
1) Latent Diffusion
: 이 모델은 이미지 생성을 위한 Latent Diffusion이라는 특별한 유형의 확산 모델을 기반으로 합니다. 이는 높은 해상도의 이미지 생성을 위해 저차원 잠재 공간에서 확산 과정을 수행하여 연산 및 메모리 복잡성을 줄일 수 있도록 설계되었습니다.
2) CLIP Text Encoder
: Stable Diffusion은 이미지 생성 과정에서 CLIP (Contrastive Language-ImagePretraining) 모델의 텍스트 인코더를 사용합니다. 이를 통해 텍스트 정보를 활용하여 이미지 생성을 조절하고, 이미지와 텍스트 간의 관계를 고려하여 이미지를 생성할 수 있습니다.
Stable Diffusion 용어 정리
체크포인트 (Checkpoint)
역할: 모델의 메인 모듈로, 선택한 모델에 따라 생성되는 이 미지의 전체적인 스타일이 결정됩니다.
VAE (Variational Autoencoder)
데이터 분포의 잠재 공간을 학습하여 이미지의 품질을 보정하는 역할을 합니다. 간단하게 말해서는 그림 보정 기능이라고 생각하시면 편합니다. 같은 모델인데 그림이 흐리거나 퀄리티가 떨어진다면 VAE를 사용하지 않아서 그런 이유가 클 겁니다.
Lora (Low-Rank Adaptation)
추가 학습 기법인 드림부스를 기반으로 하여 모델에 새 로운 피사체를 학습시키는 역할을 하며, 이미지 생성에 큰 영 향을 줍니다.
임베딩 (Embedding)
모델에 직접적인 영향을 주지 않으면서 프롬프트를 추 가 학습하는 방법으로, 특정한 특징을 모델에 추가합니다.
하이퍼 네트워크 (Hyper Network)
임베딩과 유사하지만 더 큰 영향력을 가지고 모델에 ‘공부’를 시키는 역할을 합니다.
프롬프트 (Prompt)
이미지 생성의 핵심 코드로, 사용자가 원하는 그림을 그리도록 AI에게 지시하는 문장이나 단어들의 집합입니다.
네거티브 프롬프트 (Negative Prompt)
이미지에서 제외하고 싶은 요소를 지정하는 데 사용되는 프롬프트입니다.
가중치
프롬프트 내 특정 키워드의 영향도를 조절합니다. 기본 값은 1이며, 가중치 값을 조정하여 영향력을 조절할 수 있습니다.
태그형/문장형 프롬프트 이미지의 외모, 상태, 배경 등의 요소를 지정하는 태그형 프롬프트와 구도, 상황, 행위를 묘사하는 문장형 프롬프트 로 구분됩니다.
너비 (Width), 높이 (Height)
생성할 이미지의 해상도를 결정합니다.
CFG (Guidance Scale)
Stable Diffusion의 Guidance Scale, 또는 CFG Scale은 AI가 이미지를 생성할 때 텍스트 프롬프트(지시문)를 얼마나 정확하게 따를지 결정하는 설정입니다. 간단히 말해서, 이 값이 높으면 AI는 프롬프트를 더 엄격하게 따르고, 낮으면 더 자유롭게 이미지를 생성합니다.
예를 들어: 낮은 CFG 값 (예: 1): AI는 프롬프트를 거의 무시하고 상당히자유롭게 이미지를 생성합니다. 예를 들어, “노란색 꽃” 이라는 프롬프트에 대해 AI는 노란색이 거의 없는 다양한 색의 꽃을 생성할 수 있습니다. 중간 CFG 값 (예: 7-9): AI는 프롬프트를 적당히 따르면서도 일정한 창의성을 유지합니다. “노란색 꽃”에 대해, AI는 주로 노란색 꽃을 생성하지만, 다른 색상의 요소나 독창적인 형태를 추가할 수도 있습니다. 높은 CFG 값 (예: 15 이상): Al는 프롬프트를 매우엄격하게 따릅니다. 이 경우, “노란색 꽃”에 대해 AI는 거의 노란색만을 사용하여 정확한 꽃의 이미지를 생성할 것입니다.
시드 (Seed)
무작위성을 제어하여, 동일한 시드 값으로 동일한 이미지를 재생성할 수 있습니다.특정 이미지를 만들 때 사용한 seed 값을 기록해 두면, 나중에 동일한 seed 값을 사용하여 정확히 같은 이미지를 다시 생성할 수 있습니다. 이는 AI 기반의 창작물에서 원하는 결과를 재현하고자 할 때 매우 유용합니다. 초기값 -1은 랜덤한 결과물을 출력합니다.
샘플링 방법 (Sampling Method)
https://stable-diffusion-art.com/samplers/
이미지 생성 시 선택하는 알고리즘의 종류를 의미합니다. 이미지 생성의 품질과 스타일에 큰 영향을 미칩니다. 예를 들어, 일부 방법은 더 선명하고 정교한 이미지를 생성하는 반면, 다른 방법은 더 추상적이거나 예술적인 스타일을 만들어낼 수 있습니다.샘플링 메소드에는 다양한 메소드들이 존재하는데, 대표적으로 Euler a (오일러), DPM++ SDE Karras 가 있고,
그 외에도 Euler, LMS, Heun, DPM2, DPM2 a, DPM++ 2S a, DPM++ 2M, DPM++ SDE, DPM fast, DPM adaptive, LMS karras, DPM2 karras, DPM2 a karras, DPM++ 2S a karras, DPM++ 2M karras, DPM++ SDE karras, DDIM, PLMS, UniPC이 있습니다.
샘플링 스텝스 (Sampling Steps)
이미지 생성 과정에서 모델이 반복하는 횟수를 지정합 니다. 숫자가 높을수록 더 많은 계산을 거쳐 이미지를 생성하 게 되며, 일반적으로 이미지 품질이 더 세밀해질 수 있습니다. 샘플링 스텝은 이미지 생성 속도와 품질 간의 균형을 조절하는 데 중요한 요소입니다. AI 모델이 이미지를 생성할 때 일련의 반복적인 단계를 거칩니다. 각 단계에서 모델은 주어진 프롬프트나 파라미터에 기반하여 이미지에 조정을 가하며, 점차 최종 출력물을 향해 이미지를 세밀하게 다듬어갑니다. 이러한 단계의 수는 생성된 이미지의 품질과 디테일에 큰 영향을 미칩니다.
배치 카운트 (Batch Count)
한 번에 생성할 이미지의 배치(그룹) 수를 지정합니다. 예를 들어, 배치 카운트를 3으로 설정하면, 한 번의 요청으로 3개의 이미지가 생성됩니다.
배치 사이즈 (Batch Size)
각 배치 내에 포함될 이미지의 수를 지정합니다. 배치 사이즈를 높이면 동시에 더 많은 이미지를 생성할 수 있지만, 이는 시스템의 자원을 더 많이 소모하게 됩니다.
하이레스.픽스 (Hires. fix)
고해상도 이미지 생성 시 특정 문제를 해결하기 위한 설정입니다. Hires.fix를 체크하면 아래와 같은 항목들이 추가적으로 새롭게 생성됩니다.
업스케일러 (Upscaler)
이미지의 해상도를 높이는 기능입니다. ‘Latent’는 업 스케일링 방식 중 하나를 지칭하며, 이는 이미지의 잠재 공간 을 활용한 업스케일링을 의미합니다. 일반적으로 실사 그림일 경우에는 R-ESRGAN 4x+를 선택하고 애니 만화일 경우에는 R-ESRGAN 4x+ Anime6B를 선택해줍니다. 기본값인 Latent를 사용하는 경우도 많은데 Latent으로 했을때 오히려 해상도가
나빠지는 경우에는 R-ESRGAN 4x+ 또는 R-ESRGAN 4x+ Anime6B로 변경해주시면 됩니다.
하이레스 스텝스 (Hires steps)
고해상도 생성 시 반복적으로 진행될 스텝의 수를 설정 합니다. 업스케일 단계수를 설정하는 항목으로 보통 5에서 10사이로 설정해주고 0으로 설정할 경우에는 상단 항목의 Sampling steps와 동일한 단계로 적용이 됩니다. 일반적으로 기본설정된 0을 그대로 사용하는 경우가 많습니다.
Denoising strength
스테이블 디퓨전은 모래를 제거하면서 그림을 완성하는 샌드아트처럼... 노이즈들을 제거하면서 그림을 생성하는 시스템을 가지고 있습니다.. 그래서 Denoising 한다는 말은 샌드아트에서 모래를 제거해주는 것과 같이 그림에 변화를 주겠다는 의미를 가지고 있습니다. Denoising strength는 그림에 변화를 주는 작업을 얼마나 적용할지에 대한 항목으로 수치가 높으면 원본 그림에서 많은 변화를 주고 수치가 작을수록 원본 그림과 유사한 그림으로 업스케일링 해줍니다. 원본 이미지에서 변화를 줄때는 0.45에서 0.55 정도의 수치를 적용해주며 0.6 이상의 수치를 적용해줄 경우 오류가 발생하니 권장하지 않습니다. 그리고 원본 이미지 그대로에서 그림의 해상도(크기)만 높여줄 경우에는 0.1에서 0.2 정도의 수치를 적용해줍니다.
업스케일 바이 (Upscale by)
기본 이미지 크기에 비례하여 몇 배로 업스케일 할지결정하는 설정값입니다. Upscale by에 적용된 수치만큼 그림의 가로 세로 길이가 설정된 크기보다 곱빼기가 됩니다. 수치가 높을수록 그림의 퀼리티도 상승하지만 너무 높으면 그래픽 카드가 버티지 못하거나 그림이 깨지는 현상이 발생합니다. 1.5에서 2사이로 설정해주시면 됩니다. 그 이상 수치를 높이면 오류가 발생하며 많은 분들이 1.5를 적용해 안정적으로 사용하고 있습니다. Resizee width to, Resizee height to는 Upscale by와는 다르게 직접 원하는 크기를 설정해주는 곳입니다. 보통 Upscale by를 통해 설정해주며 Resizee width to, Resizee height to는 사용하지 않습니다.
요약정리
마지막으로 Hires.fix 업스케일링 두가지 방법의 차이점을 짧게 요약정리해 드리겠습니다.
첫번째 방법은 생성과 동시에 업스케일링 하면서 그림의 디테일도 올려주는 방법으로 Denoising strength 값을 0.4에서 0.5정도로 적용해줍니다.
두번째 방법은 원본 이미지를 유지하기 위해 Denoising strength 값을 0.2 이하로 적용해주며 원본 이미지를 인식시켜주기 위해 그림의 고유번호인 Seed 값을 반드시 입력해주셔야 합니다. 저해상도로 이미지를 여러번 제작한 후에 원하는 이미지만 선별적으로 업스케일링 하는 방법으로 효율적이지만 그림의 퀼리티는 첫번째 방법보다는 떨어질 수 있습니다.