silence the warning from transformers

add feature demonstrations to readme
This commit is contained in:
AUTOMATIC 2022-08-23 11:58:50 +03:00
parent 3395c29127
commit 60e95f1d8c
6 changed files with 67 additions and 15 deletions

View File

@ -4,8 +4,9 @@ A browser interface based on Gradio library for Stable Diffusion.
Original script with Gradio UI was written by a kind anonymopus user. This is a modification. Original script with Gradio UI was written by a kind anonymopus user. This is a modification.
![](screenshot.png) ![](screenshot.png)
## Installing and running
## Stable Diffusion ### Stable Diffusion
This script assumes that you already have main Stable Diffusion sutff installed, assumed to be in directory `/sd`. This script assumes that you already have main Stable Diffusion sutff installed, assumed to be in directory `/sd`.
If you don't have it installed, follow the guide: If you don't have it installed, follow the guide:
@ -21,7 +22,7 @@ Particularly, following files must exist:
- `/sd/ldm/util.py` - `/sd/ldm/util.py`
- `/sd/k_diffusion/__init__.py` - `/sd/k_diffusion/__init__.py`
## GFPGAN ### GFPGAN
If you want to use GFPGAN to improve generated faces, you need to install it separately. If you want to use GFPGAN to improve generated faces, you need to install it separately.
Follow instructions from https://github.com/TencentARC/GFPGAN, but when cloning it, do so into Stable Diffusion main directory, `/sd`. Follow instructions from https://github.com/TencentARC/GFPGAN, but when cloning it, do so into Stable Diffusion main directory, `/sd`.
@ -37,7 +38,7 @@ The following files must exist:
If the GFPGAN directory does not exist, you will not get the option to use GFPGAN in the UI. If it does exist, you will either be able If the GFPGAN directory does not exist, you will not get the option to use GFPGAN in the UI. If it does exist, you will either be able
to use it, or there will be a message in console with an error related to GFPGAN. to use it, or there will be a message in console with an error related to GFPGAN.
## Web UI ### Web UI
Run the script as: Run the script as:
@ -56,3 +57,44 @@ Running on local URL: http://127.0.0.1:7860/
``` ```
Open the URL in browser, and you are good to go. Open the URL in browser, and you are good to go.
## Features
The script creates a web UI for Stable Diffusion's txt2img and img2img scripts. Following are features added
that are not in original script.
### GFPGAN
Lets you improve faces in pictures using the GFPGAN model. There is a checkbox in every tab to use GFPGAN at 100%, and
also a separate tab that just allows you to use GFPGAN on any picture, with a slider that controls how strongthe effect is.
![](images/GFPGAN.png)
### Sampling method selection
Pick out of three sampling methods for txt2img: DDIM, PLMS, k-diffusion:
![](images/sampling.png)
### Prompt matrix
Separate multiple prompts using the `|` character, and the system will produce an image for every combination of them.
For example, if you use `a house in a field of grass|at dawn|illustration` prompt, there are four combinations possible (first part of prompt is always kept):
- `a house in a field of grass`
- `a house in a field of grass, at dawn`
- `a house in a field of grass, illustration`
- `a house in a field of grass, at dawn, illustration`
Four images will be produced, in this order, all with same seed and each with corresponding prompt:
![](images/prompt-matrix.png)
### Flagging
Click the Flag button under the output section, and generated images will be saved to `log/images` directory, and generation parameters
will be appended to a csv file `log/log.csv` in the `/sd` directory.
### Copy-paste generation parameters
A text output provides generation parameters in an easy to copy-paste form for easy sharing.
![](images/kopipe.png)
### Correct seeds for batches
If you use a seed of 1000 to generate two batches of two images each, four generated images will have seeds: `1000, 1001, 1002, 1003`.
Previous versions of the UI would produce `1000, x, 1001, x`, where x is an iamge that can't be generated by any seed.

BIN
images/GFPGAN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 KiB

BIN
images/kopipe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

BIN
images/prompt-matrix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
images/sampling.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

View File

@ -13,13 +13,20 @@ from contextlib import contextmanager, nullcontext
import mimetypes import mimetypes
import random import random
import math import math
import csv
import k_diffusion as K import k_diffusion as K
from ldm.util import instantiate_from_config from ldm.util import instantiate_from_config
from ldm.models.diffusion.ddim import DDIMSampler from ldm.models.diffusion.ddim import DDIMSampler
from ldm.models.diffusion.plms import PLMSSampler from ldm.models.diffusion.plms import PLMSSampler
try:
# this silences the annoying "Some weights of the model checkpoint were not used when initializing..." message at start.
from transformers import logging
logging.set_verbosity_error()
except:
pass
# this is a fix for Windows users. Without it, javascript files will be served with text/html content-type and the bowser will not show any UI # this is a fix for Windows users. Without it, javascript files will be served with text/html content-type and the bowser will not show any UI
mimetypes.init() mimetypes.init()
mimetypes.add_type('application/javascript', '.js') mimetypes.add_type('application/javascript', '.js')
@ -28,7 +35,7 @@ mimetypes.add_type('application/javascript', '.js')
opt_C = 4 opt_C = 4
opt_f = 8 opt_f = 8
invalid_filename_chars = '<>:"/\|?*' invalid_filename_chars = '<>:"/\|?*\n'
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--outdir", type=str, nargs="?", help="dir to write results to", default=None) parser.add_argument("--outdir", type=str, nargs="?", help="dir to write results to", default=None)
@ -121,7 +128,6 @@ if os.path.exists(GFPGAN_dir):
print("Error loading GFPGAN:", file=sys.stderr) print("Error loading GFPGAN:", file=sys.stderr)
print(traceback.format_exc(), file=sys.stderr) print(traceback.format_exc(), file=sys.stderr)
config = OmegaConf.load("configs/stable-diffusion/v1-inference.yaml") config = OmegaConf.load("configs/stable-diffusion/v1-inference.yaml")
model = load_model_from_config(config, "models/ldm/stable-diffusion-v1/model.ckpt") model = load_model_from_config(config, "models/ldm/stable-diffusion-v1/model.ckpt")
@ -296,7 +302,9 @@ class Flagging(gr.FlaggingCallback):
def setup(self, components, flagging_dir: str): def setup(self, components, flagging_dir: str):
pass pass
def flag(self, flag_data, flag_option=None, flag_index=None, username=None) -> int: def flag(self, flag_data, flag_option=None, flag_index=None, username=None):
import csv
os.makedirs("log/images", exist_ok=True) os.makedirs("log/images", exist_ok=True)
# those must match the "dream" function # those must match the "dream" function
@ -341,7 +349,7 @@ dream_interface = gr.Interface(
gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="DDIM ETA", value=0.0, visible=False), gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="DDIM ETA", value=0.0, visible=False),
gr.Slider(minimum=1, maximum=16, step=1, label='Batch count (how many batches of images to generate)', value=1), gr.Slider(minimum=1, maximum=16, step=1, label='Batch count (how many batches of images to generate)', value=1),
gr.Slider(minimum=1, maximum=4, step=1, label='Batch size (how many images are in a batch; memory-hungry)', value=1), gr.Slider(minimum=1, maximum=4, step=1, label='Batch size (how many images are in a batch; memory-hungry)', value=1),
gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='Classifier Free Guidance Scale (how strongly should the image follow the prompt)', value=7.0), gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='Classifier Free Guidance Scale (how strongly the image should follow the prompt)', value=7.0),
gr.Number(label='Seed', value=-1), gr.Number(label='Seed', value=-1),
gr.Slider(minimum=64, maximum=2048, step=64, label="Height", value=512), gr.Slider(minimum=64, maximum=2048, step=64, label="Height", value=512),
gr.Slider(minimum=64, maximum=2048, step=64, label="Width", value=512), gr.Slider(minimum=64, maximum=2048, step=64, label="Width", value=512),
@ -456,13 +464,13 @@ img2img_interface = gr.Interface(
gr.Slider(minimum=1, maximum=150, step=1, label="Sampling Steps", value=50), gr.Slider(minimum=1, maximum=150, step=1, label="Sampling Steps", value=50),
gr.Checkbox(label='Fix faces using GFPGAN', value=False, visible=GFPGAN is not None), gr.Checkbox(label='Fix faces using GFPGAN', value=False, visible=GFPGAN is not None),
gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="DDIM ETA", value=0.0, visible=False), gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label="DDIM ETA", value=0.0, visible=False),
gr.Slider(minimum=1, maximum=16, step=1, label='Sampling iterations', value=1), gr.Slider(minimum=1, maximum=16, step=1, label='Batch count (how many batches of images to generate)', value=1),
gr.Slider(minimum=1, maximum=4, step=1, label='Samples per iteration', value=1), gr.Slider(minimum=1, maximum=4, step=1, label='Batch size (how many images are in a batch; memory-hungry)', value=1),
gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='Classifier Free Guidance Scale', value=7.0), gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='Classifier Free Guidance Scale (how strongly the image should follow the prompt)', value=7.0),
gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Denoising Strength', value=0.75), gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Denoising Strength', value=0.75),
gr.Number(label='Seed', value=-1), gr.Number(label='Seed', value=-1),
gr.Slider(minimum=64, maximum=2048, step=64, label="Resize Height", value=512), gr.Slider(minimum=64, maximum=2048, step=64, label="Height", value=512),
gr.Slider(minimum=64, maximum=2048, step=64, label="Resize Width", value=512), gr.Slider(minimum=64, maximum=2048, step=64, label="Width", value=512),
], ],
outputs=[ outputs=[
gr.Gallery(), gr.Gallery(),
@ -470,11 +478,12 @@ img2img_interface = gr.Interface(
], ],
title="Stable Diffusion Image-to-Image", title="Stable Diffusion Image-to-Image",
description="Generate images from images with Stable Diffusion", description="Generate images from images with Stable Diffusion",
allow_flagging="never",
) )
interfaces = [ interfaces = [
(dream_interface, "Dream"), (dream_interface, "txt2img"),
(img2img_interface, "Image Translation") (img2img_interface, "img2img")
] ]
def run_GFPGAN(image, strength): def run_GFPGAN(image, strength):
@ -501,6 +510,7 @@ if GFPGAN is not None:
], ],
title="GFPGAN", title="GFPGAN",
description="Fix faces on images", description="Fix faces on images",
allow_flagging="never",
), "GFPGAN")) ), "GFPGAN"))
demo = gr.TabbedInterface(interface_list=[x[0] for x in interfaces], tab_names=[x[1] for x in interfaces]) demo = gr.TabbedInterface(interface_list=[x[0] for x in interfaces], tab_names=[x[1] for x in interfaces])