Plan Analyse de l’architecture: couche L3 et L4: -> but en déduire la façon de s’interfacer avec la rétine du CEA -> comprendre comment un pseudo parallélisme et mis en œuvre au niveau de L3 ->comment L4 va scanner les sortie de L3-> on déduit de cela le «pattern» de scan des macrocellules Vision globale de l’application «apprentissage écriture»->architecture software python permettant: -la synthèse d’un jeu d’images binaires (lettres, chiffres,…) -l’extraction d’une base de «features» à partir du jeu d’images -l’émulation du système rétine (génération AER, pattern scan macrocellules,…) -l’apprentissage des «features» au niveau de L3 -l’apprentissage au niveau de L4 Point avancement actuel: -émulation portion rétine (32*32) -simulation d’une neurone de L3
Architecture réseau neurones (couche L3) DEMUXDEMUX Pattern de scan des macrocellules et scan pixel BUFFERBUFFER + PSPPSP vers neuron 0 Seuil 0 vers neuron 1 BUFFERBUFFER + PSPPSP Seuil vers neuron 47 RAM 0 (1) RAM 1 Buffer synchronie (9 bits) FIFO Fréquence d’échantillonnage (mise à jour du potentiel post synaptique)d’un neuron deL3 en fct de la fréquence des données en entrée? FinFsys Contrainte: Le système admet au plus 1 donnée valide tous les 4 cycles (temps traitements DEMUX et temps lecture mémoire poids) =>Fsys>=4*Fin 4*Tsys<=Tin (1): la mémoire RAM n’est pas RAZ avec le reset global
Architecture réseau neurones (couche L3) Le buffer de synchronie est un registre de «roue libre» initialisé sur le reset global Tsys (cycle horloge système) Fenêtre scan buffer synchronie (9*Tsys) Macrocellule Fenêtre scan buffer synchronie (9*Tsys) Macrocellule 9 Voisinage cellule 0 Macrocellule 1 Macrocellule 8
Choix configuration FIFO Les données d’entrée sont cadencés suivant l’horloge des données d’entrée (période Tin). Les traitements en interne sont fait suivant l’horloge système (période Tsys). On doit déterminer la fréquence d’émission des données (nombres de données émises par cycle système) afin de: -minimiser l’asychronie en sortie de L3 (car l’ordre d’émission des spikes de L3 est en partie contraint par la façon de scanner les macrocellules->contrainte imposée par architecture et le buffer de sychronie de L4 ne la compense pas) -Régler la taille de la fenêtre de sychronie, c.a.d le nombre potentiel de spikes que peut recevoir le buffer à la fois. Cela va jouer sur la rapidité d’évolution du PSP. Ex: Scan 1,2,3 à simuler
Architecture réseau neurones (couche L4) BUFFERBUFFER BUFFERBUFFER Buffer synchronie (48 bits) PSPPSP Seuil PSPPSP Bus_spikes_L3 (48 bits) BUFFERBUFFER + PSPPSP Seuil.... Fréquence d’échantillonnage (mise à jour du potentiel post synaptique)d’un neuron de L4 en fct de la fréquence des données en entrée?
Pattern de scan des macrocellules L2 On travaille sur Une image statique (binaire) L3 (48 Neurones) 0 Pattern de scan macrocellules (round robin) ->0,1,2,3,………,47 Trame AER* Au vu de l’architecture De L3, on déduit le multiplexage Des macrocellules de la rétine qui sera mis en œuvre dans L2
Pattern de scan d’une macrocellule (faux) Scan de bas en haut et de droite à gauche pour générer un AER Spike->pixel tON
Pattern de scan d’une macroc cellule (correctionpar rapport au slides 12 et 13) Dans mon cas, je n’ai qu’une polarité tON ou tOFF car il n’y a pas de signaux permettant De les différencier Le capteur de vision est dit: «arbitrated word parallel non greedy» - arbitrated: les événement sont stockés temporairement dans une FIFO en attendant d’avoir accés au bus - word parallel: l’événement est émis sous la forme d’un mot binaire x+y -Non greedy: chaque événement enregistré a un accés égal au bus partage Il n’y a donc pas à proprement parlé de «pattern de scan» d’une macrocellule Le modèle de caméra ne travaille pas sur l’intensité absolue, mais sur la variation de cette Intensité (différence image niveau de gris, réduisent la redondance spatiale)
Principe AER Macrocellule (X,Y) Balayage ligne par ligne Position image Index_AER=row*2^4+col
Principe AER Algo: -Seuillage global->intensité minimale -balayage horizontal (pour chaque colonne, garder le pixel d’intensité maximale) -balayage vertical (pour chaque ligne, on garde le pixel d’intensité maximale) -on compare les deux ensembles obtenus et on élimine les redondances (on conserve au choix les éléments ligne ou colonne) -on stocke les éléments dans la table macrocellule vs numéros lignes et colonnes
Exemple: émission de spikes Macrocellule 0 Macrocellule 1 spike1 spike2 spike3 spike4 AER 0,11,30,21,4 Le spike émis le premier représente le pixel avec la + forte variation de luminance (ou la plus forte luminance sur une image statique -> niveau de gris ou RGB) Dans mon appli pour générer mes images de «features», je sélectionnne Aléatoirement un certain nombre de pixels dans une zone d’intêret du feature. Représente un spike encodé Des événements sont dits synchrones, uniquement si il ont la même intensité et il sont dans le même voisinage
Emission des spikes pixel intensité Une macrocellule intensité Numéro macrocellule Plusieures lignes De même intensité (émission suivant Le numéro de pixel si même intensité)
Affectation des poids en fonction de l’ordre de scan de la macrocellule Scan de bas en haut Et de droite à gauche Les spikes arrivent en premier ont plus d’importance->est til nécessaire de compenser cette effet?-> non, Le but est que ces pattern de spikes induisent pour chaque «feature» associé des temps de déclenchement les plus distincts possibles Une relation entre les zones de poids homogène pourrait être la suivante: -poids zone3> poids zone1>poids zone4>poids zone2
Principe de génération de l’AER Le buffer de synchronie relie les macrocellules mitoyennes. Dans notre cas la définition d’événements simultanés est la suivante: événements issues de macrocellules mitoyennes scannés l’une à la suite de l’autre. Comme un événement influence 4 macrocellules, on peut avoir de la synchronie sur les buffer des macrocellules voisines antérieurement scannées. On sélectionne les cellules dans lesquelles le nombre de «spikes» est non nul (adaptation à l’échelle) et on les parcourt dans l’ordre croissant (de gauche à droite et de bas en haut). Cette définition est déduite de la façon dont sont connectés les «buffer» de synchronie de L3. Scénario de synchronie lors d’un scan horizontal: (buffer macrocellule) 3 Cas synchronie sur 1 et sur 3 (influence indirecte) 16 On exploite les connections horizontales du buffer de synchronie
Principe de génération de l’AER Scénario de synchronie lors d’un scan vertical: Cas synchronie sur 2 et sur 1 (influence indirecte) 1 2 On exploite les connections verticales du buffer de synchronie
Principe génération AER (faux) Ex: … Macrocellules actives 0,01,02,0 Tin 3,00,13,255 … 2,2551,2550,255 Seules les macrocellules utiles sont scannées
Interface L2 –L3: trame AER avec 48 macrocellules utiles (faux) 0,01,02,047,0 Numéro macrocellule, Numéro pixel … 0,147,1 … Tin
Trame AER: lien format de trame avec le buffer de synchronie L3 La taille du buffer de va déterminer la fréquence de mise à jour du PSP 0,0XXX X1,0XX On se met dans la configuration suivante: -on fournit une donnée tous les 6 cycles (Tsys)=> Tin=3*Tsys avec une donnée valide sur 2 macrocellule 0 La taille du buffer de synchronie est 9 bits -> taille fenêtre temporelle: 9*Tsys=3*Tin->potentiellement au plus 2 spikes par fenêtre (1 de la macrocellule associée, 1 de la macrocellule voisine) macrocellule 1 (voisine) 3*Tin Il faut de préférence faire en sorte que la durée de la fenêtre de synchronie soit un multiple de la fréquence d’entrée car Le déphasage données/fenêtre restera constant ->il sera alors plus facile de déterminer l’évolution du PSP
Fonctionnement L3: Diagramme flux de données (comprendre le pseudo-parallélisme->à simuler, demander à Bilal) On choisit une configuration ds laquelle on fournit une donnée tous les 6 cycles 0,0X1, ,0XXX XX1,0X XXXX XXXX 47, ………………. Tin=3*Tsys Fenêtre scan synchronie (macrocellules+voisinage) Pour simplifier les choses n’est il pas préférable de neutraliser la synchronie car Cela va conditionner l’évolution du PSP et donc le temps de déclenchement
Fonctionnement L4: Diagramme flux de données 0 L3 47 Scan 47 neurones L3 1 couleur=1 vecteur de spikes synchrones Tsys 0 63 L4 (1 seuil commun) Remarque: La fréquence de Scan de L4 est trop rapide Pour synchroniser les spikes Émis par L3
Architecture software python: partie émulation rétine et L2 Encodage coordonnées pixels Génération AER (peut prendre en compte la mise à l’échelle -> scalabilité) Synthèse du jeu d’images (96*128) (1): scalabilité processeur neuronal
Architecture software python: partie apprentissage L3 Synthèse du jeu d’images (96*128) Extraction des motifs élémentaires pour décomposer une image Apprentissage couche L3 (brian) Génération Pattern de spikes apprentissage 32*32 Poids synaptiques
Architecture software python: partie validation L3 Comparaison pattern spike AER_L3_VHDL Pattern spike brian
Fonctionnement neuron L3 ΔtΔt ΔtΔt ΔtΔt ΔtΔt Modulation latence déclenchement 32*32 (dépend de la localisation Sur le cadrant )
Détermination des poids synaptiques A partir du nombre de spikes à disposition, on doit vérifier que: Nb_spikes*weight_zone1>=seuil Nb_spikes*weight_zone2>=seuil Nb_spikes*weight_zone3>=seuil Nb_spikes*weight_zone4>=seuil Et : t1 stimulus->debut AER,premier spike?) Simulation pour déterminer si le système de génération de spikes est compatible, voir si les timings sont bien respectés (feedback modelsim)
Procédure initialisation couche L3 -Problème: Chaque neurone de la couche L3 associée à une macrocellule n’est pas stimulée équitablement du fait: -de la topologie du cadrant (macrocellule milieu, macrocellule de bordure,macrocellule de coin) -de l’intensité lumineuse (niveau de blanc->travail sur les tONs) et du bruit du capteur CMOS Pour que l’apprentissage sur l’ensemble de la couche L3 soit valide, il faut obtenir la condition suivante: -le temps de déclenchement d’un neurone pour un «feature» particulier doit être le même (+/- une tolérance=f(Tsys)) pour l’ensemble des neurons ayant appris ce «feature» (spécialisation des neurones des extrémités du cadrant pour d’autres «features»)
Procédure initialisation couche L3 Notes perso: -les neurons (milieu ou coin ou bordure) ne sont pas stimulés équitablement du fait: de l’intensité lumineuse et du bruit du capteur CMOS -Dans quelle mesure la zone d’intérêt joue t elle dans la stimulation d’un neuron -On n’a pas la main sur les facteurs cités ci-dessus. Du point de vue de l’algorithme, il vont influer sur: le nombre de «spikes» et leur disposition spatiale. -disposition spatiale des spikes sur la macrocellule -> la répartition temporelle au niveau des pattern de spikes (scan->AER)-> influence temps de déclenchement
Procédure initialisation couche L3 Config 1: Sans apprentissage -On dispose d’une configuration de poids permettant de détecter 4 features (NS,EO,NOSE,NESO) -on ne prend pas en considération les phénomènes locaux (luminosité, bruit capteur CMOS) qui pourraient altérer la disposition spatiale des spikes par macrocellule: -on génére 4 features qui seront dupliqués sur chacune des macrocellules -On programme chacune des mémoires pour la détection de ces 4 «features». -On duplique le «feature» sur l’ensemble des macrocellules (le «feature» sera partiel pour les extrêmes) Ce contexte d’utilisation sert à valider le bon fonctionnement du synchronisme mis en œuvre sur L3 et le synchronisme sur L4 (temps de déclenchement égaux pour les cellules du milieu et égaux pour les macrocellules des extrêmes) Il permettrait aussi de court-circuiter la phase d’apprentissage sur L3?
Pattern d’image globale classifiables avec la config … Combinaison de «feature NS» … Combinaison de «feature NOSE (diagonales)»
Effets de bord dus chevauchement Motifs initialisation mémoire poids chevauchement->influence Sur le motif voisin Sans effet de chevauchement
Effets de bord dus chevauchement: configuration du benchmark Rouge : zone spikes 16 Dans cette configuration, on aura des effets De bords dû au chevauchement de 50% sur les Macrocellules mitoyennes Pour éliminer ces effets de bord, il suffit de réduire le masque De poids à 16*16 et d’annuler le reste. 16 Bleu et Jaune: masque de poids Le benchmark comporte des «features» NS dupliqués. Pour les cellules du milieu, Les effets de bords sont égaux sur toutes les macrocellules du milieu donc n’influeront Pas sur l’ordre de déclenchement.-> Au final, les effets de bord ne seront pas identiques partout du fait De l’intensité lumineuse variable, on aura pas le même nombre de spikes par macrocellule (est ce que ces effets peuvent être Compensé par un bon réglage du seuil de déclenchement )
Utilité chevauchement -Intuition: -Avec le chevauchement, un neuron aura potentiellement à sa disposition un plus grand nombre de spikes et pourra être déclenché plus tôt mais il y aura des effets de bords qui pourront potentiellement influer sur l’ordre de déclenchement des spikes. -Sans le chevauchement, un neuron aura potentiellement à sa disposition moins de spikes et sera donc déclenché moins tôt mais les effets de bords seront absent de fait l’ordre de déclenchement des spikes ne sera pas altéré (?)
Simulation à faire pour quelques macrocellules (pas la globalité) Avec chevauchement (pattern feature Macrocellule Dupliqué): Sans chevauchement (pattern feature macrocellule Dupliqué->): Masque poids: Relever les temps de déclenchement (relatif stimulus- >fichier VCD ou via fichier process test) Ds les 2 cas ->l’effet de bord ne doit pas jouer?
Simulation à faire pour quelques macrocellules (pas la globalité) Avec chevauchement (pattern feature Macrocellule non Dupliqué): Sans chevauchement (pattern feature macrocellule non Dupliqué): Masque poids: Relever les temps de déclenchement? ->effets de bord->comparer temps de Déclenchement avec et sans?
Avec x% du chevauchement (pattern feature macrocellule nonDupliqué): Masque poids: Simulation à faire pour quelques macrocellules (pas la globalité) Va permettre de juger des effets de bord en fct du % de chevauchement? Modulation de la largeur du masque
Sans chevauchement Simulation à faire pour quelques macrocellules (pas la globalité) Relever les temps de déclenchement Relatif au stimulus (début AER)
Procédure initialisation couche L3 Config 2: On fait un apprentissage pour chacune des macrocellules. On considère un bruit (intensité?, bruit capteur CMOS?->on applique des masques poivre et sel par macrocellule). -En analysant le jeu de caractères à classifier, on déduit l’ensemble de «features» à apprendre suivant la localisation géographique (coin, milieu bordure,…) -On met en œuvre un apprentissage local par type de macrocellule (spécialisation): -les macrocellules du milieu sont entraînées pour reconnaître un certain type de «features» -les macrocellules des coins… -les macrocellules des bordures… -l’apprentissage permet d’adaptabilité au nombres de formes -le réglage du seuil dépend: de l’instant de déclenchement associé au «feature», de la dynamique des données (8bits)
Communication L3-L4
Idée perso -pour une même application, comparer les performances du MLP à spikes avec celui du MLP classique (reprendre mmodèle pybrain en faisant l’entraînement sur les 2 couches séparemment, vérifier les dires de l’article) -essayer de créer un scénario pour tester l’effet mémoire: émission de 2 formes similaires à la suite