Пример #1
0
 def __call__(self, candidate: BrainModel):
     fitting_stimuli = place_on_screen(self._fitting_stimuli, target_visual_degrees=candidate.visual_degrees(),
                                       source_visual_degrees=self._visual_degrees)
     candidate.start_task(BrainModel.Task.probabilities, fitting_stimuli)
     stimulus_set = place_on_screen(self._assembly.stimulus_set, target_visual_degrees=candidate.visual_degrees(),
                                    source_visual_degrees=self._visual_degrees)
     probabilities = candidate.look_at(stimulus_set, number_of_trials=self._number_of_trials)
     score = self._metric(probabilities, self._assembly)
     score = self.ceil_score(score, self.ceiling)
     return score
Пример #2
0
 def test_creates_probabilities(self):
     activations_model = pytorch_custom()
     brain_model = ModelCommitment(identifier=activations_model.identifier,
                                   activations_model=activations_model,
                                   layers=None,
                                   behavioral_readout_layer='relu2')
     fitting_stimuli = StimulusSet({
         'image_id': ['rgb1', 'rgb2'],
         'image_label': ['label1', 'label2']
     })
     fitting_stimuli.image_paths = {
         'rgb1': os.path.join(os.path.dirname(__file__), 'rgb1.jpg'),
         'rgb2': os.path.join(os.path.dirname(__file__), 'rgb2.jpg')
     }
     fitting_stimuli.identifier = 'test_probabilities_mapping.creates_probabilities'
     fitting_stimuli = place_on_screen(
         fitting_stimuli,
         target_visual_degrees=brain_model.visual_degrees(),
         source_visual_degrees=8)
     brain_model.start_task(BrainModel.Task.probabilities, fitting_stimuli)
     probabilities = brain_model.look_at(fitting_stimuli)
     np.testing.assert_array_equal(probabilities.dims,
                                   ['presentation', 'choice'])
     np.testing.assert_array_equal(probabilities.shape, [2, 2])
     np.testing.assert_array_almost_equal(
         probabilities.sel(image_id='rgb1', choice='label1').values,
         probabilities.sel(image_id='rgb2', choice='label2').values)
     assert probabilities.sel(image_id='rgb1', choice='label1') + \
            probabilities.sel(image_id='rgb1', choice='label2') == approx(1)
Пример #3
0
 def __call__(self, candidate: BrainModel):
     candidate.start_recording('IT', time_bins=self._time_bins)
     stimulus_set = place_on_screen(
         self._assembly.stimulus_set,
         target_visual_degrees=candidate.visual_degrees(),
         source_visual_degrees=self._visual_degrees)
     # Temporal recordings from large candidates take up a lot of memory and compute time.
     # In order to quickly reject recordings that are static over time,
     # we will show one image and check whether the recordings vary over time at all or not.
     # If they don't we can quickly score the candidate with a failure state
     # since it will not be able to predict temporal differences with the OST metric
     check_stimulus_set = stimulus_set[:1]
     check_stimulus_set.identifier = None  # unset identifier to avoid storing (interferes with actual stimulus_set)
     check_recordings = candidate.look_at(
         check_stimulus_set, number_of_trials=self._number_of_trials)
     if not temporally_varying(check_recordings):
         score = Score([np.nan, np.nan],
                       coords={'aggregation': ['center', 'error']},
                       dims=['aggregation'])
     else:
         recordings = candidate.look_at(
             stimulus_set, number_of_trials=self._number_of_trials)
         score = self._similarity_metric(recordings, self._assembly)
     score = ceil_score(score, self.ceiling)
     return score
Пример #4
0
 def __call__(self, candidate: BrainModel):
     time_bins = [(time_bin_start, time_bin_start + 10) for time_bin_start in range(70, 250, 10)]
     candidate.start_recording('IT', time_bins=time_bins)
     stimulus_set = place_on_screen(self._assembly.stimulus_set, target_visual_degrees=candidate.visual_degrees(),
                                    source_visual_degrees=self._visual_degrees)
     recordings = candidate.look_at(stimulus_set)
     score = self._similarity_metric(recordings, self._assembly)
     score = ceil_score(score, self.ceiling)
     return score
Пример #5
0
 def __call__(self, candidate: BrainModel):
     candidate.start_recording(self.region, time_bins=self.timebins)
     stimulus_set = place_on_screen(self._assembly.stimulus_set, target_visual_degrees=candidate.visual_degrees(),
                                    source_visual_degrees=self._visual_degrees)
     source_assembly = candidate.look_at(stimulus_set, number_of_trials=self._number_of_trials)
     if 'time_bin' in source_assembly.dims:
         source_assembly = source_assembly.squeeze('time_bin')  # static case for these benchmarks
     raw_score = self._similarity_metric(source_assembly, self._assembly)
     return explained_variance(raw_score, self.ceiling)
Пример #6
0
def record_from_model(model: BrainModel, stimulus_identifier,
                      number_of_trials):
    stimulus_set = get_stimulus_set(stimulus_identifier)
    stimulus_set = place_on_screen(
        stimulus_set, target_visual_degrees=model.visual_degrees())
    activations = model.look_at(stimulus_set, number_of_trials)
    if 'time_bin' in activations.dims:
        activations = activations.squeeze(
            'time_bin')  # static case for these benchmarks
    if not activations.values.flags['WRITEABLE']:
        activations.values.setflags(write=1)
    return activations
Пример #7
0
def visual_degree_samples(visual_degrees_samples=(8, 4, 12), base_degrees=8):
    base_image = Path(__file__).parent / 'base.png'
    stimulus_set = StimulusSet([{'image_id': 'base'}])
    stimulus_set.image_paths = {'base': base_image}
    stimulus_set.identifier = 'visual_degrees_base'
    for visual_degrees in visual_degrees_samples:
        converted_stimulus_set = place_on_screen(
            stimulus_set,
            source_visual_degrees=8,
            target_visual_degrees=visual_degrees)
        converted_path = converted_stimulus_set.get_image('base')
        target_path = static_directory / 'visual_degrees' / f"{base_degrees}_to_{visual_degrees}.png"
        converted_image = Image.open(converted_path)
        converted_image.save(target_path)