Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
renzhc
diffusers_dcu
Commits
ef044a72
Commit
ef044a72
authored
Jun 08, 2022
by
Patrick von Platen
Browse files
save clean-up
parent
e8977e95
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
36 deletions
+31
-36
models/vision/ddim/modeling_ddim.py
models/vision/ddim/modeling_ddim.py
+31
-36
No files found.
models/vision/ddim/modeling_ddim.py
View file @
ef044a72
...
...
@@ -40,39 +40,34 @@ class DDIM(DiffusionPipeline):
inference_step_times
=
range
(
0
,
num_trained_timesteps
,
num_trained_timesteps
//
num_inference_steps
)
self
.
unet
.
to
(
torch_device
)
x
=
self
.
noise_scheduler
.
sample_noise
((
batch_size
,
self
.
unet
.
in_channels
,
self
.
unet
.
resolution
,
self
.
unet
.
resolution
),
device
=
torch_device
,
generator
=
generator
)
b
=
self
.
noise_scheduler
.
betas
.
to
(
torch_device
)
seq
=
inference_step_times
seq_next
=
[
-
1
]
+
list
(
seq
[:
-
1
])
# for t in tqdm.tqdm(reversed(range(num_inference_steps)), total=num_inference_steps):
# train_step = inference_step_times[t]
for
i
,
j
in
zip
(
reversed
(
seq
),
reversed
(
seq_next
)):
n
=
batch_size
x0_preds
=
[]
xs
=
[
x
]
# i = train_step
# j = inference_step_times[t-1] if t > 0 else -1
if
True
:
print
(
i
)
t
=
(
torch
.
ones
(
n
)
*
i
).
to
(
x
.
device
)
next_t
=
(
torch
.
ones
(
n
)
*
j
).
to
(
x
.
device
)
at
=
compute_alpha
(
b
,
t
.
long
())
at_next
=
compute_alpha
(
b
,
next_t
.
long
())
xt
=
xs
[
-
1
].
to
(
'cuda'
)
with
torch
.
no_grad
():
et
=
self
.
unet
(
xt
,
t
)
x0_t
=
(
xt
-
et
*
(
1
-
at
).
sqrt
())
/
at
.
sqrt
()
x0_preds
.
append
(
x0_t
.
to
(
'cpu'
))
# eta
c1
=
(
eta
*
((
1
-
at
/
at_next
)
*
(
1
-
at_next
)
/
(
1
-
at
)).
sqrt
()
)
c2
=
((
1
-
at_next
)
-
c1
**
2
).
sqrt
()
xt_next
=
at_next
.
sqrt
()
*
x0_t
+
c1
*
torch
.
randn_like
(
x
)
+
c2
*
et
xs
.
append
(
xt_next
.
to
(
'cpu'
))
return
xt_next
image
=
self
.
noise_scheduler
.
sample_noise
((
batch_size
,
self
.
unet
.
in_channels
,
self
.
unet
.
resolution
,
self
.
unet
.
resolution
),
device
=
torch_device
,
generator
=
generator
)
for
t
in
tqdm
.
tqdm
(
reversed
(
range
(
num_inference_steps
)),
total
=
num_inference_steps
):
# get actual t and t-1
train_step
=
inference_step_times
[
t
]
prev_train_step
=
inference_step_times
[
t
-
1
]
if
t
>
0
else
-
1
# compute alphas
alpha_prod_t
=
self
.
noise_scheduler
.
get_alpha_prod
(
train_step
)
alpha_prod_t_prev
=
self
.
noise_scheduler
.
get_alpha_prod
(
prev_train_step
)
alpha_prod_t_rsqrt
=
1
/
alpha_prod_t
.
sqrt
()
alpha_prod_t_prev_rsqrt
=
1
/
alpha_prod_t_prev
.
sqrt
()
beta_prod_t_sqrt
=
(
1
-
alpha_prod_t
).
sqrt
()
beta_prod_t_prev_sqrt
=
(
1
-
alpha_prod_t_prev
).
sqrt
()
# compute relevant coefficients
coeff_1
=
(
alpha_prod_t_prev
-
alpha_prod_t
).
sqrt
()
*
alpha_prod_t_prev_rsqrt
*
beta_prod_t_prev_sqrt
/
beta_prod_t_sqrt
*
eta
coeff_2
=
((
1
-
alpha_prod_t_prev
)
-
coeff_1
**
2
).
sqrt
()
with
torch
.
no_grad
():
noise_residual
=
self
.
unet
(
image
,
train_step
)
print
(
train_step
)
pred_mean
=
(
image
-
noise_residual
*
beta_prod_t_sqrt
)
*
alpha_prod_t_rsqrt
xt_next
=
alpha_prod_t_prev
.
sqrt
()
*
pred_mean
+
coeff_1
*
torch
.
randn_like
(
image
)
+
coeff_2
*
noise_residual
# xt_next = 1 / alpha_prod_t_rsqrt * pred_mean + coeff_1 * torch.randn_like(image) + coeff_2 * noise_residual
# eta
image
=
xt_next
return
image
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