Skip to content

Commit

Permalink
Merge branch 'brain-score:master' into ReAlnet_cornet
Browse files Browse the repository at this point in the history
  • Loading branch information
yilewang authored Feb 1, 2025
2 parents f5b91ac + 3ada646 commit 3b21280
Show file tree
Hide file tree
Showing 40 changed files with 609 additions and 37 deletions.
16 changes: 13 additions & 3 deletions brainscore_vision/models/mobilenet_v2_0_5_192/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,16 @@
version_id="null",
sha1="e5aa083caa4833fccd48af0c578a45064824dd7f")
MainModel = imp.load_source('MainModel',model_path.as_posix())
model = torch.load(model_weight_path.as_posix())


# This custom wrapper handles background class removal, and is used in related mobilenets
class MobilenetPytorchWrapper(PytorchWrapper):
def __call__(self, *args, **kwargs):
result = super().__call__(*args, **kwargs) # retrieve original output
if 'logits' in kwargs.get('layers', []):
result = result.isel(neuroid=slice(1, None)) # remove background class in last layer
return result


def get_model(name):
"""
Expand All @@ -27,8 +36,9 @@ def get_model(name):
:return: the model instance
"""
assert name == 'mobilenet_v2_0_5_192'
model = torch.load(model_weight_path.as_posix(), weights_only=False)
preprocessing = functools.partial(load_preprocess_images, image_size=192, preprocess_type='inception')
wrapper = PytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 192
return wrapper

Expand Down Expand Up @@ -70,4 +80,4 @@ def get_bibtex(name):
if __name__ == '__main__':
# Use this method to ensure the correctness of the BaseModel implementations.
# It executes a mock run of brain-score benchmarks.
check_models.check_base_models(__name__)
check_models.check_base_models(__name__)
15 changes: 3 additions & 12 deletions brainscore_vision/models/mobilenet_v2_0_5_224/model.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import functools
from brainscore_vision.model_helpers.activations.pytorch import load_preprocess_images
from brainscore_vision.model_helpers.activations.pytorch import PytorchWrapper
from brainscore_vision.model_helpers.check_submission import check_models
from brainscore_vision.model_helpers.s3 import load_weight_file
from brainscore_vision.models.mobilenet_v2_0_5_192.model import MobilenetPytorchWrapper
import torch
import imp

Expand All @@ -15,7 +15,6 @@
version_id="null",
sha1="649501eadcf01f871bdb2265aa7dcac80594160a")
MainModel = imp.load_source('MainModel',model_path.as_posix())
model = torch.load(model_weight_path.as_posix())

def get_model(name):
"""
Expand All @@ -27,17 +26,9 @@ def get_model(name):
:return: the model instance
"""
assert name == 'mobilenet_v2_0_5_224'
last_layer = model
while last_layer._modules:
last_layer = last_layer._modules[next(reversed(last_layer._modules))]
last_layer.register_forward_hook(lambda _layer, _input, logits: logits[:, 1:])

model = torch.load(model_weight_path.as_posix(), weights_only=False)
preprocessing = functools.partial(load_preprocess_images, image_size=224, preprocess_type='inception')
wrapper = PytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 224
return wrapper
preprocessing = functools.partial(load_preprocess_images, image_size=224, preprocess_type='inception')
wrapper = PytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 224
return wrapper

Expand Down
8 changes: 4 additions & 4 deletions brainscore_vision/models/mobilenet_v2_0_75_160/model.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import functools
from brainscore_vision.model_helpers.activations.pytorch import load_preprocess_images
from brainscore_vision.model_helpers.activations.pytorch import PytorchWrapper
from brainscore_vision.model_helpers.check_submission import check_models
from brainscore_vision.model_helpers.s3 import load_weight_file
from brainscore_vision.models.mobilenet_v2_0_5_192.model import MobilenetPytorchWrapper
import torch
import imp

Expand All @@ -15,7 +15,6 @@
version_id="null",
sha1="9fc6f5e9864d524760c6e1dc8aa5702415457df4")
MainModel = imp.load_source('MainModel',model_path.as_posix())
model = torch.load(model_weight_path.as_posix())


def get_model(name):
Expand All @@ -28,8 +27,9 @@ def get_model(name):
:return: the model instance
"""
assert name == 'mobilenet_v2_0_75_160'
model = torch.load(model_weight_path.as_posix(), weights_only=False)
preprocessing = functools.partial(load_preprocess_images, image_size=160, preprocess_type='inception')
wrapper = PytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 160
return wrapper

Expand Down Expand Up @@ -71,4 +71,4 @@ def get_bibtex(name):
if __name__ == '__main__':
# Use this method to ensure the correctness of the BaseModel implementations.
# It executes a mock run of brain-score benchmarks.
check_models.check_base_models(__name__)
check_models.check_base_models(__name__)
9 changes: 5 additions & 4 deletions brainscore_vision/models/mobilenet_v2_0_75_192/model.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import functools
from brainscore_vision.model_helpers.activations.pytorch import load_preprocess_images
from brainscore_vision.model_helpers.activations.pytorch import PytorchWrapper
from brainscore_vision.model_helpers.check_submission import check_models
from brainscore_vision.model_helpers.s3 import load_weight_file
from brainscore_vision.models.mobilenet_v2_0_5_192.model import MobilenetPytorchWrapper
import torch
import imp

Expand All @@ -15,7 +15,7 @@
version_id="null",
sha1="af063236e83cb92fd78ed3eb7d9d2d4a65d794ab")
MainModel = imp.load_source('MainModel', model_path.as_posix())
model = torch.load(model_weight_path.as_posix())


def get_model(name):
"""
Expand All @@ -28,7 +28,8 @@ def get_model(name):
"""
assert name == 'mobilenet_v2_0_75_192'
preprocessing = functools.partial(load_preprocess_images, image_size=192, preprocess_type='inception')
wrapper = PytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
model = torch.load(model_weight_path.as_posix(), weights_only=False)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 192
return wrapper

Expand Down Expand Up @@ -68,4 +69,4 @@ def get_bibtex(name):
if __name__ == '__main__':
# Use this method to ensure the correctness of the BaseModel implementations.
# It executes a mock run of brain-score benchmarks.
check_models.check_base_models(__name__)
check_models.check_base_models(__name__)
7 changes: 7 additions & 0 deletions brainscore_vision/models/mobilenet_v2_0_75_224/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from brainscore_vision.model_helpers.brain_transformation import ModelCommitment
from brainscore_vision import model_registry
from .model import get_layers,get_model


model_registry['mobilenet_v2_0_75_224'] = \
lambda: ModelCommitment(identifier='mobilenet_v2_0_75_224', activations_model=get_model('mobilenet_v2_0_75_224'), layers=get_layers('mobilenet_v2_0_75_224'))
73 changes: 73 additions & 0 deletions brainscore_vision/models/mobilenet_v2_0_75_224/model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import functools
from brainscore_vision.model_helpers.activations.pytorch import load_preprocess_images
from brainscore_vision.model_helpers.check_submission import check_models
from brainscore_vision.model_helpers.s3 import load_weight_file
from brainscore_vision.models.mobilenet_v2_0_5_192.model import MobilenetPytorchWrapper
import torch
import imp

model_path = load_weight_file(bucket="brainscore-storage", folder_name="brainscore-vision/models",
relative_path="mobilenet_v2_0.75_224/mobilenet.py",
version_id="null",
sha1="e2dc4cd2fc8f922755b45e1e6149c3d8cc19622e")
model_weight_path = load_weight_file(bucket="brainscore-storage", folder_name="brainscore-vision/models",
relative_path="mobilenet_v2_0.75_224/mobilenet.pth",
version_id="null",
sha1="df37e28722d56b91d2151c2d06b5b4bc1aef2390")
MainModel = imp.load_source('MainModel', model_path.as_posix())

def get_model(name):
"""
This method fetches an instance of a base model. The instance has to be callable and return a xarray object,
containing activations. There exist standard wrapper implementations for common libraries, like pytorch and
keras. Checkout the examples folder, to see more. For custom implementations check out the implementation of the
wrappers.
:param name: the name of the model to fetch
:return: the model instance
"""
assert name == 'mobilenet_v2_0_75_224'
preprocessing = functools.partial(load_preprocess_images, image_size=224, preprocess_type='inception')
model = torch.load(model_weight_path.as_posix(), weights_only=False)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 224
return wrapper


def get_layers(name):
assert name == 'mobilenet_v2_0_75_224'
layer_names = (['MobilenetV2_Conv_Conv2D'] +
[f'MobilenetV2_expanded_conv_{i}_expand_Conv2D' for i in range(1, 17)] +
['MobilenetV2_Conv_1_Conv2D'])
return layer_names


def get_bibtex(name):
"""
A method returning the bibtex reference of the requested model as a string.
"""
return '''
@article{DBLP:journals/corr/abs-1801-04381,
author = {Mark Sandler and
Andrew G. Howard and
Menglong Zhu and
Andrey Zhmoginov and
Liang{-}Chieh Chen},
title = {Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification,
Detection and Segmentation},
journal = {CoRR},
volume = {abs/1801.04381},
year = {2018},
url = {http://arxiv.org/abs/1801.04381},
eprinttype = {arXiv},
eprint = {1801.04381},
timestamp = {Tue, 12 Jan 2021 15:30:06 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-1801-04381.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
'''


if __name__ == '__main__':
# Use this method to ensure the correctness of the BaseModel implementations.
# It executes a mock run of brain-score benchmarks.
check_models.check_base_models(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"V1": "MobilenetV2_expanded_conv_9_expand_Conv2D",
"V2": "MobilenetV2_expanded_conv_7_expand_Conv2D",
"V4": "MobilenetV2_expanded_conv_7_expand_Conv2D",
"IT": "MobilenetV2_expanded_conv_14_expand_Conv2D"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
imp
torch
8 changes: 8 additions & 0 deletions brainscore_vision/models/mobilenet_v2_0_75_224/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import brainscore_vision
import pytest


@pytest.mark.travis_slow
def test_has_identifier():
model = brainscore_vision.load_model('mobilenet_v2_0_75_224')
assert model.identifier == 'mobilenet_v2_0_75_224'
7 changes: 7 additions & 0 deletions brainscore_vision/models/mobilenet_v2_1_0_128/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from brainscore_vision.model_helpers.brain_transformation import ModelCommitment
from brainscore_vision import model_registry
from .model import get_layers,get_model


model_registry['mobilenet_v2_1_0_128'] = \
lambda: ModelCommitment(identifier='mobilenet_v2_1_0_128', activations_model=get_model('mobilenet_v2_1_0_128'), layers=get_layers('mobilenet_v2_1_0_128'))
73 changes: 73 additions & 0 deletions brainscore_vision/models/mobilenet_v2_1_0_128/model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import functools
from brainscore_vision.model_helpers.activations.pytorch import load_preprocess_images
from brainscore_vision.model_helpers.check_submission import check_models
from brainscore_vision.model_helpers.s3 import load_weight_file
from brainscore_vision.models.mobilenet_v2_0_5_192.model import MobilenetPytorchWrapper
import torch
import imp

model_path = load_weight_file(bucket="brainscore-storage", folder_name="brainscore-vision/models",
relative_path="mobilenet_v2_1.0_128/mobilenet_v2_1.py",
version_id="null",
sha1="c5f5fe31e92fc8fee3580f1703fcd3db74f6a753")
model_weight_path = load_weight_file(bucket="brainscore-storage", folder_name="brainscore-vision/models",
relative_path="mobilenet_v2_1.0_128/mobilenet_v2_1.0_128_frozen.pth",
version_id="null",
sha1="5f7f2f0117fc74d16e839bddf63036e6ef6b3e42")
MainModel = imp.load_source('MainModel',model_path.as_posix())

def get_model(name):
"""
This method fetches an instance of a base model. The instance has to be callable and return a xarray object,
containing activations. There exist standard wrapper implementations for common libraries, like pytorch and
keras. Checkout the examples folder, to see more. For custom implementations check out the implementation of the
wrappers.
:param name: the name of the model to fetch
:return: the model instance
"""
assert name == 'mobilenet_v2_1_0_128'
preprocessing = functools.partial(load_preprocess_images, image_size=128, preprocess_type='inception')
model = torch.load(model_weight_path.as_posix(), weights_only=False)
wrapper = MobilenetPytorchWrapper(identifier=name, model=model, preprocessing=preprocessing)
wrapper.image_size = 128
return wrapper


def get_layers(name):
assert name == 'mobilenet_v2_1_0_128'
layer_names = (['MobilenetV2_Conv_Conv2D'] +
[f'MobilenetV2_expanded_conv_{i}_expand_Conv2D' for i in range(1, 17)] +
['MobilenetV2_Conv_1_Conv2D'])
return layer_names


def get_bibtex(name):
"""
A method returning the bibtex reference of the requested model as a string.
"""
return '''
@article{DBLP:journals/corr/abs-1801-04381,
author = {Mark Sandler and
Andrew G. Howard and
Menglong Zhu and
Andrey Zhmoginov and
Liang{-}Chieh Chen},
title = {Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification,
Detection and Segmentation},
journal = {CoRR},
volume = {abs/1801.04381},
year = {2018},
url = {http://arxiv.org/abs/1801.04381},
eprinttype = {arXiv},
eprint = {1801.04381},
timestamp = {Tue, 12 Jan 2021 15:30:06 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-1801-04381.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
'''


if __name__ == '__main__':
# Use this method to ensure the correctness of the BaseModel implementations.
# It executes a mock run of brain-score benchmarks.
check_models.check_base_models(__name__)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"V1": "MobilenetV2_expanded_conv_4_expand_Conv2D",
"V2": "MobilenetV2_expanded_conv_7_expand_Conv2D",
"V4": "MobilenetV2_expanded_conv_5_expand_Conv2D",
"IT": "MobilenetV2_expanded_conv_14_expand_Conv2D"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
imp
torch
8 changes: 8 additions & 0 deletions brainscore_vision/models/mobilenet_v2_1_0_128/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import brainscore_vision
import pytest


@pytest.mark.travis_slow
def test_has_identifier():
model = brainscore_vision.load_model('mobilenet_v2_1_0_128')
assert model.identifier == 'mobilenet_v2_1_0_128'
7 changes: 7 additions & 0 deletions brainscore_vision/models/mobilenet_v2_1_0_160/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from brainscore_vision.model_helpers.brain_transformation import ModelCommitment
from brainscore_vision import model_registry
from .model import get_layers,get_model


model_registry['mobilenet_v2_1_0_160'] = \
lambda: ModelCommitment(identifier='mobilenet_v2_1_0_160', activations_model=get_model('mobilenet_v2_1_0_160'), layers=get_layers('mobilenet_v2_1_0_160'))
Loading

0 comments on commit 3b21280

Please sign in to comment.