def eval_s_grad(layer, style): nonlocal loss current_gram = gram_matrix(self.data[layer]) n, mh, mw = self.data[layer].shape feat = self.data[layer].reshape((n, mh * mw)) gram_diff = current_gram - style.grams[layer] s_grad = self._arr_pool.array_like(feat) np.dot(gram_diff, feat, s_grad) s_grad = s_grad.reshape((n, mh, mw)) loss += lw * style_weight[layer] * norm2(gram_diff) / len( self.styles) / 2 axpy(lw * style_weight[layer] / len(self.styles), normalize(s_grad), self.diff[layer])
def preprocess_images(self, pool, content_images, style_images, content_layers, style_layers, tile_size=512, roll=None): """Performs preprocessing tasks on the input images.""" # Construct list of layers to visit during the backward pass layers = [] for layer in reversed(self.layers()): if layer in content_layers or layer in style_layers: layers.append(layer) # Prepare Gram matrices from style images if roll is None: print_('Preprocessing the style image(s)...') for image in style_images: grams = {} self.set_image(image) roll2(self.img, roll) feats = self.prepare_features(pool, style_layers, tile_size, passes=1) for layer in feats: grams[layer] = gram_matrix(feats[layer]) self.styles.append(StyleData(grams)) # Prepare feature maps from content image if roll is None: print_('Preprocessing the content image(s)...') n = 10 else: n = 1 for image in content_images: self.set_image(image) roll2(self.img, roll) feats = self.prepare_features(pool, content_layers, tile_size, passes=n) self.contents.append(ContentData(feats))
def preprocess_images(self, pool, content_images, style_images, content_layers, style_layers, tile_size=512, roll=None): """Performs preprocessing tasks on the input images.""" # Construct list of layers to visit during the backward pass layers = [] for layer in reversed(self.layers()): if layer in content_layers or layer in style_layers: layers.append(layer) # Prepare Gram matrices from style images if roll is None: print('Preprocessing the style image(s)...') sizes = [None] if ARGS.style_multiscale: vmin, vmax = ARGS.style_multiscale size = vmax sizes = [vmax] while True: size = int(round(size / np.sqrt(2))) if size < max(32, vmin): break sizes.append(size) if not self.styles: grams = {} count = 0 for i, image in enumerate(style_images): scale_too_big_cond = False for size in reversed(sizes): if scale_too_big_cond: break if size: image_scaled = resize_to_fit(image, size) if max(image_scaled.size) == max(image.size): scale_too_big_cond = True if min(image_scaled.size) < 32: continue self.set_image(image_scaled) h, w = image_scaled.size print('Processing style {} at {}x{}.'.format( i + 1, h, w)) else: self.set_image(image) roll2(self.img, roll) feats = self.prepare_features(pool, style_layers, tile_size, passes=1) for layer in feats: gram = gram_matrix(feats[layer]) if layer not in grams: grams[layer] = gram else: grams[layer] += gram count += 1 for gram in grams.values(): gram /= count self.styles.append(StyleData(grams)) # Prepare feature maps from content image if roll is None: print('Preprocessing the content image(s)...') n = 10 else: n = 1 for image in content_images: self.set_image(image) roll2(self.img, roll) feats = self.prepare_features(pool, content_layers, tile_size, passes=n) self.contents.append(ContentData(feats))