# Feature vs global motion

As we see a visual scene, there is contribution of the motion of each of the objects that constitute the visual scene into detecting its global motion. In particular, it is debatable to know which weight individual features, such as small objects in the foreground, have into this computation compared to a dense texture-like stimulus, as that of the background for instance.

Here, we design a a stimulus where we control independently these two aspects of motions to titrate their relative contribution to the detection of motion.

Can you spot the motion ? Is it more going to the upper left or to the upper right?

(For a more controlled test, imagine you fixate on the center of the movie.)

# Using regex to filter an ISO8601 date

It can be useful to find a pattern such an ISO8601-formatted date in a set of files. I discovered it is possible to do that in the atom editor:

# Embedding a trajectory in noise

MotionClouds may be considered as a control stimulus - it seems more interesting to consider more complex trajectories. Following a previous post, we design a trajectory embedded in noise.

Can you spot the motion ? from left to right or reversed ?

(For a more controlled test, imagine you fixate on the top left corner of each movie.)

(Upper row is coherent, lower row uncoherent / Left is -> Right column is <-)

# Rainbow effect

When I see a rainbow, I perceive the luminance inside the arc to be brighter than outside the arc. Is this effect percpetual (inside our head) or physical (inside each droplet in the sky). So, this is a simple notebook to show off how to synthesize the image of a rainbow on a realistic sky. TL;DR: there must be a physical reason for it.

Outline: The rainbow is a set of colors over a gradient of hues, masked for certain ones. The sky will be a gradient over blueish colors.

# Statistics of the natural input to a ring model

What does the input to a population of neurons in the primary visual cortex look like? In this post, we will try to have a feeling of the structure and statistics of the natural input to such a "ring" model.

This notebook explores this question using a retina-like temporal filtering and oriented Gabor-like filters. It produces this polar plot of the instantaneous energy in the different orientations for a natural movie :

One observes different striking features in the structure of this input to populations of V1 neurons:

• input is sparse: often, a few orientations dominate - the shape of these components (bandwidth) seem to be similar,
• there are many "switches": at some moments, the representations flips to another. This is due to cuts in the movie (changes from one scene to the other for instance). In a more realistic setting where we would add eye movements, these switches should also happen during saccades (but is there any knowledge of the occurence of the switch by the visual system?),
• between switches, there is some coherence in amplitude (a component will slowly change its energy) but also in time (a component is more likely to have a ghradually changing oriantation, for instance when the scene rotates).

This structure is specific to the structure of natural images and to the way they transform (translations, rotations, zooms due to the motion and deformation of visual objects). This is certainly incorporated as a "prior" information in the structure of the visual cortex. As to know how and where this is implemented is an open scientific question.

This is joint work with Hugo Ladret.

# extending datasets in pyTorch

PyTorch is a great library for machine learning. You can in a few lines of codes retrieve a dataset, define your model, add a cost function and then train your model. It's quite magic to copy and paste code from the internet and get the LeNet network working in a few seconds to achieve more than 98% accuracy.

However, it can be tedious sometimes to extend existing objects and here, I will manipulate some ways to define the right dataset for your application. In particular I will modify the call to a standard dataset (MNIST) to place the characters at random places in a large image.

# generating an unique seed for a given filename

When creating large simulations, you may sometimes create unique identifiers for each of it. This is useful to cache intermediate results for instance. This is the main function of hashes. We will here create a simple one-liner function to generate one.

# Testing more complex trajectories

MotionClouds may be considered as a control stimulus - it seems more interesting to consider more complex trajectories.

# predictive-coding of variable motion

In some recent modeling work:

Laurent Perrinet, Guillaume S. Masson. Motion-based prediction is sufficient to solve the aperture problem. Neural Computation, 24(10):2726--50, 2012 http://invibe.net/LaurentPerrinet/Publications/Perrinet12pred

we study the role of transport in modifying our perception of motion. Here, we test what happens when we change the amount of noise in the stimulus.

In this script the predictive coding is done using the MotionParticles package and for a http://motionclouds.invibe.net/ within a disk aperture.

# accessing the data from a pupil recording

I am experimenting with the pupil eyetracker and could set it up (almost) smoothly on a macOS. There is an excellent documentation, and my first goal was to just record raw data and extract eye position.

In [1]:
from IPython.display import HTML
HTML('<center><video controls autoplay loop src="http://blog.invibe.net/files/2017-12-13_pupil%20test_480.mp4" width=61.8%/></center>')

Out[1]:

This video shows the world view (cranio-centric, from a head-mounted camera fixed on the frame) with overlaid the position of the (right) eye while I am configuring a text box. You see the eye fixating on the screen then jumping somewhere else on the screen (saccades) or on the keyboard / hands. Note that the screen itself shows the world view, such that this generates an self-reccurrent pattern.

For this, I could use the capture script and I will demonstrate here how to extract the raw data in a few lines of python code.

# MEUL with a non-parametric homeostasis

In this notebook, we will study how homeostasis (cooperation) may be an essential ingredient to this algorithm working on a winner-take-all basis (competition). This extension has been published as Perrinet, Neural Computation (2010) (see http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl ). Compared to other posts, such as this previous post, we improve the code to not depend on any parameter (namely the Cparameter of the rescaling function). For that, we will use a non-parametric approach based on the use of cumulative histograms.

This is joint work with Victor Boutin and Angelo Francisioni. See also the other posts on unsupervised learning.

# Designing a A0 poster using matplotlib

## Poster GDR Vision¶

This poster was presented in Lille at a vision workshop, check out http://invibe.net/LaurentPerrinet/Publications/Perrinet17gdr

Apart the content (which is in French) which recaps some previous work inbetween art and science, this post demonstrates how to generate a A0 poster programmatically. In particular, we will use matplotlib and some quickly forged functions to ease up the formatting.

# Improving calls to the LogGabor library

To code image as edges, for instance in the SparseEdges sparse coding scheme, we use a model of edges in images. A good model for these edges are bidimensional Log Gabor filter. This is implemented for instance in the LogGabor library. The library was designed to be precise, but not particularly for efficiency. In order to improve its speed, we demonstrate here the use of a cache to avoid redundant computations.

# The fastest 2D convolution in the world

Convolutions are essential components of any neural networks, image processing, computer vision ... but these are also a bottleneck in terms of computations... I will here benchmark different solutions using numpy, scipy or pytorch. This is work-in-progress, so that any suggestion is welcome, for instance on StackExchange or in the comments below this post.

# Le jeu de l'urne

Lors de la visite au laboratoire d'une brillante élève de seconde (salut Lena!), nous avons inventé ensemble un jeu: le jeu de l'urne. Le principe est simple: il faut deviner la couleur de la balle qu'on tire d'une urne contenant autant de balles rouges que noires - et ceci le plus tôt possible. Plus précisément, les règles sont:

• On a un ensemble de balles, la motié sont rouges, l'autre moitié noires (c'est donc un nombre pair de balles qu'on appelera $N$, disons $N=8$).
• Elles sont dans une urne opaque et donc on ne peut pas les voir à moins de les tirer une par une (sans remise dans l'urne). On peut tirer autant de balles qu'on veut pour les observer.
• Le but est de deviner la balle qu'on va tirer. Si on gagne (on a bien prédit la couleur), alors on gagne autant de points que le nombre de balles qui étaient dans l'urne au moment de la décision. Sinon on perd autant de points que l'on en aurait gagné!
• à long terme, la stratégie du jeu est de décider le meilleur moment où on est prêt à deviner la couleur de la balle qu'on va prendre et ainsi de gagner le plus de points possibles.

Nous avons d'abord créé ce jeu grâce au language de programmation Scratch sur https://scratch.mit.edu/projects/165806365/:

Ici, nous allons essayer de l'analyser plus finement.

# testing COMPs-fastPcum_scripted

In this notebook, we will study how homeostasis (cooperation) may be an essential ingredient to this algorithm working on a winner-take-all basis (competition). This extension has been published as Perrinet, Neural Computation (2010) (see http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl ). Compared to the previous post, we integrated the faster code to https://github.com/bicv/SHL_scripts.

This is joint work with Victor Boutin.

# testing COMPs-fastPcum

In this notebook, we will study how homeostasis (cooperation) may be an essential ingredient to this algorithm working on a winner-take-all basis (competition). This extension has been published as Perrinet, Neural Computation (2010) (see http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl ). Compared to the previous post, we optimize the code to be faster.

This is joint work with Victor Boutin.

# testing COMPs-Pcum

In this notebook, we will study how homeostasis (cooperation) may be an essential ingredient to this algorithm working on a winner-take-all basis (competition). This extension has been published as Perrinet, Neural Computation (2010) (see http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl ). In particular, we will show how one can build the non-linear functions based on the activity of each filter and which implement homeostasis.

This is joint work with Victor Boutin.

# A change in the definition of spatial frequency bandwidth?

Since the beginning, we have used a definition of bandwidth in the spatial frequency domain which was quite standard (see supp material for instance):

$$\mathcal{E}(f; sf_0, B_{sf}) \propto \frac {1}{f} \cdot \exp \left( -.5 \frac {\log( \frac{f}{sf_0} ) ^2} {\log( 1 + \frac {B_sf}{sf_0} )^2 } \right)$$

This is implemented in the folowing code which reads:

env = 1./f_radius*np.exp(-.5*(np.log(f_radius/sf_0)**2)/(np.log((sf_0+B_sf)/sf_0)**2))


However the one implemented in the code looks different (thanks to Kiana for spotting this!), so that one can think that the code is using:

$$\mathcal{E}(f; sf_0, B_{sf}) \propto \frac {1}{f} \cdot \exp \left( -.5 \frac {\log( \frac{f}{sf_0} ) ^2} {\log(( 1 + \frac {B_sf}{sf_0} )^2 ) } \right)$$

The difference is minimal, yet very important for a correct definition of the bandwidth!

# Extending Olshausens classical SparseNet

• In a previous notebook, we tried to reproduce the learning strategy specified in the framework of the SparseNet algorithm from Bruno Olshausen. It allows to efficiently code natural image patches by constraining the code to be sparse. In particular, we saw that in order to optimize competition, it is important to control cooperation and we implemented a heuristic to just do this.

• In this notebook, we provide an extension to the SparseNet algorithm. We will study how homeostasis (cooperation) may be an essential ingredient to this algorithm working on a winner-take-all basis (competition). This extension has been published as Perrinet, Neural Computation (2010) (see http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl ):

@article{Perrinet10shl,
Title = {Role of homeostasis in learning sparse representations},
Author = {Perrinet, Laurent U.},
Journal = {Neural Computation},
Year = {2010},
Doi = {10.1162/neco.2010.05-08-795},
Keywords = {Neural population coding, Unsupervised learning, Statistics of natural images, Simple cell receptive fields, Sparse Hebbian Learning, Adaptive Matching Pursuit, Cooperative Homeostasis, Competition-Optimized Matching Pursuit},
Month = {July},
Number = {7},
Url = {http://invibe.net/LaurentPerrinet/Publications/Perrinet10shl},
Volume = {22},
}


This is joint work with Victor Boutin.

# Reproducing Olshausen's classical SparseNet (part 3)

In this notebook, we test the convergence of SparseNet as a function of different learning parameters. This shows the relative robustness of this method according to the coding parameters, but also the importance of homeostasis to obtain an efficient set of filters:

• first, whatever the learning rate, the convergence is not complete without homeostasis,
• second, we achieve better convergence for similar learning rates and on a certain range of learning rates for the homeostasis
• third, the smoothing parameter alpha_homeo has to be properly set to achieve a good convergence.
• last, this homeostatic rule works with the different variants of sparse coding.

This is joint work with Victor Boutin.

# Reproducing Olshausens classical SparseNet (part 2)

• In a previous notebook, we tried to reproduce the learning strategy specified in the framework of the SparseNet algorithm from Bruno Olshausen. It allows to efficiently code natural image patches by constraining the code to be sparse.

• However, the dictionaries are qualitatively not the same as the one from the original paper, and this is certainly due to the lack of control in the competition during the learning phase.

• Herein, we re-implement the cooperation mechanism in the dictionary learning routine - this will be then proposed to the main code.

This is joint work with Victor Boutin.

# Reproducing Olshausen's classical SparseNet (part 1)

• This notebook tries to reproduce the learning strategy specified in the framework of the SparseNet algorithm from Bruno Olshausen. It allows to efficiently code natural image patches by constraining the code to be sparse.

• the underlying machinery uses a similar dictionary learning as used in the image denoising example from sklearn and our aim here is to show that a novel ingredient is necessary to reproduce Olshausen's results.

• All these code bits is regrouped in the SHL scripts repository (where you will also find some older matlab code). You may install it using

    pip install git+https://github.com/bicv/SHL_scripts

# Bogacz (2017) A tutorial on free-energy

I enjoyed reading "A tutorial on the free-energy framework for modelling perception and learning" by Rafal Bogacz, which is freely available here. In particular, the author encourages to replicate the results in the paper. He is himself giving solutions in matlab, so I had to do the same in python all within a notebook...

# Resizing a bunch of files using the command-line interface

## generating databases¶

A set of bash code to resize images to a fixed size.

Problem statement: we have a set of images with heterogeneous sizes and we want to homogenize the database to avoid problems when classifying them. Solution: ImageMagick.

We first identify the size and type of images in the database. The database is a collection of folders containing each a collection of files. We thus do a nested recursive loop:

# Using generators in Python

Let's explore generators and the yield statement in the python language...

# Finding extremal values in a nd-array

Sometimes, you need to pick up the $N$-th extremal values in a mutli-dimensional matrix.

Let's suppose it is represented as a nd-array (here, I further suppose you are using the numpy library from the python language). Finding extremal values is easy with argsort but this function operated on 1d vectors... Juggling around indices is sometimes not such an easy task, but luckily, we have the unravel_index function.

Let's unwrap an easy solution combining these functions:

# Saving and displaying movies and dynamic figures

It is insanely useful to create movies to illustrate a talk, blog post or just to include in a notebook:

In [1]:
from IPython.display import HTML
HTML('<center><video controls autoplay loop src="../files/2016-11-15_noise.mp4" width=61.8%/></center>')

Out[1]:

For years I have used a custom made solution made around saving single frames and then calling ffmpeg to save that files to a movie file. That function (called anim_save had to be maintained accross different libraries to reflect new needs (going to WEBM and MP4 formats for instance). That made the code longer than necessary and had not its place in a scientific library.

Here, I show how to use the animation library from matplotlib to replace that

A new version of https://nteract.io/ is out, I will try today to push that new infomation to http://caskroom.io/ by creating a new cask for this application. I will base things on this previous contribution where I was simply editing an existing cask.

• getting the token

"$(brew --repository)/Library/Taps/caskroom/homebrew-cask/developer/bin/generate_cask_token" '/Applications/nteract.app'  • set-up variables cd "$(brew --prefix)"/Homebrew/Library/Taps/caskroom/homebrew-cask
github_user='laurentperrinet'
project='nteract'
git remote -v


# A pi-pie named Monte Carlo

A lively community of people including students, researchers and tinkerers from Marseille (France) celebrate the so-called "π-day" on the 3rd month, 14th day of each year. A nice occasion for general talks on mathematics and society in a lively athmosphere and of course to ... a pie contest!

I participated last year (in 2016) with a pie called "Monte Carlo". Herein, I give the recipe by giving some clues on its design... This page is a notebook - meaning that you can download it and re-run the analysis I do here at home (and most importantly comment or modify it and correct potential bugs...).

# Une tarte au pi nommée Monte Carlo

Une active communauté d'étudiants, chercheurs et bidouilleurs célèbrent à Marseille la "journée π" le 3ème mois, 14ème jour de chaque année. Une occasion de rêve pour en apprendre plus sur les mathématiques et la science dans une ambiance conviviale... Mais c'est aussi l'occasion d'un concours de tartes!

J'ai eu l'opportunité d'y participer l'an dernier (soit pour l'édition 2016) avec une tarte appelée "Monte Carlo". Je vais donner ici la "recette" de ma tarte, le lien avec le nombre π et quelques digressions mathématiques (notament par rapport à la présence incongrue d'un éléphant mais aussi par rapport à la démarche scientifique)... Cette page est un "notebook" - vous pouvez donc la télécharger et relancer les analyses et figures (en utilisant python + jupyter). C'est aussi un travail non figé - prière de me suggérer des corrections!

# Predictive coding of motion in an aperture

After reading the paper http://www.jneurosci.org/content/34/37/12601.full by Helena X. Wang, Elisha P. Merriam, Jeremy Freeman, and David J. Heeger (The Journal of Neuroscience, 10 September 2014, 34(37): 12601-12615; doi: 10.1523/JNEUROSCI.1034-14.2014), I was interested to test the hypothesis they raise in the discussion section :

The aperture-inward bias in V1–V3 may reflect spatial interactions between visual motion signals along the path of motion (Raemaekers et al., 2009; Schellekens et al., 2013). Neural responses might have been suppressed when the stimulus could be predicted from the responses of neighboring neurons nearer the location of motion origin, a form of predictive coding (Rao and Ballard, 1999; Lee and Mumford, 2003). Under this hypothesis, spatial interactions between neurons depend on both stimulus motion direction and the neuron's relative RF locations, but the neurons themselves need not be direction selective. Perhaps consistent with this hypothesis, psychophysical sensitivity is enhanced at locations further along the path of motion than at motion origin (van Doorn and Koenderink, 1984; Verghese et al., 1999).

Concerning the origins of aperture-inward bias, I want to test an alternative possibility. In some recent modeling work:

Laurent Perrinet, Guillaume S. Masson. Motion-based prediction is sufficient to solve the aperture problem. Neural Computation, 24(10):2726--50, 2012 http://invibe.net/LaurentPerrinet/Publications/Perrinet12pred

I was surprised to observe a similar behavior: the trailing edge was exhibiting a stronger activation (i. e. higher precision revealed by a lower variance in this probabilistic model) while I would have thought intuitively the leading edge would be more informative. In retrospect, it made sense in a motion-based prediction algorithm as information from the leading edge may propagate in more directions (135° for a 45° bar) than in the trailing edge (45°, that is a factor of 3 here). While we made this prediction we did not have any evidence for it.

In this script the predictive coding is done using the MotionParticles package and for a http://motionclouds.invibe.net/ within a disk aperture.

# compiling notebooks into a report

For a master's project in computational neuroscience, we adopted a quite novel workflow to go all the steps from the learning of the small steps to the wrtiting of the final thesis. Though we were flexible in our method during the 6 months of this work, a simple workflow emerged that I describe here.

# Compiling and using pyNN + NEST + python3

PyNN is a neural simulation language which works well with the NEST simulator. Here I show my progress in using both with python 3 and how to show results in a notebook.

# A bit more fun with gravity waves

## More fun with gravity waves¶

Motion Clouds were defined in the origin to provide a simple parameterization for textures. Thus we used a simple unimodal, normal distribution (on the log-radial frequency space to be more precise). But the larger set of Random Phase Textures may provide some interesting examples, some of them can even be fun! This is the case of this simulation of the waves you may observe on the surface on the ocean.

Main features of gravitational waves are:

1. longer waves travel faster (tsunami are fast and global, ripples are slow and local) - speed is linearly proportional to wavelength
2. phase speed (following a wave's crest) is twice as fast as group speed (following a group of waves).

# IRM clouds

A feature of MotionClouds is the ability to precisely tune the precision of information following the principal axes. One which is particularly relevant for the primary visual cortical area of primates (area V1) is to tune the otirentation mean and bandwidth.

# Compiling and using pyNN + NEST + python3

PyNN is a neural simulation language which works well with the NEST simulator. Here I show my progress in using both with python 3 and how to show results in a notebook.

# Mirror clouds

An essential component of natural images is that they may contain order at large scales such as symmetries. Let's try to generate some textures with an axial (arbitrarily vertical) symmetry and take advantage of the different properties of random phase textures.

# Using scratch to illustrate the Flash-Lag Effect

Scratch (see https://scratch.mit.edu/) is a programming language aimed at introducing coding litteracy to schools and education. Yet you can implement even complex algorithms and games. It is visual, multi-platform and critically, open-source. Also, the web-site educates to sharing code and it is very easy to "fork" an existing project to change details or improve it. Openness at its best!

During a visit of a 14-year schoolboy at the lab, we used that to make a simple psychopysics experiment available at https://scratch.mit.edu/projects/92044597/ :

# élasticité trames V1

L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu.

On va maintenant utiliser des forces elastiques pour coordonner la dynamique des lames dans la trame.

# bootstraping posts for élasticité

L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu.

.. media:: http://vimeo.com/150813922

Ce meta-post gère la publication sur http://blog.invibe.net.

# Reproducing Olshausen's classical SparseNet (part 3)

This is an old blog post, see the newer version in this post

# Reproducing Olshausen's classical SparseNet (part 4)

This is an old blog post, see the newer version in this post and following.

• A new version of owncloud is out, I will try today to push that new infomation to http://caskroom.io/

• I will base things on this previous contribution

• set-up variables

cd $(brew --prefix)/Library/Taps/caskroom/homebrew-cask github_user='meduz' project='owncloud' git remote -v  Read more… # élasticité - scénario final montage L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post produit le montage final des séquences. Read more… # élasticité - scénario onde L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post crée des ondes se propageant sur la série de lames. Read more… # élasticité, geometrie L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post implémente une configuration favorisant des angles droits. Read more… # élasticité - scénario vague L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post implémente une configuration implémentant une vague de propagation. Read more… # élasticité expansion en miroir - dynamique d'un point focal L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post implémente une dynamique sur le point focal. Read more… # élasticité expansion en miroir - exploration paramètres L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post explore les paramètres de la structure et de l'extension des reflections. Read more… # élasticité expansion en miroir - principes L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post étudie quelques principes fondamentaux relatifs à des reflections mutliples dans des mirroirs. Read more… # Multiprocessing Testing some multi-threading libraries Read more… # élasticité expansion L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post étudie commment sampler des points sur la structure. Read more… # élasticité expansion-réaction diffusion L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post étudie une reaction de reaction diffusion sur la structure. Read more… # élasticité rapsberry pyserial L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post étudie la connection entre le raspberry π (qui fait tourner les simulations) et les arduino (qui commandent les moteurs). Read more… # élasticité, control scenario L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post simule une configuration de contrôle sur l'ensemble de la structure. Read more… # élasticité, Fresnel L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post simule une configuration de type Fresnel sur l'ensemble de la structure. Read more… # élasticité, vapory and reflections L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post simule un rendu de reflection utilisant povray. A scene with mirrors rendered with vapory (see http://blog.invibe.net/posts/2015-01-16-rendering-3d-scenes-in-python.html ) Read more… # Smooth transition between MCs A smooth transition of MotionClouds while smoothly changing their parameters. Read more… # A simpler e-mail client: Diving into mutt My installation notes for mutt_+Homebrew_+gmail, based on this post by steve losh and this other post Read more… # A hitchhiker guide to Matching Pursuit The Matching Pursuit algorithm is popular in signal processing and applies well to digital images. I have contributed a python implementation and we will show here how we may use that for extracting a sparse set of edges from an image. @inbook{Perrinet15bicv, title = {Sparse models}, author = {Perrinet, Laurent U.}, booktitle = {Biologically-inspired Computer Vision}, chapter = {13}, editor = {Keil, Matthias and Crist\'{o}bal, Gabriel and Perrinet, Laurent U.}, publisher = {Wiley, New-York}, year = {2015} }  Read more… # A simple pre-processing filter for image processing When processing images, it is useful to avoid artifacts, in particular when you try to understand biological processes. In the past, I have used natural images (found on internet, grabbed from holiday pictures, ...) without controlling for possible problems. In particular, digital pictures are taken on pixels which are most often placed on a rectangular grid. It means that if you rotate that image, you may lose information and distort it and thus get wrong results (even for the right algorithm!). Moreover, pictures have a border while natural scenes do not, unless you are looking at it through an aperture. Intuitively, this means that large objects would not fit on the screen and are less informative. In computer vision, it is easier to handle these problems in Fourier space. There, an image (that we suppose square for simplicity) is transformed in a matrix of coefficients of the same size as the image. If you rotate the image, the Fourier spectrum is also rotated. But as you rotate the image, the information that was in the corners of the original spectrum may span outside the spectrum of the rotated image. Also, the information in the center of the spectrum (around low frequencies) is less relevant than the rest. Here, we will try to keep as much information about the image as possible, while removing the artifacts related to the process of digitalizing the picture. Read more… # Extending Olshausens classical SparseNet This is an old blog post, see the newer version in this post Read more… # Reproducing Olshausens classical SparseNet (part 2) This is an old blog post, see the newer version in this post Read more… # Reproducing Olshausen's classical SparseNet (part 1) This is an old blog post, see the newer version in this post Read more… # trame-sensorielle L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. Ce post utilise une image naturelle comme entrée d'une "trame sensorielle". Read more… # Moving from Mayavi to VisPy A long standing dependency of MotionClouds is MayaVi. While powerful, it is tedious to compile and may discourage new users. We are trying here to show some attempts to do the same with the vispy library. In another post, we tried to use matplotlib, but this had some limitations. Let's now try vispy, a scientific visualisation library in python using opengl. Read more… # elastic-force L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu. On va maintenant utiliser des forces elastiques pour coordonner la dynamique des lames dans la trame. Read more… # homebrew cask : updating an existing cask • A new version of psychopy is out, I will try today to push that new infomation to http://caskroom.io/ • I will base things on this previous contribution • set-up variables cd$(brew --prefix)/Library/Taps/caskroom/homebrew-cask
github_user='meduz'
project='psychopy'
git remote -v


# The Vancouver set

I have heard Vancouver can get foggy and cloudy in the winter. Here, I will provide some examples of realistic simulations of it...

This stimulation was used in the following poster presented at VSS:


@article{Kreyenmeier2016,
author = {Kreyenmeier, Philipp and Fooken, Jolande and Spering, Miriam},
doi = {10.1167/16.12.457},
issn = {1534-7362},
journal = {Journal of Vision},
month = {sep},
number = {12},
pages = {457},
publisher = {The Association for Research in Vision and Ophthalmology},
title = {{Similar effects of visual context dynamics on eye and hand movements}},
url = {http://jov.arvojournals.org/article.aspx?doi=10.1167/16.12.457},
volume = {16},
year = {2016}
}

• A new version of owncloud is out, I will try today to push that new infomation to http://caskroom.io/

• I will base things on this previous contribution

• set-up variables

cd $(brew --prefix)/Library/Taps/caskroom/homebrew-cask github_user='meduz' project='owncloud' git remote -v  Read more… # elastic-grids-of-edges Dans un notebook précédent, on a vu comment créer une grille hexagonale et comment l'animer. On va maintenant utiliser MoviePy pour animer ces plots. Read more… # Saving files in HoloViews Here, we show how to save files from figures generated with HoloViews. This was thoroughly explained in this page. Read more… # An optic flow with Motion Clouds ## Horizon¶ Script done in collaboration with Jean Spezia. Read more… # Tiling Motion Clouds Script done in collaboration with Jean Spezia. Read more… # Creating an animation using Gizeh + MoviePy Gizeh (that is, Cairo for tourists) is a great interface to the Cairo drawing library. I recently wished to make a small animation of a bar moving in the visual field and crossing a simple receptive field to illustrate some simple motions that could be captured in the primary visual cortex ansd experiments that could be done there. Read more… # homebrew cask : updating an existing cask • A new version of owncloud is out, I will try today to push that new infomation to http://caskroom.io/ • I will base things on my contribution • set-up variables cd$(brew --prefix)/Library/Taps/caskroom/homebrew-cask
github_user='meduz'
project='owncloud'
git remote -v


# Rendering 3D scenes in python

The above snippet shows how you can create a 3D rendered scene in a few lines of codes (from http://zulko.github.io/blog/2014/11/13/things-you-can-do-with-python-and-pov-ray/):

In [1]:
import vapory

camera = vapory.Camera( 'location', [0, 2, -3], 'look_at', [0, 1, 2] )
light = vapory.LightSource( [2, 4, -3], 'color', [1, 1, 1] )
sphere = vapory.Sphere( [0, 1, 2], 2, vapory.Texture( vapory.Pigment( 'color', [1, 0, 1] )))

scene = vapory.Scene(camera = camera , # a Camera object
objects = [light, sphere], # POV-Ray objects (items, lights)
included = ["colors.inc"]) # headers that POV-Ray may need

# passing 'ipython' as argument at the end of an IPython Notebook cell
# will display the picture in the IPython notebook.
scene.render('ipython', width=900, height=500)

Out[1]:

Here are more details...

# The right imports in a notebook

Following this post http://carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html, here is ---all in one single cell--- the bits necessary to import most useful libraries in an ipython notebook:

In [1]:
# import numpy and set the printed precision to something humans can read
import numpy as np
np.set_printoptions(precision=2, suppress=True)
# set some prefs for matplotlib
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams.update({'text.usetex': True})
fig_width_pt = 700.  # Get this from LaTeX using \showthe\columnwidth
inches_per_pt = 1.0/72.27               # Convert pt to inches
fig_width = fig_width_pt*inches_per_pt  # width in inches
FORMATS = ['pdf', 'eps']
phi = .5*np.sqrt(5) + .5 # useful ratio for figures
# define plots to be inserted interactively
%matplotlib inline
#%config InlineBackend.figure_format='retina' # high-def PNGs, quite bad when using file versioning
%config InlineBackend.figure_format='svg'


Below, I detail some thoughts on why it is a perfect preamble for most ipython notebooks.

# todo.txt

In a previous post, I described steps to follow to live with decentralized, open-source cloud services (see here), let's focus on setting up a todo list.

Everything revolves under the http://todotxt.com/ specifications -- all in one, simple todo.txt file

# Bib Cloud

I always used a single babel.bib BibTex file to keep a record of all my readings. Great. Then I managed it using a VCS (first SVN, then git). Super great. But at the same time, resources like CiteUlike or Mendeley (but also other services like orcid) allow for cloud-like services of having this data everywhere, anytime. Super super great!

But this fails if you have no connection to internet (remote conference, ...) or more importantly if these services change their policy (mendeley to citeulike sync disappeared at a sudden). The work you provide is not yours. These are mostly commercial services while all the open-source tools are there. Most importantly, the multiplicity of tools makes it difficult to share bibliographic data easily, while if we would have a tool to translate between them this would make it possible (without changing your habits).

# Can we live without Google and co?

The tools offered by so-called "cloud services" are useful but most often rely on the capacity to lock you in. Without leaving them completely, is there an alternative?

In a previous post on how to live with open-source cloud services and to not depend on centralized private cloud services (see here), let's focus on an install on a empty android phone.

# Recruiting different population ratios in V1 using orientation components: defining a protocol

A feature of MotionClouds is the ability to precisely tune the precision of information following the principal axes. One which is particularly relevant for the primary visual cortical area of primates (area V1) is to tune the otirentation mean and bandwidth.

This is part of a larger study to tune orientation bandwidth.

# Polar bar plots

I needed to show prior information for the orientation of contours in natural images showing a preference for cardinal axis. A polar plot showing seemed to be a natural choice for showing the probability distribution function. However, this seems visually flawed...

# Can we live without Google and co?

The tools offered by so-called "cloud services" are useful but most often there is a (natural) tendency for these services to make you use their tools (youtube for google, iphone for apple). Why do we need to be locked to these services when open-source alternatives abound?

# paramétrer l'e-mail à l'INT

• paramétrer un nouveau compte avec son adresse lolo.toto@univ-amu.fr
• indiquer les parametres:
1. en entrant, serveur IMAP imap.univ-amu.fr avec SSL (port 993) et l'authentification est par mot de passe
2. en sortant, serveur SMTP smtp.univ-amu.fr en STARTTLS, port 587 et l'authentification est par mot de passe
3. attention, en entrant et en sortant, comme identifiant, l'identifiant univ-amu (de la forme toto.l)

# Reading KML My Tracks files in ipython

It's easy to record tracks (for instance while running) using the "My tracks" app on android systems. What about being able to re-use them?

In :doc:2014-11-22-reading-kml-my-tracks-files-in-ipython we reviewed different approches. Let's now try to use this data.

# Reading KML My Tracks files in ipython

It's easy to record tracks (for instance while running) using the "My tracks" app (see https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks) on android systems. What about being able to re-use them?

Here, I am reviewing some methods to read a KML file, including fastkml, pykml, to finally opt for a custom method with the xmltodict package.

• A new version of owncloud is out, I will try today to push that new infomation to http://caskroom.io/

• I will base things on my contribution,

• set-up variables

cd $(brew --prefix)/Library/Taps/caskroom/homebrew-cask github_user='meduz' project='owncloud' git remote -v  Read more… # Reverse-phi and Asymmetry of ON and OFF responses We test Reverse-phi motion and the Asymmetry of ON and OFF responses using MotionClouds. Read more… # Recruiting different population ratios in V1 using orientation components A feature of MotionClouds is the ability to precisely tune the precision of information following the principal axes. One which is particularly relevant for the primary visual cortical area of primates (area V1) is to tune the orientation mean and bandwidth. Read more… # Recruiting different population ratios in V1 using orientation components: a biphoton study A feature of MotionClouds is the ability to precisely tune the precision of information following the principal axes. One which is particularly relevant for the primary visual cortical area of primates (area V1) is to tune the otirentation mean and bandwidth. To install the necessary libraries, check out the documentation. ### summary of the biphoton protocol¶ For the biphoton experiment: • The refresh rate of the screen is 70Hz and stimulation for 5 times 1s, which makes 350 images. • for the spatial frequency 0.125 cyc/deg is optimal (between 0.01 and 0.16). • for the temporal frequency 2 cyc/sec is optimal (between 0.8 and 4 sic/sec), we manipulate$B_V$to get a qualitative estimate. Read more… # A bit of fun with gravity waves ## A bit of fun with gravity waves¶ Motion Clouds were defined in the origin to provide a simple parameterization for textures. Thus we used a simple unimodal, normal distribution (on the log-radial frequency space to be more precise). But the larger set of Random Phase Textures may provide some interesting examples, some of them can even be fun! This is the case of this simulation of the waves you may observe on the surface on the ocean. In [1]: from IPython.display import HTML HTML('<center><video controls autoplay loop src="../files/2014-10-24_waves/waves.mp4" width=61.8%/></center>')  Out[1]: Main features of gravitational waves are: 1. longer waves travel faster (tsunami are fast and global, ripples are slow and local) - speed is linearly proportional to wavelength 2. phase speed (following a wave's crest) is twice as fast as group speed (following a group of waves). # Statistics of time-varying images In this notebook, we are interested in replicating the results from Dong and Attick (1995). Read more… # Motion Plaid ## MotionPaids : from MotionClouds components to a plaid-like stimulus¶ In [1]: import numpy as np import MotionClouds as mc downscale = 2 fx, fy, ft = mc.get_grids(mc.N_X/downscale, mc.N_Y/downscale, mc.N_frame/downscale) name = 'MotionPlaid' mc.figpath = '../files/2014-10-20_MotionPlaids' import os if not(os.path.isdir(mc.figpath)): os.mkdir(mc.figpath)  Plaids are usually created by adding two moving gratings (the components) to form a new simulus (the pattern). Such stimuli are crucial to understand how for instance information about motion is represented and processed and its neural mechanisms have been extensively studied notably by Anthony Movshon at the NYU. One shortcomming is the fact that these are created by components which created interference patterns when they are added (as in a Moiré pattern). The question remains to know if everything that we know about components vs pattern processing comes from these interference patterns or reaaly by the processing of the two componenents as a whole. As such, Motion Clouds are ideal candidates because they are generated with random phases: by construction, there should not be any localized interference between components. Let's verfy that: Defintion of parameters: In [2]: theta1, theta2, B_theta = np.pi/4., -np.pi/4., np.pi/32  This figure shows how one can create MotionCloud stimuli that specifically target component and pattern cell. We show in the different lines of this table respectively: Top) one motion cloud component (with a strong selectivity toward the orientation perpendicular to direction) heading in the upper diagonal Middle) a similar motion cloud component following the lower diagonal Bottom) the addition of both components: perceptually, the horizontal direction is predominant. In [3]: print( mc.in_show_video.__doc__)   Columns represent isometric projections of a cube. The left column displays iso-surfaces of the spectral envelope by displaying enclosing volumes at 5 different energy values with respect to the peak amplitude of the Fourier spectrum. The middle column shows an isometric view of the faces of the movie cube. The first frame of the movie lies on the x-y plane, the x-t plane lies on the top face and motion direction is seen as diagonal lines on this face (vertical motion is similarly see in the y-t face). The third column displays the actual movie as an animation. Given a name, displays the figures corresponding to the Fourier spectra, the stimulus cubes and movies within the notebook.  Component one: In [ ]: diag1 = mc.envelope_gabor(fx, fy, ft, theta=theta1, V_X=np.cos(theta1), V_Y=np.sin(theta1), B_theta=B_theta) name_ = name + '_comp1' mc.figures(diag1, name_, seed=12234565, figpath=mc.figpath) mc.in_show_video(name_, figpath=mc.figpath)  /usr/local/lib/python3.7/site-packages/vispy/visuals/isocurve.py:22: UserWarning: VisPy is not yet compatible with matplotlib 2.2+ warnings.warn("VisPy is not yet compatible with matplotlib 2.2+")  Component two: In [ ]: diag2 = mc.envelope_gabor(fx, fy, ft, theta=theta2, V_X=np.cos(theta2), V_Y=np.sin(theta2), B_theta=B_theta) name_ = name + '_comp2' mc.figures(diag2, name_, seed=12234565, figpath=mc.figpath) mc.in_show_video(name_, figpath=mc.figpath)  The pattern is the sum of the two components: In [ ]: name_ = name mc.figures(diag1 + diag2, name, seed=12234565, figpath=mc.figpath) mc.in_show_video(name_, figpath=mc.figpath)  ### A grid of plaids shows switch from transparency to pattern motion¶ Script done in collaboration with Jean Spezia. In [ ]: import os import numpy as np import MotionClouds as mc name = 'MotionPlaid_9x9' if mc.check_if_anim_exist(name): B_theta = np.pi/32 N_orient = 9 downscale = 4 fx, fy, ft = mc.get_grids(mc.N_X//downscale, mc.N_Y//downscale, mc.N_frame//downscale) mov = mc.np.zeros(((N_orient*mc.N_X//downscale), (N_orient*mc.N_X//downscale), mc.N_frame//downscale)) i = 0 j = 0 for theta1 in np.linspace(0, np.pi/2, N_orient)[::-1]: for theta2 in np.linspace(0, np.pi/2, N_orient): diag1 = mc.envelope_gabor(fx, fy, ft, theta=theta1, V_X=np.cos(theta1), V_Y=np.sin(theta1), B_theta=B_theta) diag2 = mc.envelope_gabor(fx, fy, ft, theta=theta2, V_X=np.cos(theta2), V_Y=np.sin(theta2), B_theta=B_theta) mov[(i)*mc.N_X//downscale:(i+1)*mc.N_X//downscale, (j)*mc.N_Y//downscale : (j+1)*mc.N_Y//downscale, :] = mc.random_cloud(diag1 + diag2, seed=1234) j += 1 j = 0 i += 1 mc.anim_save(mc.rectif(mov, contrast=.99), os.path.join(mc.figpath, name))  In [ ]: mc.in_show_video(name, figpath=mc.figpath)  As in (Rust, 06) we show in this table the concatenation of a table of 9x9 MotionPlaids where the angle of the components vary on respectively the horizontal and vertical axes. The diagonal from the bottom left to the top right corners show the addition of two component MotionClouds of similar direction: They are therefore also intance of the same Motion Clouds and thus consist in a single component. As one gets further away from this diagonal, the angle between both component increases, as can be seen in the figure below. Note that first and last column are different instance of similar MotionClouds, just as first and last lines in in the table. ### A parametric exploration on MotionPlaids¶ In [ ]: N_orient = 8 downscale = 2 fx, fy, ft = mc.get_grids(mc.N_X/downscale, mc.N_Y/downscale, mc.N_frame) theta = 0 for dtheta in np.linspace(0, np.pi/2, N_orient): name_ = name + 'dtheta_' + str(dtheta).replace('.', '_') diag1 = mc.envelope_gabor(fx, fy, ft, theta=theta + dtheta, V_X=np.cos(theta + dtheta), V_Y=np.sin(theta + dtheta), B_theta=B_theta) diag2 = mc.envelope_gabor(fx, fy, ft, theta=theta - dtheta, V_X=np.cos(theta - dtheta), V_Y=np.sin(theta - dtheta), B_theta=B_theta) mc.figures(diag1 + diag2, name_, seed=12234565, figpath=mc.figpath) mc.in_show_video(name_, figpath=mc.figpath)  For clarity, we display MotionPlaids as the angle between both component increases from 0 to pi/2. Left column displays iso-surfaces of the spectral envelope by displaying enclosing volumes at 5 different energy values with respect to the peak amplitude of the Fourier spectrum. Right column of the table displays the actual movie as an animation. # Aperture Problem ## SlippingClouds: MotionClouds for exploring the aperture problem¶ Read more… # Animation in a notebook using holoviews An easy way to include movie in a notebook using Holoviews. Read more… # How can I display an image in the terminal? Is there any sort of utility I can use to convert an image to ASCII and then print it in my terminal? I looked for one but couldn't seem to find any.  Read more… # Setting options in holoviews ### using holoviews : setting display options¶ Holoviews is a nice framework to extend pyplot capacities. Read more… # 2014-10-08_Moving from Mayavi to Matplotlib A long standing dependency of MotionClouds is MayaVi. While powerful, it is tedious to compile and may discourage new users. We are trying here to show some attempts to do the same with matplotlib or any other library. Read more… # transferring (lots of) files to a remote server + saving space I have recently been asked how to transfer lots of file from a backup server to a local disk. The context is that 1. the backup is an archive to be put on an external hard drive and then in a closet for future use, 2. the transfer line is not quite reliable and transfers may stop (for instance if it is mounted as a samba / windows / applefile share) Read more… # grille-hexagonale ### Positionnement des lames¶ on définit des configurations pour la position des lames Read more… # [Stage M1] Chloé Pasturel : week 6 Nous allons simuler un ring avec en entrée une courbe représentant des stimuli "naturels" • simulations center-surround • synthèse • écriture poster en latex Read more… # [Stage M1] Chloé Pasturel : week 5 ### Loi de Von mises :¶ La densité est définie sur$[0, 2\pi[$par$ f(x) = \frac {e^{\kappa cos(\theta - m)}}{2 \pi I_{0}(\kappa)} ~$avec$~ \kappa = \frac {1}{\sigma^{2}} $L'orientation est définie sur$[0, \pi[$par un remplaçant de la variable$~ (\theta_d - m) ~$par$~ 2(\theta_o - m)$nous obtenons alors la densité pour$\theta_o$:$ f(x) = \frac{1}{2 \pi I_{0}(\kappa)} \cdot {e^{\frac{cos(2(\theta - m))}{\sigma^{2}}}}$et$~ p = \frac {1} {2\pi \sigma_1 \sigma_2} \cdot e^{- 2 \frac{(m_2-m_1)^{2}}{\sigma_{1}^{2} + \sigma_{2}^{2}}}$car avec le changement de variable :$ \varepsilon(x) = \frac {1} {\sigma_{1} \sqrt{2\pi}} \cdot e^{\frac {-(2(x-m_{1}))^{2}} {2\sigma_{1}^{2}}} $et$\gamma (x) = \frac {1} {\sigma_2 \sqrt{2\pi}} \cdot e^{\frac {-(2(x-m_2))^{2}} {2\sigma_{2}^{2}}} $donc$\varepsilon(x) \cdot \gamma(x) = \frac {1}{2\pi \sigma_{1} \sigma_{2}} \cdot e^{-2(\frac {(x-m_{1})^{2}}{\sigma_{1}^{2}} + \frac{(x-m_{2})^{2}}{\sigma_{2}^{2}})} = \frac {1} {2\pi \sigma_1 \sigma_2} \cdot e^{- 2 \frac{(m_2-m_1)^{2}}{\sigma_{1}^{2} + \sigma_{2}^{2}}}$Read more… # [Stage M1] Chloé Pasturel : week 4 • simulations avec différents MCs • ring avec représentation de la vitesse angulaire Read more… # [Stage M1] Chloé Pasturel : week 3 Travail sur les Motion Clouds et observation des différents changement de paramètre particulièrement B_sf • introduction aux motions clouds: installation et display dans un notebook • synthèse de clouds avec différents theta • synthèse avec différents B_theta (V=0) • utilisation du trick dans http://motionclouds.invibe.net/posts/smooth-transition-between-mcs.html pour créer un stimulus pour lequel l'orientation tourne de 0 à 2*pi • proposer une façon simple de passer de ce signal à une entré pour le ring (un peu de maths? un MC est une texture définie en fourier, une cellule simple fait une convolution dans l'espace, donc une multiplication dans Fourier: on pourrait avoir la sortie linéaire du neurone de V1 directement ...) http://neuralensemble.github.io/MotionClouds/ http://invibe.net/LaurentPerrinet/TagMotionClouds Read more… # [Stage M1] Chloé Pasturel : week 2 Simulation d'un ring model grâce au programme brian et observation des conséquences du changement de différents paramêtres • simulation d'un ring par l'intermédiaire de brian http://briansimulator.org/ • courbe de sélectivité en fonction des parametres • courbe de sélectivité à différents contrastes Read more… # [Stage M1] Chloé Pasturel : plan du stage ## Modele d'une entrée naturelle à un modèle de selectivité à l'orientation¶ Stage M1 de Chloé Pasturel, encadrée par Laurent Perrinet (INT, CNRS) ### Contexte du stage¶ (importé depuis http://invibe.net/LaurentPerrinet/TagAnrBalaV1 ) Read more… # [Stage M1] Chloé Pasturel : week 1 • définition du sujet - lecture Hansel • mise en place du python notebook • demos de brian ### installation des outils¶ 1. virtual box 2. VM ubuntu 3. <<< guest additions + clone 4. neurodebian  wget -O- http://neuro.debian.net/lists/trusty.de-md.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list sudo apt-key adv --recv-keys --keyserver pgp.mit.edu 2649A5A9 sudo apt-get update 1. install on ubuntu sudo apt-get install aptitude sudo aptitude install ipython-notebook sudo aptitude install python-matplotlib sudo aptitude install python-brian sudo aptitude install texlive-full sudo aptitude install python-pynn pip install --user neurotools # Vim commands for moving around ## Basics commands in Vim Sometimes, it's good to go back to the basics. In command mode, typing :help usr_02.txt (or simplier something like :h usr_<TAB>02<TAB><ENTER>), you learn the letters for navigating a file: • these letters are HJKL - glad it works on an international keyboard. • letters on the borders (HL) are for horizontal movements- obviously H for left, L for right • letters on the inside are for vertical movements - J for down, K for up; a nice feature is that these keys are now quite widely used in the community, take for example in the gmail interface when switching to the next message. I was still using the arrows keys, but taking this habit makes thinks easier, especially when switching often keyboards. Simalarly, to scroll the text - you can use: • <CTRL-U> to scroll a half-page up • <CTRL-D> to scroll a half-page down Here, the :h ctrl-u page will give you more info (or :help usr_03.txt). Note that to follow a link (think "searching a tag"), you can press * (or # to go backwards). # Batch removing files on a FTP server In a previous post, I have shown how to convert MoinMoin pages to this blog (Nikola angine). Let's now tidy up the place and remove obsolete pages. Pages that were succesfully converted: Read more… # Converting moinmoin pages to nikola nikolFrom a previous post, we have this function to import a page from moinmoin, convert it and publish: Read more… # Converting MoinMoin pages to Nikola I have another wiki to take notes. These are written using the MoinMoin syntax, which is nice, but I found no converter from MoinMoin to anything compatible with Nikola. Following this post http://carreau.github.io/posts/06-NBconvert-Doc-Draft.html , I thought I might give it a try using ipython within nikola: In [1]: URL = 'http://invibe.net/cgi-bin/index.cgi/SciBlog/2005-10-29?action=print'  NOTE: this should not be tried with these URLS as they do not exist anymore... Read more… # SSH says 'Read from socket failed: Operation timed out' While SSH is rock solid, we stumbled on a strange bug while trying to establish a connection:$ ssh myname@myserver.fr -vvv

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011

(...)

Read from socket failed: Operation timed out

Nothing worked. The usual check of keys, encodings, permissions gave nothing.

# Vim folding commands

## Using folds in Vim

Folds are useful when having long files to have a good perspective on its structure. Especially useful in LaTeX mode.

To install, I recommend using the python-mode described in http://unlogic.co.uk/2013/02/08/vim-as-a-python-ide/

# Trying out ipython blogging

## How to easily publish an ipython notebook?¶

### installing the appropriate plugins¶

Here, we will need to install additions to the nikola publishing tool: a rendering machine + a theme. Using homebrew in mcosx, this looks like:

brew install npm
npm install -g less



and

nikola install_theme zen-ipython



Once this was done, one could tune conf.py and then issue:

nikola new_post -f ipynb



Finally, one needs to build (nikola build) and publish (nikola deploy)

### example¶

In [1]:
plot(rand(50))

Out[1]:
[<matplotlib.lines.Line2D at 0x10ab2d1d0>]

# Bootstrapping Nikola

I have managed to install Nikola, and build a site using it using this code:

git clone git://github.com/getnikola/nikola.git
cd nikola
pip install -r requirements-full.txt
pip install .
nikola init --demo invibe
nikola build
nikola serve


Pretty simple, congratulations to the developpers!

# homebrew cask (level 1): correcting a pull request

• I mistyped my contribution, so I have to modify my pull request

• set-up variables



# Finder Shortcuts in MacOsX

• ⇧⌘C: Computer
• ⇧⌘H: Home
• ⇧⌘D: Desktop
• ⇧⌘K: Network
• ⇧⌘A: Applications
• ⇧⌘O: Documents
• ⇧⌘U: Utilities

# inverting colors in MacOsX

• during a presentation, a figure may reveal more readable if you invert colors and luminance: black gets white and reverse, red becomes cyan and so on.

# ubuntu : starting sshd at boot

• ssh server installed but not starting at boot (I certainly messed up something):

$ls -l /etc/init.d/*ssh* -rwxr-xr-x 1 root root 3704 2010-09-14 19:20 /etc/init.d/ssh$ ls -l /etc/rc2.d/*ssh*
ls: cannot access /etc/rc2.d/*ssh*: No such file or directory
$ls -l /etc/rc1.d/*ssh*  Read more… # how to find stuff • the most simple command is locate : locate Python.h  ; it is based on a database updated regulalry (most often daily). Read more… # Caps Lock, what a useless key 1. [Ubuntu / gnome] You should be disable it do this with System->Preferences->Keyboard->Layouts->Options...->CapsLockkeybehavior 2. [MacosX] Open SystemPreferences, select the Keyboard pane. Within here, click the ModifierKeys… button at the bottom. To disable the Caps Lock key, pull down the associated menu and select NoAction. Read more… # CRAAC: Compte rendu annuel d'activité des chercheurs du CNRS. Année 2010 2010-12-08 10:56:10 Compte rendu annuel d'activité des chercheurs du CNRS Année 2009 - 2010 Read more… # ignoring a folder in SVN • simply issue svn propset svn:ignore '*' data/  Read more… # Password-less logins with OpenSSH Because OpenSSH allows you to run commands on remote systems, showing you the results directly, as well as just logging in to systems it's ideal for automating common tasks with shellscripts and cronjobs. One thing that you probably won't want is to do though is store the remote system's password in the script. Instead you'll want to setup SSH so that you can login securely without having to give a password. Read more… # Instinct Paradise :-journée IMERA du 9 nov 2010 Mon projet scientifique s'intéresse aux mécanismes computationnels qui sous-tendent la cognition. C'est-à-dire que l'on sait que l'on sait où se produisent ces mécanismes définissant la système nerveux central en un réseau de neurones connectés par des synapses et qu'ils sont supportés par des signaux électro-chimiques entre ces noeuds, mais on ne connaît pas encore totalement comment l'information qui semble être portée ces signaux peut être interprété. Ce "Graal" est la découverte du "code neural" c'est-à-dire du langage qui est utilisé dans notre cerveau. On ne sait si cette découverte est possible: peut-il exister une connaissance globale du cerveau comme on peut deviner la trajectoire d'une planète avec les lois de Newton? Peut-etre le cerveau lui-même n'est pas assez complexe, même mis en réseau avec tous les neuro-scientifiques du monde entier, pour se laisser deviner... Mais il y a de nombreuses perspectives à le découvrir progressivement: Read more… # wma to MP3 # installing Dovecot on MacOsX using MacPorts # rsync to an alternate ssh port • Q: sometimes you try to copy files using rsync but the server uses an alternate port than the usual 22... • A:  rsync -av -e 'ssh -p 2222' HOST:~/folder/* dest  # installing python and its components • Python is often pre-installed on your system or easy to download. More difficult is to get the essential packages (numpy, scipy, matplotlib, ipython) and their dependencies installed. Here, I list some of the possibilities. Read more… # Master M2 Sciences ## Neurosciences Computationelles : émergence dans des réseaux d'information ### Travaux pratiques : modèle bayesien de détection du mouvement d'objets Read more… # Master M2 Sciences # nous • ﻿http://en.wikipedia.org/wiki/Nous • Nous (pronounced /ˈnuːs/, Greek: νοῦς or νόος) is a philosophical term for mind or intellect. Outside of a philosophical context, it is used, in coloquial English, to denote "common sense," with a different pronunciation (/naʊs/), and sometimes a different spelling (nouse or nowse). # Émergence # bundling using py2app # Journée de l'IFR 131 -Sciences du Cerveau et de la Cognition Aujourd'hui avait lieu la journée de l'IFR, pendant laquelle nous sommes intervenu avec F._X. Alario et A. Montagnini sur le thème de la variabilité comportementale. # A neurocentric approach to Bayesian inference • one-page paper arguing that Friston's free-energy view may not be complete. Some points made are 1. the inversion operated assumes a generative model 2. the use of surprise is defined using a frequentist approach not informational • one idea : from the frequentist measure one one can derive a conditional probability (a Xhi-2 distribution) of the probability. Not very far to the idea of Sahani & Dayan of a double probabilistic distribution 3. explore surprise or avoid it: Fiorillo makes here a confusion of time scales. On the long term (learning) one tends to avoid surprise, on the short term (coding) this implies one jumps one surprise. 4. points to his PLoS one paper: Fiorillo, C. D. Towards a general theory of neural computation based on prediction by single neurons. PLoS ONE 3, e3298 (2008) Read more… # Terminal.app shortcuts • To make Ctrl← and Ctrl→ useful again, that is going a word forward or backward like they usually do on Linux, you must make Terminal.app send the right string to the shell. In the preferences, go to the Settings tab and select your default profile. Go to Keyboard and set control cursor left and control cursor right to send string \033b and \033f respectively. While your're at it, you can also fix Home (\033[H), End (\033[F), Page Up (\033[5~) and Page Down (\033[6~) so that they send those keys to the shell instead of scrolling the buffer.  # System Updates • install a package sudo installer -pkg <chemin d’accès au paquet> -target /  Read more… # getting the PID from matlab • I need the pid to know if one of the many simulations I run are still running. There's no native solution in matlab to my knowledge. Read more… # running embarassingly parallel simulations on a multicore machine using bash loops • I need to run a single-processor experiment on some parameters, say N times Read more… # distributed computing • guess you have a bunch (4000) of embarrassingly parallel tasks (one hour each) and access to about 40 CPUs through SSH. All tasks would run easily on each node, and they all share some network drive (NFS). Would be nice to run everything from just one place (script, command-line, web interface, ...) Read more… # Pinna illusion • Pinna illusion is the first visual illusion showing a rotating motion effect. In Figure 1 the squares, delineated by two white and two black edges each, are grouped by proximity in two concentric rings. All the squares have the same width, length, and orientation in relation to the center of their circular arrangements. The two rings differ only in the relative position of their narrow black and white edges forming the vertexes. More precisely, the two rings show reversal of the vertex orientation and, consequently, opposite inclination of the virtual or implicit diagonal orientation polarity obtained by joining the two vertexes where black and white lines meet (Pinna, 1990; Pinna & Brelstaff, 2000).  Read more… # compiling OpenCV on MacOSX 10.6 ## using macports • it works now with macports: sudo port install -u opencv +python26 +tbb  Read more… # latex within moinmoin • installation d'après http://johannes.sipsolutions.net/Projects/new-moinmoin-latex • pour s'adapter à ma distribution pdflatex, j'ai changé 1 # last arg must have %s in it! 2 latex_args = ("--interaction=nonstopmode -output-format dvi", "%s.tex")  dans le parser sudoopen-e~/WebSites/moin/data/plugin/parser/latex.py) Read more… # installing SUMATRA ## installing SUMATRA • notes from the CodeJamNr4 • this was using a fresh install of ETS 6.2 Read more… # NeuroCompMarseille 2010 Workshop Computational Neuroscience: From Representations to Behavior Second NeuroComp Marseille Workshop Date 27-28 May 2010 Read more… # Haïm Cohen : Tu Ne Laisseras Point Pleurer • Présentation de l'éditeur (source: amazon) • Où puiser l'espoir d'un monde plus humain ? En comprenant la dimension humaine des pleurs de nos bébés et en y répondant encore et encore. A partir d'arguments psychologiques et neurobiologiques, Haïm Cohen nous expose son utopie susceptible d'élever la conscience morale de nos enfants ainsi immunisés contre l'extrême violence. Manuel d'humanisme autant que de réflexion portée sur notre société, ce livre s'adresse à tous les parents soucieux du bon développement psycho-affectif de leur enfant, mais aussi à tous les lecteurs intéressés par les progrès des neurosciences. • Biographie de l'auteur : Haïm Cohen est pédiatre à Paris. Read more… # reStructuredText rst cheatsheet # replacing text in files ## using sed • The UNIX command sed is useful to find and replace text in single or multiple files. This page lists some common commands in using sed to improve editing code. Read more… # bibdesk + citeulike # Richard Dawkins on our "queer" universe # Comment créer et manipuler les données scientifiques : autour de Numpy # using grin • I just discovered grin, "grep my way" Read more… # securing the server • SSH (Secure Shell) is installed on most systems (here GnuLinuxUbuntu and MacOsX) so don't panic about compilations (try Putty on Windows). Try a simple ssh-V to check version or whichssh to locate the binary. Read more… # quelques blogs français de science Wikio permet de rechercher tout blog / article de blog relié par ex aux Neurosciences. Read more… # The original eve • one common statement in popular science when speaking about evolution is that we all derive from a common ancestor, the "original eve". while a posteriori, it is true that mitochodrondrial DNA allows to trace back common ancestors in our heredity, it is certainly overstated. When thinking evolution, our focus is to look back from the present to our origins, but a the time of these "few" original eves, many different eves coexisted and acted -as parts of the whole population- in the evolution. Read more… # contributing to the python community (or "would be hard to give as much as I took :-)" ) # which or that? That usually introduces essential information in what is called a "restrictive clause." Which introduces extra information in a "nonrestrictive clause."  Read more… # Journal Club : The good, the bad and the NOISE # convert a bitmap image to a vectorized PDF using mkbitmap and potrace Read more… # CRAAC: Compte rendu annuel d'activité des chercheurs du CNRS. Année 2008 - 2009  Compte rendu annuel d'activité des chercheurs du CNRS Année 2008 - 2009 Read more… # inkscape native # some unix tips • find / -nouser te donneras tous les fichiers dont le nom du propriétaire est inexistant de la table /etc/passwd Read more… # MoinMoin: howto install a new theme • locally scp Downloads/moniker18_2.1.1.zip perrinet@195.221.164.4:/var/www/moin/perrinet/data/plugin/theme/tmp .. TEASER_END  • on the server cd /var/www/moin/perrinet/data/plugin/theme/ export USER=www-data export GROUP=www-data export INSTANCE=/usr/share/moin/htdocs/moniker unzip moniker18_2.1.1.zip cd moniker18_2.1.1 cat read\ me\ on\ installing.txt cp -r moniker /usr/share/moin/htdocs/ cp moniker18.py ../../ chgrp -R$GROUP $INSTANCE chgrp -R$GROUP ../../moniker18.py
vim ../../../../../../perrinet.py # set moniker18 as default


# floating point magic

• bug or feature?

python

>>> 1-.9-.1
-2.7755575615628914e-17

.. TEASER_END

• 1= 0

• Q: How many Pentium designers does it take to change a light bulb? A: 1.99904274017, but that's close enough for non-technical people.

• http://docs.sun.com/source/806-3568/ncg_goldberg.html

# Tips on Filesystems, security and al on mac os x

• mount with AFP sharepoints from the command line (thanks to this hint) :

# mount_afp [-i] [-o options] afp_url node
mkdir /Volumes/truc
umount /Volumes/truc
rmdir /Volumes/truc


# Creating Proceedings (almost) automatically using python and latex

In order to produce proceedings for the NeuroComp08 that we organized, I used a combination of LaTeX and Python to generate a PDF from our preprint server based on ConfMaster. This was due to the lack of an appropriate tool for this system and the need to be flexible to any change made in last minute by the authors. I used the following steps (these are summarized in the included Makefile file at the bottom that allowed to rebuild everything when any small change in these steps were done).

# setting graphics' path

\includegraphics[width=\textwidth]{folder2_relative/picture.png}%


# some LaTeX tips: drafts, links, margins, pdflatex

More \LaTeX tips...

# Installation TeX

Some useful bits of \LaTeX code accumulated over the years...

# duplicate files

You may find yourself overwhelmed by files and in the need to keep the filesystem organized. If deleting is the best option, you may consider these 2 options:

# Impact Factor

Most researchers nowadays are judged based on their publication list and ---as a shortcut--- quantifically rated by their cumulative Impact Factor. How efficient is this method?

• This paper studies the assumptions underlying the journals' impact factor and the open access initiative:
• M. Taylor, P. Perakakis, Varvara Trachana. The siege of science , URL . Ethics in Science and Environmental Politics, 8(1):17--40, 2008 .

# keyboard

## Touches spéciales (unix) sur clavier Mac francais

Merci a http://busy.lab.free.fr/mac/ !

 backslash \ shift + option + / pipe, or | shift + option + L tidle ~ option + N simple quote ' 4 key, that's to say a regular ' on any keyboard I guess. opening brace { option + ( closing brace } option + ) opening square bracket [ shift + option + ( closing square bracket ] shift + option + )

# Deliverable M9-3: Workshop for definition of a detailed version of the V1 hypercolumn model

The INCM was holding a workshop on the V1 hypercolumn model on the 22nd and 23rd of October 2007. The purpose of the workshop was to promote the coordination of modeling efforts within the consortium and in particular to organize collaboration in WP9T2 and associated work-packages. It is labeled as deliverable M9-3: "Workshop for definition of a detailed version of the V1 hyper-column model" for WP9-2 (workpackage 9 task 2), but is also linked by its subject to WP5. In contrast to the previous meeting, we started with brief presentations of the results from each group to expose the different efficient aspects of each model. This allowed us in the second half of the workshop to converge to some main issues and prioritize the neural features that are the most important for the efficiency of V1. As for the format, we proposed that PhD students and post-docs should have the opportunity to present this work to give them experience and reduce the burden on busy chiefs. We felt it was important to involve as many in this workshop as possible as we approach a crucial stage in integrating the different models.

# Post-doctoral Position in Computational Neuroscience: "Functional, Large-scale Models of Visual Motion Perception"

Warning

The position has been filled

We are currently inviting applications for a postdoctoral position in computational neuroscience to study functional, large-scale models of visual motion perception. The post is for up to 3 years in the DyVA team at the INCM (CNRS) in Marseille, France and will be funded within the european FACETS consortium.

# V1 hypercolumn Coordination Meeting, 20th - 21st Nov 2006

Subject: Coordination meeting of the WP9T2 and WP5T3 tasks.

• The goal of the meeting was to prepare the next deliverable D25 ("model of an hyper-column") but also to join our efforts in modeling. In particular, important decisions were made toward finding canonical parameters (structure, neural parameters) of all systems being delivered in WP5T3 and WP9T2 but also concerning the definition of the common benchmark that will de deployed to the different implementations in the different partners. From this benchmark (benchmark zero), we should be able to validate different solutions to pinpoint their strengths and weaknesses.