Stable Diffusion
요약
Stable Diffusion은 Latent Diffusion Model을 기반으로 하는 고해상도 이미지 합성 모델입니다. Stability AI와 Runway의 협력 및 LAION-5B 데이터베이스를 활용하여 훈련되었으며, 텍스트 프롬프트에 따라 이미지를 생성합니다. UNet과 CLIP ViT-L/14 텍스트 인코더로 구성되어 비교적 가볍게 구동 가능합니다.
핵심 포인트
- Latent Diffusion Model 기반의 고해상도 이미지 합성 모델입니다.
- LAION-5B 데이터셋을 활용하여 훈련되었습니다.
- UNet과 CLIP ViT-L/14를 사용하여 텍스트 조건화가 이루어집니다.
- 최소 10GB VRAM GPU에서 구동 가능합니다.
Stable Diffusion
Stable Diffusion은 Stability AI와 Runway와의 협력을 통해 가능해졌으며, 우리의 이전 연구를 기반으로 합니다:
Latent Diffusion Models를 이용한 고해상도 이미지 합성<br/>
Robin Rombach*,
Andreas Blattmann*,
Dominik Lorenz,
Patrick Esser,
Björn Ommer<br/>
CVPR '22 Oral | GitHub | arXiv | Project page

Stable Diffusion은 잠재(latent) 텍스트-이미지 확산 모델입니다.
Stability AI의 관대한 컴퓨팅 기부와 LAION의 지원 덕분에, 우리는 LAION-5B 데이터베이스의 일부를 사용한 512x512 이미지로 잠재 확산 모델(Latent Diffusion Model)을 훈련할 수 있었습니다.
Google의 Imagen과 유사하게, 이 모델은 고정된 CLIP ViT-L/14 텍스트 인코더를 사용하여 텍스트 프롬프트에 따라 모델을 조건화합니다.
UNet이 860M, 텍스트 인코더가 123M인 이 모델은 비교적 가볍고 최소 10GB VRAM을 가진 GPU에서 실행됩니다.
아래 this section과 model card를 참조하십시오.
Requirements
A 적절한 conda 환경인 ldm을 생성하고 활성화할 수 있습니다:
conda env create -f environment.yaml
conda activate ldm
또한, 다음 명령어를 실행하여 기존의 latent diffusion 환경을 업데이트할 수도 있습니다.
conda install pytorch torchvision -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .
Stable Diffusion v1
Stable Diffusion v1은 다운샘플링 팩터(downsampling-factor) 8을 사용하는 오토인코더와 860M UNet, 그리고 확산 모델(diffusion model)용 CLIP ViT-L/14 텍스트 인코더를 활용하는 특정 모델 아키텍처 구성을 지칭합니다. 이 모델은 256x256 이미지로 사전 학습된 후 512x512 이미지로 미세 조정되었습니다.
참고: Stable Diffusion v1은 일반적인 텍스트-이미지 확산 모델(text-to-image diffusion model)이므로, 학습 데이터에 존재하는 편향성 및 (오)개념을 반영합니다. 학습 절차와 데이터, 그리고 모델의 의도된 사용 용도에 대한 자세한 내용은 해당 모델 카드에서 확인할 수 있습니다.
가중치(weights)는 Hugging Face의 CompVis 조직을 통해 제공되며, 오용 및 피해를 방지하기 위한 특정 사용 기반 제한 사항을 포함하지만 그 외에는 자유로운 라이선스 하에 있습니다. 상업적 사용은 라이선스 조건에 따라 허용되지만, 가중치에 알려진 한계점과 편향성이 존재하며 일반 텍스트-이미지 모델의 안전하고 윤리적인 배포에 대한 연구가 지속되고 있기 때문에, 추가적인 안전 장치 및 고려 사항 없이 제공된 가중치를 서비스나 제품에 사용하는 것은 권장하지 않습니다. 이 가중치는 연구 결과물(research artifacts)이며 그로 취급되어야 합니다.
The CreativeML OpenRAIL M license는 책임 있는 AI 라이선싱 분야에서 BigScience와 the RAIL Initiative가 공동으로 진행하는 작업에서 각색된 Open RAIL M license입니다. 저희 라이선스는 [BLOOM Open RAIL license]에 대한 기사를 참고할 수 있습니다.
Weights
현재 다음과 같은 체크포인트를 제공합니다:
sd-v1-1.ckpt: laion2B-en에서 해상도256x256으로 237k 스텝.
laion-high-resolution에서 해상도512x512로 194k 스텝 (LAION-5B의 예시 중 해상도가>= 1024x1024인 170M개).sd-v1-2.ckpt:sd-v1-1.ckpt에서 이어서 진행되었습니다.
laion-aesthetics v2 5+에서 해상도512x512로 515k 스텝 (추정 미학 점수가> 5.0이고, 원래 크기가>= 512x512이며, 추정 워터마크 확률이< 0.5인 laion2B-en의 부분 집합. 워터마크 추정은 LAION-5B 메타데이터에서 가져왔으며, 미학 점수는 LAION-Aesthetics Predictor V2를 사용하여 추정했습니다).sd-v1-3.ckpt:sd-v1-2.ckpt에서 이어서 진행되었습니다.
다양한 분류기 없는 안내(classifier-free guidance) 스케일(1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0) 및 50 PLMS 샘플링 단계로 평가한 결과, 체크포인트들의 상대적 개선 정도를 보여줍니다:

Stable Diffusion을 사용한 텍스트-이미지 생성


Stable Diffusion은 CLIP ViT-L/14 텍스트 인코더의 (비풀링된) 텍스트 임베딩에 조건화된 잠재 확산 모델(latent diffusion model)입니다.
저희는 샘플링 참조 스크립트를 제공하지만, 더 활발한 커뮤니티 개발이 기대되는 diffusers 통합 기능도 존재합니다.
참조 샘플링 스크립트
저희는 다음을 포함하는 참조 샘플링 스크립트를 제공합니다:
- 명시적인 결과물(explicit outputs)의 확률을 줄이기 위한 안전 검사기 모듈(Safety Checker Module),
- 뷰어들이 이미지를 기계 생성된 것임을 식별하는 데 도움을 주는 결과물의 보이지 않는 워터마킹(invisible watermarking).
stable-diffusion-v1-*-original 가중치를 얻은 후, 다음처럼 연결하고
mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/model.ckpt> models/ldm/stable-diffusion-v1/model.ckpt
다음과 같이 샘플링합니다:
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
기본적으로, 이것은 안내 스케일(guidance scale) --scale 7.5, Katherine Crowson의 PLMS 샘플러 구현, 그리고 50단계로 크기 512x512 (학습된 크기)의 이미지를 렌더링합니다. 지원되는 모든 인수는 아래에 나열되어 있습니다( python scripts/txt2img.py --help 입력).
usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
[--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
[--seed SEED] [--precision {full,autocast}]
...
참고: 모든 v1 버전의 추론 설정은 EMA 전용 체크포인트와 함께 사용하도록 설계되었습니다. 이 때문에 구성 파일에는 use_ema=False가 설정되어 있으며, 그렇지 않으면 코드가 비(非)EMA에서 EMA 가중치로 전환을 시도할 것입니다. 만약 EMA 대 비(非)EMA의 효과를 검토하고 싶다면, 두 가지 유형의 가중치를 모두 포함하는 "full" 체크포인트를 제공합니다. 이 경우, use_ema=False가 로드되어 비(非)EMA 가중치를 사용하게 됩니다.
Diffusers 통합
Stable Diffusion을 다운로드하고 샘플링하는 간단한 방법은 diffusers 라이브러리를 사용하는 것입니다:
# `huggingface-cli login`으로 로그인했는지 확인하세요
from torch import autocast
from diffusers import StableDiffusionPipeline
...
Stable Diffusion을 이용한 이미지 수정
SDEdit가 최초로 제안한 확산-디노이징(diffusion-denoising) 메커니즘을 사용하여, 이 모델은 텍스트 기반의 이미지-투-이미지 변환 및 업스케일링과 같은 다양한 작업에 사용될 수 있습니다. txt2img 샘플링 스크립트와 유사하게, Stable Diffusion을 이용한 이미지 수정 작업을 수행할 수 있는 스크립트를 제공합니다.
다음은 Pinta에서 그린 스케치를 상세한 예술 작품으로 변환하는 예시를 설명합니다.
python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img <path-to-img.jpg> --strength 0.8
여기서 strength는 입력 이미지에 추가되는 노이즈의 양을 제어하는 0.0과 1.0 사이의 값입니다. 1.0에 가까운 값은 많은 변화를 허용하지만, 입력과 의미론적으로 일관되지 않은 이미지를 생성할 수도 있습니다. 다음 예시를 참조하세요.
입력

출력


이 절차는 예를 들어 기본 모델의 샘플을 업스케일링하는 데에도 사용될 수 있습니다.
참고 사항 (Comments)
-
저희 확산 모델 코어베이스는 OpenAI의 ADM 코드베이스와 https://github.com/lucidrains/denoising-diffusion-pytorch에 크게 의존하고 있습니다.
오픈 소스로 공개해 주셔서 감사합니다! -
트랜스포머 인코더 구현은 lucidrains의 x-transformers에서 가져왔습니다.
BibTeX
@misc{rombach2021highresolution,
title={High-Resolution Image Synthesis with Latent Diffusion Models},
author={Robin Rombach and Andreas Blattmann and Dominik Lorenz and Patrick Esser and Björn Ommer},
...
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Jupyter Notebook (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기