Kandinsky
Kandinsky ๋ชจ๋ธ์ ์ผ๋ จ์ ๋ค๊ตญ์ด text-to-image ์์ฑ ๋ชจ๋ธ์ ๋๋ค. Kandinsky 2.0 ๋ชจ๋ธ์ ๋ ๊ฐ์ ๋ค๊ตญ์ด ํ ์คํธ ์ธ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฐ๊ฒฐํด UNet์ ์ฌ์ฉ๋ฉ๋๋ค.
Kandinsky 2.1์ ํ
์คํธ์ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ ๊ฐ์ ๋งคํ์ ์์ฑํ๋ image prior ๋ชจ๋ธ(CLIP
)์ ํฌํจํ๋๋ก ์ํคํ
์ฒ๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. ์ด ๋งคํ์ ๋ ๋์ text-image alignment๋ฅผ ์ ๊ณตํ๋ฉฐ, ํ์ต ์ค์ ํ
์คํธ ์๋ฒ ๋ฉ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ๋ ๋์ ํ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, Kandinsky 2.1์ spatial conditional ์ ๊ทํ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ค๊ฐ์ ๋์ฌ์ฃผ๋ Modulating Quantized Vectors (MoVQ) ๋์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ latents๋ฅผ ์ด๋ฏธ์ง๋ก ๋์ฝ๋ฉํฉ๋๋ค.
Kandinsky 2.2๋ image prior ๋ชจ๋ธ์ ์ด๋ฏธ์ง ์ธ์ฝ๋๋ฅผ ๋ ํฐ CLIP-ViT-G ๋ชจ๋ธ๋ก ๊ต์ฒดํ์ฌ ํ์ง์ ๊ฐ์ ํจ์ผ๋ก์จ ์ด์ ๋ชจ๋ธ์ ๊ฐ์ ํ์ต๋๋ค. ๋ํ image prior ๋ชจ๋ธ์ ํด์๋์ ์ข ํก๋น๊ฐ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก ์ฌํ๋ จ๋์ด ๋ ๋์ ํด์๋์ ์ด๋ฏธ์ง์ ๋ค์ํ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค.
Kandinsky 3๋ ์ํคํ ์ฒ๋ฅผ ๋จ์ํํ๊ณ prior ๋ชจ๋ธ๊ณผ diffusion ๋ชจ๋ธ์ ํฌํจํ๋ 2๋จ๊ณ ์์ฑ ํ๋ก์ธ์ค์์ ๋ฒ์ด๋๊ณ ์์ต๋๋ค. ๋์ , Kandinsky 3๋ Flan-UL2๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ธ์ฝ๋ฉํ๊ณ , BigGan-deep ๋ธ๋ก์ด ํฌํจ๋ UNet์ ์ฌ์ฉํ๋ฉฐ, Sber-MoVQGAN์ ์ฌ์ฉํ์ฌ latents๋ฅผ ์ด๋ฏธ์ง๋ก ๋์ฝ๋ฉํฉ๋๋ค. ํ ์คํธ ์ดํด์ ์์ฑ๋ ์ด๋ฏธ์ง ํ์ง์ ์ฃผ๋ก ๋ ํฐ ํ ์คํธ ์ธ์ฝ๋์ UNet์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฌ์ฑ๋ฉ๋๋ค.
์ด ๊ฐ์ด๋์์๋ text-to-image, image-to-image, ์ธํ์ธํ , ๋ณด๊ฐ ๋ฑ์ ์ํด Kandinsky ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์์ํ๊ธฐ ์ ์ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์:
Kandinsky 2.1๊ณผ 2.2์ ์ฌ์ฉ๋ฒ์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค! ์ ์ผํ ์ฐจ์ด์ ์ Kandinsky 2.2๋ latents๋ฅผ ๋์ฝ๋ฉํ ๋ ํ๋กฌํํธ
๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๋์ , Kandinsky 2.2๋ ๋์ฝ๋ฉ ์ค์๋ image_embeds
๋ง ๋ฐ์๋ค์
๋๋ค.
Kandinsky 3๋ ๋ ๊ฐ๊ฒฐํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ prior ๋ชจ๋ธ์ด ํ์ํ์ง ์์ต๋๋ค. ์ฆ, Stable Diffusion XL๊ณผ ๊ฐ์ ๋ค๋ฅธ diffusion ๋ชจ๋ธ๊ณผ ์ฌ์ฉ๋ฒ์ด ๋์ผํฉ๋๋ค.
Text-to-image
๋ชจ๋ ์์
์ Kandinsky ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ํญ์ ํ๋กฌํํธ๋ฅผ ์ธ์ฝ๋ฉํ๊ณ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ ์์ฑํ๋ prior ํ์ดํ๋ผ์ธ์ ์ค์ ํ๋ ๊ฒ๋ถํฐ ์์ํด์ผ ํฉ๋๋ค. ์ด์ ํ์ดํ๋ผ์ธ์ negative ํ๋กฌํํธ ""
์ ํด๋นํ๋ negative_image_embeds
๋ ์์ฑํฉ๋๋ค. ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ์ด์ ํ์ดํ๋ผ์ธ์ ์ค์ negative_prompt
๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ์ด๋ ๊ฒ ํ๋ฉด prior ํ์ดํ๋ผ์ธ์ ์ ํจ ๋ฐฐ์น ํฌ๊ธฐ๊ฐ 2๋ฐฐ๋ก ์ฆ๊ฐํฉ๋๋ค.
์ด์ ๋ชจ๋ ํ๋กฌํํธ์ ์๋ฒ ๋ฉ์ KandinskyPipeline
์ ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค:

์ด๋ฏธ์ง ์์ฑ์ ์ํด image_embeds
์ negative_image_embeds
๋ฅผ KandinskyV22Pipeline
์ ์ ๋ฌํฉ๋๋ค:

Kandinsky 3๋ prior ๋ชจ๋ธ์ด ํ์ํ์ง ์์ผ๋ฏ๋ก Kandinsky3Pipeline
์ ์ง์ ๋ถ๋ฌ์ค๊ณ ์ด๋ฏธ์ง ์์ฑ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค:
๐ค Diffusers๋ ๋ํ KandinskyCombinedPipeline
๋ฐ KandinskyV22CombinedPipeline
์ด ํฌํจ๋ end-to-end API๋ฅผ ์ ๊ณตํ๋ฏ๋ก prior ํ์ดํ๋ผ์ธ๊ณผ text-to-image ๋ณํ ํ์ดํ๋ผ์ธ์ ๋ณ๋๋ก ๋ถ๋ฌ์ฌ ํ์๊ฐ ์์ต๋๋ค. ๊ฒฐํฉ๋ ํ์ดํ๋ผ์ธ์ prior ๋ชจ๋ธ๊ณผ ๋์ฝ๋๋ฅผ ๋ชจ๋ ์๋์ผ๋ก ๋ถ๋ฌ์ต๋๋ค. ์ํ๋ ๊ฒฝ์ฐ prior_guidance_scale
๋ฐ prior_num_inference_steps
๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ prior ํ์ดํ๋ผ์ธ์ ๋ํด ๋ค๋ฅธ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
๋ด๋ถ์์ ๊ฒฐํฉ๋ ํ์ดํ๋ผ์ธ์ ์๋์ผ๋ก ํธ์ถํ๋ ค๋ฉด AutoPipelineForText2Image
๋ฅผ ์ฌ์ฉํฉ๋๋ค:
Image-to-image
Image-to-image ๊ฒฝ์ฐ, ์ด๊ธฐ ์ด๋ฏธ์ง์ ํ ์คํธ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ์ฌ ํ์ดํ๋ผ์ธ์ ์ด๋ฏธ์ง๋ฅผ conditioningํฉ๋๋ค. Prior ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ค๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค:
Kandinsky 3๋ prior ๋ชจ๋ธ์ด ํ์ํ์ง ์์ผ๋ฏ๋ก image-to-image ํ์ดํ๋ผ์ธ์ ์ง์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:
Conditioningํ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค:

Prior ํ์ดํ๋ผ์ธ์ผ๋ก image_embeds
์ negative_image_embeds
๋ฅผ ์์ฑํฉ๋๋ค:
์ด์ ์๋ณธ ์ด๋ฏธ์ง์ ๋ชจ๋ ํ๋กฌํํธ ๋ฐ ์๋ฒ ๋ฉ์ ํ์ดํ๋ผ์ธ์ผ๋ก ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค:


๋ํ ๐ค Diffusers์์๋ KandinskyImg2ImgCombinedPipeline
๋ฐ KandinskyV22Img2ImgCombinedPipeline
์ด ํฌํจ๋ end-to-end API๋ฅผ ์ ๊ณตํ๋ฏ๋ก prior ํ์ดํ๋ผ์ธ๊ณผ image-to-image ํ์ดํ๋ผ์ธ์ ๋ณ๋๋ก ๋ถ๋ฌ์ฌ ํ์๊ฐ ์์ต๋๋ค. ๊ฒฐํฉ๋ ํ์ดํ๋ผ์ธ์ prior ๋ชจ๋ธ๊ณผ ๋์ฝ๋๋ฅผ ๋ชจ๋ ์๋์ผ๋ก ๋ถ๋ฌ์ต๋๋ค. ์ํ๋ ๊ฒฝ์ฐ prior_guidance_scale
๋ฐ prior_num_inference_steps
๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ํ์ดํ๋ผ์ธ์ ๋ํด ๋ค๋ฅธ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
๋ด๋ถ์์ ๊ฒฐํฉ๋ ํ์ดํ๋ผ์ธ์ ์๋์ผ๋ก ํธ์ถํ๋ ค๋ฉด AutoPipelineForImage2Image
๋ฅผ ์ฌ์ฉํฉ๋๋ค:
Inpainting
โ ๏ธ Kandinsky ๋ชจ๋ธ์ ์ด์ ๊ฒ์์ ํฝ์
๋์ โฌ๏ธ ํฐ์ ํฝ์
์ ์ฌ์ฉํ์ฌ ๋ง์คํฌ ์์ญ์ ํํํฉ๋๋ค. ํ๋ก๋์
์์ KandinskyInpaintPipeline
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํฐ์ ํฝ์
์ ์ฌ์ฉํ๋๋ก ๋ง์คํฌ๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค:
์ธํ์ธํ ์์๋ ์๋ณธ ์ด๋ฏธ์ง, ์๋ณธ ์ด๋ฏธ์ง์์ ๋์ฒดํ ์์ญ์ ๋ง์คํฌ, ์ธํ์ธํ ํ ๋ด์ฉ์ ๋ํ ํ ์คํธ ํ๋กฌํํธ๊ฐ ํ์ํฉ๋๋ค. Prior ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ต๋๋ค:
์ด๊ธฐ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๊ณ ๋ง์คํฌ๋ฅผ ์์ฑํฉ๋๋ค:
Prior ํ์ดํ๋ผ์ธ์ผ๋ก ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค:
์ด์ ์ด๋ฏธ์ง ์์ฑ์ ์ํด ์ด๊ธฐ ์ด๋ฏธ์ง, ๋ง์คํฌ, ํ๋กฌํํธ์ ์๋ฒ ๋ฉ์ ํ์ดํ๋ผ์ธ์ ์ ๋ฌํฉ๋๋ค:


KandinskyInpaintCombinedPipeline
๋ฐ KandinskyV22InpaintCombinedPipeline
์ ์ฌ์ฉํ์ฌ ๋ด๋ถ์์ prior ๋ฐ ๋์ฝ๋ ํ์ดํ๋ผ์ธ์ ํจ๊ป ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด AutoPipelineForInpainting
์ ์ฌ์ฉํฉ๋๋ค:
Interpolation (๋ณด๊ฐ)
Interpolation(๋ณด๊ฐ)์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ํ ์คํธ ์๋ฒ ๋ฉ ์ฌ์ด์ latent space๋ฅผ ํ์ํ ์ ์์ด prior ๋ชจ๋ธ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณผ ์ ์๋ ๋ฉ์ง ๋ฐฉ๋ฒ์ ๋๋ค. Prior ํ์ดํ๋ผ์ธ๊ณผ ๋ณด๊ฐํ๋ ค๋ ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ต๋๋ค:


๋ณด๊ฐํ ํ ์คํธ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๊ณ ๊ฐ ํ ์คํธ ๋๋ ์ด๋ฏธ์ง์ ๋ํ ๊ฐ์ค์น๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ์ค์น๋ฅผ ์คํํ์ฌ ๋ณด๊ฐ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ์ธ์!
interpolate
ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋ฒ ๋ฉ์ ์์ฑํ ๋ค์, ํ์ดํ๋ผ์ธ์ผ๋ก ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค:


ControlNet
โ ๏ธ ControlNet์ Kandinsky 2.2์์๋ง ์ง์๋ฉ๋๋ค!
ControlNet์ ์ฌ์ฉํ๋ฉด depth map์ด๋ edge detection์ ๊ฐ์ ์ถ๊ฐ ์ ๋ ฅ์ ํตํด ์ฌ์ ํ์ต๋ large diffusion ๋ชจ๋ธ์ conditioningํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ธ์ด depth map์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๋ณด์กดํ ์ ์๋๋ก ๊น์ด ๋งต์ผ๋ก Kandinsky 2.2๋ฅผ conditioningํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๊ณ depth map์ ์ถ์ถํด ๋ณด๊ฒ ์ต๋๋ค:

๊ทธ๋ฐ ๋ค์ ๐ค Transformers์ depth-estimation
Pipeline
์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํด depth map์ ๊ตฌํ ์ ์์ต๋๋ค:
Text-to-image [[controlnet-text-to-image]]
Prior ํ์ดํ๋ผ์ธ๊ณผ KandinskyV22ControlnetPipeline
๋ฅผ ๋ถ๋ฌ์ต๋๋ค:
ํ๋กฌํํธ์ negative ํ๋กฌํํธ๋ก ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค:
๋ง์ง๋ง์ผ๋ก ์ด๋ฏธ์ง ์๋ฒ ๋ฉ๊ณผ depth ์ด๋ฏธ์ง๋ฅผ KandinskyV22ControlnetPipeline
์ ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค:

Image-to-image [[controlnet-image-to-image]]
ControlNet์ ์ฌ์ฉํ image-to-image์ ๊ฒฝ์ฐ, ๋ค์์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค:
KandinskyV22PriorEmb2EmbPipeline
๋ก ํ ์คํธ ํ๋กฌํํธ์ ์ด๋ฏธ์ง์์ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค.KandinskyV22ControlnetImg2ImgPipeline
๋ก ์ด๊ธฐ ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
๐ค Transformers์์ depth-estimation
Pipeline
์ ์ฌ์ฉํ์ฌ ๊ณ ์์ด์ ์ด๊ธฐ ์ด๋ฏธ์ง์ depth map์ ์ฒ๋ฆฌํด ์ถ์ถํฉ๋๋ค:
Prior ํ์ดํ๋ผ์ธ๊ณผ KandinskyV22ControlnetImg2ImgPipeline
์ ๋ถ๋ฌ์ต๋๋ค:
ํ ์คํธ ํ๋กฌํํธ์ ์ด๊ธฐ ์ด๋ฏธ์ง๋ฅผ ์ด์ ํ์ดํ๋ผ์ธ์ ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค:
์ด์ KandinskyV22ControlnetImg2ImgPipeline
์ ์คํํ์ฌ ์ด๊ธฐ ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ผ๋ก๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค:

์ต์ ํ
Kandinsky๋ mapping์ ์์ฑํ๊ธฐ ์ํ prior ํ์ดํ๋ผ์ธ๊ณผ latents๋ฅผ ์ด๋ฏธ์ง๋ก ๋์ฝ๋ฉํ๊ธฐ ์ํ ๋ ๋ฒ์งธ ํ์ดํ๋ผ์ธ์ด ํ์ํ๋ค๋ ์ ์์ ๋ ํนํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ณ์ฐ์ด ๋ ๋ฒ์งธ ํ์ดํ๋ผ์ธ์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ต์ ํ์ ๋ ธ๋ ฅ์ ๋ ๋ฒ์งธ ํ์ดํ๋ผ์ธ์ ์ง์ค๋์ด์ผ ํฉ๋๋ค. ๋ค์์ ์ถ๋ก ์ค Kandinskyํค๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ์ ๋๋ค.
PyTorch < 2.0์ ์ฌ์ฉํ ๊ฒฝ์ฐ xFormers์ ํ์ฑํํฉ๋๋ค.
PyTorch >= 2.0์ ์ฌ์ฉํ ๊ฒฝ์ฐ
torch.compile
์ ํ์ฑํํ์ฌ scaled dot-product attention (SDPA)๋ฅผ ์๋์ผ๋ก ์ฌ์ฉํ๋๋ก ํฉ๋๋ค:
์ด๋ attention processor๋ฅผ ๋ช
์์ ์ผ๋ก AttnAddedKVProcessor2_0
์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค:
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด
enable_model_cpu_offload()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ CPU๋ก ์คํ๋ก๋ํฉ๋๋ค:
๊ธฐ๋ณธ์ ์ผ๋ก text-to-image ํ์ดํ๋ผ์ธ์
DDIMScheduler
๋ฅผ ์ฌ์ฉํ์ง๋ง,DDPMScheduler
์ ๊ฐ์ ๋ค๋ฅธ ์ค์ผ์ค๋ฌ๋ก ๋์ฒดํ์ฌ ์ถ๋ก ์๋์ ์ด๋ฏธ์ง ํ์ง ๊ฐ์ ๊ท ํ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ ์ ์์ต๋๋ค: