Skip to main content

Project Status Build Status PyPi Status Python version Documentation Status Number of downloads Test Status Pytorch version Licence DOI

Exploring artificial neural networks with psychophysical experiments.

Overview

The osculari package provides an easy interface for different techniques to explore and interpret the internal presentation of deep neural networks.

  • Supporting the following pretrained models:
  • Managing convolution and transformer architectures.
  • Allowing to readout the network at any given depth.
  • Training a linear classifier on top of the extract features from any network/layer.
  • Experimenting with 2AFC and 4AFC paradigms.

At a granular level, Kornia is a library that consists of the following components:

Module Description
osculari Open source library to explore and interpret pretrained deep neural networks.
osculari.datasets A module to create datasets and dataloaders to train and test linear probes.
osculari.models A module to readout pretrained networks and add linear layers on top of them.
osculari.paradigms A module to implement psychophysical paradigms to experiment with deep networks.

Installation

From pip

pip install osculari
Alternative installation options

From source with symbolic links:

pip install -e .

From source using pip:

pip install git+https://github.com/ArashAkbarinia/osculari

Examples

Please check the example page of our documentation with many notebooks that can also be executed on Google Colab.

Quick start

Pretrained features

Let's create a linear classifier on top of the extracted features from a pretrained network to perform a binary classification task (i.e., 2AFC – two-alternative-force-choice). This is easily achieved by calling the paradigm_2afc_merge_concatenate from the osculari.models module.

architecture = 'resnet50'        # network's architecture
weights = 'resnet50'             # the pretrained weights
img_size = 224                   # network's input size
layer = 'block0'                 # the readout layer
readout_kwargs = {
    'architecture': architecture, 
    'weights': weights,
    'layers': layer,
    'img_size': img_size,
}
net_2afc = osculari.models.paradigm_2afc_merge_concatenate(**readout_kwargs)

Datasets

The osculari.datasets module provides datasets that are generated randomly on the fly with flexible properties that can be dynamically changed based on the experiment of interest. For instance, by passing a appearance_fun to the ShapeAppearanceDataset class, we can dynamically merge foreground masks with background images to generate stimuli of interest.

def appearance_fun(foregrounds, backgrounds):
    # implementing the required appearance (colour, texture, etc.) on foreground and merging
    # to background.
    return merged_imgs, ground_truth

num_samples = 1000               # the number of random samples generated in the dataset
num_imgs = net_2afc.input_nodes  # the number of images in each sample
background = 128                 # the background type
dataset = osculari.datasets.geometrical_shapes.ShapeAppearanceDataset(
    num_samples, num_imgs, img_size, background, appearance_fun,
    unique_bg=True, transform=net_2afc.preprocess_transform()
)

Linear probe

The osculari.paradigms module implements a set of psychophysical paradigms. The train_linear_probe function trains the network on a dataset following the paradigm passed to the function.

# experiment-dependent function to train on an epoch of data
epoch_fun = osculari.paradigms.forced_choice.epoch_loop
# calling the generic train_linear_probe function
training_log = osculari.paradigms.paradigm_utils.train_linear_probe(
    net_2afc, dataset, epoch_fun, './osculari_test/'
)

Psychophysical experiment

The osculari.paradigms module also implements a set of psychophysical experiments similar to the experiments conducted with human participants. In this example, we use the staircase function to gradually measure the network's sensitivity.

# experiment-dependent function to test an epoch of data
test_epoch_fun = osculari.paradigms.forced_choice.test_dataset
# the test dataset implementing desired stimuli.
class TestDataset(TorchDataset):
    def __getitem__(self, idx):
        return stimuli

test_log = osculari.paradigms.staircase(
    net_2afc, test_epoch_fun, TestDataset(), low_val=0, high_val=1
)

Contribution

We welcome all contributions to the project that extend or improve code and/or documentation! Please read the CONTRIBUTING page and follow the Code of Conduct.

Metadata

Release files for osculari 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for osculari 0.0.4
File Size Uploaded
osculari-0.0.4.tar.gz 31.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for osculari 0.0.4
File Interpreter ABI Platform
osculari-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 66.1 kB

Release files / osculari-0.0.4.tar.gz

Download URL osculari-0.0.4.tar.gz
Size 31.6 kB
Tags Source
SHA-256 checksum
How to use checksums
8a32dc30fb5560d98fe9469eccfb3e593a83348b08469b04cb4f21c65b09243a
BLAKE2b-256 checksum
How to use checksums
1f734db359d60f147db220e2d43782dacb23219f241f60040b40985a14a12d23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release files / osculari-0.0.4-py3-none-any.whl

Download URL osculari-0.0.4-py3-none-any.whl
Size 34.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d815cf032b845bffc94e561f0558c8ce86116bba47adb8f4ae7a6fa599b87d0
BLAKE2b-256 checksum
How to use checksums
67334301158aec82f9d153f7cd530bdac110dae26f58d2871303e2f9df917167
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page