Skip to content
This repository has been archived by the owner on Jan 5, 2024. It is now read-only.

Add microsaccades to Brain-Score core #75

Open
wants to merge 18 commits into
base: master
Choose a base branch
from

Conversation

benlonnqvist
Copy link

@benlonnqvist benlonnqvist commented Dec 1, 2023

In this PR we add microsaccades to Brain-Score core.

Conceptual Problem: We need variance in model responses to static stimuli.

Conceptual Solution: Microsaccades are a prevalent phenomenon in vision and visual experiments. They are involuntary movements of the eye at very small scales. Microsaccades are not (and often can not due to their small extent) be controlled for in experiments, and are thus implicitly baked into the variance in primate responses. As such, microsaccades are a phenomenon that is either explicitly or implicitly believed to be unimportant for behavioral/neural outcomes, and thus a good candidate for getting variance in responses to static stimuli. (e.g. Rolfs 2009, Vis. Res.; Haddad & Steinmann 1973, Vis. Res.)

Technical problem: The current BrainScore interface does not support microsaccades.

Technical solution: the ActivationsExtractorHelper will be changed. The from_paths method now takes a path, loads the image from the path, does pixel position jittering to the image, and saves the jittered image into a temporary new path. The new path is passed to the downstream functions to get the model activations.

To accomplish this, the from_paths method will now receive a dictionary of tags. This dictionary of tags comes from a call to the look_at method, where number_of_trials is replaced with a new dictionary. This new dictionary then traverses the following path:

  1. run_activations
  2. A call to activations_model
  3. In practice, this calls a TensorFlowWrapper/PytorchWrapper/etc.’s self._extractor class’s __call__() method in its __call__() method. (I.e., PytorchWrapper.__call__() => self._extractor.__call__() )
  4. This extractor’s call method is ActivationsExtractorHelper.__call__()
  5. Thus we pass the new dictionary to ActivationsExtractorHelper.__call__() where it will be parsed.

TODO list:

  • Implement microsaccades
  • Implement unit tests for microsaccades

Other Brain-Score benchmark PRs depend on this PR (Malania2007).

Huge thanks to Hannes Mehrer (@hanme) who implemented microsaccades, which I've only adapted for the generalized case here.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant