mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
* Fixes and updates for PR.
This commit is contained in:
parent
54c5665635
commit
2e438542e9
@ -95,12 +95,19 @@ do not need to add up to 1.
|
|||||||
|
|
||||||
Two new options are the thresholding (`--threshold`) and the perlin noise initialization (`--perlin`) options. Thresholding limits the range of the latent values during optimization, which helps combat oversaturation with higher CFG scale values. Perlin noise initialization starts with a percentage (a value ranging from 0 to 1) of perlin noise mixed into the initial noise. Both features allow for more variations and options in the course of generating images.
|
Two new options are the thresholding (`--threshold`) and the perlin noise initialization (`--perlin`) options. Thresholding limits the range of the latent values during optimization, which helps combat oversaturation with higher CFG scale values. Perlin noise initialization starts with a percentage (a value ranging from 0 to 1) of perlin noise mixed into the initial noise. Both features allow for more variations and options in the course of generating images.
|
||||||
|
|
||||||
For better intuition into what these options do in practice, [here is a graphic demonstrating them both](static/truncation_comparison.jpg) in use. Perlin noise at initialization is varied going across by 0.0, 0.1, 0.2, 0.4, 0.5, 0.6,, 0.8, 0.9, 1.0; and the threshold is varied going down from 0, 1, 2, 3, 4, 5, 10, 20, 100. The other options are fixed, so the initial prompt is as follows:
|
For better intuition into what these options do in practice, [here is a graphic demonstrating them both](static/truncation_comparison.jpg) in use. In generating this graphic, perlin noise at initialization was programmatically varied going across on the diagram by values 0.0, 0.1, 0.2, 0.4, 0.5, 0.6, 0.8, 0.9, 1.0; and the threshold was varied going down from
|
||||||
|
0, 1, 2, 3, 4, 5, 10, 20, 100. The other options are fixed, so the initial prompt is as follows (no thresholding or perlin noise):
|
||||||
|
|
||||||
```
|
```
|
||||||
a portrait of a beautiful young lady -S 1950357039 -s 100 -C 20 -A k_euler_a --threshold 0 --perlin 0
|
a portrait of a beautiful young lady -S 1950357039 -s 100 -C 20 -A k_euler_a --threshold 0 --perlin 0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here's an example of another prompt used when setting the threshold to 5 and perlin noise to 0.2:
|
||||||
|
|
||||||
|
```
|
||||||
|
a portrait of a beautiful young lady -S 1950357039 -s 100 -C 20 -A k_euler_a --threshold 5 --perlin 0.2
|
||||||
|
```
|
||||||
|
|
||||||
Note: currently the thresholding feature is only implemented for the k-diffusion style samplers, and empirically appears to work best with `k_euler_a` and `k_dpm_2_a`. Using 0 disables thresholding. Using 0 for perlin noise disables using perlin noise for initialization. Finally, using 1 for perlin noise uses only perlin noise for initialization.
|
Note: currently the thresholding feature is only implemented for the k-diffusion style samplers, and empirically appears to work best with `k_euler_a` and `k_dpm_2_a`. Using 0 disables thresholding. Using 0 for perlin noise disables using perlin noise for initialization. Finally, using 1 for perlin noise uses only perlin noise for initialization.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -61,7 +61,6 @@ class Txt2Img(Generator):
|
|||||||
height // self.downsampling_factor,
|
height // self.downsampling_factor,
|
||||||
width // self.downsampling_factor],
|
width // self.downsampling_factor],
|
||||||
device=device)
|
device=device)
|
||||||
print(self.perlin)
|
|
||||||
if self.perlin > 0.0:
|
if self.perlin > 0.0:
|
||||||
x = (1-self.perlin)*x + self.perlin*self.get_perlin_noise(width // self.downsampling_factor, height // self.downsampling_factor)
|
x = (1-self.perlin)*x + self.perlin*self.get_perlin_noise(width // self.downsampling_factor, height // self.downsampling_factor)
|
||||||
return x
|
return x
|
||||||
|
@ -233,7 +233,7 @@ class Generate:
|
|||||||
image_callback // a function or method that will be called each time an image is generated
|
image_callback // a function or method that will be called each time an image is generated
|
||||||
with_variations // a weighted list [(seed_1, weight_1), (seed_2, weight_2), ...] of variations which should be applied before doing any generation
|
with_variations // a weighted list [(seed_1, weight_1), (seed_2, weight_2), ...] of variations which should be applied before doing any generation
|
||||||
variation_amount // optional 0-1 value to slerp from -S noise to random noise (allows variations on an image)
|
variation_amount // optional 0-1 value to slerp from -S noise to random noise (allows variations on an image)
|
||||||
threshold // optional value to add thresholding to latent values for k-diffusion samplers (0 disables)
|
threshold // optional value >=0 to add thresholding to latent values for k-diffusion samplers (0 disables)
|
||||||
perlin // optional 0-1 value to add a percentage of perlin noise to the initial noise
|
perlin // optional 0-1 value to add a percentage of perlin noise to the initial noise
|
||||||
embiggen // scale factor relative to the size of the --init_img (-I), followed by ESRGAN upscaling strength (0-1.0), followed by minimum amount of overlap between tiles as a decimal ratio (0 - 1.0) or number of pixels
|
embiggen // scale factor relative to the size of the --init_img (-I), followed by ESRGAN upscaling strength (0-1.0), followed by minimum amount of overlap between tiles as a decimal ratio (0 - 1.0) or number of pixels
|
||||||
embiggen_tiles // list of tiles by number in order to process and replace onto the image e.g. `0 2 4`
|
embiggen_tiles // list of tiles by number in order to process and replace onto the image e.g. `0 2 4`
|
||||||
@ -275,12 +275,16 @@ class Generate:
|
|||||||
m.padding_mode = 'circular' if seamless else m._orig_padding_mode
|
m.padding_mode = 'circular' if seamless else m._orig_padding_mode
|
||||||
|
|
||||||
assert cfg_scale > 1.0, 'CFG_Scale (-C) must be >1.0'
|
assert cfg_scale > 1.0, 'CFG_Scale (-C) must be >1.0'
|
||||||
|
assert threshold >= 0.0, '--threshold must be >=0.0'
|
||||||
assert (
|
assert (
|
||||||
0.0 < strength < 1.0
|
0.0 < strength < 1.0
|
||||||
), 'img2img and inpaint strength can only work with 0.0 < strength < 1.0'
|
), 'img2img and inpaint strength can only work with 0.0 < strength < 1.0'
|
||||||
assert (
|
assert (
|
||||||
0.0 <= variation_amount <= 1.0
|
0.0 <= variation_amount <= 1.0
|
||||||
), '-v --variation_amount must be in [0.0, 1.0]'
|
), '-v --variation_amount must be in [0.0, 1.0]'
|
||||||
|
assert (
|
||||||
|
0.0 <= perlin <= 1.0
|
||||||
|
), '-v --perlin must be in [0.0, 1.0]'
|
||||||
assert (
|
assert (
|
||||||
(embiggen == None and embiggen_tiles == None) or ((embiggen != None or embiggen_tiles != None) and init_img != None)
|
(embiggen == None and embiggen_tiles == None) or ((embiggen != None or embiggen_tiles != None) and init_img != None)
|
||||||
), 'Embiggen requires an init/input image to be specified'
|
), 'Embiggen requires an init/input image to be specified'
|
||||||
|
@ -72,11 +72,13 @@
|
|||||||
<button type="button" id="reset-seed">↺</button>
|
<button type="button" id="reset-seed">↺</button>
|
||||||
<input type="checkbox" name="progress_images" id="progress_images">
|
<input type="checkbox" name="progress_images" id="progress_images">
|
||||||
<label for="progress_images">Display in-progress images (slower)</label>
|
<label for="progress_images">Display in-progress images (slower)</label>
|
||||||
<label title="Threshold" for="threshold">Threshold:</label>
|
<div>
|
||||||
<input value="0" type="number" id="threshold" name="threshold" step="any">
|
<label title="If > 0, adds thresholding to restrict values for k-diffusion samplers (0 disables)" for="threshold">Threshold:</label>
|
||||||
<label title="Perlin" for="perlin">Perlin:</label>
|
<input value="0" type="number" id="threshold" name="threshold" step="0.1" min="0">
|
||||||
<input value="0" type="number" id="perlin" name="perlin" step="any">
|
<label title="Perlin: optional 0-1 value adds a percentage of perlin noise to the initial noise" for="perlin">Perlin:</label>
|
||||||
|
<input value="0" type="number" id="perlin" name="perlin" step="0.01" min="0" max="1">
|
||||||
<button type="button" id="reset-all">Reset to Defaults</button>
|
<button type="button" id="reset-all">Reset to Defaults</button>
|
||||||
|
</div>
|
||||||
<div id="variations">
|
<div id="variations">
|
||||||
<label title="If > 0, generates variations on the initial seed instead of random seeds per iteration. Must be between 0 and 1. Higher values will be more different." for="variation_amount">Variation amount (0 to disable):</label>
|
<label title="If > 0, generates variations on the initial seed instead of random seeds per iteration. Must be between 0 and 1. Higher values will be more different." for="variation_amount">Variation amount (0 to disable):</label>
|
||||||
<input value="0" type="number" id="variation_amount" name="variation_amount" step="0.01" min="0" max="1">
|
<input value="0" type="number" id="variation_amount" name="variation_amount" step="0.01" min="0" max="1">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user