diffusers / docs /source /ko /quicktour.md
Aminrabi's picture
End of training
c0af20c
|
raw
history blame
7.49 kB

ํ›‘์–ด๋ณด๊ธฐ

๐Ÿงจ Diffusers๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜์„ธ์š”! ์ด ํ›‘์–ด๋ณด๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐœ๋ฐœ์ž, ์ผ๋ฐ˜์‚ฌ์šฉ์ž ์ƒ๊ด€์—†์ด ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋ฉฐ, ์ถ”๋ก ์„ ์œ„ํ•ด [DiffusionPipeline] ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ์„œ, ํ•„์š”ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

pip install --upgrade diffusers accelerate transformers
  • accelerate์€ ์ถ”๋ก  ๋ฐ ํ•™์Šต์„ ์œ„ํ•œ ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • transformers๋Š” Stable Diffusion๊ณผ ๊ฐ™์ด ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ™•์‚ฐ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DiffusionPipeline

[DiffusionPipeline]์€ ์ถ”๋ก ์„ ์œ„ํ•ด ์‚ฌ์ „ํ•™์Šต๋œ ํ™•์‚ฐ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์–‘์‹์˜ ๋งŽ์€ ์ž‘์—…์— [DiffusionPipeline]์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์ž‘์—…์€ ์•„๋ž˜์˜ ํ‘œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”:

Task Description Pipeline
Unconditional Image Generation ๊ฐ€์šฐ์‹œ์•ˆ ๋…ธ์ด์ฆˆ์—์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ unconditional_image_generation
Text-Guided Image Generation ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ conditional_image_generation
Text-Guided Image-to-Image Translation ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€ ์กฐ์ • img2img
Text-Guided Image-Inpainting ๋งˆ์Šคํฌ ๋ฐ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ฃผ์–ด์ง„ ์ด๋ฏธ์ง€์˜ ๋งˆ์Šคํ‚น๋œ ๋ถ€๋ถ„์„ ์ฑ„์šฐ๊ธฐ inpaint
Text-Guided Depth-to-Image Translation ๊นŠ์ด ์ถ”์ •์„ ํ†ตํ•ด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€์˜ ์ผ๋ถ€๋ฅผ ์กฐ์ • depth2image

ํ™•์‚ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋‹ค์–‘ํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋Š” Using Diffusers๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์˜ˆ๋ฅผ๋“ค์–ด, [DiffusionPipeline] ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ณ , ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Diffusers' checkpoint์— ๋Œ€ํ•ด [DiffusionPipeline]์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Stable Diffusion์„ ์‚ฌ์šฉํ•˜์—ฌ text-to-image๋ฅผ ํ•˜๋Š”๋ฐ [DiffusionPipeline]์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Stable Diffusion ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— license๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ์ฝ์œผ์„ธ์š”. ์ด๋Š” ๋ชจ๋ธ์˜ ํ–ฅ์ƒ๋œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ธฐ๋Šฅ๊ณผ ์ด๊ฒƒ์œผ๋กœ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์œ ํ•ดํ•œ ์ฝ˜ํ…์ธ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„ ํƒํ•œ Stable Diffusion ๋ชจ๋ธ(์˜ˆ: runwayml/stable-diffusion-v1-5)๋กœ ์ด๋™ํ•˜์—ฌ ๋ผ์ด์„ผ์Šค๋ฅผ ์ฝ์œผ์„ธ์š”.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจ๋ธ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> from diffusers import DiffusionPipeline

>>> pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")

[DiffusionPipeline]์€ ๋ชจ๋“  ๋ชจ๋ธ๋ง, ํ† ํฐํ™” ๋ฐ ์Šค์ผ€์ค„๋ง ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์บ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์•ฝ 14์–ต๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ GPU์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PyTorch์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ์„ฑ๊ธฐ ๊ฐ์ฒด๋ฅผ GPU๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

>>> pipeline.to("cuda")

์ด์ œ pipeline์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> image = pipeline("An image of a squirrel in Picasso style").images[0]

์ถœ๋ ฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ PIL Image object๋กœ ๋ž˜ํ•‘๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> image.save("image_of_squirrel_painting.png")

์ฐธ๊ณ : ๋‹ค์Œ์„ ํ†ตํ•ด ๊ฐ€์ค‘์น˜๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋กœ์ปฌ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

git lfs install
git clone https://huggingface.co/runwayml/stable-diffusion-v1-5

๊ทธ๋ฆฌ๊ณ  ์ €์žฅ๋œ ๊ฐ€์ค‘์น˜๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์— ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

>>> pipeline = DiffusionPipeline.from_pretrained("./stable-diffusion-v1-5")

ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰์€ ๋™์ผํ•œ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜์ด๋ฏ€๋กœ ์œ„์˜ ์ฝ”๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

>>> generator.to("cuda")
>>> image = generator("An image of a squirrel in Picasso style").images[0]
>>> image.save("image_of_squirrel_painting.png")

ํ™•์‚ฐ ์‹œ์Šคํ…œ์€ ๊ฐ๊ฐ ์žฅ์ ์ด ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ schedulers์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Stable Diffusion์€ PNDMScheduler๋กœ ์‹คํ–‰๋˜์ง€๋งŒ ๋‹ค๋ฅธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ [EulerDiscreteScheduler] ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

>>> from diffusers import EulerDiscreteScheduler

>>> pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")

>>> # change scheduler to Euler
>>> pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)

์Šค์ผ€์ค„๋Ÿฌ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Using Schedulers ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Stability AI's์˜ Stable Diffusion ๋ชจ๋ธ์€ ์ธ์ƒ์ ์ธ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ชจ๋ธ์ด๋ฉฐ ํ…์ŠคํŠธ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Stable Diffusion๋งŒ์„ ์œ„ํ•œ ์ „์ฒด ๋ฌธ์„œ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค link.

๋งŒ์•ฝ ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ, ๋” ๋†’์€ ์ถ”๋ก  ์†๋„, Mac๊ณผ ๊ฐ™์€ ํŠน์ • ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ONNX ๋Ÿฐํƒ€์ž„์—์„œ ์‹คํ–‰๋˜๋„๋ก Stable Diffusion์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์ตœ์ ํ™” ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”:

ํ™•์‚ฐ ๋ชจ๋ธ์„ ๋ฏธ์„ธ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ํ•™์Šต์‹œํ‚ค๋ ค๋ฉด, training section์„ ์‚ดํŽด๋ณด์„ธ์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฐฐํฌํ•  ๋•Œ ์‹ ์ค‘์„ ๊ธฐํ•ด ์ฃผ์„ธ์š” ๐Ÿค—.