Skip to content

Commit a33cb13

Browse files
authored
Merge pull request #2 from liesened/liesened-debiased
Fix apply_debiased_estimation for v-pred [SDXL]
2 parents 012e7e6 + 174f451 commit a33cb13

3 files changed

Lines changed: 7 additions & 4 deletions

File tree

library/custom_train_functions.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,13 @@ def add_v_prediction_like_loss(loss, timesteps, noise_scheduler, v_pred_like_los
9696
return loss
9797

9898

99-
def apply_debiased_estimation(loss, timesteps, noise_scheduler):
99+
def apply_debiased_estimation(loss, timesteps, noise_scheduler, v_prediction=False):
100100
snr_t = torch.stack([noise_scheduler.all_snr[t] for t in timesteps]) # batch_size
101101
snr_t = torch.minimum(snr_t, torch.ones_like(snr_t) * 1000) # if timestep is 0, snr_t is inf, so limit it to 1000
102-
weight = 1 / torch.sqrt(snr_t)
102+
if v_prediction:
103+
weight = 1 / (snr + 1)
104+
else:
105+
weight = 1 / torch.sqrt(snr_t)
103106
loss = weight * loss
104107
return loss
105108

sdxl_train.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ def optimizer_hook(parameter: torch.Tensor):
730730
if args.v_pred_like_loss:
731731
loss = add_v_prediction_like_loss(loss, timesteps, noise_scheduler, args.v_pred_like_loss)
732732
if args.debiased_estimation_loss:
733-
loss = apply_debiased_estimation(loss, timesteps, noise_scheduler)
733+
loss = apply_debiased_estimation(loss, timesteps, noise_scheduler, args.v_parameterization)
734734

735735
loss = loss.mean() # mean over batch dimension
736736
else:

train_network.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -998,7 +998,7 @@ def remove_model(old_ckpt_name):
998998
if args.v_pred_like_loss:
999999
loss = add_v_prediction_like_loss(loss, timesteps, noise_scheduler, args.v_pred_like_loss)
10001000
if args.debiased_estimation_loss:
1001-
loss = apply_debiased_estimation(loss, timesteps, noise_scheduler)
1001+
loss = apply_debiased_estimation(loss, timesteps, noise_scheduler, args.v_parameterization)
10021002

10031003
loss = loss.mean() # 平均なのでbatch_sizeで割る必要なし
10041004

0 commit comments

Comments
 (0)