Upload 8 files
Browse files- kandinsky/.gitattributes +35 -0
- kandinsky/README.md +127 -0
- kandinsky/model_index.json +16 -0
- kandinsky/movq/config.json +33 -0
- kandinsky/movq/diffusion_pytorch_model.safetensors +3 -0
- kandinsky/scheduler/scheduler_config.json +13 -0
- kandinsky/unet/config.json +61 -0
- kandinsky/unet/diffusion_pytorch_model.safetensors +3 -0
kandinsky/.gitattributes
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
kandinsky/README.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
prior:
|
| 4 |
+
- kandinsky-community/kandinsky-2-2-prior
|
| 5 |
+
tags:
|
| 6 |
+
- text-to-image
|
| 7 |
+
- kandinsky
|
| 8 |
+
inference: false
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# Kandinsky 2.2
|
| 12 |
+
|
| 13 |
+
Kandinsky inherits best practices from Dall-E 2 and Latent diffusion while introducing some new ideas.
|
| 14 |
+
|
| 15 |
+
It uses the CLIP model as a text and image encoder, and diffusion image prior (mapping) between latent spaces of CLIP modalities. This approach increases the visual performance of the model and unveils new horizons in blending images and text-guided image manipulation.
|
| 16 |
+
|
| 17 |
+
The Kandinsky model is created by [Arseniy Shakhmatov](https://github.com/cene555), [Anton Razzhigaev](https://github.com/razzant), [Aleksandr Nikolich](https://github.com/AlexWortega), [Igor Pavlov](https://github.com/boomb0om), [Andrey Kuznetsov](https://github.com/kuznetsoffandrey) and [Denis Dimitrov](https://github.com/denndimitrov)
|
| 18 |
+
|
| 19 |
+
## Usage
|
| 20 |
+
|
| 21 |
+
Kandinsky 2.2 is available in diffusers!
|
| 22 |
+
|
| 23 |
+
```python
|
| 24 |
+
pip install diffusers transformers accelerate
|
| 25 |
+
```
|
| 26 |
+
|
| 27 |
+
### Text Guided Inpainting Generation
|
| 28 |
+
|
| 29 |
+
```python
|
| 30 |
+
from diffusers import AutoPipelineForInpainting
|
| 31 |
+
from diffusers.utils import load_image
|
| 32 |
+
import torch
|
| 33 |
+
import numpy as np
|
| 34 |
+
|
| 35 |
+
pipe = AutoPipelineForInpainting.from_pretrained("kandinsky-community/kandinsky-2-2-decoder-inpaint", torch_dtype=torch.float16)
|
| 36 |
+
pipe.enable_model_cpu_offload()
|
| 37 |
+
|
| 38 |
+
prompt = "a hat"
|
| 39 |
+
|
| 40 |
+
init_image = load_image(
|
| 41 |
+
"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main" "/kandinsky/cat.png"
|
| 42 |
+
)
|
| 43 |
+
|
| 44 |
+
mask = np.zeros((768, 768), dtype=np.float32)
|
| 45 |
+
# Let's mask out an area above the cat's head
|
| 46 |
+
mask[:250, 250:-250] = 1
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
out = pipe(
|
| 50 |
+
prompt=prompt,
|
| 51 |
+
image=init_image,
|
| 52 |
+
mask_image=mask,
|
| 53 |
+
height=768,
|
| 54 |
+
width=768,
|
| 55 |
+
num_inference_steps=150,
|
| 56 |
+
)
|
| 57 |
+
|
| 58 |
+
image = out.images[0]
|
| 59 |
+
image.save("cat_with_hat.png")
|
| 60 |
+
```
|
| 61 |
+

|
| 62 |
+
|
| 63 |
+
🚨🚨🚨 __Breaking change for Kandinsky Mask Inpainting__ 🚨🚨🚨
|
| 64 |
+
|
| 65 |
+
We introduced a breaking change for Kandinsky inpainting pipeline in the following pull request: https://github.com/huggingface/diffusers/pull/4207. Previously we accepted a mask format where black pixels represent the masked-out area. This is inconsistent with all other pipelines in diffusers. We have changed the mask format in Knaindsky and now using white pixels instead.
|
| 66 |
+
Please upgrade your inpainting code to follow the above. If you are using Kandinsky Inpaint in production. You now need to change the mask to:
|
| 67 |
+
|
| 68 |
+
```python
|
| 69 |
+
# For PIL input
|
| 70 |
+
import PIL.ImageOps
|
| 71 |
+
mask = PIL.ImageOps.invert(mask)
|
| 72 |
+
|
| 73 |
+
# For PyTorch and Numpy input
|
| 74 |
+
mask = 1 - mask
|
| 75 |
+
```
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
## Model Architecture
|
| 79 |
+
|
| 80 |
+
### Overview
|
| 81 |
+
Kandinsky 2.1 is a text-conditional diffusion model based on unCLIP and latent diffusion, composed of a transformer-based image prior model, a unet diffusion model, and a decoder.
|
| 82 |
+
|
| 83 |
+
The model architectures are illustrated in the figure below - the chart on the left describes the process to train the image prior model, the figure in the center is the text-to-image generation process, and the figure on the right is image interpolation.
|
| 84 |
+
|
| 85 |
+
<p float="left">
|
| 86 |
+
<img src="https://raw.githubusercontent.com/ai-forever/Kandinsky-2/main/content/kandinsky21.png"/>
|
| 87 |
+
</p>
|
| 88 |
+
|
| 89 |
+
Specifically, the image prior model was trained on CLIP text and image embeddings generated with a pre-trained [mCLIP model](https://huggingface.co/M-CLIP/XLM-Roberta-Large-Vit-L-14). The trained image prior model is then used to generate mCLIP image embeddings for input text prompts. Both the input text prompts and its mCLIP image embeddings are used in the diffusion process. A [MoVQGAN](https://openreview.net/forum?id=Qb-AoSw4Jnm) model acts as the final block of the model, which decodes the latent representation into an actual image.
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
### Details
|
| 93 |
+
The image prior training of the model was performed on the [LAION Improved Aesthetics dataset](https://huggingface.co/datasets/bhargavsdesai/laion_improved_aesthetics_6.5plus_with_images), and then fine-tuning was performed on the [LAION HighRes data](https://huggingface.co/datasets/laion/laion-high-resolution).
|
| 94 |
+
|
| 95 |
+
The main Text2Image diffusion model was trained on the basis of 170M text-image pairs from the [LAION HighRes dataset](https://huggingface.co/datasets/laion/laion-high-resolution) (an important condition was the presence of images with a resolution of at least 768x768). The use of 170M pairs is due to the fact that we kept the UNet diffusion block from Kandinsky 2.0, which allowed us not to train it from scratch. Further, at the stage of fine-tuning, a dataset of 2M very high-quality high-resolution images with descriptions (COYO, anime, landmarks_russia, and a number of others) was used separately collected from open sources.
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
### Evaluation
|
| 99 |
+
We quantitatively measure the performance of Kandinsky 2.1 on the COCO_30k dataset, in zero-shot mode. The table below presents FID.
|
| 100 |
+
|
| 101 |
+
FID metric values for generative models on COCO_30k
|
| 102 |
+
| | FID (30k)|
|
| 103 |
+
|:------|----:|
|
| 104 |
+
| eDiff-I (2022) | 6.95 |
|
| 105 |
+
| Image (2022) | 7.27 |
|
| 106 |
+
| Kandinsky 2.1 (2023) | 8.21|
|
| 107 |
+
| Stable Diffusion 2.1 (2022) | 8.59 |
|
| 108 |
+
| GigaGAN, 512x512 (2023) | 9.09 |
|
| 109 |
+
| DALL-E 2 (2022) | 10.39 |
|
| 110 |
+
| GLIDE (2022) | 12.24 |
|
| 111 |
+
| Kandinsky 1.0 (2022) | 15.40 |
|
| 112 |
+
| DALL-E (2021) | 17.89 |
|
| 113 |
+
| Kandinsky 2.0 (2022) | 20.00 |
|
| 114 |
+
| GLIGEN (2022) | 21.04 |
|
| 115 |
+
|
| 116 |
+
For more information, please refer to the upcoming technical report.
|
| 117 |
+
|
| 118 |
+
## BibTex
|
| 119 |
+
If you find this repository useful in your research, please cite:
|
| 120 |
+
```
|
| 121 |
+
@misc{kandinsky 2.2,
|
| 122 |
+
title = {kandinsky 2.2},
|
| 123 |
+
author = {Arseniy Shakhmatov, Anton Razzhigaev, Aleksandr Nikolich, Vladimir Arkhipkin, Igor Pavlov, Andrey Kuznetsov, Denis Dimitrov},
|
| 124 |
+
year = {2023},
|
| 125 |
+
howpublished = {},
|
| 126 |
+
}
|
| 127 |
+
```
|
kandinsky/model_index.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_class_name": "KandinskyV22InpaintPipeline",
|
| 3 |
+
"_diffusers_version": "0.17.0.dev0",
|
| 4 |
+
"scheduler": [
|
| 5 |
+
"diffusers",
|
| 6 |
+
"DDPMScheduler"
|
| 7 |
+
],
|
| 8 |
+
"unet": [
|
| 9 |
+
"diffusers",
|
| 10 |
+
"UNet2DConditionModel"
|
| 11 |
+
],
|
| 12 |
+
"movq": [
|
| 13 |
+
"diffusers",
|
| 14 |
+
"VQModel"
|
| 15 |
+
]
|
| 16 |
+
}
|
kandinsky/movq/config.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_class_name": "VQModel",
|
| 3 |
+
"_diffusers_version": "0.17.0.dev0",
|
| 4 |
+
"act_fn": "silu",
|
| 5 |
+
"block_out_channels": [
|
| 6 |
+
128,
|
| 7 |
+
256,
|
| 8 |
+
256,
|
| 9 |
+
512
|
| 10 |
+
],
|
| 11 |
+
"down_block_types": [
|
| 12 |
+
"DownEncoderBlock2D",
|
| 13 |
+
"DownEncoderBlock2D",
|
| 14 |
+
"DownEncoderBlock2D",
|
| 15 |
+
"AttnDownEncoderBlock2D"
|
| 16 |
+
],
|
| 17 |
+
"in_channels": 3,
|
| 18 |
+
"latent_channels": 4,
|
| 19 |
+
"layers_per_block": 2,
|
| 20 |
+
"norm_num_groups": 32,
|
| 21 |
+
"norm_type": "spatial",
|
| 22 |
+
"num_vq_embeddings": 16384,
|
| 23 |
+
"out_channels": 3,
|
| 24 |
+
"sample_size": 32,
|
| 25 |
+
"scaling_factor": 0.18215,
|
| 26 |
+
"up_block_types": [
|
| 27 |
+
"AttnUpDecoderBlock2D",
|
| 28 |
+
"UpDecoderBlock2D",
|
| 29 |
+
"UpDecoderBlock2D",
|
| 30 |
+
"UpDecoderBlock2D"
|
| 31 |
+
],
|
| 32 |
+
"vq_embed_dim": 4
|
| 33 |
+
}
|
kandinsky/movq/diffusion_pytorch_model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:43a5860fea195a7116f2471396c5cc9535fade9b63c4857d8a192ffd924b7002
|
| 3 |
+
size 271380364
|
kandinsky/scheduler/scheduler_config.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_class_name": "DDPMScheduler",
|
| 3 |
+
"_diffusers_version": "0.17.0.dev0",
|
| 4 |
+
"num_train_timesteps": 1000,
|
| 5 |
+
"beta_schedule": "linear",
|
| 6 |
+
"beta_start": 0.00085,
|
| 7 |
+
"beta_end":0.012,
|
| 8 |
+
"clip_sample" : false,
|
| 9 |
+
"set_alpha_to_one" : false,
|
| 10 |
+
"steps_offset" : 1,
|
| 11 |
+
"prediction_type" : "epsilon",
|
| 12 |
+
"thresholding" : false
|
| 13 |
+
}
|
kandinsky/unet/config.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_class_name": "UNet2DConditionModel",
|
| 3 |
+
"_diffusers_version": "0.17.0.dev0",
|
| 4 |
+
"act_fn": "silu",
|
| 5 |
+
"addition_embed_type": "image",
|
| 6 |
+
"addition_embed_type_num_heads": 64,
|
| 7 |
+
"attention_head_dim": 64,
|
| 8 |
+
"block_out_channels": [
|
| 9 |
+
384,
|
| 10 |
+
768,
|
| 11 |
+
1152,
|
| 12 |
+
1536
|
| 13 |
+
],
|
| 14 |
+
"center_input_sample": false,
|
| 15 |
+
"class_embed_type": null,
|
| 16 |
+
"class_embeddings_concat": false,
|
| 17 |
+
"conv_in_kernel": 3,
|
| 18 |
+
"conv_out_kernel": 3,
|
| 19 |
+
"cross_attention_dim": 768,
|
| 20 |
+
"cross_attention_norm": null,
|
| 21 |
+
"down_block_types": [
|
| 22 |
+
"ResnetDownsampleBlock2D",
|
| 23 |
+
"SimpleCrossAttnDownBlock2D",
|
| 24 |
+
"SimpleCrossAttnDownBlock2D",
|
| 25 |
+
"SimpleCrossAttnDownBlock2D"
|
| 26 |
+
],
|
| 27 |
+
"downsample_padding": 1,
|
| 28 |
+
"dual_cross_attention": false,
|
| 29 |
+
"encoder_hid_dim": 1280,
|
| 30 |
+
"encoder_hid_dim_type": "image_proj",
|
| 31 |
+
"flip_sin_to_cos": true,
|
| 32 |
+
"freq_shift": 0,
|
| 33 |
+
"in_channels": 9,
|
| 34 |
+
"layers_per_block": 3,
|
| 35 |
+
"mid_block_only_cross_attention": null,
|
| 36 |
+
"mid_block_scale_factor": 1,
|
| 37 |
+
"mid_block_type": "UNetMidBlock2DSimpleCrossAttn",
|
| 38 |
+
"norm_eps": 1e-05,
|
| 39 |
+
"norm_num_groups": 32,
|
| 40 |
+
"num_class_embeds": null,
|
| 41 |
+
"only_cross_attention": false,
|
| 42 |
+
"out_channels": 8,
|
| 43 |
+
"projection_class_embeddings_input_dim": null,
|
| 44 |
+
"resnet_out_scale_factor": 1.0,
|
| 45 |
+
"resnet_skip_time_act": false,
|
| 46 |
+
"resnet_time_scale_shift": "scale_shift",
|
| 47 |
+
"sample_size": 64,
|
| 48 |
+
"time_cond_proj_dim": null,
|
| 49 |
+
"time_embedding_act_fn": null,
|
| 50 |
+
"time_embedding_dim": null,
|
| 51 |
+
"time_embedding_type": "positional",
|
| 52 |
+
"timestep_post_act": null,
|
| 53 |
+
"up_block_types": [
|
| 54 |
+
"SimpleCrossAttnUpBlock2D",
|
| 55 |
+
"SimpleCrossAttnUpBlock2D",
|
| 56 |
+
"SimpleCrossAttnUpBlock2D",
|
| 57 |
+
"ResnetUpsampleBlock2D"
|
| 58 |
+
],
|
| 59 |
+
"upcast_attention": false,
|
| 60 |
+
"use_linear_projection": false
|
| 61 |
+
}
|
kandinsky/unet/diffusion_pytorch_model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:098b846d2378b4b44a33e0bd47f89f2886b72a10200cbf9e96d5fae3c471543f
|
| 3 |
+
size 5012378704
|