Merge with main

This commit is contained in:
David Bielejeski 2022-09-28 15:01:04 -05:00
commit c01b806054
2 changed files with 77 additions and 46 deletions

View File

@ -20,7 +20,7 @@
### **INTRODUCTIONS!**
Hi! My name is Joe Penna.
You might have seen a few YouTube of mine under *MysteryGuitarMan*. I'm now a feature filmmaker. You might have seen [ARCTIC](https://www.youtube.com/watch?v=N5aD9ppoQIo&t=6s) or [STOWAWAY](https://www.youtube.com/watch?v=A_apvQkWsVY).
You might have seen a few YouTube videos of mine under *MysteryGuitarMan*. I'm now a feature film director. You might have seen [ARCTIC](https://www.youtube.com/watch?v=N5aD9ppoQIo&t=6s) or [STOWAWAY](https://www.youtube.com/watch?v=A_apvQkWsVY).
For my movies, I need to be able to train specific actors, props, locations, etc. So, I did a bunch of changes to @XavierXiao's repo in order to train people's faces.

View File

@ -9,9 +9,17 @@
"source": [
"# Dreambooth\n",
"### Notebook implementation by Joe Penna (@MysteryGuitarM on Twitter) - Improvements by David Bielejeski\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."
"### Instructions\n",
"- Sign up for RunPod here: https://runpod.io/?ref=n8yfwyum\n",
" - Note: That's my personal referral link. Please don't use it if we are mortal enemies.\n",
"\n",
"- Click *Deploy* on either `SECURE CLOUD` or `COMMUNITY CLOUD`\n",
"\n",
"- Follow the rest of the instructions in this video: https://www.youtube.com/watch?v=7m__xadX0z0#t=5m33.1s\n",
"\n",
"Latest information on:\n",
"https://github.com/JoePenna/Dreambooth-Stable-Diffusion"
]
},
{
@ -87,6 +95,9 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## Download the 1.4 sd model\n",
@ -96,23 +107,20 @@
" filename=\"sd-v1-4.ckpt\",\n",
" use_auth_token=True\n",
")"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## Move the sd-v1-4.ckpt to the root of this directory as \"model.ckpt\"\n",
"actual_locations_of_model_blob = !readlink -f {downloaded_model_path}\n",
"!mv {actual_locations_of_model_blob[-1]} model.ckpt"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "markdown",
@ -147,12 +155,12 @@
},
"outputs": [],
"source": [
"# GENERATE 400 images\n",
"# GENERATE 200 images\n",
"!python scripts/stable_txt2img.py \\\n",
" --seed 10 \\\n",
" --ddim_eta 0.0 \\\n",
" --n_samples 1 \\\n",
" --n_iter 400 \\\n",
" --n_iter 200 \\\n",
" --scale 10.0 \\\n",
" --ddim_steps 50 \\\n",
" --ckpt model.ckpt \\\n",
@ -233,31 +241,39 @@
"\n",
"* 2-3 full body\n",
"* 3-5 upper body \n",
"* 5-12 close-up on face"
"* 5-12 close-up on face\n",
"\n",
"The images should be:\n",
"\n",
"- as close as possible to the kind of images you're trying to make (most of the time, that means no selfies).\n",
"- "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#@markdown Add here the URLs to the images of the concept you are adding\n",
"#@markdown Add here the URLs to the images of the subject you are adding\n",
"urls = [\n",
" \"https://i.imgur.com/test1.png\",\n",
" \"https://i.imgur.com/test2.png\",\n",
" \"https://i.imgur.com/test3.png\",\n",
" \"https://i.imgur.com/test4.png\",\n",
" \"https://i.imgur.com/test5.png\",\n",
" ## You can add additional images here\n",
" # You can add additional images here -- about 20-30 images in different \n",
"]"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#@title Download and check the images you have just added\n",
@ -291,10 +307,7 @@
" os.mkdir(save_path)\n",
"[image.save(f\"{save_path}/{i}.png\", format=\"png\") for i, image in enumerate(images)]\n",
"image_grid(images, 1, len(images))"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "markdown",
@ -312,6 +325,9 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"## Edit the personalized.py file\n",
"Execute this cell `%load ldm/data/personalized.py`\n",
@ -324,28 +340,28 @@
"]\n",
"```\n",
"\n",
"Then paste this at the very top of the cell\n",
"I recommend using the name of a celebrity that:\n",
"1) kinda looks like you.\n",
"2) Stable Diffusion generates well (you can check by typing their name on DreamStudio)\n",
"\n",
"Then paste this at the very top of the cell:\n",
"```\n",
"%%writefile ldm/data/personalized.py\n",
"```\n",
"\n",
"Then run the cell again. This will save your changes.\n"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%load ldm/data/personalized.py"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
@ -359,8 +375,13 @@
"source": [
"# START THE TRAINING\n",
"project_name = \"project_name\"\n",
"\n",
"# oops, this next variable should be called \"max_steps\".\n",
"# It's how long you want your training to go.\n",
"# If you're seeing this message, I'm literally at my computer right now fixing this up:\n",
"batch_size = 1000\n",
"class_word = \"woman\" # << match this word to the class word from regularization images above\n",
"\n",
"class_word = \"person\" # << match this word to the class word from regularization images above\n",
"reg_data_root = \"/workspace/Dreambooth-Stable-Diffusion/outputs/txt2img-samples/samples/\" + dataset\n",
"\n",
"!rm -rf training_samples/.ipynb_checkpoints\n",
@ -388,30 +409,33 @@
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"directory_paths = !ls -d logs/*"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# This version should automatically prune around 10GB from the ckpt file\n",
"last_checkpoint_file = directory_paths[-1] + \"/checkpoints/last.ckpt\"\n",
"!python \"prune_ckpt.py\" --ckpt {last_checkpoint_file}"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"last_checkpoint_file_pruned = directory_paths[-1] + \"/checkpoints/last-pruned.ckpt\"\n",
@ -420,10 +444,7 @@
"file_name = date_string[-1] + \"_\" + project_name + \"_\" + str(len(training_samples)) + \"_training_images_\" + str(batch_size) + \"_batch_size_\" + class_word + \"_class_word.ckpt\"\n",
"!mkdir -p trained_models\n",
"!mv {last_checkpoint_file_pruned} trained_models/{file_name}"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
@ -434,6 +455,16 @@
"# Download your trained model file from `trained_models` and use in your favorite Stable Diffusion repo!"
]
},
{
"cell_type": "markdown",
"id": "9a90ac5c",
"metadata": {},
"source": [
"# Big Important Note!\n",
"\n",
"The way to call your token"
]
},
{
"cell_type": "markdown",
"id": "d28d0139",