Топ-100
Kandinsky 2.2-image

Kandinsky 2.2

Новая диффузионная модель для генерации фотореалистичных изображений по тексту

Лицензия

Apache-2.0

Размер файлов

4.8 GB

Версия

0.2

Возможности

Untitled 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 млн. новых высококачественных изображений и их описаний.

Примеры генераций

Untitled Untitled

Инструкции по использованию

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ылки

GitHub

Обратная связь

Круглосуточная поддержка по телефону 8 800 444-24-99, почте support@cloud.ru и в Telegram