EveryDream-trainer/dreambooth_runpod_joepenna....

300 lines
8.0 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"id": "aa2c1ada",
"metadata": {},
"source": [
"# Dreambooth\n",
"### Notebook implementation by Joe Penna (@MysteryGuitarM on Twitter)\n",
"https://github.com/JoePenna/Dreambooth-Stable-Diffusion\n",
"\n",
"### If on runpod / vast.ai / etc, spin up an A6000 or A100 pod using a Stable Diffusion template with Jupyter pre-installed."
]
},
{
"cell_type": "markdown",
"id": "c4d54876",
"metadata": {},
"source": [
"## Check GPU"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a3d20275-7c9b-447f-b160-dc556fcaee9a",
"metadata": {},
"outputs": [],
"source": [
"# mostly for Google Colab -- you should know what you're running on Runpod / Vast.ai / etc\n",
"from IPython.display import HTML\n",
"from subprocess import getoutput\n",
"s = getoutput('nvidia-smi')\n",
"print(s)\n",
"# or simply\n",
"#!nvidia-smi -L"
]
},
{
"cell_type": "markdown",
"id": "b8347baa",
"metadata": {},
"source": [
"## Installation"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ed803d51-d42f-4b07-9582-5cf1c9b52274",
"metadata": {},
"outputs": [],
"source": [
"# GIT THE REPO\n",
"!git clone https://github.com/JoePenna/Dreambooth-Stable-Diffusion\n",
"\n",
"# OR THE ORIGINAL\n",
"# !git clone https://github.com/XavierXiao/Dreambooth-Stable-Diffusion"
]
},
{
"cell_type": "markdown",
"id": "7b971cc0",
"metadata": {},
"source": [
"## Build Environment"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e1bc458-091b-42f4-a125-c3f0df20f29d",
"metadata": {},
"outputs": [],
"source": [
"#BUILD ENV\n",
"%cd /workspace/Dreambooth-Stable-Diffusion\n",
"!pip install omegaconf einops pytorch-lightning==1.6.5 test-tube transformers kornia -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers -e git+https://github.com/openai/CLIP.git@main#egg=clip\n",
"!pip install setuptools==59.5.0\n",
"!pip install pillow==9.0.1\n",
"!pip install torchmetrics==0.6.0\n",
"!pip install -e ."
]
},
{
"cell_type": "markdown",
"id": "17d1d11a",
"metadata": {},
"source": [
"## Generate regularization images (you should change the code below)"
]
},
{
"cell_type": "markdown",
"id": "ed07a5df",
"metadata": {},
"source": [
"This repo simultaneously trains both your token **and** retrains your class.\n",
"\n",
"From cursory testing, it does not seem like the number of reg images affects the model too much.\n",
"\n",
"However, it does affect your class greatly."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "67f9ff0c-b529-4c7c-8e26-8388d70a5d91",
"metadata": {},
"outputs": [],
"source": [
"#GENERATE 50 images\n",
"!python scripts/stable_txt2img.py --seed 10 --ddim_eta 0.0 --n_samples 1 --n_iter 50 --scale 10.0 --ddim_steps 50 --ckpt /workspace/stable-diffusion-webui/model.ckpt \\\n",
"--prompt \"person\"\n",
"\n",
"# IMPORTANT!! Change \"person\" above, and on the cell below:"
]
},
{
"cell_type": "markdown",
"id": "00717137",
"metadata": {},
"source": [
"## Upload your samples"
]
},
{
"cell_type": "markdown",
"id": "c90ed3ab",
"metadata": {},
"source": [
"Drag your training images into /workspace/Dreambooth-Stable-Diffusion/training_samples\n",
"\n",
"At the moment, it seems like 10-20 images of someone's face is enough."
]
},
{
"cell_type": "markdown",
"id": "ad4e50df",
"metadata": {},
"source": [
"## Prep Training Variables"
]
},
{
"cell_type": "markdown",
"id": "a26964af",
"metadata": {},
"source": [
"Navigate to:\n",
"/workspace/Dreambooth-Stable-Diffusion/ldm/data/personalized.py\n",
"\n",
"Change \"sks\" in line 11 to whatever you want your token to be.\n",
"\n",
"e.g. I changed mine to\n",
"```python\n",
"training_templates_smallest = [\n",
" 'joepenna {}',\n",
"]\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "37612c32",
"metadata": {},
"source": [
"The last line of this file trains for `3000` steps.\n",
"/workspace/Dreambooth-Stable-Diffusion/configs/stable-diffusion/v1-finetune_unfrozen.yaml\n",
"\n",
"If training a person or subject, keep an eye on your project's `/images/train/samples_scaled_gs-00xxxx` generations.\n",
"\n",
"If training a style, keep an eye on your project's `/images/train/samples_gs-00xxxx` generations."
]
},
{
"cell_type": "markdown",
"id": "12f19de7",
"metadata": {},
"source": [
"## Start Training (you should also change the code below)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6fa5dd66-2ca0-4819-907e-802e25583ae6",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# START THE TRAINING\n",
"!python \"main.py\" \\\n",
" --base configs/stable-diffusion/v1-finetune_unfrozen.yaml \\\n",
" -t \\\n",
" --actual_resume \"/workspace/stable-diffusion-webui/model.ckpt\" \\\n",
" --reg_data_root \"/workspace/Dreambooth-Stable-Diffusion/outputs/txt2img-samples/samples\" \\\n",
" -n \"project_name\" \\\n",
" --gpus 0, \\\n",
" --data_root \"/workspace/Dreambooth-Stable-Diffusion/training_imgs\" \\\n",
" --class_word \"person\" # << match this word to the class word from regularization images above"
]
},
{
"cell_type": "markdown",
"id": "982ad0c8",
"metadata": {},
"source": [
"## Experimental Pruning (12GB to 2GB)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "24c7167e",
"metadata": {},
"outputs": [],
"source": [
"# EXPERIMENTAL - this version should automatically prune around 10GB from the ckpt file\n",
"!python \"main_prune.py\" \\\n",
" --base configs/stable-diffusion/v1-finetune_unfrozen.yaml \\\n",
" -t \\\n",
" --actual_resume \"/workspace/stable-diffusion-webui/model.ckpt\" \\\n",
" --reg_data_root \"/workspace/Dreambooth-Stable-Diffusion/outputs/txt2img-samples/samples\" \\\n",
" -n \"project_name\" \\\n",
" --gpus 0, \\\n",
" --data_root \"/workspace/Dreambooth-Stable-Diffusion/training_imgs\" \\\n",
" --class_word \"person\" # << match this word to the class word from regularization images above"
]
},
{
"cell_type": "markdown",
"id": "3ab885a3",
"metadata": {},
"source": [
"## Generate Images With Trained Model"
]
},
{
"cell_type": "markdown",
"id": "b955a68e",
"metadata": {},
"source": [
"Be sure to change `PROJECT_PATH` below to match the folder in:\n",
"/workspace/Dreambooth-Stable-Diffusion/logs\n",
"\n",
"Also change `sks person` in the prompt to the token *and* class_word."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b6e40a7a",
"metadata": {},
"outputs": [],
"source": [
"!python scripts/stable_txt2img.py \\\n",
"--ddim_eta 0.0 --n_samples 1 --n_iter 4 \\\n",
"--scale 7.0 --ddim_steps 60 --ckpt \"/workspace/Dreambooth-Stable-Diffusion/logs/PROJECT_PATH_GOES_HERE/last.ckpt\" \\\n",
"--prompt \"sks person as a masterpiece portrait painting by John Singer Sargent in the style of Rembrandt\""
]
},
{
"cell_type": "markdown",
"id": "e77031d7",
"metadata": {},
"source": [
"Trained generated images at /workspace/Dreambooth-Stable-Diffusion/outputs/"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.10.6 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
},
"vscode": {
"interpreter": {
"hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}