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
e8977e95
Commit
e8977e95
authored
Jun 08, 2022
by
Patrick von Platen
Browse files
save intermediate
parent
ee71a3b6
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
10 deletions
+17
-10
models/vision/ddim/modeling_ddim.py
models/vision/ddim/modeling_ddim.py
+17
-10
No files found.
models/vision/ddim/modeling_ddim.py
View file @
e8977e95
...
...
@@ -31,33 +31,40 @@ class DDIM(DiffusionPipeline):
super
().
__init__
()
self
.
register_modules
(
unet
=
unet
,
noise_scheduler
=
noise_scheduler
)
def
__call__
(
self
,
batch_size
=
1
,
generator
=
None
,
torch_device
=
None
,
eta
=
0.0
,
inference_
time_
steps
=
50
):
def
__call__
(
self
,
batch_size
=
1
,
generator
=
None
,
torch_device
=
None
,
eta
=
0.0
,
num_
inference_steps
=
50
):
# eta is η in paper
if
torch_device
is
None
:
torch_device
=
"cuda"
if
torch
.
cuda
.
is_available
()
else
"cpu"
num_timesteps
=
self
.
noise_scheduler
.
num_timesteps
seq
=
range
(
0
,
num_timesteps
,
num_timesteps
//
inference_time_steps
)
b
=
self
.
noise_scheduler
.
betas
.
to
(
torch_device
)
num_trained_timesteps
=
self
.
noise_scheduler
.
num_timesteps
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
)
with
torch
.
no_grad
():
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
seq_next
=
[
-
1
]
+
list
(
seq
[:
-
1
])
x0_preds
=
[]
xs
=
[
x
]
for
i
,
j
in
zip
(
reversed
(
seq
),
reversed
(
seq_next
)):
# 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'
)
et
=
self
.
unet
(
xt
,
t
)
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
...
...
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