{"id":338353,"date":"2022-09-14T15:00:13","date_gmt":"2022-09-14T15:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=338353"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=338353","title":{"rendered":"<span>\u0428\u0435\u0440\u0443\u0434\u0438\u043c \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c Stable Diffusion<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432\u044b \u0443\u0436\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u0443\u0441\u043f\u0435\u0445\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e. <\/p>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Stable Diffusion. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442: UNet, VAE, CLIP.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a57\/d8b\/c3e\/a57d8bc3ee67163ca48ad36b02378f6c.gif\" alt=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u044e Stable Diffusion \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e A grey sketch on paper of a Ferrari car, full car, pencil art\" title=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u044e Stable Diffusion \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e A grey sketch on paper of a Ferrari car, full car, pencil art\" width=\"600\" height=\"320\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a57\/d8b\/c3e\/a57d8bc3ee67163ca48ad36b02378f6c.gif\"\/><figcaption>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u044e Stable Diffusion \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e A grey sketch on paper of a Ferrari car, full car, pencil art<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c<\/h2>\n<ul>\n<li>\n<p>DreamStudio \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u043e\u0442 Hugging Face<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>Variational Autoencoder (VAE)<\/p>\n<\/li>\n<li>\n<p>CLIP Text Encoder<\/p>\n<\/li>\n<li>\n<p>UNet<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<h2>DreamStudio \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 DreamStudio \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0431\u0435\u0437 \u0441\u043c\u0441. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0432\u0432\u043e\u0434\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043f\u043e\u043b\u0435 \u0441\u043d\u0438\u0437\u0443. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u0442\u0435 Dream. \u041f\u0440\u043e\u0444\u0438\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/355\/f74\/69b\/355f7469b09ba46475bd3d1e7894bfb3.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DreamStudio\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DreamStudio\" width=\"3022\" height=\"1340\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/355\/f74\/69b\/355f7469b09ba46475bd3d1e7894bfb3.png\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DreamStudio<\/figcaption><\/figure>\n<h2>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u043e\u0442 Hugging Face<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f GPU \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0430\u0440\u043a\u043e\u043c \u043d\u0435\u0432\u0438\u0434\u0430\u043d\u043d\u043e\u0439 \u0449\u0435\u0434\u0440\u043e\u0441\u0442\u0438 \u043e\u0442 Google \u2014 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438 GPU \u0432 Google Colab. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a, \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/colab.research.google.com\/drive\/1niwR6cCs2eV5v57ZGhrmoCYdAiIFagkn?usp=sharing\" rel=\"noopener noreferrer nofollow\">\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c<\/a>.<\/p>\n<figure class=\"float bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e31\/62c\/a02\/e3162ca02c00d234b5e4b6fef0a517d7.png\" alt=\"\" title=\"\" width=\"796\" height=\"608\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e31\/62c\/a02\/e3162ca02c00d234b5e4b6fef0a517d7.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u0442\u044c \u0448\u0430\u043d\u0441, \u0447\u0442\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0443 \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e CPU. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <\/p>\n<p>\u0421\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2192 \u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c: GPU.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"bash\">!pip install diffusers transformers scipy ftfy \"ipywidgets>=7,&lt;8\"<\/code><\/pre>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">import os  import requests import torch import google.colab.output from torch import autocast from torch.nn import functional as F from torchvision import transforms from diffusers import (     StableDiffusionPipeline, AutoencoderKL,     UNet2DConditionModel, PNDMScheduler, LMSDiscreteScheduler ) from diffusers.schedulers.scheduling_ddim import DDIMScheduler from transformers import CLIPTextModel, CLIPTokenizer, CLIPProcessor, CLIPModel from tqdm.auto import tqdm from huggingface_hub import notebook_login from PIL import Image, ImageDraw  device = 'cuda'  google.colab.output.enable_custom_widget_manager() notebook_login()<\/code><\/pre>\n<p>\u0418 \u0432\u0438\u0434\u0438\u043c \u0447\u0435\u043b\u0435\u0431\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0438\u0442 \u0442\u043e\u043a\u0435\u043d.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b3\/b83\/630\/7b3b83630704b041d19188dbccade0f8.png\" alt=\"\" title=\"\" width=\"1096\" height=\"406\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b3\/b83\/630\/7b3b83630704b041d19188dbccade0f8.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430:<\/p>\n<ol>\n<li>\n<p>\u041b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Hugging Face <a href=\"https:\/\/huggingface.co\/login\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/login<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 <a href=\"https:\/\/huggingface.co\/CompVis\/stable-diffusion-v1-4\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/CompVis\/stable-diffusion-v1-4<\/a><\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043a\u0435\u043d <a href=\"https:\/\/huggingface.co\/settings\/tokens\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/settings\/tokens<\/a><\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 Colab.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b44\/243\/74c\/b4424374cf7a14feadf8f0ec18eccd7a.png\" alt=\"\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430\" title=\"\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430\" width=\"878\" height=\"96\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b44\/243\/74c\/b4424374cf7a14feadf8f0ec18eccd7a.png\"\/><figcaption>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 3 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Python \u2014 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u043a \u043d\u0435 \u043c\u0430\u043b\u044c\u0447\u0438\u043a\u0430, \u043d\u043e \u043c\u0443\u0436\u0430! <\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u0430 \u0441\u0435\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"python\">pipe = StableDiffusionPipeline.from_pretrained(     'CompVis\/stable-diffusion-v1-4',      revision='fp16',     tourch_dtype=torch.float16,      use_auth_token=True ) pipe = pipe.to(device)<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c <code>prompt<\/code> \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<pre><code class=\"python\">prompt = 'A grey sketch on paper of a Ferrari car, full car, pencil art' with autocast(device):     image = pipe(prompt)['images'][0] image<\/code><\/pre>\n<p>\u041d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a.<\/p>\n<pre><code class=\"python\">def image_grid(images, rows, cols):     assert len(images) == rows * cols      w, h = images[0].size     grid = Image.new('RGB', size=(cols * w, rows * h))     grid_w, grid_h = grid.size      for i, img in enumerate(images):         grid.paste(img, box=(i % cols * w, i \/\/ cols * h))     return grid<\/code><\/pre>\n<pre><code class=\"python\">nrows, ncols = 1, 3 prompts = [     'A grey sketch on paper of a Ferrari car, full car, pencil art' ] * nrows * ncols with autocast(device):     images = pipe(prompts)['sample'] image_grid(images, rows=nrows, cols=ncols)<\/code><\/pre>\n<p>\u0412\u0440\u0430\u0449\u0430\u0435\u043c \u0431\u0430\u0440\u0430\u0431\u0430\u043d. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0443\u043f\u0435\u0440\u043f\u0440\u0438\u0437 \u2014 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0435\u0445 \u0448\u0442\u0443\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/530\/445\/aba\/530445aba884ccec8cdf411446627643.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\" width=\"2790\" height=\"1054\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/530\/445\/aba\/530445aba884ccec8cdf411446627643.png\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0449\u0438\u0442\u044c \u0441 \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0442\u043e \u0432\u044b\u043b\u0435\u0442\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code>RuntimeError: CUDA out of memory.<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/p>\n<pre><code class=\"bash\">!nvidia-smi<\/code><\/pre>\n<p>\u0423\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b nrows=2, ncols=3) \u0437\u0430\u043d\u044f\u0442\u043e 15 \u0438\u0437 16 Gb.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b6c\/863\/9e9\/b6c8639e99c3f0aa2aec21e88833c5b6.png\" alt=\"!nvidia-smi \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 15 \u0438\u0437 16 Gb \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0438 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 CUDA out of memory.\" title=\"!nvidia-smi \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 15 \u0438\u0437 16 Gb \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0438 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 CUDA out of memory.\" width=\"1218\" height=\"606\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6c\/863\/9e9\/b6c8639e99c3f0aa2aec21e88833c5b6.png\"\/><figcaption>!nvidia-smi \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 15 \u0438\u0437 16 Gb \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0438 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 CUDA out of memory.<\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0430\u043d\u0441\u0430. <\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/h2>\n<blockquote>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0443\u0447\u0438\u043c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 \u043d\u0438\u0447\u0435\u0433\u043e. \u0410 \u0434\u043b\u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u043a \u0444\u0438\u0437\u0438\u043a\u0430\u043c.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0432 \u0432\u043e\u0434\u0443 \u043a\u0430\u043f\u043d\u0443\u0442\u044c \u0447\u0435\u0440\u043d\u0438\u043b? \u0416\u0438\u0434\u043a\u043e\u0441\u0442\u0438 \u0441\u043c\u0435\u0448\u0430\u044e\u0442\u0441\u044f, \u0432\u043e\u0434\u0430 \u043f\u043e\u0447\u0435\u0440\u043d\u0435\u0435\u0442. \u0412 \u0444\u0438\u0437\u0438\u043a\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u0435\u0439.<\/p>\n<p>Stable Diffusion \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u043e\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0435\u0448\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438 \u0433\u0430\u0443\u0441\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0448\u0443\u043c. \u0410 \u0434\u0430\u043b\u0435\u0435 \u043e\u0431\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0438\u0437 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9f\/3da\/f42\/b9f3daf427d38b6352c06414239390f6.png\" alt=\"\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\" title=\"\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\" width=\"1654\" height=\"368\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b9f\/3da\/f42\/b9f3daf427d38b6352c06414239390f6.png\"\/><figcaption>\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0447\u0438\u0441\u0442\u044b\u0439 \u0448\u0443\u043c, \u0442\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 \u0435\u0433\u043e \u0432 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0412 Stable Diffusion \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f UNet.<\/p>\n<p>\u041d\u044e\u0430\u043d\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 512\u0445512 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 262 144 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a \u043d\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442\u043e \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430. \u041c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 (latent space), \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Variational Autoencoder (VAE).<\/p>\n<p>\u041c\u0430\u043b\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438\u0437 \u0448\u0443\u043c\u0430. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0439 \u043f\u043e\u0434\u0430\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Text Encoder \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 CLIP.<\/p>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c Scheduler \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0431\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0437\u0430\u0448\u0443\u043c\u043b\u044f\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>Variational Autoencoder (VAE)<\/h2>\n<p>\u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f VAE \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 Auto-Encoding Variational Bayes by Diederik P. Kingma and Max Welling.<\/p>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u0438 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/041\/94f\/a46\/04194fa469e362a011234bff69e2f683.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 VAE\" title=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 VAE\" width=\"1686\" height=\"576\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/041\/94f\/a46\/04194fa469e362a011234bff69e2f683.png\"\/><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 VAE<\/figcaption><\/figure>\n<p>\u042d\u043d\u043a\u043e\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043d\u0437\u043e\u0440\u0430 <code>(1, 3, 512, 512)<\/code>, \u0433\u0434\u0435 1 &#8212; \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430, 3 &#8212; RGB-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0435 (\u0441\u0436\u0430\u0442\u043e\u0435) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0442\u0435\u043d\u0437\u043e\u0440 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 <code>(1, 4, 64, 64)<\/code>.<\/p>\n<p>\u0414\u0435\u043a\u043e\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0435\u043d\u0437\u043e\u0440 \u0438\u0437 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c \u0441\u0435\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043c\u0435\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<pre><code class=\"python\">vae = AutoencoderKL.from_pretrained(     'CompVis\/stable-diffusion-v1-4', subfolder='vae', use_auth_token=True ) vae = vae.to(device) dict(vae.config)  > {   'in_channels': 3,   'out_channels': 3,   'down_block_types': ['DownEncoderBlock2D',     'DownEncoderBlock2D',     'DownEncoderBlock2D',     'DownEncoderBlock2D'],   'up_block_types': ['UpDecoderBlock2D',     'UpDecoderBlock2D',     'UpDecoderBlock2D',     'UpDecoderBlock2D'],   'block_out_channels': [128, 256, 512, 512],   'layers_per_block': 2,   'act_fn': 'silu',   'latent_channels': 4,   'sample_size': 512,   '_class_name': 'AutoencoderKL',   '_diffusers_version': '0.3.0',   '_name_or_path': 'CompVis\/stable-diffusion-v1-4' }<\/code><\/pre>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<pre><code class=\"python\">content = requests.get('https:\/\/i.ibb.co\/qmcCRQJ\/ferrari.png', stream=True).raw car_img = Image.open(content) car_img = car_img.resize((512, 512)) car_img<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/97c\/b8a\/9ec\/97cb8a9ec224606c26e85441c4a73be3.png\" alt=\"\u0412\u0445\u043e\u0434 \u043d\u0430 VAE Encoder\" title=\"\u0412\u0445\u043e\u0434 \u043d\u0430 VAE Encoder\" width=\"340\" height=\"334\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97c\/b8a\/9ec\/97cb8a9ec224606c26e85441c4a73be3.png\"\/><figcaption>\u0412\u0445\u043e\u0434 \u043d\u0430 VAE Encoder<\/figcaption><\/figure>\n<p>\u0418 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0435\u0435 \u0432 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430.<\/p>\n<pre><code class=\"python\">def preprocess(pil_image):     pil_image = pil_image.convert(\"RGB\")     processing_pipe = transforms.Compose([         transforms.Resize((512, 512)),         transforms.ToTensor(),         transforms.Normalize([0.5], [0.5]),     ])     tensor = processing_pipe(pil_image)     tensor = tensor.reshape(1, 3, 512, 512)     return tensor   def encode_vae(img):     img_tensor = preprocess(img)     with torch.no_grad():         diag_gaussian_distrib_obj = vae.encode(img_tensor.to(device), return_dict=False)         img_latent = diag_gaussian_distrib_obj[0].sample().detach().cpu()         img_latent *= 0.18215     return img_latent  car_latent = encode_vae(car_img) car_latent.shape  > torch.Size([1, 4, 64, 64])<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 <code>car_latent<\/code> &#8212; \u0441\u0436\u0430\u0442\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e <code>(1, 4, 64, 64)<\/code>. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0443.<\/p>\n<pre><code class=\"python\">def decode_latents(latents):     latents = 1 \/ 0.18215 * latents      with torch.no_grad():         images = vae.decode(latents)['sample']      images = (images \/ 2 + 0.5).clamp(0, 1)     images = images.detach().cpu().permute(0, 2, 3, 1).numpy()     images = (images * 255).round().astype('uint8')     pil_images = [Image.fromarray(image) for image in images]     return pil_images  images = decode_latents(car_latent.to(device)) images[0]<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6b2\/f35\/e5d\/6b2f35e5d40d93c7a237ef22bebe4dfe.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 VAE Decoder\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 VAE Decoder\" width=\"336\" height=\"340\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b2\/f35\/e5d\/6b2f35e5d40d93c7a237ef22bebe4dfe.png\"\/><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 VAE Decoder<\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0447\u0442\u043e, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0442\u0438\u043f\u0430 Latent Diffusion \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 latent space.<\/p>\n<h2>CLIP<\/h2>\n<p>CLIP \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442 OpenAI, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0443\u0447\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u0445 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u0432 \u0435\u0434\u0438\u043d\u043e\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9e8\/6fd\/309\/9e86fd3092b87080550eea62a556b2bc.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 CLIP\" title=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 CLIP\" width=\"1282\" height=\"816\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e8\/6fd\/309\/9e86fd3092b87080550eea62a556b2bc.png\"\/><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 CLIP<\/figcaption><\/figure>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 Text Encoder (Transformer) \u0438 Image Encoder (ViT). <\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0434\u0430\u0432\u0430\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 VAE \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>'A grey sketch on paper of a Ferrari car, full car, pencil art'<\/code><\/p>\n<\/li>\n<li>\n<p><code>'a car'<\/code><\/p>\n<\/li>\n<li>\n<p><code>'a dinosaur'<\/code><\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">clip_model = CLIPModel.from_pretrained(\"openai\/clip-vit-base-patch32\") clip_processor = CLIPProcessor.from_pretrained(\"openai\/clip-vit-base-patch32\")  url = 'https:\/\/i.ibb.co\/qmcCRQJ\/ferrari.png' image = Image.open(requests.get(url, stream=True).raw)  description_candidates = [     'A grey sketch on paper of a Ferrari car, full car, pencil art',      'a car',     'a dinosaur', ]  inputs = clip_processor(text=description_candidates, images=image, return_tensors=\"pt\", padding=True) outputs = clip_model(**inputs) logits_per_image = outputs.logits_per_image  # this is the image-text similarity score probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities  print(logits_per_image) > [37.2948, 26.1819, 19.6026]  print(probs) > [9.9999e-01, 1.4917e-05, 2.0718e-08]<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>'A grey sketch on paper of a Ferrari car, full car, pencil art'<\/code> \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e 0.9999, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>'a dinosaur'<\/code> \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0439 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u043a \u043d\u0443\u043b\u044e.<\/p>\n<h2>UNet<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043b\u043e\u0448\u0430\u0434\u043a\u0430 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c Stable Diffusion. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 Denoising \u2014 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0448\u0443\u043c\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a8\/fbf\/840\/6a8fbf8402007f9a5f09e579e2a767b3.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 UNet \" title=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 UNet \" width=\"2022\" height=\"978\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a8\/fbf\/840\/6a8fbf8402007f9a5f09e579e2a767b3.png\"\/><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 UNet <\/figcaption><\/figure>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0443\u043c\u0435\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 \u0448\u0443\u043c\u0430, \u043d\u043e \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0422\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0438 \u0438\u0437 ResNet \u0431\u043b\u043e\u043a\u043e\u0432 \u2014 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043b\u043e\u0435\u0432 + skip connections.<\/p>\n<p>\u0412 Stable Diffusion \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f CrossAttention \u0431\u043b\u043e\u043a\u0438. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 CLIP Text Encoder, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e. <\/p>\n<pre><code class=\"python\">unet = UNet2DConditionModel.from_pretrained(     'CompVis\/stable-diffusion-v1-4', subfolder='unet', use_auth_token=True ) unet = unet.to(device) unet.config  > { 'sample_size': 64,  'in_channels': 4,  'out_channels': 4,  'center_input_sample': False,  'flip_sin_to_cos': True,  'freq_shift': 0,  'down_block_types': ['CrossAttnDownBlock2D',   'CrossAttnDownBlock2D',   'CrossAttnDownBlock2D',   'DownBlock2D'],  'up_block_types': ['UpBlock2D',   'CrossAttnUpBlock2D',   'CrossAttnUpBlock2D',   'CrossAttnUpBlock2D'],  'block_out_channels': [320, 640, 1280, 1280],  'layers_per_block': 2,  'downsample_padding': 1,  'mid_block_scale_factor': 1,  'act_fn': 'silu',  'norm_num_groups': 32,  'norm_eps': 1e-05,  'cross_attention_dim': 768,  'attention_head_dim': 8,  '_class_name': 'UNet2DConditionModel',  '_diffusers_version': '0.3.0',  '_name_or_path': 'CompVis\/stable-diffusion-v1-4' }<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 Colab \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 Diffusers, \u0433\u0434\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 UNet \u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 Scheduler&#8217;\u0430\u043c\u0438.<\/p>\n<h2>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d<\/h2>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u043e VAE, CLIP, UNet \u0438 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0442\u043e\u0442, \u0447\u0442\u043e \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 StableDiffusionPipeline \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c scheduler.<\/p>\n<pre><code class=\"python\">scheduler = LMSDiscreteScheduler(     beta_start=0.00085,      beta_end=0.012,     beta_schedule='scaled_linear',      num_train_timesteps=1000 )<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u044d\u043c\u0431\u0435\u0434\u0438\u043d\u0433\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<br \/><code>'A grey sketch on paper of a Ferrari car, full car, pencil art'<\/code>.<\/p>\n<pre><code class=\"python\">def get_text_embeds(prompt):     text_input = tokenizer(         prompt, padding='max_length', max_length=tokenizer.model_max_length,         truncation=True, return_tensors='pt'     )     with torch.no_grad():         text_embeddings = text_encoder(text_input.input_ids.to(device))[0]          uncond_input = tokenizer(         [''] * len(prompt), padding='max_length', max_length=tokenizer.model_max_length,         truncation=True, return_tensors='pt'     )     with torch.no_grad():         uncond_embeddings = text_encoder(uncond_input.input_ids.to(device))[0]          text_embeddings = torch.cat([uncond_embeddings, text_embeddings])     return text_embeddings   prompt = 'A grey sketch on paper of a Ferrari car, full car, pencil art' test_embeds = get_text_embeds([prompt]) print(test_embeds) print(test_embeds.shape)  > tensor([[[-0.3884,  0.0229, -0.0522,  ..., -0.4899, -0.3066,  0.0675],          [-0.3711, -1.4497, -0.3401,  ...,  0.9489,  0.1867, -1.1034],          [-0.5107, -1.4629, -0.2926,  ...,  1.0419,  0.0701, -1.0284],          ...,          [ 0.5668,  1.1076, -2.3770,  ..., -1.4189, -0.6171,  0.4183],          [ 0.5545,  1.1131, -2.3889,  ..., -1.4055, -0.6261,  0.4250],          [ 0.5227,  1.1315, -2.3088,  ..., -1.4146, -0.6122,  0.3927]]],        device='cuda:0')  > torch.Size([2, 77, 768])<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0432 latent space \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 Denoising \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e UNet \u0438 Scheduler, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f <code>test_embeds<\/code> \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430. <\/p>\n<pre><code class=\"python\">def generate_latents(     text_embeddings,     height=512,      width=512,     num_inference_steps=50,     guidance_scale=7.5,     latents=None ):     if latents is None:         latents = torch.randn((             text_embeddings.shape[0] \/\/ 2,             unet.in_channels,             height \/\/ 8,             width \/\/ 8         ))     latents = latents.to(device)      scheduler.set_timesteps(num_inference_steps)     latents = latents * scheduler.sigmas[0]      with autocast('cuda'):         for i, t in tqdm(enumerate(scheduler.timesteps)):             latent_model_input = torch.cat([latents] * 2)             sigma = scheduler.sigmas[i]             latent_model_input = latent_model_input \/ ((sigma ** 2 + 1) ** 0.5)              with torch.no_grad():                 noise_pred = unet(latent_model_input, t, encoder_hidden_states=text_embeddings)['sample']                          noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)             noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)              latents = scheduler.step(noise_pred, i, latents)['prev_sample']     return latents   test_latents = generate_latents(test_embeds) print(test_latents) print(test_latents.shape)  > tensor([[[[ 0.2196,  0.3412,  0.2564,  ...,  0.5965,  0.2621,  0.9491],           [ 0.5094,  0.6396,  0.7730,  ...,  0.7261,  0.9269,  0.8177],           [ 0.3972,  0.0753,  0.5931,  ...,  0.6357,  1.2942,  0.9378],           ...,           [ 0.0101,  0.1279, -0.3112,  ..., -0.5879, -0.3295, -0.4144],           [-0.1014,  0.6407,  0.3716,  ..., -0.3444, -0.6487, -0.4429],           [-0.1337, -0.0826, -0.1991,  ..., -0.4089, -0.5995, -0.4405]]]],        device='cuda:0')  > torch.Size([1, 4, 64, 64])<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u043d\u0437\u043e\u0440 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0443 VAE.<\/p>\n<pre><code class=\"python\">def decode_latents(latents):     latents = 1 \/ 0.18215 * latents      with torch.no_grad():         images = vae.decode(latents)['sample']      images = (images \/ 2 + 0.5).clamp(0, 1)     images = images.detach().cpu().permute(0, 2, 3, 1).numpy()     images = (images * 255).round().astype('uint8')     pil_images = [Image.fromarray(image) for image in images]     return pil_images  images = decode_latents(test_latents) images[0]<\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/172\/f89\/e61\/172f89e613f3898eae0aef402828546a.png\" alt=\"get_text_embeds -> generate_latents -> decode_latents&#187; title=&#187;get_text_embeds -> generate_latents -> decode_latents&#187; width=&#187;508&#8243; height=&#187;506&#8243; data-src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/172\/f89\/e61\/172f89e613f3898eae0aef402828546a.png&#187;\/><figcaption>get_text_embeds -> generate_latents -> decode_latents<\/figcaption><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Stable Diffusion \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0443 \u043d\u0435\u0435 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0443\u0439\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u044b image2image \/ \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \/ \u043f\u043e\u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f fine-tunning&#8217;\u043e\u043c.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 <a href=\"https:\/\/t.me\/savostyanov_dmitry\" rel=\"noopener noreferrer nofollow\">Telegram<\/a>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/t.me\/savostyanov_dmitry\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 Telegram<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/colab.research.google.com\/drive\/1niwR6cCs2eV5v57ZGhrmoCYdAiIFagkn?usp=sharing\" rel=\"noopener noreferrer nofollow\">Colab<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/beta.dreamstudio.ai\/dream\" rel=\"noopener noreferrer nofollow\">DreamStudio<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/youtu.be\/ltLNYA3lWAQ\" rel=\"noopener noreferrer nofollow\">\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0432\u0448\u0435\u0435 \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u0438\u0434\u0435\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/colab.research.google.com\/github\/huggingface\/notebooks\/blob\/main\/diffusers\/diffusers_intro.ipynb#scrollTo=PzW5ublpBuUt\" rel=\"noopener noreferrer nofollow\">Colab \u043f\u0440\u043e UNet \u043e\u0442 Diffusers<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/lilianweng.github.io\/posts\/2021-07-11-diffusion-models\/\" rel=\"noopener noreferrer nofollow\">What are Diffusion Models<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/arxiv.org\/pdf\/1312.6114.pdf\" rel=\"noopener noreferrer nofollow\">Auto-Encoding Variational Bayes by Diederik P. Kingma and Max Welling<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/openai.com\/blog\/clip\/\" rel=\"noopener noreferrer nofollow\">CLIP: Connecting Text and Images<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/688204\/\"> https:\/\/habr.com\/ru\/post\/688204\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432\u044b \u0443\u0436\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u0443\u0441\u043f\u0435\u0445\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e. <\/p>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Stable Diffusion. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442: UNet, VAE, CLIP.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u044e Stable Diffusion \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e A grey sketch on paper of a Ferrari car, full car, pencil art<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c<\/h2>\n<ul>\n<li>\n<p>DreamStudio \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u043e\u0442 Hugging Face<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>Variational Autoencoder (VAE)<\/p>\n<\/li>\n<li>\n<p>CLIP Text Encoder<\/p>\n<\/li>\n<li>\n<p>UNet<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<h2>DreamStudio \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 DreamStudio \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0431\u0435\u0437 \u0441\u043c\u0441. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0432\u0432\u043e\u0434\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043f\u043e\u043b\u0435 \u0441\u043d\u0438\u0437\u0443. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u0442\u0435 Dream. \u041f\u0440\u043e\u0444\u0438\u0442.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 DreamStudio<\/figcaption><\/figure>\n<h2>\u041f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u043e\u0442 Hugging Face<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f GPU \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0430\u0440\u043a\u043e\u043c \u043d\u0435\u0432\u0438\u0434\u0430\u043d\u043d\u043e\u0439 \u0449\u0435\u0434\u0440\u043e\u0441\u0442\u0438 \u043e\u0442 Google \u2014 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438 GPU \u0432 Google Colab. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a, \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/colab.research.google.com\/drive\/1niwR6cCs2eV5v57ZGhrmoCYdAiIFagkn?usp=sharing\" rel=\"noopener noreferrer nofollow\">\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c<\/a>.<\/p>\n<figure class=\"float bordered full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u0442\u044c \u0448\u0430\u043d\u0441, \u0447\u0442\u043e \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0443 \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e CPU. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <\/p>\n<p>\u0421\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2192 \u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u044c: GPU.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"bash\">!pip install diffusers transformers scipy ftfy \"ipywidgets>=7,&lt;8\"<\/code><\/pre>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">import os  import requests import torch import google.colab.output from torch import autocast from torch.nn import functional as F from torchvision import transforms from diffusers import (     StableDiffusionPipeline, AutoencoderKL,     UNet2DConditionModel, PNDMScheduler, LMSDiscreteScheduler ) from diffusers.schedulers.scheduling_ddim import DDIMScheduler from transformers import CLIPTextModel, CLIPTokenizer, CLIPProcessor, CLIPModel from tqdm.auto import tqdm from huggingface_hub import notebook_login from PIL import Image, ImageDraw  device = 'cuda'  google.colab.output.enable_custom_widget_manager() notebook_login()<\/code><\/pre>\n<p>\u0418 \u0432\u0438\u0434\u0438\u043c \u0447\u0435\u043b\u0435\u0431\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0438\u0442 \u0442\u043e\u043a\u0435\u043d.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430:<\/p>\n<ol>\n<li>\n<p>\u041b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Hugging Face <a href=\"https:\/\/huggingface.co\/login\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/login<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 <a href=\"https:\/\/huggingface.co\/CompVis\/stable-diffusion-v1-4\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/CompVis\/stable-diffusion-v1-4<\/a><\/p>\n<\/li>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043a\u0435\u043d <a href=\"https:\/\/huggingface.co\/settings\/tokens\" rel=\"noopener noreferrer nofollow\">https:\/\/huggingface.co\/settings\/tokens<\/a><\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 Colab.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 3 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Python \u2014 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u043a \u043d\u0435 \u043c\u0430\u043b\u044c\u0447\u0438\u043a\u0430, \u043d\u043e \u043c\u0443\u0436\u0430! <\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u0430 \u0441\u0435\u0442\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"python\">pipe = StableDiffusionPipeline.from_pretrained(     'CompVis\/stable-diffusion-v1-4',      revision='fp16',     tourch_dtype=torch.float16,      use_auth_token=True ) pipe = pipe.to(device)<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c <code>prompt<\/code> \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<pre><code class=\"python\">prompt = 'A grey sketch on paper of a Ferrari car, full car, pencil art' with autocast(device):     image = pipe(prompt)['images'][0] image<\/code><\/pre>\n<p>\u041d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a.<\/p>\n<pre><code class=\"python\">def image_grid(images, rows, cols):     assert len(images) == rows * cols      w, h = images[0].size     grid = Image.new('RGB', size=(cols * w, rows * h))     grid_w, grid_h = grid.size      for i, img in enumerate(images):         grid.paste(img, box=(i % cols * w, i \/\/ cols * h))     return grid<\/code><\/pre>\n<pre><code class=\"python\">nrows, ncols = 1, 3 prompts = [     'A grey sketch on paper of a Ferrari car, full car, pencil art' ] * nrows * ncols with autocast(device):     images = pipe(prompts)['sample'] image_grid(images, rows=nrows, cols=ncols)<\/code><\/pre>\n<p>\u0412\u0440\u0430\u0449\u0430\u0435\u043c \u0431\u0430\u0440\u0430\u0431\u0430\u043d. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0443\u043f\u0435\u0440\u043f\u0440\u0438\u0437 \u2014 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0435\u0445 \u0448\u0442\u0443\u043a.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0449\u0438\u0442\u044c \u0441 \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0442\u043e \u0432\u044b\u043b\u0435\u0442\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code>RuntimeError: CUDA out of memory.<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/p>\n<pre><code class=\"bash\">!nvidia-smi<\/code><\/pre>\n<p>\u0423\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b nrows=2, ncols=3) \u0437\u0430\u043d\u044f\u0442\u043e 15 \u0438\u0437 16 Gb.<\/p>\n<figure class=\"full-width\"><figcaption>!nvidia-smi \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 15 \u0438\u0437 16 Gb \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0438 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 CUDA out of memory.<\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043c\u0435\u043d\u044e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0430\u043d\u0441\u0430. <\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/h2>\n<blockquote>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0443\u0447\u0438\u043c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438\u0437 \u043d\u0438\u0447\u0435\u0433\u043e. \u0410 \u0434\u043b\u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u043a \u0444\u0438\u0437\u0438\u043a\u0430\u043c.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0432 \u0432\u043e\u0434\u0443 \u043a\u0430\u043f\u043d\u0443\u0442\u044c \u0447\u0435\u0440\u043d\u0438\u043b? \u0416\u0438\u0434\u043a\u043e\u0441\u0442\u0438 \u0441\u043c\u0435\u0448\u0430\u044e\u0442\u0441\u044f, \u0432\u043e\u0434\u0430 \u043f\u043e\u0447\u0435\u0440\u043d\u0435\u0435\u0442. \u0412 \u0444\u0438\u0437\u0438\u043a\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u0435\u0439.<\/p>\n<p>Stable Diffusion \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u043e\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0435\u0448\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438 \u0433\u0430\u0443\u0441\u0441\u043e\u0432\u0441\u043a\u0438\u0439 \u0448\u0443\u043c. \u0410 \u0434\u0430\u043b\u0435\u0435 \u043e\u0431\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0438\u0437 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044b.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u0448\u0443\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0447\u0438\u0441\u0442\u044b\u0439 \u0448\u0443\u043c, \u0442\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 \u0435\u0433\u043e \u0432 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0412 Stable Diffusion \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f UNet.<\/p>\n<p>\u041d\u044e\u0430\u043d\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 512\u0445512 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 262 144 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0438\u0444\u0444\u0443\u0437\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a \u043d\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442\u043e \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430. \u041c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 (latent space), \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Variational Autoencoder (VAE).<\/p>\n<p>\u041c\u0430\u043b\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438\u0437 \u0448\u0443\u043c\u0430. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0439 \u043f\u043e\u0434\u0430\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Text Encoder \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 CLIP.<\/p>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c Scheduler \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0431\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0437\u0430\u0448\u0443\u043c\u043b\u044f\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>Variational Autoencoder (VAE)<\/h2>\n<p>\u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Diffusers \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f VAE \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 Auto-Encoding Variational Bayes by Diederik P. Kingma and Max Welling.<\/p>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u0438 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width\"><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 VAE<\/figcaption><\/figure>\n<p>\u042d\u043d\u043a\u043e\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043d\u0437\u043e\u0440\u0430 <code>(1, 3, 512, 512)<\/code>, \u0433\u0434\u0435 1 &#8212; \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430, 3 &#8212; RGB-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0435 (\u0441\u0436\u0430\u0442\u043e\u0435) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0442\u0435\u043d\u0437\u043e\u0440 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 <code>(1, 4, 64, 64)<\/code>.<\/p>\n<p>\u0414\u0435\u043a\u043e\u0434\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0435\u043d\u0437\u043e\u0440 \u0438\u0437 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c \u0441\u0435\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043c\u0435\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<pre><code class=\"python\">vae = AutoencoderKL.from_pretrained(     'CompVis\/stable-diffusion-v1-4', subfolder='vae', use_auth_token=True ) vae = vae.to(device) dict(vae.config)  > {   'in_channels': 3,   'out_channels': 3,   'down_block_types': ['DownEncoderBlock2D',     'DownEncoderBlock2D',     'DownEncoderBlock2D',     'DownEncoderBlock2D'],   'up_block_types': ['UpDecoderBlock2D',     'UpDecoderBlock2D',     'UpDecoderBlock2D',     'UpDecoderBlock2D'],   'block_out_channels': [128, 256, 512, 512],   'layers_per_block': 2,   'act_fn': 'silu',   'latent_channels': 4,   'sample_size': 512,   '_class_name': 'AutoencoderKL',   '_diffusers_version': '0.3.0',   '_name_or_path': 'CompVis\/stable-diffusion-v1-4' }<\/code><\/pre>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<pre><code class=\"python\">content = requests.get('https:\/\/i.ibb.co\/qmcCRQJ\/ferrari.png', stream=True).raw car_img = Image.open(content) car_img = car_img.resize((512, 512)) car_img<\/code><\/pre>\n<figure class=\"\"><figcaption>\u0412\u0445\u043e\u0434 \u043d\u0430 VAE Encoder<\/figcaption><\/figure>\n<p>\u0418 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0435\u0435 \u0432 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430.<\/p>\n<pre><code class=\"python\">def preprocess(pil_image):     pil_image = pil_image.convert(\"RGB\")     processing_pipe = transforms.Compose([         transforms.Resize((512, 512)),         transforms.ToTensor(),         transforms.Normalize([0.5], [0.5]),     ])     tensor = processing_pipe(pil_image)     tensor = tensor.reshape(1, 3, 512, 512)     return tensor   def encode_vae(img):     img_tensor = preprocess(img)     with torch.no_grad():         diag_gaussian_distrib_obj = vae.encode(img_tensor.to(device), return_dict=False)         img_latent = diag_gaussian_distrib_obj[0].sample().detach().cpu()         img_latent *= 0.18215     return img_latent  car_latent = encode_vae(car_img) car_latent.shape  > torch.Size([1, 4, 64, 64])<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 <code>car_latent<\/code> &#8212; \u0441\u0436\u0430\u0442\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e <code>(1, 4, 64, 64)<\/code>. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0443.<\/p>\n<pre><code class=\"python\">def decode_latents(latents):     latents = 1 \/ 0.18215 * latents      with torch.no_grad():         images = vae.decode(latents)['sample']      images = (images \/ 2 + 0.5).clamp(0, 1)     images = images.detach().cpu().permute(0, 2, 3, 1).numpy()     images = (images * 255).round().astype('uint8')     pil_images = [Image.fromarray(image) for image in images]     return pil_images  images = decode_latents(car_latent.to(device)) images[0]<\/code><\/pre>\n<figure class=\"\"><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 VAE Decoder<\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0447\u0442\u043e, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0442\u0438\u043f\u0430 Latent Diffusion \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 latent space.<\/p>\n<h2>CLIP<\/h2>\n<p>CLIP \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0442 OpenAI, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0443\u0447\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u0445 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u0432 \u0435\u0434\u0438\u043d\u043e\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 CLIP<\/figcaption><\/figure>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 Text Encoder (Transformer) \u0438 Image Encoder (ViT). <\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0434\u0430\u0432\u0430\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 VAE \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>'A grey sketch on paper of a Ferrari car, full car, pencil art'<\/code><\/p>\n<\/li>\n<li>\n<p><code>'a car'<\/code><\/p>\n<\/li>\n<li>\n<p><code>'a dinosaur'<\/code><\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">clip_model = CLIPModel.from_pretrained(\"openai\/clip-vit-base-patch32\") clip_processor = CLIPProcessor.from_pretrained(\"openai\/clip-vit-base-patch32\")  url = 'https:\/\/i.ibb.co\/qmcCRQJ\/ferrari.png' image = Image.open(requests.get(url, stream=True).raw)  description_candidates = [     'A grey sketch on paper of a Ferrari car, full car, pencil art',      'a car',     'a dinosaur', ]  inputs = clip_processor(text=description_candidates, images=image, return_tensors=\"pt\", padding=True) outputs = clip_model(**inputs) logits_per_image = outputs.logits_per_image  # this is the image-text similarity score probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities  print(logits_per_image) > [37.2948, 26.1819, 19.6026]  print(probs) ><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-338353","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=338353"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338353\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}