How-to: Run an existing model¶
[1]:
# Third party libraries
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# Import local module
import multyscale
[2]:
# %% Load example stimulus
stimulus = np.asarray(Image.open("example_stimulus.png").convert("L"))
# %% Parameters of image
shape = stimulus.shape # filtershape in pixels
# visual extent, same convention as pyplot:
visextent = (-16, 16, -16, 16)
Integrated run¶
[3]:
model = multyscale.models.FLODOG_RHS2007(shape, visextent)
[4]:
output = model.apply(stimulus)
[7]:
plt.subplot(1, 3, 1)
plt.imshow(stimulus, cmap="gray", extent=visextent)
plt.subplot(1, 3, 2)
plt.imshow(output, cmap="coolwarm", extent=visextent)
plt.subplot(1, 3, 3)
plt.plot(output[512, 250:750])
[7]:
[<matplotlib.lines.Line2D at 0x7ff66f3c5730>]
Step-wise execution¶
[8]:
filters_output = model.bank.apply(stimulus)
for i in range(filters_output.shape[0]):
for j in range(filters_output.shape[1]):
plt.subplot(
filters_output.shape[0],
filters_output.shape[1],
i * filters_output.shape[0] + ((j + i) * 1) + 1,
)
plt.imshow(filters_output[i, j, ...], cmap="coolwarm", extent=visextent)
[9]:
weighted_outputs = model.weight_outputs(filters_output)
for i in range(weighted_outputs.shape[0]):
for j in range(weighted_outputs.shape[1]):
plt.subplot(
weighted_outputs.shape[0],
weighted_outputs.shape[1],
i * weighted_outputs.shape[0] + ((j + i) * 1) + 1,
)
plt.imshow(weighted_outputs[i, j, ...], cmap="coolwarm", extent=visextent)
[10]:
normalized_outputs = model.normalize_outputs(weighted_outputs)
for i in range(normalized_outputs.shape[0]):
for j in range(normalized_outputs.shape[1]):
plt.subplot(
normalized_outputs.shape[0],
normalized_outputs.shape[1],
i * normalized_outputs.shape[0] + ((j + i) * 1) + 1,
)
plt.imshow(normalized_outputs[i, j, ...], cmap="coolwarm", extent=visextent)
[11]:
output = normalized_outputs.sum((0,1))
plt.subplot(1, 3, 1)
plt.imshow(stimulus, cmap="gray", extent=visextent)
plt.subplot(1, 3, 2)
plt.imshow(output, cmap="coolwarm", extent=visextent)
plt.subplot(1, 3, 3)
plt.plot(output[512, 250:750])
[11]:
[<matplotlib.lines.Line2D at 0x7ff659b93d90>]
Non-default parameters¶
[ ]:
model.spatial_window_scalar = 3
model.sdmix = .75
model.scale_norm_weights = multyscale.normalization.scale_norm_weights_gaussian(
len(model.scale_weights), model.sdmix
)
model.normalization_weights = multyscale.normalization.create_normalization_weights(
6, 7, model.scale_norm_weights, model.orientation_norm_weights
)
model.window_sigmas = np.broadcast_to(
np.array(model.center_sigmas)[None, ..., None], (6, 7, 2)
)
[ ]:
ouput = model.apply(stimulus)
plt.subplot(1, 3, 1)
plt.imshow(stimulus, cmap="gray", extent=visextent)
plt.subplot(1, 3, 2)
plt.imshow(output, cmap="coolwarm", extent=visextent)
plt.subplot(1, 3, 3)
plt.plot(output[512, 250:750])