Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
stable-diffusion-webui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
stable-diffusion-webui
Commits
de1dc0d2
Commit
de1dc0d2
authored
Oct 29, 2022
by
Martin Cairns
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add adjust_steps_if_invalid to find next valid step for ddim uniform sampler
parent
35c45df2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
13 deletions
+15
-13
sd_samplers.py
modules/sd_samplers.py
+15
-13
No files found.
modules/sd_samplers.py
View file @
de1dc0d2
from
collections
import
namedtuple
import
numpy
as
np
from
math
import
floor
import
torch
import
tqdm
from
PIL
import
Image
...
...
@@ -205,17 +206,22 @@ class VanillaStableDiffusionSampler:
self
.
mask
=
p
.
mask
if
hasattr
(
p
,
'mask'
)
else
None
self
.
nmask
=
p
.
nmask
if
hasattr
(
p
,
'nmask'
)
else
None
def
adjust_steps_if_invalid
(
self
,
p
,
num_steps
):
if
self
.
config
.
name
==
'DDIM'
and
p
.
ddim_discretize
==
'uniform'
:
valid_step
=
999
/
(
1000
//
num_steps
)
if
valid_step
==
floor
(
valid_step
):
return
int
(
valid_step
)
+
1
return
num_steps
def
sample_img2img
(
self
,
p
,
x
,
noise
,
conditioning
,
unconditional_conditioning
,
steps
=
None
,
image_conditioning
=
None
):
steps
,
t_enc
=
setup_img2img_steps
(
p
,
steps
)
steps
=
self
.
adjust_steps_if_invalid
(
p
,
steps
)
self
.
initialize
(
p
)
# existing code fails with certain step counts, like 9
try
:
self
.
sampler
.
make_schedule
(
ddim_num_steps
=
steps
,
ddim_eta
=
self
.
eta
,
ddim_discretize
=
p
.
ddim_discretize
,
verbose
=
False
)
except
Exception
:
self
.
sampler
.
make_schedule
(
ddim_num_steps
=
steps
+
1
,
ddim_eta
=
self
.
eta
,
ddim_discretize
=
p
.
ddim_discretize
,
verbose
=
False
)
self
.
sampler
.
make_schedule
(
ddim_num_steps
=
steps
,
ddim_eta
=
self
.
eta
,
ddim_discretize
=
p
.
ddim_discretize
,
verbose
=
False
)
x1
=
self
.
sampler
.
stochastic_encode
(
x
,
torch
.
tensor
([
t_enc
]
*
int
(
x
.
shape
[
0
]))
.
to
(
shared
.
device
),
noise
=
noise
)
self
.
init_latent
=
x
...
...
@@ -239,18 +245,14 @@ class VanillaStableDiffusionSampler:
self
.
last_latent
=
x
self
.
step
=
0
steps
=
s
teps
or
p
.
steps
steps
=
s
elf
.
adjust_steps_if_invalid
(
p
,
steps
or
p
.
steps
)
# Wrap the conditioning models with additional image conditioning for inpainting model
if
image_conditioning
is
not
None
:
conditioning
=
{
"c_concat"
:
[
image_conditioning
],
"c_crossattn"
:
[
conditioning
]}
unconditional_conditioning
=
{
"c_concat"
:
[
image_conditioning
],
"c_crossattn"
:
[
unconditional_conditioning
]}
# existing code fails with certain step counts, like 9
try
:
samples_ddim
=
self
.
launch_sampling
(
steps
,
lambda
:
self
.
sampler
.
sample
(
S
=
steps
,
conditioning
=
conditioning
,
batch_size
=
int
(
x
.
shape
[
0
]),
shape
=
x
[
0
]
.
shape
,
verbose
=
False
,
unconditional_guidance_scale
=
p
.
cfg_scale
,
unconditional_conditioning
=
unconditional_conditioning
,
x_T
=
x
,
eta
=
self
.
eta
)[
0
])
except
Exception
:
samples_ddim
=
self
.
launch_sampling
(
steps
,
lambda
:
self
.
sampler
.
sample
(
S
=
steps
+
1
,
conditioning
=
conditioning
,
batch_size
=
int
(
x
.
shape
[
0
]),
shape
=
x
[
0
]
.
shape
,
verbose
=
False
,
unconditional_guidance_scale
=
p
.
cfg_scale
,
unconditional_conditioning
=
unconditional_conditioning
,
x_T
=
x
,
eta
=
self
.
eta
)[
0
])
samples_ddim
=
self
.
launch_sampling
(
steps
,
lambda
:
self
.
sampler
.
sample
(
S
=
steps
,
conditioning
=
conditioning
,
batch_size
=
int
(
x
.
shape
[
0
]),
shape
=
x
[
0
]
.
shape
,
verbose
=
False
,
unconditional_guidance_scale
=
p
.
cfg_scale
,
unconditional_conditioning
=
unconditional_conditioning
,
x_T
=
x
,
eta
=
self
.
eta
)[
0
])
return
samples_ddim
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment