![Kandinsky 2.2-image](https://cdn.cloud.ru/backend/images/rugpt3family/kandinsky_2_2/icon.jpeg)
Kandinsky 2.2Бесплатно
Новая диффузионная модель для генерации фотореалистичных изображений по тексту
Apache-2.0
4.8 GB
0.2
Возможности
Kandinsky 2.2 как и версия Kandinsky 2.1 даёт возможность генерировать картинки по текстовому описанию на русском или английском языках, а также может создавать вариации изображения, совмещать два изображения, а также изменять изображение по текстовому описанию.
В новой версии теперь можно создавать изображения более высокого разрешения (до 1024 пикселей) с различным соотношением сторон, а получающиеся результаты будут обладать высокой степенью фотореалистичности. В модели также появилась архитектурная опция ControlNet, которая позволяет контролировать вносимые в картинку изменения таким образом, чтобы не затронуть общую концепцию сцены.
Архитектурно Kandinsky 2.2 не отличается от версии 2.1, но за счёт увеличения энкодера изображений для Image prior модели до версии CLIP ViT-g удалось повысить качество генераций. Также в рамках общей архитектуры мы перестали передавать текстовые эмбеддинги в диффузионную модель UNet.
Среди нескольких возможных способов использования генеративной модели мы особое внимание уделили улучшению качества режима inpainting/outpainting. Эта функция даёт модели способность дорисовывать изображения на основе текстового описания.
Преимущества
Модель содержит 4.6 млрд. параметров, поэтому её можно развернуть на обычной GPU.
Основное обучение моделей UNet и image prior составило 1M итераций и ещё 200k итераций файнтюнинга.
В составе дополнительных данных для обучения мы использовали около 300 млн. новых высококачественных изображений и их описаний.
Примеры генераций
Инструкции по использованию
1. Text-to-Image
import torch
from diffusers.pipelines.kandinsky2_2 import (
KandinskyV22PriorEmb2EmbPipeline, KandinskyV22InpaintPipeline,
KandinskyV22PriorPipeline, KandinskyV22Pipeline
)
device = torch.device('cuda:0')
prior = KandinskyV22PriorPipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-prior',
torch_dtype=torch.float16
).to(device)
decoder_generate = KandinskyV22Pipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-decoder',
torch_dtype=torch.float16
).to(device)
img_emb = prior(
prompt="a beautiful cat",
num_inference_steps=25,
num_images_per_prompt=1,
negative_prompt=""
).image_embeds
negative_decoder_prompt = "bad image, low resolution"
negative_emb = prior(
prompt=negative_decoder_prompt,
num_inference_steps=25,
num_images_per_prompt=1
)
if negative_decoder_prompt == "":
negative_emb = negative_emb.negative_image_embeds
else:
negative_emb = negative_emb.image_embeds
batch_images = decoder_generate(
image_embeds=img_emb,
negative_image_embeds=negative_emb,
guidance_scale=5,
num_inference_steps=50,
height=1024,
width=1024
).images
2. Image Fusion
import torch
from diffusers.pipelines.kandinsky2_2 import (
KandinskyV22PriorEmb2EmbPipeline, KandinskyV22InpaintPipeline,
KandinskyV22PriorPipeline, KandinskyV22Pipeline
)
device = torch.device('cuda:0')
prior = KandinskyV22PriorPipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-prior',
torch_dtype=torch.float16
).to(device)
decoder_generate = KandinskyV22Pipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-decoder',
torch_dtype=torch.float16
).to(device)
texts = ["a cat", "a dog"]
text_weights = [0.5, 0.5]
images = []
image_weights = []
negative_prior_prompt = ""
negative_decoder_prompt = ""
bs = 1
img_emb = prior.interpolate(
images_and_prompts=images+texts,
weights=image_weights+text_weights,
num_inference_steps=25,
num_images_per_prompt=bs,
negative_prompt=negative_prior_prompt
).image_embeds
negative_emb = prior(
prompt=negative_decoder_prompt,
num_inference_steps=25,
num_images_per_prompt=bs
)
if negative_decoder_prompt == "":
negative_emb = negative_emb.negative_image_embeds
else:
negative_emb = negative_emb.image_embeds
batch_images = decoder_generate(
image_embeds=img_emb,
negative_image_embeds=negative_emb,
num_inference_steps=50,
guidance_scale=5,
height=1024,
width=1024
).images
3. Image Variations
import torch
from PIL import Image
from diffusers.pipelines.kandinsky2_2 import (
KandinskyV22PriorEmb2EmbPipeline, KandinskyV22InpaintPipeline,
KandinskyV22PriorPipeline, KandinskyV22Pipeline
)
device = torch.device('cuda:0')
prior = KandinskyV22PriorPipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-prior',
torch_dtype=torch.float16
).to(device)
decoder_generate = KandinskyV22Pipeline.from_pretrained(
'kandinsky-community/kandinsky-2-2-decoder',
torch_dtype=torch.float16
).to(device)
img = Image.open("cat.png")
negative_prior_prompt = ""
negative_decoder_prompt = ""
bs = 1
img_emb = prior.interpolate(
images_and_prompts=[img],
weights=[1.0],
num_inference_steps=25,
num_images_per_prompt=bs,
negative_prompt=negative_prior_prompt
).image_embeds
negative_emb = prior(
prompt=negative_decoder_prompt,
num_inference_steps=25,
num_images_per_prompt=bs
)
if negative_decoder_prompt == "":
negative_emb = negative_emb.negative_image_embeds
else:
negative_emb = negative_emb.image_embeds
batch_images = decoder_generate(
image_embeds=img_emb,
negative_image_embeds=negative_emb,
num_inference_steps=50,
guidance_scale=5,
height=1024,
width=1024
).images
Ccылки
Обратная связь
Круглосуточная поддержка по телефону 8 800 444-24-99, почте support@cloud.ru и в Telegram