Contributors |
Wiki » History » Version 10
« Previous -
Version 10/23
(diff) -
Next » -
Current version
Andrew Davison, 26 Jun 2014 15:13
Network models of V1¶
This project will be used to test implementations in PyNN (and eventually NeuroML) of published models of primary visual cortex (V1) based on spiking point neurons.
An initial focus will be on Lauritzen and Miller, 2003, but other models investigated will include Ozeki et al., 2009 and Sadagopan and Ferster, 2012.
This project is part of the INCF participation in the Google Summer of Code 2014.
Troyer Model¶
Here I will describe briefly the implementation of pubmed:9671678.
In order to run this model is necessary to first install git and PyNN and the appropriate simulator.
After that you can clone directly from git using:
git clone https://github.com/OpenSourceBrain/V1NetworkModels.git
As the project stands at this moment the workflow can be described in two steps. First there is a script produces_lgn_spikes.py
that creates the spike train for the cells in the Lateral Geniculate Nucleus (LGN). After the spikes are created they are stores in pickled format along with their respective positions to identify them downstream in the workflow. After we have the spikes train the file lgn.py
uses the PyNN's SpikeSourceArray to create an LGN array with the spikes that we have produced in the other file. Using the stored positions we can, in the same file, create the thalamo-cortical connectivity using a Gabor-like sampling mechanism. The next step is to create the cortical-cortical connections with the correlations between cortical cells' receptive fields.
Next I describe the two first stages of the workflow, that is, the creation of the LGN spikes through the filtering of the stimuli and the thalamo-cortical connectivity
LGN - spikes¶
In brief, the Retina and the Thalamus part of the model can be represented by a spatio-temporal filter that, when convolved with the stimuli, will produce the firing rate of a given LGN cell. After that, we can use a non-homogeneous Poisson process to produce the corresponding spikes for each cell. We describe this in detail bellow.
Spatio-Temporal Receptive Field (STRF)¶
The file kernel_functions.py
contains the code for creating the STRF. The spatial part of the kernel possess a center-surround architecture which is model as a different of Gaussians. The temporal part of the receptive field has a biphasic structure, we use the implementation describe in Cai et al (1998). The details of the implementation are described in detail in the companion blog of this project (link). Down here we present a kernel produce with this classes. The time here runs from left to right and from up to down as usual text, so we can see how the spatial components of the filter change in time with this series of two dimensional maps.
We also include a small script center_surround_plot.py
that can be used to visualize the spatial component of the STRF and received immediate feedback on how the overall pattern changes when the parameters and resolutions are changed.
Stimuli¶
The file stimuli_functions.py
contains the code for creating the stimuli. In particular we used the implementation of a full field sinusoidal grating with the parameters described in the paper. Down here we show an example of the stimuli at a particular point in time for illustration purposes:
Here we also included a small script sine_grating_plot.py
to visualize the sine grating at a particular point in time.
Convolution¶
After we have the stimuli and the STRF we can use the convolution function defined in the file analysis_functions.py
to calculate the response of LGN' neurons. The details of how the the convolution is implemented is described in the detail in the following entry of the blog (link). With this in our hand and using the parameters described in the paper we can already reproduce the first plot in Troyer's paper. The file lgn_firing_rate_troyer_plot1.py
in the repository does this automatically for us and give us the next plot:
Here we can see the firing rate for an on and for an off cell subjected to the same stimuli. Note that they are off-phase and also the contrast dependent response. The responses are rectified after back ground noise was added.
Producing Spikes¶
After we have the firing rate of a neuron we can use the produce_spikes functions in the file analysis_functions.py
. This functions takes the firing rate and using non-homogeneous Poisson process outputs an array with the spikes times. We provide one file produce_lgn_spikes_one.py
for testing variations of parameters and as an example showcase.
Storing Spikes¶
Now we have the complete mechanism of spike creation. In the file produce_lgn_spikes.py
. This file creates a grid of positions (This should correspond to the grid of LGN cells that we are going to use in PyNN) and produces the list of spikes associated with them as well as the positions. The particular stoage format that we are using is cPickled
.