Relative spike time coding and STDP-based orientation selectivity in V1 (Masquelier 2012)

 Download zip file 
Help downloading and running models
Accession:141062
Phenomenological spiking model of the cat early visual system. We show how natural vision can drive spike time correlations on sufficiently fast time scales to lead to the acquisition of orientation-selective V1 neurons through STDP. This is possible without reference times such as stimulus onsets, or saccade landing times. But even when such reference times are available, we demonstrate that the relative spike times encode the images more robustly than the absolute ones.
Reference:
1 . Masquelier T (2012) Relative spike time coding and STDP-based orientation selectivity in the early visual system in natural continuous and saccadic vision: a computational model. J Comput Neurosci 32:425-41 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Synapse;
Brain Region(s)/Organism:
Cell Type(s): Thalamus geniculate nucleus/lateral principal GLU cell; Neocortex L2/3 pyramidal GLU cell; Retina ganglion GLU cell; Retina photoreceptor cone GLU cell; Retina bipolar GLU cell; Abstract integrate-and-fire leaky neuron;
Channel(s):
Gap Junctions:
Receptor(s): AMPA;
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program; MATLAB;
Model Concept(s): Pattern Recognition; Coincidence Detection; Temporal Pattern Generation; Synchronization; Spatio-temporal Activity Patterns; Synaptic Plasticity; Long-term Synaptic Plasticity; Action Potentials; Learning; Unsupervised Learning; Winner-take-all; STDP; Development; Information transfer; Orientation selectivity; Vision;
Implementer(s): Masquelier, Tim [timothee.masquelier at alum.mit.edu];
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; Neocortex L2/3 pyramidal GLU cell; Retina ganglion GLU cell; Retina photoreceptor cone GLU cell; Retina bipolar GLU cell; AMPA;
const int nParamField = 22;
const	char *paramField[22] = {
             "stdp_t_pos",
             "stdp_t_neg",
             "stdp_a_pos",
             "stdp_a_neg",
               "stdp_cut",
              "minWeight",
              "memristor",
                   "t_op",
                   "t_on",
                  /* "tm", */
                  /* "ts", */
             /* "epspCut", */
          "tmpResolution",
             "epspKernel", /* double*	*/
            "epspMaxTime",
           "usePssKernel", /* bool	*/
              "pssKernel", /* double*	*/
             "ipspKernel", /* double*	*/      
          "inhibStrength", /* double */
              "nAfferent", /* int	*/
              "threshold",
               /* "nuThr", */
       "refractoryPeriod",
      /* "plottingPeriod", */ /* double*	*/
        "fixedFiringMode", /* bool	*/
     "fixedFiringLatency",
      "fixedFiringPeriod"
};
typedef struct tag_param {
double stdp_t_pos;
double stdp_t_neg;
double stdp_a_pos;
double stdp_a_neg;
double stdp_cut;
double minWeight;
bool memristor;
double t_op;
double t_on;
/*double tm;
double ts;
double epspCut; */
double tmpResolution;
double* epspKernel;
int		nEpspKernel;
double epspMaxTime;
bool usePssKernel;
double* pssKernel;
int		nPssKernel;
double* ipspKernel;
int		nIpspKernel;
double inhibStrength;
double nAfferent;
double threshold;
/*double nuThr; */
double refractoryPeriod;
/*double* plottingPeriod; */
bool fixedFiringMode;
double fixedFiringLatency;
double fixedFiringPeriod;
int nPeriod;
} PARAM;

PARAM matlabToC_param(const mxArray *matlabParam) {
	PARAM param;
	int i;
	mxArray *field;

	for(i=0; i<nParamField; i++) {
		field = mxGetField(matlabParam,0,paramField[i]);

		if(field==NULL) { /* missing param field */
			mexPrintf("Missing parameter field:");
			mxErrMsgTxt(paramField[i]);
		}

		switch(i) {
			case 0:
				param.stdp_t_pos = mxGetScalar(field);
				break;
			case 1:
				param.stdp_t_neg = mxGetScalar(field);
				break;
			case 2:
				param.stdp_a_pos = mxGetScalar(field);
				break;
			case 3:
				param.stdp_a_neg = mxGetScalar(field);
				break;
			case 4:
				param.stdp_cut = mxGetScalar(field);
				break;
			case 5:
				param.minWeight = mxGetScalar(field);
				break;                
			case 6:
				param.memristor  = (bool) mxGetScalar(field);
				break;
			case 7:
				param.t_op = mxGetScalar(field);
				break;
			case 8:
				param.t_on = mxGetScalar(field);
				break; 		
            case 9:
				param.tmpResolution = mxGetScalar(field);
				break;
			case 10:
				param.epspKernel = mxGetPr(field);
				param.nEpspKernel = (int) mxGetN(field);
				break;
			case 11:
				param.epspMaxTime = mxGetScalar(field);
				break;
			case 12:
				param.usePssKernel  = (bool) mxGetScalar(field);
				break;
			case 13:
				param.pssKernel  = mxGetPr(field);
				param.nPssKernel = (int) mxGetN(field);
				break;
			case 14:
				param.ipspKernel  = mxGetPr(field);
				param.nIpspKernel = (int) mxGetN(field);
				break;
			case 15:
				param.inhibStrength = mxGetScalar(field);
				break;
			case 16:
				param.nAfferent  = (int) mxGetScalar(field);
				break;
			case 17:
				param.threshold = mxGetScalar(field);
				break;
			/*case 18:
				param.nuThr = mxGetScalar(field);
				break; */
			case 18:
				param.refractoryPeriod = mxGetScalar(field);
				break;
/*			case 16:
				param.plottingPeriod  = mxGetPr(field);
				break; */
			case 19:
				param.fixedFiringMode  = (bool) mxGetScalar(field);
				break;
			case 20:
				param.fixedFiringLatency = mxGetScalar(field);
				break;
			case 21:
				param.fixedFiringPeriod = mxGetScalar(field);
				break;
		} 
	}
	return param;
}

Loading data, please wait...