JacobLinCool commited on
Commit
4c7009f
·
verified ·
1 Parent(s): 2368e93

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +116 -0
  2. diff2flow.py +62 -23
  3. generate_reflow_pairs.py +60 -38
  4. results/reflow_ep99_eval_1step_fixed/0_rain_flow.png +3 -0
  5. results/reflow_ep99_eval_1step_fixed/0_rain_input.png +3 -0
  6. results/reflow_ep99_eval_1step_fixed/10_rain_flow.png +3 -0
  7. results/reflow_ep99_eval_1step_fixed/10_rain_input.png +3 -0
  8. results/reflow_ep99_eval_1step_fixed/11_rain_flow.png +3 -0
  9. results/reflow_ep99_eval_1step_fixed/11_rain_input.png +3 -0
  10. results/reflow_ep99_eval_1step_fixed/12_rain_flow.png +3 -0
  11. results/reflow_ep99_eval_1step_fixed/12_rain_input.png +3 -0
  12. results/reflow_ep99_eval_1step_fixed/13_rain_flow.png +3 -0
  13. results/reflow_ep99_eval_1step_fixed/13_rain_input.png +3 -0
  14. results/reflow_ep99_eval_1step_fixed/14_rain_flow.png +3 -0
  15. results/reflow_ep99_eval_1step_fixed/14_rain_input.png +3 -0
  16. results/reflow_ep99_eval_1step_fixed/15_rain_flow.png +3 -0
  17. results/reflow_ep99_eval_1step_fixed/15_rain_input.png +3 -0
  18. results/reflow_ep99_eval_1step_fixed/16_rain_flow.png +3 -0
  19. results/reflow_ep99_eval_1step_fixed/16_rain_input.png +3 -0
  20. results/reflow_ep99_eval_1step_fixed/17_rain_flow.png +3 -0
  21. results/reflow_ep99_eval_1step_fixed/17_rain_input.png +3 -0
  22. results/reflow_ep99_eval_1step_fixed/18_rain_flow.png +3 -0
  23. results/reflow_ep99_eval_1step_fixed/18_rain_input.png +3 -0
  24. results/reflow_ep99_eval_1step_fixed/19_rain_flow.png +3 -0
  25. results/reflow_ep99_eval_1step_fixed/19_rain_input.png +3 -0
  26. results/reflow_ep99_eval_1step_fixed/1_rain_flow.png +3 -0
  27. results/reflow_ep99_eval_1step_fixed/1_rain_input.png +3 -0
  28. results/reflow_ep99_eval_1step_fixed/20_rain_flow.png +3 -0
  29. results/reflow_ep99_eval_1step_fixed/20_rain_input.png +3 -0
  30. results/reflow_ep99_eval_1step_fixed/21_rain_flow.png +3 -0
  31. results/reflow_ep99_eval_1step_fixed/21_rain_input.png +3 -0
  32. results/reflow_ep99_eval_1step_fixed/22_rain_flow.png +3 -0
  33. results/reflow_ep99_eval_1step_fixed/22_rain_input.png +3 -0
  34. results/reflow_ep99_eval_1step_fixed/23_rain_flow.png +3 -0
  35. results/reflow_ep99_eval_1step_fixed/23_rain_input.png +3 -0
  36. results/reflow_ep99_eval_1step_fixed/24_rain_flow.png +3 -0
  37. results/reflow_ep99_eval_1step_fixed/24_rain_input.png +3 -0
  38. results/reflow_ep99_eval_1step_fixed/25_rain_flow.png +3 -0
  39. results/reflow_ep99_eval_1step_fixed/25_rain_input.png +3 -0
  40. results/reflow_ep99_eval_1step_fixed/26_rain_flow.png +3 -0
  41. results/reflow_ep99_eval_1step_fixed/26_rain_input.png +3 -0
  42. results/reflow_ep99_eval_1step_fixed/27_rain_flow.png +3 -0
  43. results/reflow_ep99_eval_1step_fixed/27_rain_input.png +3 -0
  44. results/reflow_ep99_eval_1step_fixed/28_rain_flow.png +3 -0
  45. results/reflow_ep99_eval_1step_fixed/28_rain_input.png +3 -0
  46. results/reflow_ep99_eval_1step_fixed/29_rain_flow.png +3 -0
  47. results/reflow_ep99_eval_1step_fixed/29_rain_input.png +3 -0
  48. results/reflow_ep99_eval_1step_fixed/2_rain_flow.png +3 -0
  49. results/reflow_ep99_eval_1step_fixed/2_rain_input.png +3 -0
  50. results/reflow_ep99_eval_1step_fixed/30_rain_flow.png +3 -0
.gitattributes CHANGED
@@ -497,3 +497,119 @@ results/reflow_ep99_eval_8step/8_rain_flow.png filter=lfs diff=lfs merge=lfs -te
497
  results/reflow_ep99_eval_8step/8_rain_input.png filter=lfs diff=lfs merge=lfs -text
498
  results/reflow_ep99_eval_8step/9_rain_flow.png filter=lfs diff=lfs merge=lfs -text
499
  results/reflow_ep99_eval_8step/9_rain_input.png filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497
  results/reflow_ep99_eval_8step/8_rain_input.png filter=lfs diff=lfs merge=lfs -text
498
  results/reflow_ep99_eval_8step/9_rain_flow.png filter=lfs diff=lfs merge=lfs -text
499
  results/reflow_ep99_eval_8step/9_rain_input.png filter=lfs diff=lfs merge=lfs -text
500
+ results/reflow_ep99_eval_1step_fixed/0_rain_flow.png filter=lfs diff=lfs merge=lfs -text
501
+ results/reflow_ep99_eval_1step_fixed/0_rain_input.png filter=lfs diff=lfs merge=lfs -text
502
+ results/reflow_ep99_eval_1step_fixed/10_rain_flow.png filter=lfs diff=lfs merge=lfs -text
503
+ results/reflow_ep99_eval_1step_fixed/10_rain_input.png filter=lfs diff=lfs merge=lfs -text
504
+ results/reflow_ep99_eval_1step_fixed/11_rain_flow.png filter=lfs diff=lfs merge=lfs -text
505
+ results/reflow_ep99_eval_1step_fixed/11_rain_input.png filter=lfs diff=lfs merge=lfs -text
506
+ results/reflow_ep99_eval_1step_fixed/12_rain_flow.png filter=lfs diff=lfs merge=lfs -text
507
+ results/reflow_ep99_eval_1step_fixed/12_rain_input.png filter=lfs diff=lfs merge=lfs -text
508
+ results/reflow_ep99_eval_1step_fixed/13_rain_flow.png filter=lfs diff=lfs merge=lfs -text
509
+ results/reflow_ep99_eval_1step_fixed/13_rain_input.png filter=lfs diff=lfs merge=lfs -text
510
+ results/reflow_ep99_eval_1step_fixed/14_rain_flow.png filter=lfs diff=lfs merge=lfs -text
511
+ results/reflow_ep99_eval_1step_fixed/14_rain_input.png filter=lfs diff=lfs merge=lfs -text
512
+ results/reflow_ep99_eval_1step_fixed/15_rain_flow.png filter=lfs diff=lfs merge=lfs -text
513
+ results/reflow_ep99_eval_1step_fixed/15_rain_input.png filter=lfs diff=lfs merge=lfs -text
514
+ results/reflow_ep99_eval_1step_fixed/16_rain_flow.png filter=lfs diff=lfs merge=lfs -text
515
+ results/reflow_ep99_eval_1step_fixed/16_rain_input.png filter=lfs diff=lfs merge=lfs -text
516
+ results/reflow_ep99_eval_1step_fixed/17_rain_flow.png filter=lfs diff=lfs merge=lfs -text
517
+ results/reflow_ep99_eval_1step_fixed/17_rain_input.png filter=lfs diff=lfs merge=lfs -text
518
+ results/reflow_ep99_eval_1step_fixed/18_rain_flow.png filter=lfs diff=lfs merge=lfs -text
519
+ results/reflow_ep99_eval_1step_fixed/18_rain_input.png filter=lfs diff=lfs merge=lfs -text
520
+ results/reflow_ep99_eval_1step_fixed/19_rain_flow.png filter=lfs diff=lfs merge=lfs -text
521
+ results/reflow_ep99_eval_1step_fixed/19_rain_input.png filter=lfs diff=lfs merge=lfs -text
522
+ results/reflow_ep99_eval_1step_fixed/1_rain_flow.png filter=lfs diff=lfs merge=lfs -text
523
+ results/reflow_ep99_eval_1step_fixed/1_rain_input.png filter=lfs diff=lfs merge=lfs -text
524
+ results/reflow_ep99_eval_1step_fixed/20_rain_flow.png filter=lfs diff=lfs merge=lfs -text
525
+ results/reflow_ep99_eval_1step_fixed/20_rain_input.png filter=lfs diff=lfs merge=lfs -text
526
+ results/reflow_ep99_eval_1step_fixed/21_rain_flow.png filter=lfs diff=lfs merge=lfs -text
527
+ results/reflow_ep99_eval_1step_fixed/21_rain_input.png filter=lfs diff=lfs merge=lfs -text
528
+ results/reflow_ep99_eval_1step_fixed/22_rain_flow.png filter=lfs diff=lfs merge=lfs -text
529
+ results/reflow_ep99_eval_1step_fixed/22_rain_input.png filter=lfs diff=lfs merge=lfs -text
530
+ results/reflow_ep99_eval_1step_fixed/23_rain_flow.png filter=lfs diff=lfs merge=lfs -text
531
+ results/reflow_ep99_eval_1step_fixed/23_rain_input.png filter=lfs diff=lfs merge=lfs -text
532
+ results/reflow_ep99_eval_1step_fixed/24_rain_flow.png filter=lfs diff=lfs merge=lfs -text
533
+ results/reflow_ep99_eval_1step_fixed/24_rain_input.png filter=lfs diff=lfs merge=lfs -text
534
+ results/reflow_ep99_eval_1step_fixed/25_rain_flow.png filter=lfs diff=lfs merge=lfs -text
535
+ results/reflow_ep99_eval_1step_fixed/25_rain_input.png filter=lfs diff=lfs merge=lfs -text
536
+ results/reflow_ep99_eval_1step_fixed/26_rain_flow.png filter=lfs diff=lfs merge=lfs -text
537
+ results/reflow_ep99_eval_1step_fixed/26_rain_input.png filter=lfs diff=lfs merge=lfs -text
538
+ results/reflow_ep99_eval_1step_fixed/27_rain_flow.png filter=lfs diff=lfs merge=lfs -text
539
+ results/reflow_ep99_eval_1step_fixed/27_rain_input.png filter=lfs diff=lfs merge=lfs -text
540
+ results/reflow_ep99_eval_1step_fixed/28_rain_flow.png filter=lfs diff=lfs merge=lfs -text
541
+ results/reflow_ep99_eval_1step_fixed/28_rain_input.png filter=lfs diff=lfs merge=lfs -text
542
+ results/reflow_ep99_eval_1step_fixed/29_rain_flow.png filter=lfs diff=lfs merge=lfs -text
543
+ results/reflow_ep99_eval_1step_fixed/29_rain_input.png filter=lfs diff=lfs merge=lfs -text
544
+ results/reflow_ep99_eval_1step_fixed/2_rain_flow.png filter=lfs diff=lfs merge=lfs -text
545
+ results/reflow_ep99_eval_1step_fixed/2_rain_input.png filter=lfs diff=lfs merge=lfs -text
546
+ results/reflow_ep99_eval_1step_fixed/30_rain_flow.png filter=lfs diff=lfs merge=lfs -text
547
+ results/reflow_ep99_eval_1step_fixed/30_rain_input.png filter=lfs diff=lfs merge=lfs -text
548
+ results/reflow_ep99_eval_1step_fixed/31_rain_flow.png filter=lfs diff=lfs merge=lfs -text
549
+ results/reflow_ep99_eval_1step_fixed/31_rain_input.png filter=lfs diff=lfs merge=lfs -text
550
+ results/reflow_ep99_eval_1step_fixed/32_rain_flow.png filter=lfs diff=lfs merge=lfs -text
551
+ results/reflow_ep99_eval_1step_fixed/32_rain_input.png filter=lfs diff=lfs merge=lfs -text
552
+ results/reflow_ep99_eval_1step_fixed/33_rain_flow.png filter=lfs diff=lfs merge=lfs -text
553
+ results/reflow_ep99_eval_1step_fixed/33_rain_input.png filter=lfs diff=lfs merge=lfs -text
554
+ results/reflow_ep99_eval_1step_fixed/34_rain_flow.png filter=lfs diff=lfs merge=lfs -text
555
+ results/reflow_ep99_eval_1step_fixed/34_rain_input.png filter=lfs diff=lfs merge=lfs -text
556
+ results/reflow_ep99_eval_1step_fixed/35_rain_flow.png filter=lfs diff=lfs merge=lfs -text
557
+ results/reflow_ep99_eval_1step_fixed/35_rain_input.png filter=lfs diff=lfs merge=lfs -text
558
+ results/reflow_ep99_eval_1step_fixed/36_rain_flow.png filter=lfs diff=lfs merge=lfs -text
559
+ results/reflow_ep99_eval_1step_fixed/36_rain_input.png filter=lfs diff=lfs merge=lfs -text
560
+ results/reflow_ep99_eval_1step_fixed/37_rain_flow.png filter=lfs diff=lfs merge=lfs -text
561
+ results/reflow_ep99_eval_1step_fixed/37_rain_input.png filter=lfs diff=lfs merge=lfs -text
562
+ results/reflow_ep99_eval_1step_fixed/38_rain_flow.png filter=lfs diff=lfs merge=lfs -text
563
+ results/reflow_ep99_eval_1step_fixed/38_rain_input.png filter=lfs diff=lfs merge=lfs -text
564
+ results/reflow_ep99_eval_1step_fixed/39_rain_flow.png filter=lfs diff=lfs merge=lfs -text
565
+ results/reflow_ep99_eval_1step_fixed/39_rain_input.png filter=lfs diff=lfs merge=lfs -text
566
+ results/reflow_ep99_eval_1step_fixed/3_rain_flow.png filter=lfs diff=lfs merge=lfs -text
567
+ results/reflow_ep99_eval_1step_fixed/3_rain_input.png filter=lfs diff=lfs merge=lfs -text
568
+ results/reflow_ep99_eval_1step_fixed/40_rain_flow.png filter=lfs diff=lfs merge=lfs -text
569
+ results/reflow_ep99_eval_1step_fixed/40_rain_input.png filter=lfs diff=lfs merge=lfs -text
570
+ results/reflow_ep99_eval_1step_fixed/41_rain_flow.png filter=lfs diff=lfs merge=lfs -text
571
+ results/reflow_ep99_eval_1step_fixed/41_rain_input.png filter=lfs diff=lfs merge=lfs -text
572
+ results/reflow_ep99_eval_1step_fixed/42_rain_flow.png filter=lfs diff=lfs merge=lfs -text
573
+ results/reflow_ep99_eval_1step_fixed/42_rain_input.png filter=lfs diff=lfs merge=lfs -text
574
+ results/reflow_ep99_eval_1step_fixed/43_rain_flow.png filter=lfs diff=lfs merge=lfs -text
575
+ results/reflow_ep99_eval_1step_fixed/43_rain_input.png filter=lfs diff=lfs merge=lfs -text
576
+ results/reflow_ep99_eval_1step_fixed/44_rain_flow.png filter=lfs diff=lfs merge=lfs -text
577
+ results/reflow_ep99_eval_1step_fixed/44_rain_input.png filter=lfs diff=lfs merge=lfs -text
578
+ results/reflow_ep99_eval_1step_fixed/45_rain_flow.png filter=lfs diff=lfs merge=lfs -text
579
+ results/reflow_ep99_eval_1step_fixed/45_rain_input.png filter=lfs diff=lfs merge=lfs -text
580
+ results/reflow_ep99_eval_1step_fixed/46_rain_flow.png filter=lfs diff=lfs merge=lfs -text
581
+ results/reflow_ep99_eval_1step_fixed/46_rain_input.png filter=lfs diff=lfs merge=lfs -text
582
+ results/reflow_ep99_eval_1step_fixed/47_rain_flow.png filter=lfs diff=lfs merge=lfs -text
583
+ results/reflow_ep99_eval_1step_fixed/47_rain_input.png filter=lfs diff=lfs merge=lfs -text
584
+ results/reflow_ep99_eval_1step_fixed/48_rain_flow.png filter=lfs diff=lfs merge=lfs -text
585
+ results/reflow_ep99_eval_1step_fixed/48_rain_input.png filter=lfs diff=lfs merge=lfs -text
586
+ results/reflow_ep99_eval_1step_fixed/49_rain_flow.png filter=lfs diff=lfs merge=lfs -text
587
+ results/reflow_ep99_eval_1step_fixed/49_rain_input.png filter=lfs diff=lfs merge=lfs -text
588
+ results/reflow_ep99_eval_1step_fixed/4_rain_flow.png filter=lfs diff=lfs merge=lfs -text
589
+ results/reflow_ep99_eval_1step_fixed/4_rain_input.png filter=lfs diff=lfs merge=lfs -text
590
+ results/reflow_ep99_eval_1step_fixed/50_rain_flow.png filter=lfs diff=lfs merge=lfs -text
591
+ results/reflow_ep99_eval_1step_fixed/50_rain_input.png filter=lfs diff=lfs merge=lfs -text
592
+ results/reflow_ep99_eval_1step_fixed/51_rain_flow.png filter=lfs diff=lfs merge=lfs -text
593
+ results/reflow_ep99_eval_1step_fixed/51_rain_input.png filter=lfs diff=lfs merge=lfs -text
594
+ results/reflow_ep99_eval_1step_fixed/52_rain_flow.png filter=lfs diff=lfs merge=lfs -text
595
+ results/reflow_ep99_eval_1step_fixed/52_rain_input.png filter=lfs diff=lfs merge=lfs -text
596
+ results/reflow_ep99_eval_1step_fixed/53_rain_flow.png filter=lfs diff=lfs merge=lfs -text
597
+ results/reflow_ep99_eval_1step_fixed/53_rain_input.png filter=lfs diff=lfs merge=lfs -text
598
+ results/reflow_ep99_eval_1step_fixed/54_rain_flow.png filter=lfs diff=lfs merge=lfs -text
599
+ results/reflow_ep99_eval_1step_fixed/54_rain_input.png filter=lfs diff=lfs merge=lfs -text
600
+ results/reflow_ep99_eval_1step_fixed/55_rain_flow.png filter=lfs diff=lfs merge=lfs -text
601
+ results/reflow_ep99_eval_1step_fixed/55_rain_input.png filter=lfs diff=lfs merge=lfs -text
602
+ results/reflow_ep99_eval_1step_fixed/56_rain_flow.png filter=lfs diff=lfs merge=lfs -text
603
+ results/reflow_ep99_eval_1step_fixed/56_rain_input.png filter=lfs diff=lfs merge=lfs -text
604
+ results/reflow_ep99_eval_1step_fixed/57_rain_flow.png filter=lfs diff=lfs merge=lfs -text
605
+ results/reflow_ep99_eval_1step_fixed/57_rain_input.png filter=lfs diff=lfs merge=lfs -text
606
+ results/reflow_ep99_eval_1step_fixed/5_rain_flow.png filter=lfs diff=lfs merge=lfs -text
607
+ results/reflow_ep99_eval_1step_fixed/5_rain_input.png filter=lfs diff=lfs merge=lfs -text
608
+ results/reflow_ep99_eval_1step_fixed/6_rain_flow.png filter=lfs diff=lfs merge=lfs -text
609
+ results/reflow_ep99_eval_1step_fixed/6_rain_input.png filter=lfs diff=lfs merge=lfs -text
610
+ results/reflow_ep99_eval_1step_fixed/7_rain_flow.png filter=lfs diff=lfs merge=lfs -text
611
+ results/reflow_ep99_eval_1step_fixed/7_rain_input.png filter=lfs diff=lfs merge=lfs -text
612
+ results/reflow_ep99_eval_1step_fixed/8_rain_flow.png filter=lfs diff=lfs merge=lfs -text
613
+ results/reflow_ep99_eval_1step_fixed/8_rain_input.png filter=lfs diff=lfs merge=lfs -text
614
+ results/reflow_ep99_eval_1step_fixed/9_rain_flow.png filter=lfs diff=lfs merge=lfs -text
615
+ results/reflow_ep99_eval_1step_fixed/9_rain_input.png filter=lfs diff=lfs merge=lfs -text
diff2flow.py CHANGED
@@ -58,7 +58,7 @@ def get_beta_schedule(beta_schedule, *, beta_start, beta_end, num_diffusion_time
58
  class VPDiffusionFlow:
59
  def __init__(self, args, config):
60
  self.args = args
61
- self.flow_mode = getattr(args, 'flow_mode', 'vp')
62
  self.config = config
63
  self.device = config.device
64
 
@@ -134,9 +134,9 @@ class VPDiffusionFlow:
134
  # Calculate alpha_bar analytically for linear beta schedule
135
  scalar_t = t.item() if isinstance(t, torch.Tensor) else t
136
  scalar_t = max(0.0, min(1.0, scalar_t))
137
-
138
  N = self.num_timesteps
139
-
140
  # Integral of N * (b0 + (b1-b0)*s) ds from 0 to t
141
  # = N * [ b0*t + 0.5*(b1-b0)*t^2 ]
142
  b0 = self.beta_start
@@ -151,6 +151,13 @@ class VPDiffusionFlow:
151
  w_list = [i for i in range(0, w - output_size + 1, r)]
152
  return h_list, w_list
153
 
 
 
 
 
 
 
 
154
  def get_velocity(self, x, t, x_cond, patch_size=None, r_stride=16):
155
  # If no patching needed (x fits in patch_size or patch_size None), do normal
156
  if patch_size is None or (
@@ -163,42 +170,56 @@ class VPDiffusionFlow:
163
  t_idx = min(int(t * N), N - 1)
164
  t_input_scalar = t_idx
165
 
166
- # Grid setup
167
- h_list, w_list = self.overlapping_grid_indices(x, patch_size, r=r_stride)
 
 
 
 
 
 
 
 
 
 
168
  corners = [(i, j) for i in h_list for j in w_list]
169
 
 
 
 
170
  # Mask for overlap averaging
171
- # Cache this if t doesn't change grid? Grid depends on image size, which is constant during integration.
172
- # But for now recompute is safer/easier.
173
- x_grid_mask = torch.zeros_like(x, device=self.device)
174
  for hi, wi in corners:
175
- x_grid_mask[:, :, hi : hi + patch_size, wi : wi + patch_size] += 1
176
 
177
  # Accumulate output (epsilon or velocity)
178
- output_accum = torch.zeros_like(x, device=self.device)
179
 
180
  # Process in batches
181
  batch_size = 64 # From restoration.py logic or config
182
 
183
  # Prepare params if VP
184
- if self.flow_mode == 'vp':
185
  beta_discrete = self.get_beta_t(t)
186
  beta_cont = beta_discrete * N
187
  ab = self.alphas_cumprod[t_idx]
188
-
189
  # Loop over patches
190
  # NOTE: drift depends on x (noisy) and x_cond (clean/cond).
191
  for i in range(0, len(corners), batch_size):
192
  batch_corners = corners[i : i + batch_size]
193
 
194
- # Crop batch
195
  x_batch = torch.cat(
196
- [crop(x, hi, wi, patch_size, patch_size) for (hi, wi) in batch_corners],
 
 
 
197
  dim=0,
198
  )
199
  cond_batch = torch.cat(
200
  [
201
- crop(x_cond, hi, wi, patch_size, patch_size)
202
  for (hi, wi) in batch_corners
203
  ],
204
  dim=0,
@@ -208,19 +229,33 @@ class VPDiffusionFlow:
208
  )
209
 
210
  with torch.no_grad():
211
- model_output = self.model(torch.cat([cond_batch, x_batch], dim=1), t_batch)
 
 
 
 
 
 
212
 
213
- # Scatter back
214
  for idx, (hi, wi) in enumerate(batch_corners):
215
  output_accum[0, :, hi : hi + patch_size, wi : wi + patch_size] += (
216
- model_output[idx]
217
  )
218
 
219
  # Average
220
- model_output_full = torch.div(output_accum, x_grid_mask)
 
 
 
 
 
 
 
 
 
221
 
222
  # Compute v
223
- if self.flow_mode == 'reflow':
224
  # In Reflow, model output is velocity
225
  v = model_output_full
226
  else:
@@ -229,7 +264,7 @@ class VPDiffusionFlow:
229
  coeff1 = -0.5 * beta_cont
230
  coeff2 = 0.5 * beta_cont / torch.sqrt(1 - ab)
231
  v = coeff1 * x + coeff2 * epsilon
232
-
233
  return v
234
 
235
  def _get_velocity_single(self, x, t, x_cond):
@@ -245,7 +280,7 @@ class VPDiffusionFlow:
245
  with torch.no_grad():
246
  model_output = self.model(torch.cat([x_cond, x], dim=1), t_input)
247
 
248
- if self.flow_mode == 'reflow':
249
  return model_output
250
  else:
251
  epsilon = model_output
@@ -315,7 +350,11 @@ def main():
315
  "--rtol", type=float, default=1e-4, help="Relative tolerance for ODE solver"
316
  )
317
  parser.add_argument(
318
- "--flow_mode", type=str, default="vp", choices=["vp", "reflow"], help="Flow mode: vp (default) or reflow"
 
 
 
 
319
  )
320
  args = parser.parse_args()
321
 
 
58
  class VPDiffusionFlow:
59
  def __init__(self, args, config):
60
  self.args = args
61
+ self.flow_mode = getattr(args, "flow_mode", "vp")
62
  self.config = config
63
  self.device = config.device
64
 
 
134
  # Calculate alpha_bar analytically for linear beta schedule
135
  scalar_t = t.item() if isinstance(t, torch.Tensor) else t
136
  scalar_t = max(0.0, min(1.0, scalar_t))
137
+
138
  N = self.num_timesteps
139
+
140
  # Integral of N * (b0 + (b1-b0)*s) ds from 0 to t
141
  # = N * [ b0*t + 0.5*(b1-b0)*t^2 ]
142
  b0 = self.beta_start
 
151
  w_list = [i for i in range(0, w - output_size + 1, r)]
152
  return h_list, w_list
153
 
154
+ def get_blending_window(self, patch_size):
155
+ # Hanning window (cosine-based, smooth goes to 0 at edges)
156
+ # Using periodic=False (symmetric window)
157
+ w = torch.hann_window(patch_size, periodic=False, device=self.device)
158
+ w2d = w.unsqueeze(0) * w.unsqueeze(1)
159
+ return w2d.view(1, 1, patch_size, patch_size)
160
+
161
  def get_velocity(self, x, t, x_cond, patch_size=None, r_stride=16):
162
  # If no patching needed (x fits in patch_size or patch_size None), do normal
163
  if patch_size is None or (
 
170
  t_idx = min(int(t * N), N - 1)
171
  t_input_scalar = t_idx
172
 
173
+ # --- Padding to handle edges ---
174
+ # Pad by patch_size // 2 to ensure original edges are covered by window center
175
+ pad_size = patch_size // 2
176
+ x_padded = torch.nn.functional.pad(
177
+ x, (pad_size, pad_size, pad_size, pad_size), mode="reflect"
178
+ )
179
+ x_cond_padded = torch.nn.functional.pad(
180
+ x_cond, (pad_size, pad_size, pad_size, pad_size), mode="reflect"
181
+ )
182
+
183
+ # Grid setup on PADDED image
184
+ h_list, w_list = self.overlapping_grid_indices(x_padded, patch_size, r=r_stride)
185
  corners = [(i, j) for i in h_list for j in w_list]
186
 
187
+ # Use Weighted Averaging (Hanning Window) to reduce grid artifacts
188
+ window = self.get_blending_window(patch_size)
189
+
190
  # Mask for overlap averaging
191
+ x_grid_mask = torch.zeros_like(x_padded, device=self.device)
 
 
192
  for hi, wi in corners:
193
+ x_grid_mask[:, :, hi : hi + patch_size, wi : wi + patch_size] += window
194
 
195
  # Accumulate output (epsilon or velocity)
196
+ output_accum = torch.zeros_like(x_padded, device=self.device)
197
 
198
  # Process in batches
199
  batch_size = 64 # From restoration.py logic or config
200
 
201
  # Prepare params if VP
202
+ if self.flow_mode == "vp":
203
  beta_discrete = self.get_beta_t(t)
204
  beta_cont = beta_discrete * N
205
  ab = self.alphas_cumprod[t_idx]
206
+
207
  # Loop over patches
208
  # NOTE: drift depends on x (noisy) and x_cond (clean/cond).
209
  for i in range(0, len(corners), batch_size):
210
  batch_corners = corners[i : i + batch_size]
211
 
212
+ # Crop batch from PADDED input
213
  x_batch = torch.cat(
214
+ [
215
+ crop(x_padded, hi, wi, patch_size, patch_size)
216
+ for (hi, wi) in batch_corners
217
+ ],
218
  dim=0,
219
  )
220
  cond_batch = torch.cat(
221
  [
222
+ crop(x_cond_padded, hi, wi, patch_size, patch_size)
223
  for (hi, wi) in batch_corners
224
  ],
225
  dim=0,
 
229
  )
230
 
231
  with torch.no_grad():
232
+ model_output = self.model(
233
+ torch.cat([cond_batch, x_batch], dim=1), t_batch
234
+ )
235
+
236
+ # Scatter back with window weighting
237
+ # model_output: [B, C, P, P]
238
+ weighted_output = model_output * window
239
 
 
240
  for idx, (hi, wi) in enumerate(batch_corners):
241
  output_accum[0, :, hi : hi + patch_size, wi : wi + patch_size] += (
242
+ weighted_output[idx]
243
  )
244
 
245
  # Average
246
+ # Add epsilon to mask to avoid division by zero
247
+ model_output_full = torch.div(output_accum, x_grid_mask + 1e-8)
248
+
249
+ # --- Crop back to original size ---
250
+ # x_padded was padded by pad_size on all sides.
251
+ # Original is at pad_size : -pad_size
252
+ if pad_size > 0:
253
+ model_output_full = model_output_full[
254
+ :, :, pad_size:-pad_size, pad_size:-pad_size
255
+ ]
256
 
257
  # Compute v
258
+ if self.flow_mode == "reflow":
259
  # In Reflow, model output is velocity
260
  v = model_output_full
261
  else:
 
264
  coeff1 = -0.5 * beta_cont
265
  coeff2 = 0.5 * beta_cont / torch.sqrt(1 - ab)
266
  v = coeff1 * x + coeff2 * epsilon
267
+
268
  return v
269
 
270
  def _get_velocity_single(self, x, t, x_cond):
 
280
  with torch.no_grad():
281
  model_output = self.model(torch.cat([x_cond, x], dim=1), t_input)
282
 
283
+ if self.flow_mode == "reflow":
284
  return model_output
285
  else:
286
  epsilon = model_output
 
350
  "--rtol", type=float, default=1e-4, help="Relative tolerance for ODE solver"
351
  )
352
  parser.add_argument(
353
+ "--flow_mode",
354
+ type=str,
355
+ default="vp",
356
+ choices=["vp", "reflow"],
357
+ help="Flow mode: vp (default) or reflow",
358
  )
359
  args = parser.parse_args()
360
 
generate_reflow_pairs.py CHANGED
@@ -10,7 +10,17 @@ from diff2flow import VPDiffusionFlow, dict2namespace
10
  import datasets
11
  from tqdm import tqdm
12
 
13
- def ode_inverse_solve(flow_model, x_data, x_cond, steps=100, method="dopri5", patch_size=64, atol=1e-5, rtol=1e-5):
 
 
 
 
 
 
 
 
 
 
14
  """
15
  Solves the ODE from t=0 (data) to t=1 (noise).
16
  Returns x_1 (noise latent).
@@ -18,7 +28,7 @@ def ode_inverse_solve(flow_model, x_data, x_cond, steps=100, method="dopri5", pa
18
  # Define the drift function wrapper for torchdiffeq
19
  # For inversion, we integrate from 0 to 1.
20
  # The drift v(x, t) is defined for t in [0, 1].
21
-
22
  def drift_func(t, x):
23
  # flow_model.get_velocity expects t in [0, 1]
24
  # When using torchdiffeq, t will be traversing 0->1.
@@ -26,7 +36,7 @@ def ode_inverse_solve(flow_model, x_data, x_cond, steps=100, method="dopri5", pa
26
 
27
  # Time points from 0 to 1
28
  t_eval = torch.linspace(0.0, 1.0, steps + 1, device=x_data.device)
29
-
30
  # Solve
31
  out = torchdiffeq.odeint(
32
  drift_func, x_data, t_eval, method=method, atol=atol, rtol=rtol
@@ -34,6 +44,7 @@ def ode_inverse_solve(flow_model, x_data, x_cond, steps=100, method="dopri5", pa
34
  # Return final state at t=1
35
  return out[-1]
36
 
 
37
  def main():
38
  parser = argparse.ArgumentParser()
39
  parser.add_argument("--config", type=str, required=True)
@@ -47,40 +58,48 @@ def main():
47
  parser.add_argument("--method", type=str, default="dopri5")
48
  parser.add_argument("--atol", type=float, default=1e-5)
49
  parser.add_argument("--rtol", type=float, default=1e-5)
50
- parser.add_argument("--max_images", type=int, default=None, help="Max images to generate (for testing)")
 
 
 
 
 
51
  args = parser.parse_args()
52
 
53
  # Load Config
54
  with open(os.path.join("configs", args.config), "r") as f:
55
  config_dict = yaml.safe_load(f)
56
  config = dict2namespace(config_dict)
57
-
58
  if args.data_dir:
59
  config.data.data_dir = args.data_dir
60
  if args.dataset:
61
  config.data.dataset = args.dataset
62
-
63
  device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
64
  config.device = device
65
-
66
  # Reproducibility
67
  torch.manual_seed(args.seed)
68
  np.random.seed(args.seed)
69
-
70
  # Load Model
71
  print("Initializing VPDiffusionFlow...")
72
  flow = VPDiffusionFlow(args, config)
73
  flow.load_ckpt(args.resume)
74
-
75
  os.makedirs(args.output_dir, exist_ok=True)
76
-
77
  # Load Dataset
78
  print(f"Loading dataset {config.data.dataset}...")
79
  DATASET = datasets.__dict__[config.data.dataset](config)
80
-
81
  # We use the TRAINING set to generate pairs for training the reflow model
82
- train_loader, _ = DATASET.get_loaders(parse_patches=False, validation=config.data.dataset if args.dataset else 'raindrop')
83
-
 
 
 
84
  # We want to iterate over training data. Note: get_loaders usually returns (train_loader, val_loader).
85
  # RainDrop.get_loaders returns (train_loader, val_loader).
86
  # train_loader usually parses patches = True for original training.
@@ -90,72 +109,75 @@ def main():
90
  # The original training was likely on patches (RainDropDataset uses patch_size).
91
  # For Reflow, we should probably train on PATCHES to match the original training distribution and efficiency.
92
  # So let's use parse_patches=True for the loader to match training setup.
93
-
94
  # However, to use `ode_inverse_solve`, we need to follow the flow.
95
  # If we use patches, we can solve ODE for each patch independently.
96
  # This is consistent.
97
-
98
  # Re-get loaders with parse_patches=True to get training patches
99
  train_loader, _ = DATASET.get_loaders(parse_patches=True)
100
-
101
  print(f"Starting generation of reflow pairs...")
102
-
103
  count = 0
104
-
105
  # Iterate through training patches
106
- for i, (x_batch, img_id) in enumerate(tqdm(train_loader, desc="Generating Reflow Pairs")):
 
 
107
  # x_batch: [B, N, 6, H, W] if parse_patches=True
108
  # Flatten B and N to process all patches
109
  if x_batch.ndim == 5:
110
  x_batch = x_batch.flatten(start_dim=0, end_dim=1)
111
-
112
- input_img = x_batch[:, :3, :, :].to(device) # Input (Rainy)
113
- gt_img = x_batch[:, 3:, :, :].to(device) # GT (Clean)
114
-
115
  # Transform data to [-1, 1]
116
  x_cond = utils.sampling.data_transform(input_img)
117
  x_data = utils.sampling.data_transform(gt_img)
118
-
119
  # Run ODE Inversion: x_data (t=0) -> x_noise (t=1)
120
  # Note: patch_size argument in ode_inverse_solve usually used for stitching.
121
  # Here x_data IS a patch (e.g. 64x64 or config size).
122
  # So we can pass patch_size=None or just let it handle it.
123
  # Our VPDiffusionFlow.get_velocity handles patching if x > patch_size.
124
  # Here x is likely small.
125
-
126
  with torch.no_grad():
127
  x_noise = ode_inverse_solve(
128
- flow,
129
- x_data,
130
- x_cond,
131
- steps=args.steps,
132
- method=args.method,
133
  patch_size=args.patch_size,
134
- atol=args.atol,
135
- rtol=args.rtol
136
  )
137
-
138
  # Save pair (x_noise, x_cond, x_data)
139
  # x_noise is the 'target' input for the reflow model (at t=1)
140
  # x_data is the 'target' output (at t=0)
141
  # x_cond is the condition
142
-
143
  # We save this batch
144
  batch_data = {
145
  "x_noise": x_noise.cpu(),
146
  "x_data": x_data.cpu(),
147
- "x_cond": x_cond.cpu()
148
  }
149
-
150
  save_path = os.path.join(args.output_dir, f"batch_{i}.pth")
151
  torch.save(batch_data, save_path)
152
-
153
  print(f"Saved batch {i} to {save_path}")
154
-
155
  count += input_img.shape[0]
156
  if args.max_images and count >= args.max_images:
157
  print(f"Reached max images {args.max_images}")
158
  break
159
 
 
160
  if __name__ == "__main__":
161
  main()
 
10
  import datasets
11
  from tqdm import tqdm
12
 
13
+
14
+ def ode_inverse_solve(
15
+ flow_model,
16
+ x_data,
17
+ x_cond,
18
+ steps=100,
19
+ method="dopri5",
20
+ patch_size=64,
21
+ atol=1e-5,
22
+ rtol=1e-5,
23
+ ):
24
  """
25
  Solves the ODE from t=0 (data) to t=1 (noise).
26
  Returns x_1 (noise latent).
 
28
  # Define the drift function wrapper for torchdiffeq
29
  # For inversion, we integrate from 0 to 1.
30
  # The drift v(x, t) is defined for t in [0, 1].
31
+
32
  def drift_func(t, x):
33
  # flow_model.get_velocity expects t in [0, 1]
34
  # When using torchdiffeq, t will be traversing 0->1.
 
36
 
37
  # Time points from 0 to 1
38
  t_eval = torch.linspace(0.0, 1.0, steps + 1, device=x_data.device)
39
+
40
  # Solve
41
  out = torchdiffeq.odeint(
42
  drift_func, x_data, t_eval, method=method, atol=atol, rtol=rtol
 
44
  # Return final state at t=1
45
  return out[-1]
46
 
47
+
48
  def main():
49
  parser = argparse.ArgumentParser()
50
  parser.add_argument("--config", type=str, required=True)
 
58
  parser.add_argument("--method", type=str, default="dopri5")
59
  parser.add_argument("--atol", type=float, default=1e-5)
60
  parser.add_argument("--rtol", type=float, default=1e-5)
61
+ parser.add_argument(
62
+ "--max_images",
63
+ type=int,
64
+ default=None,
65
+ help="Max images to generate (for testing)",
66
+ )
67
  args = parser.parse_args()
68
 
69
  # Load Config
70
  with open(os.path.join("configs", args.config), "r") as f:
71
  config_dict = yaml.safe_load(f)
72
  config = dict2namespace(config_dict)
73
+
74
  if args.data_dir:
75
  config.data.data_dir = args.data_dir
76
  if args.dataset:
77
  config.data.dataset = args.dataset
78
+
79
  device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
80
  config.device = device
81
+
82
  # Reproducibility
83
  torch.manual_seed(args.seed)
84
  np.random.seed(args.seed)
85
+
86
  # Load Model
87
  print("Initializing VPDiffusionFlow...")
88
  flow = VPDiffusionFlow(args, config)
89
  flow.load_ckpt(args.resume)
90
+
91
  os.makedirs(args.output_dir, exist_ok=True)
92
+
93
  # Load Dataset
94
  print(f"Loading dataset {config.data.dataset}...")
95
  DATASET = datasets.__dict__[config.data.dataset](config)
96
+
97
  # We use the TRAINING set to generate pairs for training the reflow model
98
+ train_loader, _ = DATASET.get_loaders(
99
+ parse_patches=False,
100
+ validation=config.data.dataset if args.dataset else "raindrop",
101
+ )
102
+
103
  # We want to iterate over training data. Note: get_loaders usually returns (train_loader, val_loader).
104
  # RainDrop.get_loaders returns (train_loader, val_loader).
105
  # train_loader usually parses patches = True for original training.
 
109
  # The original training was likely on patches (RainDropDataset uses patch_size).
110
  # For Reflow, we should probably train on PATCHES to match the original training distribution and efficiency.
111
  # So let's use parse_patches=True for the loader to match training setup.
112
+
113
  # However, to use `ode_inverse_solve`, we need to follow the flow.
114
  # If we use patches, we can solve ODE for each patch independently.
115
  # This is consistent.
116
+
117
  # Re-get loaders with parse_patches=True to get training patches
118
  train_loader, _ = DATASET.get_loaders(parse_patches=True)
119
+
120
  print(f"Starting generation of reflow pairs...")
121
+
122
  count = 0
123
+
124
  # Iterate through training patches
125
+ for i, (x_batch, img_id) in enumerate(
126
+ tqdm(train_loader, desc="Generating Reflow Pairs")
127
+ ):
128
  # x_batch: [B, N, 6, H, W] if parse_patches=True
129
  # Flatten B and N to process all patches
130
  if x_batch.ndim == 5:
131
  x_batch = x_batch.flatten(start_dim=0, end_dim=1)
132
+
133
+ input_img = x_batch[:, :3, :, :].to(device) # Input (Rainy)
134
+ gt_img = x_batch[:, 3:, :, :].to(device) # GT (Clean)
135
+
136
  # Transform data to [-1, 1]
137
  x_cond = utils.sampling.data_transform(input_img)
138
  x_data = utils.sampling.data_transform(gt_img)
139
+
140
  # Run ODE Inversion: x_data (t=0) -> x_noise (t=1)
141
  # Note: patch_size argument in ode_inverse_solve usually used for stitching.
142
  # Here x_data IS a patch (e.g. 64x64 or config size).
143
  # So we can pass patch_size=None or just let it handle it.
144
  # Our VPDiffusionFlow.get_velocity handles patching if x > patch_size.
145
  # Here x is likely small.
146
+
147
  with torch.no_grad():
148
  x_noise = ode_inverse_solve(
149
+ flow,
150
+ x_data,
151
+ x_cond,
152
+ steps=args.steps,
153
+ method=args.method,
154
  patch_size=args.patch_size,
155
+ atol=args.atol,
156
+ rtol=args.rtol,
157
  )
158
+
159
  # Save pair (x_noise, x_cond, x_data)
160
  # x_noise is the 'target' input for the reflow model (at t=1)
161
  # x_data is the 'target' output (at t=0)
162
  # x_cond is the condition
163
+
164
  # We save this batch
165
  batch_data = {
166
  "x_noise": x_noise.cpu(),
167
  "x_data": x_data.cpu(),
168
+ "x_cond": x_cond.cpu(),
169
  }
170
+
171
  save_path = os.path.join(args.output_dir, f"batch_{i}.pth")
172
  torch.save(batch_data, save_path)
173
+
174
  print(f"Saved batch {i} to {save_path}")
175
+
176
  count += input_img.shape[0]
177
  if args.max_images and count >= args.max_images:
178
  print(f"Reached max images {args.max_images}")
179
  break
180
 
181
+
182
  if __name__ == "__main__":
183
  main()
results/reflow_ep99_eval_1step_fixed/0_rain_flow.png ADDED

Git LFS Details

  • SHA256: f42abb2682e851b3219756c2a035d317aed2b8b5ee4201131d81883b4b4ee9ca
  • Pointer size: 131 Bytes
  • Size of remote file: 622 kB
results/reflow_ep99_eval_1step_fixed/0_rain_input.png ADDED

Git LFS Details

  • SHA256: 39d113839d5877614e47b8b6a0b277e4a5674bc49a3ca149a6fd849cc451d30d
  • Pointer size: 131 Bytes
  • Size of remote file: 396 kB
results/reflow_ep99_eval_1step_fixed/10_rain_flow.png ADDED

Git LFS Details

  • SHA256: 023ec16e9887cf3b3256ad3d4bf0657e8c91bb2334d1fae44ec52988d1f64d8a
  • Pointer size: 131 Bytes
  • Size of remote file: 547 kB
results/reflow_ep99_eval_1step_fixed/10_rain_input.png ADDED

Git LFS Details

  • SHA256: b4deddb3c8ae3d5d0f69489ed76b7a70abf97b3934e485aa50258f3cd3f317f6
  • Pointer size: 131 Bytes
  • Size of remote file: 323 kB
results/reflow_ep99_eval_1step_fixed/11_rain_flow.png ADDED

Git LFS Details

  • SHA256: 501bfaebb17d51aa879d70e224d7aeaabddb25d3502c8888edfedb3cb681c063
  • Pointer size: 131 Bytes
  • Size of remote file: 572 kB
results/reflow_ep99_eval_1step_fixed/11_rain_input.png ADDED

Git LFS Details

  • SHA256: 252cb7493ea8fabca1b1845ed4605425892097942c7e0486cc874f02bca4e13c
  • Pointer size: 131 Bytes
  • Size of remote file: 367 kB
results/reflow_ep99_eval_1step_fixed/12_rain_flow.png ADDED

Git LFS Details

  • SHA256: 0b9988a9c40153b24e9e11f5dba15a77f8544bab760e89c15de229016b65dc09
  • Pointer size: 131 Bytes
  • Size of remote file: 600 kB
results/reflow_ep99_eval_1step_fixed/12_rain_input.png ADDED

Git LFS Details

  • SHA256: 3df4b9598121913a7466b2566c288751c13fbc55ebc73ae5a1adf3743a43ef23
  • Pointer size: 131 Bytes
  • Size of remote file: 493 kB
results/reflow_ep99_eval_1step_fixed/13_rain_flow.png ADDED

Git LFS Details

  • SHA256: d27b09674c3ed7c8a8f532bd447e9f19424e7f98b260bd3c9affb84c5eec215e
  • Pointer size: 131 Bytes
  • Size of remote file: 589 kB
results/reflow_ep99_eval_1step_fixed/13_rain_input.png ADDED

Git LFS Details

  • SHA256: 98ff22edea804e27c512ff33b95b964778f64dbbfc9803b1cdeb98911b0c0ee0
  • Pointer size: 131 Bytes
  • Size of remote file: 373 kB
results/reflow_ep99_eval_1step_fixed/14_rain_flow.png ADDED

Git LFS Details

  • SHA256: 6e966358e8e3bf7b01c432f0c1149c4784c221e55ecf673bcde5a08c0adcb156
  • Pointer size: 131 Bytes
  • Size of remote file: 700 kB
results/reflow_ep99_eval_1step_fixed/14_rain_input.png ADDED

Git LFS Details

  • SHA256: 0ba3473bb5d2bacbae881e3ff100c4ecfc0f88201b99d31e6a2ac4e569520a28
  • Pointer size: 131 Bytes
  • Size of remote file: 532 kB
results/reflow_ep99_eval_1step_fixed/15_rain_flow.png ADDED

Git LFS Details

  • SHA256: 8e7e5297a4c9a447c543dafa10ca5f0409225890e9e3610b9c656b21d021203e
  • Pointer size: 131 Bytes
  • Size of remote file: 646 kB
results/reflow_ep99_eval_1step_fixed/15_rain_input.png ADDED

Git LFS Details

  • SHA256: 0aa14a8ddaad5ba506a50245010312bb08dbce72ca78770a982b40604be0bfdc
  • Pointer size: 131 Bytes
  • Size of remote file: 482 kB
results/reflow_ep99_eval_1step_fixed/16_rain_flow.png ADDED

Git LFS Details

  • SHA256: e5698a1a2a3010db1ee37d15a610264544db6c724bc0ee0ca6904976a3317dfc
  • Pointer size: 131 Bytes
  • Size of remote file: 582 kB
results/reflow_ep99_eval_1step_fixed/16_rain_input.png ADDED

Git LFS Details

  • SHA256: a54153cf704b9e28b6fcf1d99bacdb3b006eba8a32c3ea565ac9584d28fc3692
  • Pointer size: 131 Bytes
  • Size of remote file: 429 kB
results/reflow_ep99_eval_1step_fixed/17_rain_flow.png ADDED

Git LFS Details

  • SHA256: bba89e200337ffc42eacfd702cc8e4e05299126f0b50dea10cc10a758cb456bf
  • Pointer size: 131 Bytes
  • Size of remote file: 578 kB
results/reflow_ep99_eval_1step_fixed/17_rain_input.png ADDED

Git LFS Details

  • SHA256: 20c03e47dcba7e146f26dbbe10ec2d66f65713b6974aa88b1a50d530e3ad390e
  • Pointer size: 131 Bytes
  • Size of remote file: 387 kB
results/reflow_ep99_eval_1step_fixed/18_rain_flow.png ADDED

Git LFS Details

  • SHA256: b0694f9eaa3f6dc1632c6ae32aaaa25d15aebc977610da6073761b53e75b6de9
  • Pointer size: 131 Bytes
  • Size of remote file: 604 kB
results/reflow_ep99_eval_1step_fixed/18_rain_input.png ADDED

Git LFS Details

  • SHA256: a2c690eca0c3b365f2cec504edcd7677df5f17fdd70b394a45ee08c2c7e21de3
  • Pointer size: 131 Bytes
  • Size of remote file: 392 kB
results/reflow_ep99_eval_1step_fixed/19_rain_flow.png ADDED

Git LFS Details

  • SHA256: f4e2f596d130fb6b5ba8095bd65b211413e6232dcd1e2459366bc7b0af7eb00f
  • Pointer size: 131 Bytes
  • Size of remote file: 666 kB
results/reflow_ep99_eval_1step_fixed/19_rain_input.png ADDED

Git LFS Details

  • SHA256: b96e84403ae84e2f707a5a1b48fac10ec687bb521a4bd0eea531024ef3853655
  • Pointer size: 131 Bytes
  • Size of remote file: 577 kB
results/reflow_ep99_eval_1step_fixed/1_rain_flow.png ADDED

Git LFS Details

  • SHA256: 8f853287c255ebf9805b705e8ad40f0a897cf8c91facb27a3eb50d95a3809a68
  • Pointer size: 131 Bytes
  • Size of remote file: 683 kB
results/reflow_ep99_eval_1step_fixed/1_rain_input.png ADDED

Git LFS Details

  • SHA256: ca6b62a56297c7b5a003cf66e5ace606f64c8303fb9e1eda10b6e6c1a5faac00
  • Pointer size: 131 Bytes
  • Size of remote file: 517 kB
results/reflow_ep99_eval_1step_fixed/20_rain_flow.png ADDED

Git LFS Details

  • SHA256: 4a7c1c114364219424ed3e59f2640af4817be88d2a493f0d353e1fc94372e24f
  • Pointer size: 131 Bytes
  • Size of remote file: 726 kB
results/reflow_ep99_eval_1step_fixed/20_rain_input.png ADDED

Git LFS Details

  • SHA256: b15ea114a6f60a0e11e8e6777c1a5c35b9c85f52f7ad2517509399c99e1a9184
  • Pointer size: 131 Bytes
  • Size of remote file: 609 kB
results/reflow_ep99_eval_1step_fixed/21_rain_flow.png ADDED

Git LFS Details

  • SHA256: aa604c60cf9df71fbce8f4bd5ebdb9e6957e82fee95f3f44f8c6e38301b492de
  • Pointer size: 131 Bytes
  • Size of remote file: 644 kB
results/reflow_ep99_eval_1step_fixed/21_rain_input.png ADDED

Git LFS Details

  • SHA256: 14fd4baff5036376daf0b83984eba9f33b6edf9d1faae67718fc93f8142cf84f
  • Pointer size: 131 Bytes
  • Size of remote file: 512 kB
results/reflow_ep99_eval_1step_fixed/22_rain_flow.png ADDED

Git LFS Details

  • SHA256: 30df02f687aa4194750e1dc76d9f844ec1d7b39d07d3d1450d5a25a0f825513c
  • Pointer size: 131 Bytes
  • Size of remote file: 687 kB
results/reflow_ep99_eval_1step_fixed/22_rain_input.png ADDED

Git LFS Details

  • SHA256: 7937cc67796f15e85b6ae12ab13b71eec43126cd4fd9426a10cf3aabbae3ed48
  • Pointer size: 131 Bytes
  • Size of remote file: 515 kB
results/reflow_ep99_eval_1step_fixed/23_rain_flow.png ADDED

Git LFS Details

  • SHA256: 6b9dd41e0a1e38d6dc6d8aaaf8bb35f8c11a5073f1e37bd96544baf496502aef
  • Pointer size: 131 Bytes
  • Size of remote file: 634 kB
results/reflow_ep99_eval_1step_fixed/23_rain_input.png ADDED

Git LFS Details

  • SHA256: d72421d76a15fca7e9b27656a21b250634acd7c284197fa3277a33402ac7dc39
  • Pointer size: 131 Bytes
  • Size of remote file: 479 kB
results/reflow_ep99_eval_1step_fixed/24_rain_flow.png ADDED

Git LFS Details

  • SHA256: fe177fbe263baa11aba05b967f89f5e095abc537a3fa9db599d959d762ac05bd
  • Pointer size: 131 Bytes
  • Size of remote file: 702 kB
results/reflow_ep99_eval_1step_fixed/24_rain_input.png ADDED

Git LFS Details

  • SHA256: 710e76a693f89c0f179fc6a95582f196568d3967a50e1bea3047e472c1caa07d
  • Pointer size: 131 Bytes
  • Size of remote file: 529 kB
results/reflow_ep99_eval_1step_fixed/25_rain_flow.png ADDED

Git LFS Details

  • SHA256: 024e08867b8191b3612078bb7bc75283ac8dcfe9a8cc2962c42c8df332acd9ba
  • Pointer size: 131 Bytes
  • Size of remote file: 629 kB
results/reflow_ep99_eval_1step_fixed/25_rain_input.png ADDED

Git LFS Details

  • SHA256: 4e6361ca9277281df0996f1a35e0d0c1638fb41e00eb7194bdc6fa8fa2fb36b0
  • Pointer size: 131 Bytes
  • Size of remote file: 475 kB
results/reflow_ep99_eval_1step_fixed/26_rain_flow.png ADDED

Git LFS Details

  • SHA256: f6beb8cb762564a57117a51f96fd7502a57c2c7170071727ccf2e19c0a79243a
  • Pointer size: 131 Bytes
  • Size of remote file: 622 kB
results/reflow_ep99_eval_1step_fixed/26_rain_input.png ADDED

Git LFS Details

  • SHA256: 122525ebebe8eacf09d0bd11cb389834a699c8549304b710264ba6287627299b
  • Pointer size: 131 Bytes
  • Size of remote file: 466 kB
results/reflow_ep99_eval_1step_fixed/27_rain_flow.png ADDED

Git LFS Details

  • SHA256: f13b26f2a2f3510f2bb6d5a7f4382f7355fbaa79c0a48d7c94e6db8e49b92246
  • Pointer size: 131 Bytes
  • Size of remote file: 601 kB
results/reflow_ep99_eval_1step_fixed/27_rain_input.png ADDED

Git LFS Details

  • SHA256: 8b07f75cbb97dfaaea354275fd12003920c51e5ff231d41914b6958f3c197c41
  • Pointer size: 131 Bytes
  • Size of remote file: 454 kB
results/reflow_ep99_eval_1step_fixed/28_rain_flow.png ADDED

Git LFS Details

  • SHA256: 3b1713dfe2a74da5944f652b0d17d6ab39ba7f66df223d0f35eab56eb39d0d40
  • Pointer size: 131 Bytes
  • Size of remote file: 619 kB
results/reflow_ep99_eval_1step_fixed/28_rain_input.png ADDED

Git LFS Details

  • SHA256: 3ec7bef32f1bb7d2b2fbd613d1837d04166572da9217fecb3256dcc6f3f411b1
  • Pointer size: 131 Bytes
  • Size of remote file: 432 kB
results/reflow_ep99_eval_1step_fixed/29_rain_flow.png ADDED

Git LFS Details

  • SHA256: a07bdc379b14d70c5c3fb1a721706c4f5483bc096c4084fd1b3b3c6bd24df19d
  • Pointer size: 131 Bytes
  • Size of remote file: 762 kB
results/reflow_ep99_eval_1step_fixed/29_rain_input.png ADDED

Git LFS Details

  • SHA256: 531a5e00f8174a01dbb2e6fdbe8bce64ee94041ab62a6ded9ec14f7385989c10
  • Pointer size: 131 Bytes
  • Size of remote file: 686 kB
results/reflow_ep99_eval_1step_fixed/2_rain_flow.png ADDED

Git LFS Details

  • SHA256: fb9260be3aeafb76a09bf9e2ab2b376b5b3cd5e5d32655e99c0fef727bc0df12
  • Pointer size: 131 Bytes
  • Size of remote file: 653 kB
results/reflow_ep99_eval_1step_fixed/2_rain_input.png ADDED

Git LFS Details

  • SHA256: 12e235a403f70b0522240bcfcaf406ade232f912129d549fe23a037c14382080
  • Pointer size: 131 Bytes
  • Size of remote file: 489 kB
results/reflow_ep99_eval_1step_fixed/30_rain_flow.png ADDED

Git LFS Details

  • SHA256: 64cb4e789f7ee29c755fa3ecf2ac42936e42f74d1b1bc33bbb874541d1e32a7b
  • Pointer size: 131 Bytes
  • Size of remote file: 623 kB