이번 포스팅에서는 Hugging Face의 stable-diffusion-v1-5 모델을 통해 이미지를 생성하는 여러 방법에 대해서 알아보도록 하겠다.
Diffusers의 스케줄러란?
Diffusers 라이브러리의 핵심 기능 중 하나는 스케줄러를 활용한 이미지 생성 파이프라인의 유연성과 커스터마이징 가능성을 제공하는 것이다. 스케줄러는 이미지 생성 과정에서 노이즈를 추가하는 방식과 타이밍을 제어하는데 사용되며, Diffusers 라이브러리는 다양한 스케줄러를 제공하여 사용자가 원하는 이미지 생성 결과를 얻을 수 있도록 한다.
사용한 스케줄러
본 포스팅에서는 총 일곱가지 스케줄러를 사용해서 생성한 이미지를 살펴보도록 하겠다. 사용할 스케줄러는 다음과 같다.
LMSDiscreteScheduler DDIMScheduler, DPMSolverMultistepScheduler, EulerDiscreteScheduler, PNDMScheduler, DDPMScheduler, EulerAncestralDiscreteScheduler
구현방식
https://github.com/huggingface/diffusers
https://huggingface.co/blog/stable_diffusion
https://huggingface.co/docs/diffusers/stable_diffusion
위 링크를 참고하여 pipeline을 구성하고 수정했다.
실행환경
보통 딥러닝 모델은 GPU를 사용하여 구현하는 것이 일반적이지만 본인은 CPU를 사용하였다. 하지만 처리속도에 있어서 큰 차이가 있으니(GPU가 압도적으로 빠름) 가능하다면 GPU를 사용하는 것을 추천한다. 또한 conda 가상환경 위에서 동작하도록 했다. conda 가상환경을 사용하면 패키지들 간의 충돌을 방지할 수 있으니 가상환경 사용을 추천한다.
구현하고자 하는 이미지
1) 사람이 그린것 같은 스케치 이미지
2) 비전문가가 그린것 같은 다소 쉬워보이는 이미지
3) 이미지당 하나의 객체만 존재
4) 윤곽선 outline이 뚜렷한 이미지
1. EulerAncestralDiscreteScheduler
이 스케줄러는 Ancestral Sampling 방식을 활용하여 노이즈를 추가하고 이미지를 점진적으로 개선하는 데 사용되는 스케줄러이다. 텍스트 가이드와도 상호 작용하여 고해상도 및 높은 품질의 이미지를 생성하는 데 적합하다.
image = pipeline(prompt="a drawing of a cat, cute, single photo", num_inference_steps= 20, guidance_scale=8.5).images[0]
코드 설명
생성한 pipeline을 통해 이미지를 생성하고 image 변수에 저장하는 코드이다.
. prompt: 이미지 생성에 사용되는 텍스트 가이드를 제공한다.
. num_inference_steps: 이미지 생성에 사용되는 단계의 수를 설정한다. 일반적으로는 30에서 50 정도의 추론 스텝이 이미지 생성에 좋은 품질을 제공할 수 있다. 더 많은 스텝을 사용하면 더 정교한 이미지가 생성되지만, 그만큼 시간이 오래 걸릴 수 있다.
빠른 결과를 얻고자 한다면 20 스텝 정도로 시작하는 것도 괜찮습니다.
. guidance_scale: 이미지 생성 과정에서 텍스트 가이드의 영향을 조절한다. 생성된 이미지 중 첫 번째 이미지를 선택하여 image 변수에 저장한다.값이 낮을수록 이미지의 다양성이 높아지며, 텍스트 가이드에 덜 의존한다.값이 높을수록 이미지가 텍스트 가이드에 더 잘 일치하려고 하며, 다양성은 상대적으로 감소한다.
결과물
contact: kimyeongchaee@gmail.com