//Stable_Diffusion.ipynb//

#Le texte commenté (#) en vert ne correspondent pas à du code exécutable. Il s’agit d’indications que nous avons rajouté afin de vous aider à comprendre notre modèle. 

#On vérifie le type de GPU et de VRAM disponibles.
#GPU = puce informatique qui effectue des calculs mathématiques rapides, principalement pour le rendu d'images.
#VRAM = mémoire vidéo.
!nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader


#On importe le modèle pré-entrainé.
!wget -q https://github.com/ShivamShrirao/diffusers/raw/main/examples/dreambooth/train_dreambooth.py
!wget -q https://github.com/ShivamShrirao/diffusers/raw/main/scripts/convert_diffusers_to_original_stable_diffusion.py
%pip install -qq git+https://github.com/ShivamShrirao/diffusers
%pip install -q -U --pre triton
%pip install -q accelerate transformers ftfy bitsandbytes==0.35.0 gradio natsort safetensors


#On se connecte à HuggingFace, bibliothèque open source contenant des modèles pré-formés.


!mkdir -p ~/.huggingface
HUGGINGFACE_TOKEN = "" #@param {type:"string"}
!echo -n "{HUGGINGFACE_TOKEN}" > ~/.huggingface/token


#On installe les xformers à partir de wheels précompilés.
# xformers = bibliothèque de modèles pré-entraînés.
# wheels = composants de l'écosystème Python qui aident à faire fonctionner les installations de packs.


%pip install --no-deps -q https://github.com/brian6091/xformers-wheels/releases/download/0.0.15.dev0%2B4c06c79/xformers-0.0.15.dev0+4c06c79.d20221205-cp38-cp38-linux_x86_64.whl




#On sauvegarde les paramètres du modèle dans notre Google drive.


save_to_gdrive = False 
if save_to_gdrive:
    from google.colab import drive
    drive.mount('/content/drive')


MODEL_NAME = "runwayml/stable-diffusion-v1-5" 


OUTPUT_DIR = "stable_diffusion_weights/zwx" 
if save_to_gdrive:
    OUTPUT_DIR = "/content/drive/MyDrive/" + OUTPUT_DIR
else:
    OUTPUT_DIR = "/content/" + OUTPUT_DIR


print(f"[*] Weights will be saved at {OUTPUT_DIR}")


!mkdir -p $OUTPUT_DIR




#On crée une liste à partir de notre corpus d’images.


concepts_list = [
    {
        "instance_prompt":      "photo of sacristy room",
        "class_prompt":         "photo of a room",
        "instance_data_dir":    "/content/data/sacristy",
        "class_data_dir":       "/content/data/room"
    },
     {
         "instance_prompt":      "photo of screens furniture",
         "class_prompt":         "photo of a furniture",
         "instance_data_dir":    "/content/data/screens",
         "class_data_dir":       "/content/data/furniture"
    }
]


import json
import os
for c in concepts_list:
    os.makedirs(c["instance_data_dir"], exist_ok=True)


with open("concepts_list.json", "w") as f:
    json.dump(concepts_list, f, indent=4)




#On télécharge notre corpus d’images.


import os
from google.colab import files
import shutil


for c in concepts_list:
    print(f"Uploading instance images for `{c['instance_prompt']}`")
    uploaded = files.upload()
    for filename in uploaded.keys():
        dst_path = os.path.join(c['instance_data_dir'], filename)
        shutil.move(filename, dst_path)












#On entraine notre corpus d’images.


!accelerate launch train_dreambooth.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --pretrained_vae_name_or_path="stabilityai/sd-vae-ft-mse" \
  --output_dir=$OUTPUT_DIR \
  --revision="fp16" \
  --with_prior_preservation --prior_loss_weight=1.0 \
  --seed=1337 \
  --resolution=512 \
  --train_batch_size=1 \
  --train_text_encoder \
  --mixed_precision="fp16" \
  --use_8bit_adam \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-6 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --num_class_images=50 \
  --sample_batch_size=4 \
  --max_train_steps=800 \
  --save_interval=10000 \
  --concepts_list="concepts_list.json"


#On renseigne le chemin d’accès vers les paramètres du modèle pré-entrainé.


WEIGHTS_DIR = "" #@param {type:"string"}
if WEIGHTS_DIR == "":
    from natsort import natsorted
    from glob import glob
    import os
    WEIGHTS_DIR = natsorted(glob(OUTPUT_DIR + os.sep + "*"))[-1]
print(f"[*] WEIGHTS_DIR={WEIGHTS_DIR}")




 
#On renseigne le chemin d’accès vers les paramètres du modèle pré-entrainé.


WEIGHTS_DIR = "" #@param {type:"string"}
if WEIGHTS_DIR == "":
    from natsort import natsorted
    from glob import glob
    import os
    WEIGHTS_DIR = natsorted(glob(OUTPUT_DIR + os.sep + "*"))[-1]
print(f"[*] WEIGHTS_DIR={WEIGHTS_DIR}")




#On demande à utiliser le modèle pré-entrainé.


import torch
from torch import autocast
from diffusers import StableDiffusionPipeline, DDIMScheduler
from IPython.display import display


model_path = WEIGHTS_DIR             # If you want to use previously trained model saved in gdrive, replace this with the full path of model in gdrive


pipe = StableDiffusionPipeline.from_pretrained(model_path, safety_checker=None, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
pipe.enable_xformers_memory_efficient_attention()
g_cuda = None




#On vient générer nos images à partir d’une entrée textuelle, le prompt.


prompt = "photo of a sacristy formed by three red satin screens" 
negative_prompt = "" 
num_samples = 4 
guidance_scale = 7.5 
num_inference_steps = 24 
height = 512 
width = 512 


with autocast("cuda"), torch.inference_mode():
    images = pipe(
        prompt,
        height=height,
        width=width,
        negative_prompt=negative_prompt,
        num_images_per_prompt=num_samples,
        num_inference_steps=num_inference_steps,
        guidance_scale=guidance_scale,
        generator=g_cuda
    ).images


for img in images:
    display(img)






















{}
region:us
TAGS
#region-us 

//Stable_Diffusion.ipynb//

#Le texte commenté (#) en vert ne correspondent pas à du code exécutable. Il s’agit d’indications que nous avons rajouté afin de vous aider à comprendre notre modèle. 

#On vérifie le type de GPU et de VRAM disponibles.
#GPU = puce informatique qui effectue des calculs mathématiques rapides, principalement pour le rendu d'images.
#VRAM = mémoire vidéo.
!nvidia-smi --query-gpu=name,URL,URL --format=csv,noheader


#On importe le modèle pré-entrainé.
!wget -q URL
!wget -q URL
%pip install -qq git+URL
%pip install -q -U --pre triton
%pip install -q accelerate transformers ftfy bitsandbytes==0.35.0 gradio natsort safetensors


#On se connecte à HuggingFace, bibliothèque open source contenant des modèles pré-formés.


!mkdir -p ~/.huggingface
HUGGINGFACE_TOKEN = "" #@param {type:"string"}
!echo -n "{HUGGINGFACE_TOKEN}" > ~/.huggingface/token


#On installe les xformers à partir de wheels précompilés.
# xformers = bibliothèque de modèles pré-entraînés.
# wheels = composants de l'écosystème Python qui aident à faire fonctionner les installations de packs.


%pip install --no-deps -q URL




#On sauvegarde les paramètres du modèle dans notre Google drive.


save_to_gdrive = False 
if save_to_gdrive:
    from URL import drive
    URL('/content/drive')


MODEL_NAME = "runwayml/stable-diffusion-v1-5" 


OUTPUT_DIR = "stable_diffusion_weights/zwx" 
if save_to_gdrive:
    OUTPUT_DIR = "/content/drive/MyDrive/" + OUTPUT_DIR
else:
    OUTPUT_DIR = "/content/" + OUTPUT_DIR


print(f"[*] Weights will be saved at {OUTPUT_DIR}")


!mkdir -p $OUTPUT_DIR




#On crée une liste à partir de notre corpus d’images.


concepts_list = [
    {
        "instance_prompt":      "photo of sacristy room",
        "class_prompt":         "photo of a room",
        "instance_data_dir":    "/content/data/sacristy",
        "class_data_dir":       "/content/data/room"
    },
     {
         "instance_prompt":      "photo of screens furniture",
         "class_prompt":         "photo of a furniture",
         "instance_data_dir":    "/content/data/screens",
         "class_data_dir":       "/content/data/furniture"
    }
]


import json
import os
for c in concepts_list:
    os.makedirs(c["instance_data_dir"], exist_ok=True)


with open("concepts_list.json", "w") as f:
    URL(concepts_list, f, indent=4)




#On télécharge notre corpus d’images.


import os
from URL import files
import shutil


for c in concepts_list:
    print(f"Uploading instance images for '{c['instance_prompt']}'")
    uploaded = URL()
    for filename in URL():
        dst_path = URL(c['instance_data_dir'], filename)
        URL(filename, dst_path)












#On entraine notre corpus d’images.


!accelerate launch train_dreambooth.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --pretrained_vae_name_or_path="stabilityai/sd-vae-ft-mse" \
  --output_dir=$OUTPUT_DIR \
  --revision="fp16" \
  --with_prior_preservation --prior_loss_weight=1.0 \
  --seed=1337 \
  --resolution=512 \
  --train_batch_size=1 \
  --train_text_encoder \
  --mixed_precision="fp16" \
  --use_8bit_adam \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-6 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --num_class_images=50 \
  --sample_batch_size=4 \
  --max_train_steps=800 \
  --save_interval=10000 \
  --concepts_list="concepts_list.json"


#On renseigne le chemin d’accès vers les paramètres du modèle pré-entrainé.


WEIGHTS_DIR = "" #@param {type:"string"}
if WEIGHTS_DIR == "":
    from natsort import natsorted
    from glob import glob
    import os
    WEIGHTS_DIR = natsorted(glob(OUTPUT_DIR + URL + "*"))[-1]
print(f"[*] WEIGHTS_DIR={WEIGHTS_DIR}")




 
#On renseigne le chemin d’accès vers les paramètres du modèle pré-entrainé.


WEIGHTS_DIR = "" #@param {type:"string"}
if WEIGHTS_DIR == "":
    from natsort import natsorted
    from glob import glob
    import os
    WEIGHTS_DIR = natsorted(glob(OUTPUT_DIR + URL + "*"))[-1]
print(f"[*] WEIGHTS_DIR={WEIGHTS_DIR}")




#On demande à utiliser le modèle pré-entrainé.


import torch
from torch import autocast
from diffusers import StableDiffusionPipeline, DDIMScheduler
from IPython.display import display


model_path = WEIGHTS_DIR             # If you want to use previously trained model saved in gdrive, replace this with the full path of model in gdrive


pipe = StableDiffusionPipeline.from_pretrained(model_path, safety_checker=None, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(URL)
pipe.enable_xformers_memory_efficient_attention()
g_cuda = None




#On vient générer nos images à partir d’une entrée textuelle, le prompt.


prompt = "photo of a sacristy formed by three red satin screens" 
negative_prompt = "" 
num_samples = 4 
guidance_scale = 7.5 
num_inference_steps = 24 
height = 512 
width = 512 


with autocast("cuda"), torch.inference_mode():
    images = pipe(
        prompt,
        height=height,
        width=width,
        negative_prompt=negative_prompt,
        num_images_per_prompt=num_samples,
        num_inference_steps=num_inference_steps,
        guidance_scale=guidance_scale,
        generator=g_cuda
    ).images


for img in images:
    display(img)






















# xformers = bibliothèque de modèles pré-entraînés. # wheels = composants de l'écosystème Python qui aident à faire fonctionner les installations de packs.


%pip install --no-deps -q URL # If you want to use previously trained model saved in gdrive, replace this with the full path of model in gdrive


pipe = StableDiffusionPipeline.from_pretrained(model_path, safety_checker=None, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(URL)
pipe.enable_xformers_memory_efficient_attention()
g_cuda = None
TAGS
#region-us 
 # xformers = bibliothèque de modèles pré-entraînés. # wheels = composants de l'écosystème Python qui aident à faire fonctionner les installations de packs.


%pip install --no-deps -q URL # If you want to use previously trained model saved in gdrive, replace this with the full path of model in gdrive


pipe = StableDiffusionPipeline.from_pretrained(model_path, safety_checker=None, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(URL)
pipe.enable_xformers_memory_efficient_attention()
g_cuda = None
TAGS
#region-us 
# xformers = bibliothèque de modèles pré-entraînés.# wheels = composants de l'écosystème Python qui aident à faire fonctionner les installations de packs.


%pip install --no-deps -q URL# If you want to use previously trained model saved in gdrive, replace this with the full path of model in gdrive


pipe = StableDiffusionPipeline.from_pretrained(model_path, safety_checker=None, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(URL)
pipe.enable_xformers_memory_efficient_attention()
g_cuda = None