(model, logdir, batch_size=50, vanilla=False, custom_steps=None, eta=None, n_samples=50000, nplog=None)
| 106 | return log |
| 107 | |
| 108 | def run(model, logdir, batch_size=50, vanilla=False, custom_steps=None, eta=None, n_samples=50000, nplog=None): |
| 109 | if vanilla: |
| 110 | print(f'Using Vanilla DDPM sampling with {model.num_timesteps} sampling steps.') |
| 111 | else: |
| 112 | print(f'Using DDIM sampling with {custom_steps} sampling steps and eta={eta}') |
| 113 | |
| 114 | |
| 115 | tstart = time.time() |
| 116 | n_saved = len(glob.glob(os.path.join(logdir,'*.png')))-1 |
| 117 | # path = logdir |
| 118 | if model.cond_stage_model is None: |
| 119 | all_images = [] |
| 120 | |
| 121 | print(f"Running unconditional sampling for {n_samples} samples") |
| 122 | for _ in trange(n_samples // batch_size, desc="Sampling Batches (unconditional)"): |
| 123 | logs = make_convolutional_sample(model, batch_size=batch_size, |
| 124 | vanilla=vanilla, custom_steps=custom_steps, |
| 125 | eta=eta) |
| 126 | n_saved = save_logs(logs, logdir, n_saved=n_saved, key="sample") |
| 127 | all_images.extend([custom_to_np(logs["sample"])]) |
| 128 | if n_saved >= n_samples: |
| 129 | print(f'Finish after generating {n_saved} samples') |
| 130 | break |
| 131 | all_img = np.concatenate(all_images, axis=0) |
| 132 | all_img = all_img[:n_samples] |
| 133 | shape_str = "x".join([str(x) for x in all_img.shape]) |
| 134 | nppath = os.path.join(nplog, f"{shape_str}-samples.npz") |
| 135 | np.savez(nppath, all_img) |
| 136 | |
| 137 | else: |
| 138 | raise NotImplementedError('Currently only sampling for unconditional models supported.') |
| 139 | |
| 140 | print(f"sampling of {n_saved} images finished in {(time.time() - tstart) / 60.:.2f} minutes.") |
| 141 | |
| 142 | |
| 143 | def save_logs(logs, path, n_saved=0, key="sample", np_path=None): |
no test coverage detected