fix normalized prompt when a variation is generated

- The seed printed needs to be the one generated prior to the
  initial noising operation. To do this, I added a new "first_seed"
  argument to the image callback in dream.py.
- Closes #641
This commit is contained in:
Lincoln Stein 2022-09-21 00:32:29 -04:00
parent 0632a3a2ea
commit b93f04ee38
3 changed files with 8 additions and 6 deletions

View File

@ -51,6 +51,7 @@ class Generator():
results = [] results = []
seed = seed if seed else self.new_seed() seed = seed if seed else self.new_seed()
first_seed = seed
seed, initial_noise = self.generate_initial_noise(seed, width, height) seed, initial_noise = self.generate_initial_noise(seed, width, height)
with scope(self.model.device.type), self.model.ema_scope(): with scope(self.model.device.type), self.model.ema_scope():
for n in trange(iterations, desc='Generating'): for n in trange(iterations, desc='Generating'):
@ -71,7 +72,7 @@ class Generator():
image = make_image(x_T) image = make_image(x_T)
results.append([image, seed]) results.append([image, seed])
if image_callback is not None: if image_callback is not None:
image_callback(image, seed) image_callback(image, seed, first_seed=first_seed)
seed = self.new_seed() seed = self.new_seed()
return results return results

View File

@ -765,10 +765,10 @@ class Generate:
m, u = model.load_state_dict(sd, strict=False) m, u = model.load_state_dict(sd, strict=False)
if self.precision == 'float16': if self.precision == 'float16':
print('Using faster float16 precision') print('>> Using faster float16 precision')
model.to(torch.float16) model.to(torch.float16)
else: else:
print('Using more accurate float32 precision') print('>> Using more accurate float32 precision')
model.to(self.device) model.to(self.device)
model.eval() model.eval()

View File

@ -250,11 +250,12 @@ def main_loop(gen, opt, infile):
results = [] # list of filename, prompt pairs results = [] # list of filename, prompt pairs
grid_images = dict() # seed -> Image, only used if `opt.grid` grid_images = dict() # seed -> Image, only used if `opt.grid`
prior_variations = opt.with_variations or [] prior_variations = opt.with_variations or []
first_seed = opt.seed
def image_writer(image, seed, upscaled=False): def image_writer(image, seed, upscaled=False, first_seed=None):
# note the seed is the seed of the current image
# the first_seed is the original seed that noise is added to
# when the -v switch is used to generate variations
path = None path = None
nonlocal first_seed
nonlocal prior_variations nonlocal prior_variations
if opt.grid: if opt.grid:
grid_images[seed] = image grid_images[seed] = image