Brevet FR3144687A1 — publié le 20240705

Architecture de réseau neuronal pour un réseau systolique de processeurs et procédé de traitement de données utilisant un réseau neuronal La présente description concerne un circuit électronique mettant en œuvre un réseau neuronal, le circuit électronique comprenant : un réseau matriciel d’éléments de traitement (PE) comprenant chacun un circuit de traitement de données, et une mémoire locale ; et un ensemble de circuits de propagation de données configuré pour réaliser un mélange latéral vers l’avant ou vers l’arrière des données de neurone par la propagation, réalisée de façon synchrone, des données de neurone vers la mémoire locale de chaque élément de traitement à partir de la mémoire locale d’un ou plusieurs éléments de traitement voisins, dans lequel chacun des éléments de traitement est configuré pour traiter, pendant une première itération, les données de neurone en provenance des un ou plusieurs éléments de traitement voisins pour produire des données de neurone mises à jour et pour les stocker dans la mémoire locale pour une utilisation lors d’une itération ultérieure. Figure de l’abrégé : Fig. 4 Architecture de réseau neuronal pour un réseau systolique de processeurs et procédé de traitement de données utilisant un réseau neuronal La présente description concerne de façon générale les circuits électroniques, et en particulier une architecture de réseau neuronal pour un réseau matriciel systolique de processeurs et un procédé de traitement de données utilisant une telle architecture de réseau neuronal. Les architectures de réseau neuronal existantes utilisées en vision par ordinateur et autres applications reposent généralement sur l’exécution séquentielle de couches de neurones de convolution entièrement connectées (i.e. linéaires). Dans un tel réseau neuronal entièrement connecté standard, une seul couche "plate" de valeurs d’activation de neurones, représentée sous forme de vecteur, est propagée par chaque couche verse la couche suivante, après multiplication du vecteur par une seule matrice de pondération générale pour la couche. Les réseaux neuronaux profonds comprennent plusieurs telles couches, qui appliquent chacune une telle opération jusqu’à l’obtention d’une valeur de sortie. Un réseau matriciel systolique de processeurs est un réseau homogène d'unités de traitement de données, souvent désignées sous le terme d’éléments de traitement (PE, processing element), dont chacun est configuré pour calculer de manière indépendante un résultat partiel à partir de données reçues de voisins en amont, et fait passer ce résultat aux voisins en aval. On a proposé d’utiliser un réseau matriciel systolique de processeurs en tant qu’accélérateur matériel pour la mise en œuvre d’un réseau neuronal convolutif (CNN, convolutional neural network) profond. Par example, une solution est décrite dans la publication de Chen, Yu-Hsin, et al. " Eyeriss : A n energy-efficient reconfigurable accelerator for deep convolutional neural networks ", IEEE journal of solid-state circuits 52.1 (2016): 127-138. Cependant, un inconvénient des solutions existantes d’utilisation de réseaux matriciels systoliques de processeurs pour mettre en œuvre des CNN est qu’elles tendent à dépenser une proportion importante du temps de traitement total à organiser et regrouper les données intermédiaires, et parfois à reprogrammer les éléments PE avec une séquence de codes spécifiques à chaque étape et à chaque couche de réseau. Il en résulte une solution exigeante en termes de ressources de traitement et/ou relativement lente à exécuter. Il existe donc un besoin pour une nouvelle architecture de réseau neuronal, ainsi qu’une nouvelle stratégie d’exécution de réseau neuronal pour exécution sur des réseaux matriciels systoliques de PE, qui apporte des performances améliorées par rapport aux solutions existantes, par exemple en termes de latence. Un objet de modes de réalisation de la présente invention est de répondre à un ou plusieurs besoins de l'art antérieur. Selon un aspect, on prévoit un circuit électronique mettant en œuvre un réseau neuronal, le circuit électronique comprenant : un réseau matriciel d’éléments de traitement, chaque élément de traitement comprenant un circuit de traitement de données et une mémoire locale, chaque élément de traitement mettant en œuvre un ou plusieurs neurones du réseau neuronal, la mémoire locale de chaque élément de traitement étant configurée pour stocker des données de neurone associées aux un ou plusieurs neurones mis en œuvre par le réseau neuronal ; et un ensemble de circuits de propagation de données configuré pour réaliser un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées dans la mémoire locale de chaque élément de traitement par la propagation, réalisée de façon synchrone par chaque élément de traitement, des données de neurone vers la mémoire locale de chaque élément de traitement à partir de la mémoire locale d’un ou plusieurs éléments de traitement voisins de chaque élément de traitement, dans lequel chacun des éléments de traitement est configuré pour traiter, pendant une première itération de traitement, les données de neurone à partir des un ou plusieurs éléments de traitement voisins pour produire des données de neurone mises à jour et pour stocker les données de neurone mises à jour dans la mémoire locale pour une utilisation lors d’une itération de traitement ultérieure. Selon un mode de réalisation, le circuit de traitement de données de chaque élément de traitement est en outre configuré pour calculer une valeur intermédiaire à partir des données de neurone en provenance des un ou plusieurs éléments de traitement voisins. Selon un mode de réalisation, le réseau neuronal comprend une couche d’entrée et au moins deux couches cachées, la couche d’entrée et les au moins deux couches cachées étant mises en œuvre par le réseau matriciel d’éléments de traitement, dans lequel le circuit de traitement de données de chaque élément de traitement est configuré pour calculer la valeur intermédiaire à partir des données de neurone en relation avec chacune des couches cachées. Selon un mode de réalisation, l’ensemble de circuits de propagation de données est configuré pour réaliser un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées par la mémoire locale de chaque élément de traitement par la propagation des données de neurone vers la mémoire locale de chaque élément de traitement à partir de plusieurs des éléments de traitement voisins pendant plusieurs itérations, chaque élément de traitement étant configuré pour recevoir, de façon synchrone à chaque itération, les données de neurone stockées par la mémoire locale d’un des plusieurs éléments de traitement voisins, écrasant au moins partiellement les données de neurone stockées dans sa mémoire locale. Selon un mode de réalisation, l’ensemble de circuits de propagation de données est configuré pour propager les données de neurone vers la mémoire locale des un ou plusieurs éléments de traitement voisins de la matrice selon une séquence de translation suivant une spirale en expansion. Selon un mode de réalisation, l’ensemble de circuits de propagation de données comprend, pour chaque élément de traitement, au moins un multiplexeur configuré pour choisir à partir de quel élément de traitement voisin et/ou vers quel élément de traitement voisin les données de neurone sont propagées. Selon un mode de réalisation, le réseau matriciel d’éléments de traitement est configuré pour recevoir une ou plusieurs images en tant que données d’entrée. Selon un mode de réalisation, l’ensemble de circuits de propagation de données est configuré pour effectuer un mélange latéral vers l’avant des données de neurone, et dans lequel les données de neurone de chaque élément de traitement sont un état d’activation des un ou plusieurs neurones mis en œuvre par l’élément de traitement. Selon un mode de réalisation, l’ensemble de circuits de propagation de données est configuré pour effectuer un mélange latéral vers l’arrière des données de neurone, dans lequel les données de neurone de chaque élément de traitement comprennent : un état d’activation des un ou plusieurs neurones mis en œuvre par l’élément de traitement ; et/ou un paramètre représentant un signal d’erreur. Selon un mode de réalisation, le réseau neuronal est un réseau neuronal convolutif. Selon un autre aspect, on prévoit un dispositif d’imagerie comprenant un empilement formé d’un niveau supérieur comprenant un capteur d’image et d’un niveau inférieur comprenant le circuit électronique ci-dessus. Selon encore un autre aspect, on prévoit un procédé de propagation de données dans un réseau neuronal, ce procédé comprenant : le stockage des données de neurone associées à un ou plusieurs neurones mis en œuvre par le réseau neuronal dans une mémoire locale de chaque élément de traitement d’un réseau matriciel d’éléments de traitement, chaque élément de traitement de la matrice comprenant un circuit de traitement de données et la mémoire locale ; le calcul, par le circuit de traitement de données de chaque élément de traitement, d’une valeur intermédiaire à partir des données de neurone ; et la réalisation, par l’ensemble de circuits de propagation de données, d’un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées par la mémoire locale de chaque élément de traitement par la propagation, de façon synchrone par chaque élément de traitement, des données de neurone vers la mémoire locale de chaque élément de traitement à partir de la mémoire locale d’un ou plusieurs éléments de traitement voisins de chaque élément de traitement, dans lequel chacun des éléments de traitement est configuré pour traiter, pendant une première itération de traitement, les données de neurone en provenance des un ou plusieurs éléments de traitement voisins pour produire des données de neurone mises à jour et pour stocker les données de neurone mises à jour dans la mémoire locale pour une utilisation lors d’une itération de traitement ultérieure. Selon un mode de réalisation, le procédé comprend en outre le calcul, par le circuit de traitement de données de chaque élément de traitement, d’une valeur intermédiaire à partir des données de neurone en provenance des un ou plusieurs éléments de traitement voisins. Selon un mode de réalisation, le réseau neuronal comprend une couche d’entrée et au moins deux couches cachées, la couche d’entrée et les au moins deux couches cachées étant mises en œuvre par le réseau matriciel d’éléments de traitement, le procédé comprenant en outre le calcul, par le circuit de traitement de données de chaque élément de traitement, de la valeur intermédiaire à partir des données de neurone en relation avec chacune des couches cachées. Selon un mode de réalisation, le mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées par la mémoire locale de chaque élément de traitement est effectué par la propagation des données de neurone vers la mémoire locale de chaque élément de traitement à partir de plusieurs des éléments de traitement voisins pendant plusieurs itérations, chaque élément de traitement étant configuré pour recevoir, de façon synchrone à chaque itération, les données de neurone stockées par la mémoire locale d’un des plusieurs éléments de traitement voisins, écrasant au moins partiellement les données de neurone stockées dans sa mémoire locale. Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : La illustre un réseau neuronal entièrement connecté selon un exemple de réalisation ; la illustre schématiquement un réseau matriciel d’éléments de traitement selon un exemple de réalisation de la présente description ; la illustre schématiquement une matrice de pondération selon un exemple de réalisation de la présente description ; la illustre schématiquement un mélange latéral vers l’avant utilisant un réseau matriciel d’éléments de traitement selon un exemple de réalisation de la présente description ; la illustre schématiquement un réseau matriciel d’éléments de traitement de 3 par 3 selon un exemple de réalisation de la présente description ; la illustre schématiquement un module d’élément de traitement comprenant un élément de traitement et des multiplexeurs d’entrée/sortie selon un exemple de réalisation ; la illustre schématiquement un module d’élément de traitement comprenant un élément de traitement et des multiplexeurs d’entrée/sortie selon un autre exemple de réalisation ; la illustre schématiquement une opération de mélange latéral vers l’avant selon un exemple de réalisation de la présente description ; la illustre schématiquement des parties de mémoire du réseau matriciel d’éléments de traitement de la selon un exemple de réalisation de la présente description ; la illustre schématiquement une séquence de translation entre des mémoires locales du réseau matriciel d’éléments de traitement de la pendant un mélange latéral vers l’avant selon un exemple de réalisation de la présente description ; la illustre schématiquement un rayon d’influence d’un élément de traitement pour une, deux et trois couches de mélange latéral selon un exemple de réalisation de la présente description ; la illustre schématiquement un dispositif d’imagerie comprenant un capteur d’image empilé sur une puce de traitement de données selon un exemple de réalisation de la présente description ; la est un organigramme illustrant des opérations d’un procédé d’inférence faisant intervenir un mélange latéral vers l’avant selon un exemple de réalisation de la présente description ; la illustre schématiquement un mélange latéral vers l’arrière utilisant un réseau matriciel d’éléments de traitement selon un exemple de réalisation de la présente description ; la illustre schématiquement une opération de rétro-propagation selon un exemple de réalisation de la présente description ; la est un organigramme illustrant des opérations d’un procédé d’apprentissage faisant intervenir un mélange latéral vers l’arrière selon un exemple de réalisation de la présente description ; la illustre schématiquement des opérations de rétro-propagation de plusieurs couches selon un exemple de réalisation de la présente description ; et la est un graphe représentant des résultats de tests selon un exemple de réalisation de la présente description. Description de modes de réalisation De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. Pour des raisons de clarté, seuls les opérations et les éléments utiles à la compréhension des modes de réalisation décrits ici ont été illustrés et décrits en détail. Sauf indication contraire, on utilise le terme "connecté" pour désigner une connexion électrique directe entre éléments de circuit, tandis que l’on utilise le terme "relié" ou "couplé" pour désigner une connexion électrique entre éléments de circuit qui peut être directe ou s’effectuer par l’intermédiaire d’un ou plusieurs éléments. Dans la description qui suit, sauf indication contraire, lorsque l’on se réfère à des qualificatifs de position absolue tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc. ou à des qualificatifs de position relative tels que les termes "au-dessus", "au-dessous", "supérieur", "inférieur", etc. ou à des qualificatifs d’orientation tels qu’"horizontal", "vertical", etc., on se réfère à l’orientation représentée dans les figures. Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement" et "de l’ordre de" signifient à 10 % près, de préférence à 5 % près. La illustre schématiquement un réseau neuronal 100 entièrement connecté selon un exemple de réalisation. Le réseau neuronal 100 comprend trois couches, une couche d’entrée (INPUT LAYER), une couche cachée unique (HIDDEN LAYER) et une couche de sortie (OUTPUT LAYER). Dans des variantes de réalisation, il pourrait y avoir plus d’une couche cachée. Chaque couche comprend par exemple un certain nombre de neurones. Par exemple, le réseau neuronal 100 correspond à un modèle de réseau neuronal avec un espace de données bidimensionnel, et il y a donc deux neurones visibles dans la couche d’entrée recevant les valeurs d’entrée correspondantes I1 et I2. Le modèle présente une couche cachée avec sept neurones cachés et correspond ainsi à une matrice de dimensions A l’exemple de la , il y a trois neurones dans la couche de sortie, fournissant une sortie O du réseau 100. Dans le cas général où le réseau neuronal comprend couches cachées, la fonction appliquée par le réseau neuronal 100 est par exemple une agrégation de fonctions, comprenant une fonction associative dans chaque couche , ces fonctions étant connectées en chaîne selon la carte . Il y a seulement deux fonctions de ce type dans l’exemple simple de la , correspondant à celles de la couche cachée et de la couche de sortie. Une sortie de chaque neurone de chaque couche , excepté la couche de sortie, est couplée à chaque neurone de la couche suivante par l’intermédiaire d’une synapse correspondante, les synapses de chaque couche étant associées à une matrice de pondération synaptique . En particulier, chaque neurone j de chaque couche du réseau 100 est couplé à chaque neurone k de la couche suivante par l’intermédiaire d’une synapse correspondante, associée à un poids synaptique . La mise en œuvre d’un réseau neuronal tel que celui de la sur un dispositif de traitement implique généralement l’exécution séquentielle du réseau linéaire de neurones, mais ceci implique qu’une quantité importante de temps et de ressources de traitement est occupée à organiser et à regrouper les données intermédiaires, avec de nombreuses opérations de chargement et de stockage en mémoire. Ceci entraîne une solution qui est lente et/ou très énergivore. Un autre type de réseau neuronal est un réseau neuronal convolutif, dans lequel chaque couche fait intervenir l’application d’une convolution 2-dimensionnelle (2D). Ainsi, les états d’entrée fournis à chaque neurone de chaque élément PE à partir des neurones de la couche précédente ne forment plus un vecteur de scalaires, mais une carte de caractéristiques résultant de la convolution 2D à partir du noyau correspondant. La illustre schématiquement un réseau 200 d’éléments de traitement selon un exemple de réalisation de la présente description. Le réseau 200 est configuré pour mettre en œuvre un réseau neuronal comprenant une ou plusieurs couches cachées, comme le réseau neuronal de la . Le réseau 200 est par exemple configuré pour mettre en œuvre un réseau neuronal mélangeur latéral profond, qui est un réseau dans lequel, plutôt que d’être un réseau entièrement connecté, les interconnexions de neurones d’une couche à la suivante sont définies par la relation spatiale entre les neurones, comme on le décrira plus en détail ci-dessous. Une telle architecture est par exemple particulièrement adaptée au traitement de données d’entrée bidimensionnelles telles que des images, bien que d’autres applications soient également possibles. A l’exemple de la , la matrice 200 est une matrice 2-dimensionnelle de I par J éléments de traitement PE, où I est égal à 8 et J est égal à 6, bien que dans d’autres modes de réalisation, différentes valeurs de I et J soient possibles, au moins quatre éléments de traitement étant par exemple présents dans le réseau. Chacun des éléments de traitement met en œuvre k neurones, k étant par exemple égal à un ou plus, et par exemple égal à au moins quatre. Des modes de réalisation décrits ici sont basés sur la présence de quatre neurones mis en œuvre par chaque élément de traitement. Chaque élément de traitement pour et , stocke par exemple un vecteur à k éléments , indiquant un état caché, qui sera également désigné ici comme un état d’activation, des k neurones de l’élément de traitement PE. Chaque élément de traitement PE stocke également par exemple une matrice de pondération , qui définit la façon dont les états d’activation des éléments de traitement voisins sont propagés vers un élément PE donné. Dans certains modes de réalisation, comme on le décrit plus en détail ci-dessous en relation avec la figure 3, chaque matrice de pondération est définie par . A l’exemple de la figure 2, chaque élément PE reçoit par exemple les états d’activation pour les éléments PE voisins qui partagent un bord ou un coin avec l’élément PE en question. Ainsi, chaque élément PE reçoit les états d’activation de jusqu’à huit PE voisins, en plus de stocker son propre état d’activation. Un exemple est représenté pour l’élément de traitement , qui reçoit les états d’activation des éléments de traitement aux positions x,y par rapport à la position de l’élément de traitement , où x et y sont chacun des entiers de -1 à +1. Ainsi, la matrice de pondération associée à l’élément de traitement définit par exemple des poids appliqués aux états d’activation de chacun des éléments PE hachurés, comprenant l’élément lui-même. Dans le cas d’éléments PE qui se trouvent à un bord ou coin du réseau, la matrice de pondération est par exemple de dimensions réduites pour ne couvrir que les éléments PE qui sont présents, ou est remplie de zéros pour les éléments PE qui ne sont pas présents dans le réseau. Il serait également possible que les éléments PE soient programmés avec un drapeau "ignore" pour qu’ils ignorent les étapes de traitement à réaliser sur les données à partir des PE qui ne sont pas présents. A titre de possibilité supplémentaire, un anneau de PE factices est prévu autour du réseau, ces éléments PE factices fournissent des états d’activation réglés à zéro et propagent des états d’activation reçus en provenance des éléments PE voisins. Bien entendu, l’exemple de dimensions de la matrice de pondération décrit ci-dessus et illustré à la figure 2 n’est qu’un exemple, et dans des variantes de réalisation, d’autres combinaisons seraient possible. Par exemple, la matrice de pondération de chaque élément PE pourrait définir que, pour un élément PE donné, les états d’activation ne soient reçus que par les éléments PE voisins partageant un bord avec cet élément PE. Encore à titre d’exemple, la matrice de pondération de chaque élément PE pourrait définir que, pour un élément PE donné, les états d’activation soient reçus depuis tous les éléments PE voisins partageant un bord avec cet élément PE et depuis tous les éléments PE partageant un bord avec un élément PE qui partage lui-même un bord ou un coin avec l’élément PE donné. Chaque élément PE de la figure 2 est par exemple configuré pour mettre en œuvre chaque couche du réseau neuronal DLM en mettant à jour l’état d’activation à une nouvelle valeur , qui est ensuite traité par la couche suivante L. Par exemple, chaque élément PE est configuré pour appliquer l’opération suivante : [Math 1] où f() est la fonction d’activation. La figure 3 illustre schématiquement la matrice de pondération associée à et stockée par l’élément de traitement de la selon un exemple de réalisation dans lequel chaque élément PE met en œuvre quatre neurones, et ainsi k = 4. La matrice de pondération comprend par exemple neuf sous-matrices de pondération, , pour et . En d’autres termes, la matrice de pondération est définie par , les neuf sous-matrices étant sous forme de matrice 3 par 3. Chacun des éléments de traitement de la Figure 2 est par exemple associé à et stocke une matrice de pondération similaire à la matrice , bien que dans le cas de PE sur bords ou les coins du réseau matriciel, les sous-matrices qui ne sont pas présentes dans le réseau matriciel sont par exemple à zéro. Dans certains modes de réalisation, chacune des matrices de pondération est différente des autres matrices de pondération. Alternativement, certaines ou l’ensemble des matrices de pondération pourraient être les mêmes, en d’autres termes l’ensemble des PE stocke le même ensemble de poids, avec la possible exception des cas sur les bords/aux coins. Alternativement, les matrices de pondération sont les mêmes pour des régions données du réseau matriciel, telles que des quadrants ou des anneaux concentriques centrés autour de l’origine, telle que le centre du réseau matriciel d’éléments PE, où chaque région correspond par exemple à une région donnée du plan image. Chaque sous-matrice de pondération est par exemple de dimensions k by k*, où k* désigne le nombre de neurones dans chaque élément PE, i.e., la taille de chaque vecteur d’activation de neurone , dans la couche suivante du réseau neuronal. Ainsi, chaque sous-matrice de pondération permet la génération de k* états d’activation à partir des k états d’activation en provenance de l’élément PE correspondant. Dans l’exemple de la , k* = k, signifiant qu’il y a un même nombre de neurones dans la couche associée à la matrice de pondération que dans la couche suivante. Il y a par exemple un matrice de pondération définie pour chaque couche du réseau neuronal qui est mise en œuvre par le réseau matriciel d’éléments PE. Alternativement, au moins certaines des couches peuvent avoir le même nombre de neurones et avoir une même matrice de pondération, réduisant ainsi le nombre de matrices de pondération à être stockées par chaque élément PE. Alors que l’exemple de la figure 3 repose sur une matrice de pondération comprenant une valeur de poids scalaire correspondante appliquée par chaque élément PE entre chacun des k neurones d’entrée et chacun des k* neurones de sortie, dans des variantes de réalisation, le réseau matriciel d’éléments PE 200 de la figure 2 pourrait être adapté à mettre en œuvre un réseau convolutif 2D. Dans un tel cas, un mélange latéral convolutif peut être appliqué, dans lequel l’état d’activation de chaque élément PE n’est plus un vecteur 1-dimensionnel, mais plutôt une carte de caractéristiques 2D, et chaque matrice de pondération n’est plus une matrice de 3 par 3 de sous-matrices de pondération de dimensions k par k*, mais une matrice de 3 par 3 de noyaux de convolution. En outre, chaque élément PE est par exemple configuré pour appliquer l’opération suivante : [Math 2] où f() est une fonction d’activation et l’opérateur (*) est un opérateur de convolution. La quantité de marge et le pas appliqué pendant l’opération de convolution sont par exemple choisis selon que la taille de la carte de caractéristiques doit être augmentée, réduite, ou préservée, d’une couche à la suivante. De façon connue de l’homme de l’art, la marge correspond à une épaisseur de pixels, dont les états sont réglés à zéro, qui sont ajoutés autour de la frontière de chaque carte de caractéristiques à laquelle est appliquée la convolution. Le pas correspond à la taille de pas appliquée entre la carte de caractéristiques d’entrée et le noyau. Une marge de 1 et un pas de 1 résultent par exemple en la préservation de la taille de la carte de caractéristiques. Un pas de 2 et une marge de 1 diminueront la taille de la carte de caractéristiques de 4 fois. La illustre schématiquement un mélange latéral vers l’avant dans un réseau neuronal mélangeur latéral profond (DLM, deep lateral mixer) mis en œuvre au moyen d’un réseau matriciel d’éléments de traitement PE selon un exemple de réalisation de la présente description. Le réseau matriciel d’éléments de traitement présente des dimensions de quatre par quatre dans l’exemple de la et chaque élément de traitement met en œuvre quatre neurones. Une couche d'entrée 400 du réseau neuronal DLM comprend des données d’entrée sous la forme d'une image dans l’exemple de la , bien que d’autres types de données d’entrée soient possibles dans des variantes de réalisation. En outre, dans l’exemple de la , la couche d’entrée 400 est une image carrée de 12 par 12 pixels, bien que dans des variantes de réalisation des images d’entrée présentant des dimensions différentes soient possibles. Les données d’entrée sont par exemple une image divisée en macropixels (MACROPIXELS), le nombre de macropixels étant égal au nombre de PE dans le réseau matriciel d’éléments PE de sorte que chaque élément PE traite les données de pixel et les vecteurs d’activation intermédiaires d’un macropixel. Le réseau neuronal DLM selon l’exemple de la comprend trois couches cachées 401, 402, et 403 en plus de la couche d’entrée 100. Dans des variantes de réalisation, il serait possible d’avoir un nombre quelconque de couches cachées. Alors qu’à la chacune des couches 401, 402 et 403 est représentée par un réseau matriciel distinct d’éléments de traitement PE, ceci n’est fait qu’à titre illustratif pour représenter les étapes de mélange latéral, dans la mesure où en réalité ces couches sont toutes mises en œuvre au moyen d’un seul réseau matriciel d’éléments de traitement PE. Une première couche 401 du réseau neuronal DLM est par exemple configurée pour réduire la taille du vecteur d’entrée associé à chaque élément PE à , qui est le nombre de neurones mis en œuvre par chaque élément PE dans le première couche cachée 401. L’étendue de la réduction est contrôlée par la forme de la matrice de pondération. Ainsi, chaque élément PE applique une matrice de pondération à un groupe rectangulaire de pixels d’entrée, où chaque matrice de pondération présente des dimensions , où est le nombre de pixels d’entrée traités par chaque élément de traitement PE, correspondant par exemple à un macropixel de l’image. Dans l’exemple de la figure 4, = 9, et k = 4, et chaque matrice de pondération présente ainsi des dimensions de 9x4. Chacune des matrices de pondération de la première couche 401 dans l’exemple de la réduit ainsi les 9 pixels d’entrée par PE en un vecteur caché de 4. Les poids de chaque matrice de pondération peuvent par exemple être appris. Alternativement, plutôt que de réduire la taille de l’entrée de cette façon, on peut par exemple utiliser une opération de convolution pour réduire la taille, par exemple en choisissant un pas supérieur à 1. Ceci présente l’avantage de faire intervenir moins de poids. Par exemple, pour une entrée de 3x3 et une taille souhaitée de k1 = 4, un noyau de convolution de 2x2 est passé sans marge et un pas de 1 pour obtenir une carte de caractéristiques de 2x2, i.e. un vecteur de taille 4. Si l’entrée était très supérieure, une convolution avec un pas supérieur à 1 et/ou une série de convolutions pourraient être appliquée. Les poids du noyau utilisé pour la convolution peuvent par exemple être appris. En outre, l’opération de convolution eut être une opération de mélange latéral convolutif. On notera que, à l’exemple de la , le mélange latéral n’est pas effectué entre la couche d’entrée 400 et la première couche 401. Ainsi, chaque matrice de pondération stockée par les éléments PE en association avec la couche 401 ne comprend pas, par exemple, de sous-matrices associée à un élément PE voisin quelconque. Ceci est dû au fait qu'une telle matrice de pondération qui effectue à la fois une réduction de taille et un mélange latéral présenterait des dimensions relativement grandes. Toutefois, il serait également possible d’effectuer un mélange latéral dans la première couche comme décrit en relation avec la si la mémoire de chaque élément PE est suffisante en taille, ou si un mélange latéral convolutif est effectué, comme mentionné ci-dessus. La illustre schématiquement une matrice 500 de 3 par 3 d’éléments de traitement plus en détail selon un exemple de réalisation de la présente description. Le réseau matriciel 500 de neuf éléments de traitement seulement est représenté pour des raisons de facilité d’illustration, et dans une variante de réalisation, le réseau matriciel est plus grand, présentant par exemple des dimensions de I par J éléments de traitement, où I et J peuvent chacun s’élever à plusieurs centaines ou davantage. En outre, le réseau n’a pas besoin d’être carré, mais pourrait présenter des dimensions rectangulaires avec I non égal à J. Chaque élément PE comprend par exemple une mémoire (Mem) 502 stockant des données. Dans certains modes de réalisation, la mémoire 502 est une mémoire volatile, telle qu’une SRAM (static random-access memory) ou un fichier de registre, par exemple formé de bascules. La mémoire 502 est par exemple divisée en sections de différentes tailles qui contiennent des variables de données, comme on le décrira plus en détail ci-dessous. Les données peuvent être écrites dans la mémoire 502 directement par un capteur le cas échéant (non illustré en ) et/ou par une mémoire sur puce qui est située à l’extérieur du réseau matriciel d’éléments PE, et/ou par les éléments PE voisins par l’intermédiaire des circuits d’interface 503, par exemple un ou plusieurs multiplexeurs, positionnés entre les éléments PE. Chaque élément PE comprend également par exemple un processeur (ALU) 508, tel qu’une unité logique et arithmétique (ALU, arithmetic logic unit), configurée pour adresser des données dans la mémoire 502, pour effectuer des calculs sur les données tels que, par exemple, des opérations de multiplication, addition et décalage de bits et pour réécrire les résultats dans la mémoire 502 aux emplacements souhaités. La façon dont les données dans la mémoire 502 sont gérées et la séquence d’opérations effectuée par le processeur 508 sur ces données est définie, par exemple, par des instructions informatiques formant un code informatique, également appelé microcode, stocké dans une mémoire de code (Code) 504. Dans certains modes de réalisation, la mémoire de code 504 est mise en œuvre par un circuit mémoire distinct de celui mettant en œuvre la mémoire 502, bien qu’il soit également possible pour les mémoires 502 et 504 d’être mises en œuvre par un même circuit mémoire. Comme la mémoire 502, la mémoire 504 est par exemple mise en œuvre par une mémoire volatile. Pour maintenir l’empreinte spatiale de chaque élément PE relativement basse, la mémoire de code 504 est par exemple relativement contrainte en taille et ainsi limitée dans le nombre d’instructions qu’elle peut stocker. Par conséquent, dans certains modes de réalisation, plusieurs codes peuvent être chargés et exécutés séquentiellement pour réaliser l’opération souhaitée du réseau neuronal. Par exemple, le réseau matriciel d’éléments PE 500 est positionné de manière adjacente à un circuit mémoire plus grand et un contrôleur général (non illustré), qui permet à des données d’être écrites et lues dans les circuits de mémoire locaux 502 et les mémoires de code locales 504 de chaque élément PE. Il serait également possible, dans certains modes de réalisation, que la mémoire de code 504 soit mise en œuvre par une mémoire non volatile, telle qu’une mémoire Flash ou EEPROM (Electrically Erasable Programmable Read-Only Memory). Dans certains modes de réalisation, le code exécuté par chaque élément PE est le même, de sorte que chaque élément PE du réseau matriciel d’éléments PE effectue les mêmes opérations de façon synchrone avec les autres. Alors que la repose sur une mise en œuvre logicielle de chaque élément PE, une mise en œuvre matérielle serait également possible. Dans un tel cas, la mémoire de code 504 et le processeur 508 sont par exemple remplacés par un seul bloc de circuit dédié configuré pour répéter des opérations prédéfinies sur les données stockées par la mémoire 502, telles que des opérations de multiplication et accumulation qui peuvent être paramétrées. Le circuit d'interface 503 du réseau matriciel d’éléments PE 500 permet par exemple le partage de données de la mémoire 502 de chaque élément PE avec les éléments PE voisins. Des exemples de la mise en œuvre de ces interfaces seront à présent décrits en référence aux figures 6 et 7. La illustre schématiquement un module PE 600 comprenant un élément de traitement et/ou des multiplexeurs d’entrée/sortie MUX_IN, MUX_OUT, selon un exemple de réalisation. Ce module 600 est par exemple utilisé pour mettre en œuvre chaque élément PE et les multiplexeurs correspondants de la . A l’exemple du module 600 de la , le multiplexeur d’entrée MUX_IN présente huit entrées, l’une étant couplée à la mémoire 502 de chacun des huit éléments PE voisins, par exemple par l’intermédiaire du multiplexeur de sortie MUX_OUT de chaque module PE voisin. La sortie du multiplexeur d’entrée MUX_IN est couplée à l’élément PE, et en particulier à la mémoire 502 de l’élément PE. Le multiplexeur MUX_IN est commandé par un signal de sélection IN_SEL, produit par exemple par le processeur 508 de l’élément PE. Le multiplexeur de sortie MUX_OUT du module 600 présente par exemple une entrée couplée à l’élément PE, et en particulier à la mémoire 502 de l’élément PE, et huit sorties, l’une étant couplée à la mémoire 502 de chacun des huit éléments PE voisins, par exemple par l’intermédiaire du multiplexeur d’entrée MUX_IN de chaque module PE voisin. Le multiplexeur MUX_OUT est commandé par un signal de sélection OUT_SEL, produit par exemple par le processeur 508 de l’élément PE. La illustre schématiquement un module PE 700 comprenant un élément de traitement et/ou des multiplexeurs d’entrée/sortie MUX_IN, MUX_OUT, selon un autre exemple de réalisation. Ce module 700 est par exemple utilisé pour mettre en œuvre chaque élément PE et les multiplexeurs correspondants de la . A l’exemple du module 700 de la , le multiplexeur d’entrée MUX_IN présente quatre entrées, l’une étant couplée à la mémoire 502 de chaque élément PE voisin qui est horizontalement ou verticalement adjacent dans le réseau, par exemple par l’intermédiaire du multiplexeur de sortie MUX_OUT de chaque module PE voisin correspondant. La sortie du multiplexeur d’entrée MUX_IN est couplée à l’élément PE, et en particulier à la mémoire 502 de l’élément PE. Le multiplexeur MUX_IN est commandé par un signal de sélection IN_SEL, produit par exemple par le processeur 508 de l’élément PE. Le multiplexeur de sortie MUX_OUT du module 600 présente par exemple une entrée couplée à l’élément PE, et en particulier à la mémoire 502 de l’élément PE, et quatre sorties, l’une étant couplée à la mémoire 502 de chacun des huit PE voisins, par exemple par l’intermédiaire du multiplexeur d’entrée MUX_IN de chaque module PE voisin. Le multiplexeur MUX_OUT est commandé par un signal de sélection OUT_SEL, produit par exemple par le processeur 508 de l’élément PE. Pendant l’opération de mélange latéral, chaque élément PE effectue, en parallèle, une opération sur ses états d’activation et l’état d’activation sur chacun de ses PE voisins. Le module PE 600 de la permet à l’état d’activation d’être fourni à l’élément PE en provenance de chacun des huit PE voisins et de l’élément PE à l’un quelconque des huit PE voisins. Le module PE 700 de la permet à l’état d’activation d’être fourni à l’élément PE en provenance de l’un quelconque des quatre PE horizontalement et verticalement adjacents et de l’élément PE à l’un quelconque des quatre PE horizontalement et verticalement adjacents. Ceci permet encore à un élément PE donné d’obtenir l’état d’activation de ses huit voisins en utilisant une séquence de translation spécifique, comme on le décrira plus en détail ci-dessous en référence à la . Bien que cela ne soit pas illustré aux figures 6 et 7, dans certains modes de réalisation, une interface de circuit supplémentaire est prévue, par exemple, de chaque côté des multiplexeurs, configurée pour sélectionner la section de la mémoire PE 502 dans laquelle sont écrites des données en provenance d’un élément PE voisin, et/ou dans laquelle elles sont lues pour être transmises à un élément PE voisin. Par exemple, dans certains cas, les données peuvent être lues et écrites d’une mémoire à une autre par blocs qui sont envoyés pendant plusieurs cycles, et ce circuit d’interface encore supplémentaire sélectionne les adresses mémoire dans lesquelles ces blocs sont lus et écrits. La illustre schématiquement une opération de mélange latéral vers l’avant selon un exemple de réalisation de la présente description. L’opération représentée par la est par exemple effectuée par chaque élément PE d’un réseau matriciel d’éléments PE, tel que les réseaux matriciels des figures 2 ou 5. La illustre un élément PE central 5 et ses huit voisins PE 1 à PE 4 et PE 6 à PE 9, et représente les opérations mises en œuvre par l’élément PE central. Une opération similaire est par exemple mise en œuvre par chaque élément PE du réseau. On suppose que, en première étape, les données de pixel rassemblées à un instant donné, telles qu’une image fixe, ou une trame d’une séquence vidéo, sont écrites dans une section de la mémoire de chaque élément PE. Par exemple, comme on l’a décrit ci-dessus en relation avec la , dans le cas où les données d’entrée sont des données d’image, l’image d’entrée est par exemple divisée en macropixels. Dans le cas où chaque macropixel comprend 16x16 pixels, alors de vecteur de données d’entrée pour le réseau neuronal DLM au niveau de chaque élément PE est par exemple un vecteur aplati de 256 éléments, dans lequel chaque entrée est un nombre correspondant à une intensité de pixel détectée. Pour produire le premier état caché du réseau neuronal DLM pour chaque élément PE, ce vecteur de 256 de long est par exemple multiplié par une matrice de pondération de 256xH, par exemple en appliquant un produit interne ou une multiplication vecteur-matrice. Dans cet exemple, on suppose que H = 16, bien que différentes valeurs soient possibles. Après cette opération, chaque élément PE aura, dans sa mémoire locale 502, un vecteur présentant une longueur de 16 valeurs, appelé ci-après vecteur d’état caché ou vecteur d’état d’activation. En supposant que toutes les valeurs sont quantifiées sous la forme d’entiers de 4 bits, sauf pour les sommes partielles intermédiaires, ceci correspond à une utilisation de mémoire de 2,2 kB par PE pour l’exécution de cette première étape. Une ou plusieurs opérations de mélange latéral, correspondant à une ou plusieurs couches cachées du réseau, sont alors par exemple effectuées. Pendant ces opérations, les éléments PE, de façon itérative sur un certain nombre de couches de mélange latéral, mettent à jour leur état caché local par l’intermédiaire d’opérations MAC (multiplication et accumulation) avec les états d’activation stockés dans leurs éléments PE voisins. Ceci exploite la capacité des éléments PE à effectuer une translation de leurs contenus de mémoire, par l’intermédiaire de multiplexeurs, entre éléments PE voisins, comme on l’a décrit ci-dessus en référence aux figures 6 et 7. Les opérations de mélange latéral font par exemple intervenir le traitement, par chaque élément PE, de trois types de données stockées dans la mémoire locale 502 de l’élément PE, comme on le décrira à présent plus en détail en référence à la . La illustre schématiquement des parties de mémoire du réseau matriciel d’éléments de traitement PE 1 à PE 9 de la selon un exemple de réalisation de la présente description. Chaque élément PE est illustré comme contenant trois parties de mémoire, qui correspondent par exemple à trois sections différentes de la mémoire locale 502 dans chaque élément PE. Une première section d’entrée (Input) 902 de chaque élément PE contient par exemple un vecteur d’état caché de l’élément PE. Dans certains modes de réalisation, la section d’entrée 902 stocke initialement le vecteur d’état caché pour l’élément PE lui-même, et cette valeur est alors écrasée par les vecteurs d’état cachés importés par translation depuis les éléments PE voisins. Alternativement, la section d’entrée 902 peut comprendre deux sections, une première qui stocke l’état caché local de l’élément PE et une seconde qui stocke l’état caché importé par translation depuis les éléments PE voisins. Une seconde section de poids (Weights) 904 de chaque élément PE contient par exemple les poids qui seront multipliés par le vecteur d’état d’activation de l’élément PE et du vecteur d’état d’activation de chacun des éléments PE voisins. Ces poids ont par exemple des dimensions de kxk*x9 et chaque poids est par exemple un scalaire ou un noyau de convolution. Dans certains cas, pour chaque couche DLM, une nouvelle matrice de pondération est chargée dans chaque élément PE en provenance d’une mémoire externe. Dans d’autres modes de réalisation, la même matrice de pondération est par exemple utilisée pour certaines ou l’ensemble des couches cachées. Une troisième section de sortie (Output) 906 stocke la somme pondérée cumulée à mesure que l’algorithme parcourt les opérations MAC à partir du vecteur d’état d’activation de l’élément PE lui-même et de chacun des huit éléments PE voisins ainsi que leurs matrices de pondération correspondantes. Après que toutes les sommes pondérées ont été cumulées, une fonction d’activation non linéaire peut être appliquée à cette valeur et le résultat écrit dans la section Input, pour servir de vecteur d’activation qui est utilisé pour la couche DLM suivante. En se référant encore à la , tous les éléments PE sont par exemple configurés pour décaler leur vecteur d’état d’activation, correspondant par exemple à la section d’entrée 902 de leur mémoire locale 502, en même temps dans la même direction, de sorte que ce transfert se produit en parallèle sur l’ensemble du réseau matriciel d’éléments PE. L’opération de translation est par exemple coordonnée par une horloge globale pour l’ensemble du réseau matriciel d’éléments PE, de sorte que les éléments PE fonctionnent de façon synchrone. En supposant une taille de couche cachée de 16 valeurs, ceci utilise par exemple une matrice de pondération de 9x16x16 par couche. En supposant une quantification sur 4 bits, ceci correspond à une utilisation de mémoire de 1,2 kB dans la mémoire de PE locale par couche, ou dans le cas où la même matrice de pondération est partagée entre toutes les couches, une utilisation de mémoire de 1,2 kB pour toutes les couches. La génération d’un ensemble des produits partiels est représentée à la par des liens entre les quatre neurones d’un élément PE central 5 et un premier neurone de l’élément PE 5, et par des liens entre les quatre neurones de chaque élément voisin PE 1 à PE 4 et PE 6 à PE 9 avec le premier neurone de l’élément PE 5. A chaque neurone, l’ensemble des multiplications est cumulé, en d’autres termes le résultat de la multiplication courante est additionné au résultat de toutes les multiplications précédentes, et stocké dans une section de "sortie" de la mémoire locale d’éléments PE 502. Comme le représente un bloc 804 à la , après l’obtention de la somme pondérée finale, l’élément PE peut appliquer localement une fonction d’activation non linéaire f(h), telle que par exemple une fonction ReLU, tanh ou sigmoïde, pour obtenir le nouveau vecteur d’état d’activation qui est écrit dans la section d’entrée 902 de la mémoire locale d’élément PE 502, par exemple en écrasant la value qui y est couramment conservée, qui est le vecteur d’état d’activation de l’élément PE voisin final qui avait été importé par translation. Entre les couches, ce vecteur peut aussi être soumis à une fonction de normalisation telle qu’une normalisation de lot, une normalisation d’instance ou une normalisation de couche, comme cela se pratique couramment dans les réseaux neuronaux. Comme le représente le symbole de répétition 806 à la , la même séquence d’opérations est par exemple répétée pour un nombre souhaité de couches de mélange latérales, sans aucun prétraitement ou réorganisation de données entre couches, et dans certains cas, sans le chargement de nouveaux codes d’instruction dans la mémoire de code 504 de chaque élément PE. Toutes les données d’activation sont au bon emplacement pour être utilisées dans la couche suivante, ce qui n’est typiquement pas le cas pour les mises en œuvre sous forme de réseau matriciel systolique des modèles de réseaux neuronaux existants. On notera que tous les éléments PE sur l’ensemble du réseau matriciel effectuent les mêmes opérations de translation et MAC en parallèle. En outre, dans certains modes de réalisation, tous les éléments PE exécutent le même code en utilisant un même signal d’horloge commun (non illustré), ce qui implique qu’il n’est pas besoin d’un protocole de synchronisation lors de la translation des vecteurs d’état d’activation entre les éléments PE. La illustre schématiquement une séquence de translation selon une spirale en expansion entre mémoires locales du réseau matriciel d’éléments de traitement PE 1 à PE 9 de la pendant un mélange latéral vers l’avant selon un exemple de réalisation de la présente description. Cette séquence de translation permet par exemple, sur une séquence de huit opérations de translation, au vecteur d’état d’activation de l’élément de traitement central PE 5 du réseau d’être communiqué à chacun de ses huit voisins. Comme représenté par des flèches à la , la séquence commence à l’élément PE 5, et fait intervenir une séquence de translation selon une spirale en expansion L,U,R,R,D,D,L,L, où L est une translation vers la gauche, U est une translation vers le haut, R est une translation vers la droite et D est une translation vers le bas. Ceci signifie que la section d’entrée de la mémoire locale 502 de l’élément de traitement PE 5 contient, sur neuf itérations, les vecteurs d’état d’activation des éléments de traitement : PE 5, PE 6, PE 9, PE 8, PE 7, PE 4, PE 1, PE 2 et PE 3. Bien entendu, illustre un exemple seulement de la séquence de translation susceptible d’être appliquée, de nombreux motifs de translation alternatifs existant, tels qu’une séquence de trame, dans le cas où la mémoire de chaque élément PE comprend une section qui stocke le vecteur d’état caché de l’élément PE lui-même au long du traitement de la couche. On notera que pour certains éléments PE du réseau matriciel, ils recevront des vecteurs d’état d’activation qui peuvent être passés hors du réseau matriciel avant de rentrer à nouveau dans le réseau matriciel. Ceci est par exemple rendu possible par la création d’une marge à la frontière extérieure du réseau matriciel avec des PE factices qui n’effectuent que l’opération de translation. Alternativement, dans le cas où la mémoire de chaque élément PE comprend une section qui stocke les vecteurs d’état cachés de l’élément PE lui-même au long du traitement de couche, alors le vecteur original n’est jamais perdu et peut être transféré. Dans certains modes de réalisation, chacun des éléments PE du réseau matriciel d’éléments PE est configuré pour effectuer, de façon synchrone avec les autres éléments PE, une même séquence d’opérations, faisant intervenir une translation des données de neurones d’un élément PE voisin à l’est, au sud, à l’ouest ou au nord de l’élément PE en fonction de la séquence de translation, pour effectuer la même opération sur les données de neurone, et pour exporter les données de neurone par translation vers un élément PE voisin à l’est, au sud, à l’ouest ou au nord de l’élément PE en fonction de la séquence de translation. Par exemple, ceci est réalisé par le chargement d’un même code d’instruction dans la mémoire locale de chaque élément PE, et l’exécution de ce même code d’instruction. Dans le cas où le réseau neuronal DLM présente de multiples couches cachées, chaque couche supplémentaire augmente spatialement la zone d’influence d’un macropixel donné, comme on le décrira maintenant en référence à la . La figure 11 illustre schématiquement le rayon d’influence d’un élément de traitement d’un réseau matriciel d’éléments PE de 6 par 6 après une, deux et trois couches de mélange latéral selon un exemple dans lequel la matrice de pondération présente des dimensions de 3 par 3 sous-matrices. On voit que, après la couche d’entrée 0 (AFTER L0), qui ne comprend aucun mélange latéral dans cet exemple, les données d’entrée sont présentes seulement dans l’élément de traitement . Après la première couche cachée (AFTER L1), la zone d’influence couvre un groupe d’éléments PE de 3 par 3 centré sur l’élément de traitement , après la deuxième couche cachée (AFTER L2) la zone d’influence couvre un groupe d’éléments PE de 5 par 5 centré sur l’élément de traitement , et après la troisième couche cachée (AFTER L3) la zone d’influence couvre l’intégralité du réseau matriciel d’éléments PE de 6 par 6. Ainsi, pendant chaque couche, chaque élément PE intégrera des informations de provenance de plus en plus lointaine dans le réseau matriciel d’éléments PE comme le décrit la . Ceci permet à chaque élément PE de produire un plongement local, correspondant à une représentation abstraite de l’entrée sous forme de vecteur de sortie, qui prend en compte les caractéristiques globales et le contexte. Dans certains modes de réalisation, le nombre de couches de mélange latéral est, par exemple, défini par les dimensions du réseau matriciel d’éléments PE et le nombre de couches qui permettent de couvrir l’image complète, ce qui dépend également la résolution de chaque macropixel. La illustre schématiquement un dispositif d’imagerie 1200 comprenant un capteur d’image 1202 empilé sur une puce de traitement de données 1204, et en particulier sur un réseau matriciel d’éléments PE 1205 de la puce de traitement 1204, selon un exemple de réalisation de la présente description. Le réseau matriciel d’éléments PE 1205 est par exemple un réseau matriciel systolique mettant en œuvre le réseau neuronal DLM tel que décrit ici. Le capteur d’images 1202 comprend par exemple une matrice de tuiles de pixels (PIXEL TILE), dont chacune comprend par exemple une sous-matrice de c pixels (c PIXELS) par d pixels (d PIXELS), où c et d sont égaux à 16 dans l’exemple de la . Chaque pixel comprend par exemple un photodétecteur. Le capteur d’images 1202 comprend également par exemple des convertisseurs analogique-numérique (non illustrés) pour convertir des signaux analogiques captés par chaque pixel en valeurs numériques qui peuvent être traitées par la puce de traitement de données 1204 au moyen d’un traitement interne au capteur. Chaque tuile de pixels forme par exemple une tuile supérieure et est positionné sur une tuile inférieure correspondante de la puce de traitement de données formant un élément de traitement (PE) du réseau matriciel d’éléments PE 1205, chaque paire de tuiles supérieure et inférieure formant par exemple un agrégat 3D (3D CLUSTER). Chaque élément PE comprend par exemple E éléments de calcul 1208, où E est égal à 16 dans l’exemple de la . Chacun des éléments de calcul traite par exemple une ligne de données de pixel d’un macropixel correspondant (MACROPIXEL) formé de p pixels de la tuile de pixels, où p est égal à 4 dans l’exemple de la . Chaque tuile de pixels est par exemple couplée à la tuile inférieure correspondante par des vias d’interconnexion, également appelés vias 3D. Chaque tuile inférieure comprend par exemple en outre la mémoire de données/code 502, 504 et le processeur local 508. En outre, l’élément PE comprend par exemple un ou plusieurs circuits de traitement supplémentaires 1208 utilisés par exemple pour ajouter du parallélisme dans chaque élément PE, permettant par exemple à une ligne de pixels ou de vecteurs d’activation d’être traitée en même temps. La puce de traitement 1204 comprend par exemple également, par exemple accolées au réseau matriciel d’éléments PE 1205, une mémoire de données 1212, une mémoire d’instructions 1214, et un circuit de commande globale 126 du dispositif d’imagerie. Le circuit de commande globale 1216 est par exemple configuré pour fournir un flux de données 1218 en provenance du dispositif d’imagerie 1200 comprenant, par exemple, des données d’image capturées par le capteur d’images et des données d’inférence produites par le réseau neuronal DML mis en œuvre par la matrice de traitement. La est un organigramme illustrant des étapes d’un procédé d’inférence impliquant un mélange latéral direct selon un exemple de réalisation de la présente description. Le procédé de la est par exemple mis en œuvre par un réseau matriciel d’éléments de traitement tel que décrit ici, comme par la matrice de traitement 1205 de la , et par un capteur d’images. A une opération 1301, une image brute est capturée par un capteur d’images. L’image brute peut être une image en niveaux de gris ou une image en couleurs. Dans certains modes de réalisation, comme celui de la , le capteur d’images et la matrice de traitement font partie d’un même dispositif d’imagerie, tandis que dans d’autres modes de réalisation le capteur d'images peut être un composant distinct. On suppose que le capteur d’images capture des images en niveaux de gris, en d’autres termes, une intensité de pixel brute, mais la couche de détection supérieure pourrait également comprendre en même temps des photodétecteurs sensibles à différentes longueurs d’onde de la lumière et produire des images en couleurs composée d’un certain nombre de canaux de couleur, telles que des images RGB. En outre, l’image brute est convertie par des convertisseurs analogique-numérique dans le capteur d’images, en une image numérique brute. A une opération 1302 suivant l’opération 1301, les données de pixel numériques de l’image brute sont chargées sous forme de vecteurs d’entrée de macropixel dans le réseau matriciel d’éléments PE. Par exemple, chaque élément PE du réseau matriciel reçoit les données de pixel en provenance d’un macropixel correspondant. Ces données sont par exemple stockées dans la section d’entrée de la mémoire locale 502 de chaque élément PE. A une opération 1303 après l’opération 1302, chaque élément du réseau matriciel d’éléments PE est configuré pour multiplier le vecteur d’entrée de macropixel correspondant par une matrice de pondération correspondante pour produire un état caché initial . Comme on l’a décrit ci-dessus, cette opération de couche d’entrée ne fait pas nécessairement intervenir de mélange latéral mais sert par exemple essentiellement à réduire la taille des vecteurs d’entrée de macropixel. A une opération 1304 après l’opération 1303, les variables "n" et "RESULTAT CUMULE" sont par exemple chacune mise à 0. A une opération 1305 après l’opération 1304, pour une couche ultérieure L, chaque élément du réseau matriciel d’éléments PE est configuré pour multiplier l’état caché par une matrice de pondération correspondante pour produire un produit pondéré. Par exemple, x et y sont des paramètres indiqués à la figure 3 et à chaque itération, l'état caché d’un état différent parmi les neuf états cachés à être traités par chaque élément PE est traité. Par exemple, à la première itération, l’état caché de l’élément PE lui-même est traité. A une opération 1306 après l’opération 1305, le produit pondéré généré à l’opération 1305 est additionné au résultat cumulé courant pour produire un nouveau résultat cumulé. A une opération 1307 après l’opération 1306, on détermine si n = 8, ce qui est le nombre d'itérations à réaliser dans le cas où chaque sous-matrice de pondération est de dimensions 3 par 3. Sinon (branche N), à une opération 1308, n est incrémenté et une opération 1309 est effectuée. A l’opération 1309, une translation est par exemple effectuée pour transférer vers l’élément PE un état caché suivant à traiter, qui est un état caché en provenance de l’un des PE voisins. Les opérations 1305 à 1307 sont alors par exemple répétées de la façon décrite ci-dessus, mais à partir de l’état caché importé par translation depuis l’élément PE voisin. Par exemple, selon la séquence de translation de la figure 10, après le traitement de l’état caché de l’élément PE lui-même, les états cachés des huit éléments PE voisins sont traités dans l’ordre , , , , , , , . Quand, à l’opération 1307, n = 8 (branche Y), cela signifie que le résultat cumulé est égal à la somme de tous les produits pondérés (neuf produits dans le présent exemple), et à une opération 1310, une fonction d'activation f() est appliquée au résultat cumulé pour produire un nouvel état caché de l’élément de traitement . A une opération 1311 après l’opération 1310, on détermine si la couche cachée en cours de traitement est la dernière ou s’il y a des couches cachées supplémentaires à traiter. Si elle n’est pas la dernière (branche N), on répète par exemple les opérations 1304 à 1311 pour la dernière couche L à partir du nouvel état caché produit à l’opération 1310, et à partir d’une matrice de pondération associée à la nouvelle couche cachée, à moins que la même matrice de pondération soit à appliquer. Quand, à l’opération 1311, il n’y a plus de couches cachées à appliquer, à une opération 1312, on applique par exemple une couche de sortie. Ceci fait par exemple intervenir la multiplication, par chaque élément de traitement , de l’état caché résultant des couches cachées par une autre matrice de pondération. Comme pour la couche d’entrée, il est possible de mettre en œuvre la couche de sortie avec ou sans mélange latéral. Par exemple, si la tâche d’intérêt est une segmentation binaire pour une proposition de région d’intérêt (ROI, region of interest), chaque élément PE est par exemple configuré pour délivrer en sortie soit une seule valeur (segmentation grossière par les éléments PE) ou une matrice de valeurs qui, par exemple, correspondent à la taille d’un macropixel (segmentation fine par les éléments PE). En supposant une application faisant intervenir une proposition de ROI grossière des éléments PE, chaque élément PE est par exemple configuré pour délivrer une valeur entre 0 et 1 qui indique la probabilité que cet élément PE soit superposé à une région d’intérêt du champ de vision complet. Par conséquent, une matrice de pondération de 9xNx1 ou Nx1 est par exemple appliquée par chaque élément PE avec et sans mélange latéral respectivement. Dans la mesure où, pour cette tâche, la matrice de pondération est relativement petite, il peut bien être souhaité d’effectuer un mélange latéral dans la couche de sortie. Par contraste, pour une proposition de ROI "fine pour les éléments PE" dans laquelle, pour une résolution des macropixels d’entrée de 16x16, la matrice de pondération serait soit de 9xNx256 soit de Nx256, où 256 correspond au morceau carré aplati, il peut être plus économique de ne pas effectuer de mélange latéral dans la couche de sortie. Pour une tâche faisant intervenir une proposition de ROI grossière pour les éléments PE, avec un mélange latéral de sortie, la matrice de pondération occupe par exemple 72 octets de mémoire. Le DLM complet, en supposant une matrice de pondération individuelle pour chaque couche et un total de 5 couches pour un réseau matriciel d’éléments PE de 16x12, utilise par exemple 1,2 MB de mémoire à travers tout le réseau matriciel d’éléments PE. Si l'on utilise des poids de couche cachée partagés, ceci chute à 230 kB pour tous les éléments PE. Un example de l’algorithme complet est résumé en pseudo-code dans l'Algorithme 1 ci-dessous. Cet exemple repose sur la stratégie de translation en spirale particulière décrite en relation avec la , mais d’autres stratégies de translation pourraient être utilisées. L’Algorithme 1 décrit en particulier les opérations qui sont exécutées simultanément sur tous les éléments PE, où w_in est la matrice de pondération appliquée à la couche d’entrée, B_in est un biais à appliquer au niveau de la couche d’entrée, qui peut être égal à zéro, w_h est la matrice de pondération appliquée à une couche cachée courante comprenant les sous-matrices w_h[0] à w_h[8], B_h est un biais à appliquer à la couche cachée courante et h[0] est l’état caché de l’élément PE lui-même, et h[1] à h[8] sont les états cachés des huit éléments PE voisins. En effet, chaque couche peut utiliser un paramètre de biais tel que, au lieu d’être initialisée sous la forme d’un vecteur de zéros pour chaque couche, la somme pondéré cumulée de chaque neurone de couche cachée est initialisée avec une valeur qui a été apprise. Algorithme 1 – Une inférence utilisant un DLM Capturer macropixel d’entrée X h = X*w_in + B_in Pour chaque couche DLM Si poids non partagés entre les couche Charger w_h, B_h depuis la mémoire locale Si utilisation d’un biais = B_h Sinon = zéros = O + h*w_h[0] Translation de h 1 vers la GAUCHE = O + h*w_h[1] Translation de h 1 vers le HAUT = O + h*w_h[2] Translation de h 1 vers la DROITE = O + h*w_h[3] Translation de h 1 vers la DROITE = O + h*w_h[4] Translation de h 1 vers le BAS = O + h*w_h[5] Translation de h 1 vers le BAS = O + h*w_h[6] Translation de 1 vers la GAUCHE = O + h*w_h[7] Translation de 1 vers la GAUCHE = O + h*w_h[8] h = f(O) De façon connue de l’homme de l’art, les matrices de pondération d’un réseau neuronal peuvent être apprises en utilisant un algorithme de rétro-propagation standard et ceci s’applique également aux matrices de pondération du réseau neuronal DLM décrit ici. En outre, si on le souhaite, des valeurs de biais telles que décrites ci-dessus peuvent également être apprises. Dans certains cas, l’algorithme de rétro-propagation lui-même peut également utiliser un mélange latéral, comme on le décrira maintenant plus en détail en référence aux figures 14 à 18. La illustre schématiquement un mélange latéral vers l’arrière utilisant un réseau matriciel d’éléments de traitement selon un exemple de réalisation de la présente description. La illustre les mêmes couches de réseau neuronal DLM 400 à 403 que la , mais illustre la façon dont un mélange latéral peut être appliqué à l’apprentissage sur puce. Conceptuellement, ceci équivaut à calculer le gradient d’une perte (LOSS) au niveau de la couche de sortie ou après la couche de sortie par agrégation, et à inverser les opérations qui ont été effectuées de sorte que le gradient retraverse tous les éléments PE intermédiaires vers le point où les données initiales ont été introduites dans le réseau matriciel d’éléments PE. A la figure 14, les flèches indiquent le flux d’informations retournant à travers les couches de mélange latéral de la sortie à l’entrée. Ceci fait intervenir, pour chaque couche depuis la couche de sortie L à la couche d’entrée L-3, le calcul d’un signal d’erreur correspondant à , comme on va à présent le décrire en référence à la . La figure 15 illustre schématiquement une opération de rétro-propagation selon un exemple de réalisation de la présente description dans le cas d’un simple réseau neuronal présentant deux couches cachées L-2 et L-1 et la couche de sortie L. Lors de la propagation avant, les sommes pondérées des entrées de chaque couche sont désignées par , et , les états cachés résultant de chaque couche sont désignés par , et , les matrices de pondération appliquées aux sorties des couches L-1 et L sont désignées par et , et la fonction d’activation appliquée au neurone dans la couche de sortie pour produire l’état de sortie est . Une perte associée à l’état de sortie est désignée par . Le gradient pour une couche de poids dans une couche l du réseau est : [Math 3] où est un signal d’erreur qui provient soit de la perte dans la couche de sortie, soit de la couche suivante située devant pour toutes les autres couches. Dans la couche de sortie L, la valeur de delta est : [Math 4] et pour toutes les autres couches, la valeur de delta est : [Math 5] où est le produit de Hadamard ou par éléments. La est un organigramme illustrant des étapes d’un procédé d’apprentissage d’un réseau neuronal DLM, selon un exemple de réalisation de la présente invention. Ce procédé fait intervenir un mélange latéral vers l’arrière. Le procédé de la est par exemple mis en œuvre par un réseau matriciel d’éléments de traitement tel que décrit ici, comme par la matrice de traitement 1205 de la . On décrira également la en référence à la . La illustre schématiquement des opérations de rétro-propagation de plusieurs couches L, L-1 et L-2 dans un réseau matriciel d’éléments PE selon un exemple de réalisation de la présente description. Comme le représente la , à une opération 1601, la valeur est calculée pour chaque élément PE du réseau matriciel. Par exemple, cette valeur est calculée en utilisant l’équation suivante : [Math 6] où est la dérivée de la perte . Comme le représente la figure 17, la valeur pour un élément PE donné se base sur la perte associée à cet élément PE, que se base sur l’état d’activation . Egalement à l’opération 1601, une variable n est par exemple fixée égale à 0. A une opération 1602 après l’opération 1601, les gradients de poids locaux sont calculés pour chaque élément PE. Pour un élément PE donné, ceci fait intervenir le calcul des gradients de poids locaux pour chacune des neuf sous-matrices de l’élément PE donné en utilisant les états d’activation à partir de la couche L-1. Par exemple, chaque gradient est calculé pour un élément PE à partir de l’équation suivante : [Math 7] pour et . Ceci utilise les états d’activation des voisins et sur l’élément PE lui-même en provenance de la couche précédente, qui sont soit encore stockés localement depuis le passage avant dans chaque élément PE ou alternativement chargés à partir d’une mémoire externe, par exemple en fonction de la capacité de mémoire de l’élément PE. Par exemple, comme le représente la figure 17, l’activation est utilisée au niveau de l’élément de traitement pendant une itération. Les états d’activation d’éléments PE voisins d’un élément PE donné sont par exemple fournis à cet élément PE au cours d'un certain nombre d’itérations, comme on l’a décrit en relation avec les figures 5 à 10 ci-dessus, faisant intervenir des opérations 1603, 1604, 1605 et une répétition de l’opération 1602. A l’opération 1603, on détermine par exemple si le paramètre n est égal à 8, qui est le nombre d’éléments PE voisins en provenance desquels l'état d'activation doit être reçu. Si tel n’est pas le cas (branche N), à l’opération 1604 on incrémente n, puis à une opération 1605, une translation est effectué pour importer par translation l’état d’activation en provenance de l’un des huit voisins. On répète ensuite l’opération 1602 à partir du nouvel état d’activation et l’on répète les opérations 1603 à 1605. Cette boucle est répétée jusqu’à ce que les états d’activation de tous les éléments PE voisins, ainsi que de l’élément PE lui-même, ont été traités et utilisés pour générer les gradients correspondants. A la suite de la génération de chaque gradient à l’opération 1602, le poids correspondant dans la matrice de pondération est par exemple mis à jour, par exemple à partir de l’équation suivante : [Math 8] où est un taux d’apprentissage. Dans certains modes de réalisation, ceci fait intervenir le chargement des sous-matrices de pondération de chacune des couches à partir de la mémoire incorporée, telle que la mémoire 1212 de la . Une fois que n a atteint 8 à l’opération 1603, à une opération ultérieure 1606, chaque élément PE est configuré pour générer dans chaque élément PE une matrice phi, , qui est un ensemble de neuf vecteurs, par exemple une matrice de vecteurs 3x3 – un pour chacune des sous-matrices de pondération sur chaque élément PE pour chaque couche. Phi correspond à un signal d’erreur qui est utilisé par l’élément PE voisin pour calculer le signal delta dans la couche précédente . Phi est par exemple calculé à partir de l’équation suivante : Comme le représente la figure 17, les paramètres , sont calculés localement pour une couche courante puis utilisés dans la couche pour calculer le vecteur delta pour chaque élément PE. La figure 17 illustre un exemple pour le paramètre pour l’élément PE à i = 2, j = 2, qui est utilisé dans la couche par l’élément PE i = 3, j = 3. Après l’opération 1606, le traitement passe à la couche suivante et à une opération 1607, le paramètre n est par exemple de nouveau fixé à zéro. Après l’opération 1607, une série d’opérations 1608, 1609, 1610 et 1611 est répétée par chaque élément PE du réseau matriciel, pendant plusieurs itérations pour générer la valeur . Par exemple, la valeur est calculée en utilisant l’équation suivante : Ceci fait intervenir l’addition d’un ensemble de neuf variables différentes de à partir des éléments PE voisins déterminés à l’opération 1606 de la couche suivante dans la matrice de pondération pour les éléments PE i,j avec chacun de ses huit voisins en i et j. Les valeurs de en provenance des éléments PE voisins d’un élément PE donné qui sont utilisées pour générer sont par exemple importées dans cet élément PE par translation pendant un certain nombre d’itérations, comme on l’a décrit en relation avec les figures 5 à 10 ci-dessus. Par exemple, à l’opération 1609, on détermine si le paramètre n est égal à 8, qui est le nombre d’éléments PE voisins à partir desquels les valeurs doivent être reçues. Si tel n’est pas le cas (branche N), à l’opération 1610 on incrémente n, puis à une opération 1611, une translation est effectué pour importer par translation les valeurs de en provenance de l’un des huit voisins. L’opération 1608 est ensuite répétée à partir des nouvelles valeurs de pour générer partiellement une nouvelle partie de la valeur , ceci est cumulé avec la ou les valeurs partielles, puis les opérations 1609 à 1611 sont répétées. Cette boucle est répétée jusqu’à ce que les valeurs de en provenance de tous les éléments PE voisins aient été traitées et le résultat cumulé est égal à . Une fois que n a atteint 8 à l’opération 1609, à une opération ultérieure 1612, la variable n est par exemple de nouveau fixée à zéro. A une opération 1613 après l’opération 1609, les gradients de poids locaux sont calculés pour chaque élément PE. Pour un élément PE donné, ceci fait intervenir le calcul des gradients de poids locaux pour chacune des neuf sous-matrices de l’élément PE donné au moyen des états d’activation à partir de la couche L-1. Par exemple, chaque gradient est calculé à partir de l’équation suivante : Comme à l’opération 1602, ceci utilise les états d’activation des voisins, qui sont toujours localement stockés par chaque élément PE. Par exemple, comme le représente la figure 17, l’activation est utilisée par l’élément de traitement de la couche L-1. Les états d’activation des éléments PE voisins d’un élément PE donné sont par exemple fournis à cet élément PE pendant un certain nombre d’itérations, comme on l’a décrit en relation avec les Figures 5 à 10 ci-dessus, faisant intervenir les opérations 1614, 1615, 1616 et une répétition de l’opération 1613. A l’opération 1614, on détermine par exemple si le paramètre n est égal à 8, qui est le nombre d’éléments PE voisins à partir desquels l'état d'activation doit être reçu. Si tel n’est pas le cas (branche N), à l’opération 1615 on incrémente n, puis à une opération 1616, une translation est effectué pour importer par translation l’état d’activation en provenance de l’un des huit voisins. On répète ensuite l’opération 1613 à partir du nouvel état d’activation et les opérations 1614 à 1616 sont répétées. Cette boucle est répétée jusqu’à ce que les états d’activation de tous les éléments PE voisins ont été traités et utilisés pour générer les gradients correspondants. A la suite de la génération de chaque gradient à l’opération 1613, le poids correspondant dans la matrice de pondération est par exemple mis à jour comme on l’a décrit en relation avec l’opération 1602. Une fois que n a atteint 8 à l’opération 1614, à une opération ultérieure 1617, chaque élément PE est configuré pour générer dans chaque élément PE la matrice phi , qui est un ensemble de neuf vecteurs, par exemple une matrice de vecteurs 3x3 – un pour chacune des sous-matrices de pondération sur chaque élément PE pour chaque couche. Phi est par exemple calculée à partir de l’équation suivante : [Math 12] La figure 17 illustre un exemple pour le paramètre , pour l’élément PE à i = 3, j = 3, qui est utilisé dans la couche par l’élément PE i = 4, j = 4. A une opération 1618 suivant l’opération 1617, on détermine par exemple si la couche courante est la couche d’entrée. Si tel n’est pas le case (branche N), à une opération 1619, la variable n est fixée à zéro, puis les opérations 1608 à 1617 sont répétées à partir de la couche précédente . Quand, à l’opération 1618, on détermine que la couche courante est la couche d’entrée (branche Y), le procédé prend fin par exemple à une opération 1611. La est un graphe représentant des résultats de tests selon un exemple de réalisation de la présente description. En particulier, pour une tâche de segmentation multi-classes grossière pour les éléments PE, on a étudié comment les couches cachées affectaient les performances du réseau neuronal DLM, et la illustre le résultat de test d’intersection sur union (TEST IoU) en fonction de l’époque des données de test (EPOCH). On voit que, bien qu’en partagent les mêmes poids cachés, la chute de performances est relativement ténue, et est par exemple tolérable pour au moins certaines applications étant donné le gain de rendement d'exécution en n’ayant pas à charger de nouvelles matrices de pondération pour chaque couche. Un avantage des mode de réalisation décrits ici est que la mise en œuvre de réseau neuronal utilisant un réseau matriciel d’éléments PE peut avoir une latence relativement faible, en partie du fait qu’au moins certaines des données à traiter en relation avec chaque couche du réseau restent à l’intérieur de ou à proximité de l’élément PE qui l’utilisera, et en conséquence relativement peu de transferts de données sont requis. En outre, ceci permet également une réduction des exigences en termes de mémoire et de la consommation du circuit. Divers modes de réalisation et variantes ont été décrits. L’homme de l’art comprendra que certaines caractéristiques de ces modes de réalisation peuvent être combinées et d’autres variantes apparaîtront à l’homme de l’art. Par example, alors qu’on a décrit des modes de réalisation dans lesquels une opération MAC est appliquée après chaque itération de mélange latéral vers l’avant de sorte que seul le résultat cumulé est stocké après chaque itération, dans des variantes de réalisation, chaque opération de mélange latéral avant pourrait faire intervenir uniquement le stockage dans la mémoire locale des vecteurs cachés des éléments PE voisins. Les vecteurs cachés sont alors par exemple concaténés ensemble et l’opération MAC est par exemple appliquée une seule fois sur une matrice plus grande. Cette variante implique l’utilisation d’une plus grande mémoire locale 502 dans chaque élément PE pour stocker toutes les données de couche cachée. En outre, alors qu’on a décrit des modes de réalisation basés sur un réseau matriciel 2D d’éléments PE, il apparaîtra à l’homme de l’art que les principes décrits ici pourraient être également appliqués à un réseau matriciel 3D d’éléments PE, où un processus d’intégration 3D est par exemple utilisé pour intégrer plusieurs couches de réseaux matriciels d’éléments PE les uns sur les autres. Dans ce cas, les données subissent non seulement une translation entre l’un et ses 8 voisins dans un voisinage carré, mais entre celui-ci et 26 voisins dans les couches supérieures et inférieures dans un voisinage volumique cubique. Dans les modes de réalisation décrits, les éléments PE n’échangent de vecteurs d’état cachés qu’avec les voisins immédiats. Cependant, les éléments PE pourraient alternativement ou par ailleurs réaliser un mélange latéral avec les éléments PE du réseau matriciel qui sont distants d’un pas de 2. Dans un tel cas, il serait possible d’utiliser le même motif de spirale en expansion que celui décrit en relation avec la , dans lequel les premières opérations de translation de données importent par translation les données en provenance de l’"anneau" correspondant, et par la suite les données peuvent faire l’objet d’une translation d’un pas à la fois. En outre, les vecteurs de couche cachée peuvent être de différentes tailles pour deux couches différentes du réseau. Ceci signifie que pour chaque couche, la matrice de pondération qui est chargée depuis la mémoire externe n’a par exemple pas toujours les mêmes dimensions et les sections locales de la mémoire de PE peuvent en ce cas être reformatées entre les couches. En outre, on peut également ajouter dans le modèle DLM des connexions résiduelles, telles que décrites dans la publication de He, Kaiming et al. intitulée "Deep residual learning for image recognition", Proceedings of the IEEE conference on computer vision and pattern recognition, 2016. Pour cela, une quatrième section de mémoire est par exemple ajoutée à la mémoire locale 502 de chaque élément PE qui est configuré pour stocker le vecteur caché des couches précédentes. Après la mise à jour du vecteur caché dans une couche DLM, les résultats sont alors par exemple ajoutés à ces vecteurs cachés préalablement stockés. Un avantage de cette approche est que l’information en provenance des couches précédentes est préservée pour des modèles plus profonds. Dans les modes de réalisation décrits, l’opération principale appliquée aux états de vecteurs cachés est une couche entièrement connectée, parfois appelée couche linéaire. Ceci correspond au calcul du produit interne entre un vecteur d’entrée et une matrice de pondération. Cependant, de nombreuses variations sont possibles quand cette opération principale change. Par exemple, les deux variantes suivantes pourraient être appliquées. Selon la première variante, dans un mélangeur latéral profond convolutif 2D, chaque élément PE stocke des noyaux de convolution et les données importées par translation depuis les PE voisins sont différents canaux d’une carte de caractéristiques d’entrée. Les noyaux de convolution sont parcourus sur les cartes de caractéristiques d’entrée pour produire des cartes de caractéristiques d’états cachés, qui seront ensuite utilisées dans la couche suivante en tant que cartes de caractéristiques d’entrée. Par exemple, si chaque élément PE contient une carte de caractéristiques à 1 canal, il fonctionnera sur une carte de caractéristiques d’entrée effective de 9 canaux. Pour permettre au nombre et à la taille des cartes de caractéristiques d’être constants entre les couches DLM, neuf noyaux de convolution appris avec un pas de 1 et une marge de 1 peuvent être appliqués sur cette entrée, ce qui donne une carte de caractéristiques d’états cachés locale de 1 canal (après avoir sommé les cartes de caractéristiques partielles résultant de neuf canaux). Alternativement, par exemple au moins pour la couche d’entrée, un pas supérieur à un peut être utilisé pour réduire la taille de cartes de caractéristiques cachées dans des couches successives. Dans la mesure où une seule carte de caractéristiques demanderait moins de mémoire, ont peut alors stocker des cartes de caractéristiques cachées avec un plus grand nombre de canaux. Selon la seconde variante, un transformeur DLM est mis en œuvre, dans lequel on peut utiliser un mécanisme d’attention, par exemple sous la forme d’une autre matrice de pondération qui délivre des poids d’attention, pour pondérer certains éléments PE voisins et certains neurones avec une importance supérieure ou inférieure. Le concept de l’application de transformeurs dans des tâches de vision par ordinateur est décrit plus en détail dans la publication de Dosovitskiy et at. Intitulée "An image is worth 16x16 words : Transformers for image recognition at scale", arXiv preprint arXiv:2010.11929 (2020). Par ailleurs encore, les données d’entrée pourraient être une caméra événementielle au lieu d’un imageur RGB ou noir et blanc/en niveaux de gris. Dans ce cas, les pixels d’entrée sont par exemple des événements binaires, basés sur les changements d’intensité lumineuse au niveau de la sortie. Les DLM peuvent également être utiles pour la réalisation d’une compression interne au capteur de la scène captée qui peut être envoyée à un autre système informatique, peut-être plus puissant, pour un traitement ultérieur, et qui utilisera cette représentation compressée pour une tâche aval ou même éventuellement pour reconstituer l’image complète. Une telle compression peut être apprise en entraînant un modèle dit auto-encodeur. Un auto-encodeur est composé de deux parties – l’encodeur qui réduit l’entrée par projection à une représentation de basse dimension – et un décodeur qui utilise cette représentation pour reconstituer l’image d’entrée originale. Le DLM, tel que décrit ci-dessus, peut être utilisé en tant qu’encodeur dans lequel chaque élément PE délivre un vecteur d’une taille donnée, par exemple un vecteur à 4 éléments. La sortie complète sur le réseau matriciel d’éléments PE correspond à un réseau matriciel de 16x12x4. Ceci peut être interprété comme une carte de caractéristiques de 16x12 à 4 canaux. Ce plongement peut alors être entré dans un second modèle, tel qu’un décodeur convolutif, qui réalise l’expansion de l’entrée sur une série d’autres couches de convolution en utilisant des convolutions transposées 2D. La sortie de ce modèle est une image avec les mêmes dimensions que la scène d’entrée captée sur le réseau matriciel d’éléments PE. Pour entraîner les paramètres du DLM et du CNN, une perte d’erreur quadratique moyenne pixel par pixel peut par exemple être calculée et rétro-propagée à travers les deux modèles. Après l’entraînement, le décodeur est par exemple en mesure de reconstituer des images à partir de la représentation compressée délivrée en sortie par le DLM. Le DLM apprend effectivement comment abstraire et compresser l'information de la scène. Par exemple, on a trouvé que l’on peut reconstituer très fidèlement une structure et un emplacement de saisie numérique avec un taux de compression relativement élevé de 98,4%. Dans une telle application, les éléments PE sont par exemple utilisés pour réaliser un prétraitement interne au capteur de l’image de données avant l’envoi de la représentation compressée vers une tâche aval, telle que la localisation ou la classification d’un objet de la scène, ce qui présente l’avantage d’apporter une amplification importante de la bande passante de système disponible. Les applications des modes de réalisation décrits ici comprennent par exemple la segmentation d’images et la détection d’objets. Dans le cas de la détection d’objets, au lieu de délivrer en sortie, pour chaque classe, une seule valeur ou un vecteur de valeurs par pixel ou macropixel, l’élément PE de chaque pixel ou macropixel est configuré pour délivrer un vecteur contenant les coordonnées d’une ou plusieurs boîtes limite, la répartition des classes pour chacune de ces boîtes limite et, éventuellement, un score d’"objectness" (évaluation de la qualité d’"objet"). Des techniques telles que la suppression non-max sont par exemple utilisés pour une mise en œuvre sur le réseau matriciel d’éléments PE pour sous-échantillonner les boîtes. De façon caractéristique, ce procédé garde les boîtes avec le score d’"objectness" d’une série de boîtes qui présentent une intersection sur union élevée les unes avec les autres. Une autre application des modes de réalisation décrits ici est un réseau de proposition de région. Selon cette application, une mise en œuvre du DLM telle qu’une solution de traitement 3D intégrée au capteur permet des moyens efficaces de proposition de régions d’intérêt à traiter par un modèle de réseau neuronal convolutif ultérieur. Le réseau neuronal convolutif est par exemple configuré pour fonctionner sur le morceau d'image de sortie identifié par le DLM et le résultat de l’approche est par conséquent équivalent à une détection. Par exemple, la première phase de traitement est réalisée sur un modèle RCNN plus rapide, comme le décrit la publication de Ren, Shaoqing, et al., intitulé "Faster r-cnn : Towards real-time object detection with region proposal networks", Advances in neural information processing systems 28 (2015). Ceci est une application particulièrement avantageuse dans la mesure où la phase de détection de région d’intérêt de telles approches constitue le goulot d’étranglement et la partie la plus consommatrice en temps de traitement et en ressources. En outre, comme on l’a déjà mentionné, les applications des modes de réalisation décrits ici comprennent des applications dans lesquelles les données d’entrée ne sont pas des données d’image. Par exemple, alors qu'on a décrit des modes de réalisation basés sur un réseau matriciel 2D d’éléments PE, dans une variante de réalisation, le principe décrit ici pourrait être appliqué à un réseau matriciel 1D d’éléments PE, dans lequel chaque élément PE a deux voisins, excepté l’élément PE au extrémités du réseau matriciel. Un tel réseau matriciel 1D est par exemple adapté au traitement de données en série temporelle. Par exemple, de nombreux systèmes de détection, tels que les casques EEG et les interfaces neuronales, par exemple, sont composés d’un réseau matriciel de signaux analogues en série temporelle. L’élément PE peut en conséquence être intégré au-dessous d’un réseau matriciel formant une interface pour de tels signaux aux éléments PE. Des valeurs de la série temporelle peuvent être échantillonnées à une cadence donnée, par exemple de manière semblable à la façon dont les pixels sont soumis à une transduction à partir de photons à une cadence donnée, et le DLM peut être appliqué en utilisant un réseau matriciel systolique d’éléments PE de façon semblable à ce qui est fait pour des images. Enfin, la mise en œuvre pratique des modes de réalisation et variantes décrits ici est à a portée de l’homme de l’art à partir de la description fonctionnelle fournie ci-dessus. Circuit électronique mettant en œuvre un réseau neuronal, le circuit électronique comprenant : - un réseau matriciel (200, 500) d’éléments de traitement (PE), chaque élément de traitement (PE) comprenant un circuit de traitement de données (508) et une mémoire locale (502), chaque élément de traitement (PE) mettant en œuvre un ou plusieurs neurones du réseau neuronal, la mémoire locale (502) de chaque élément de traitement (PE) étant configurée pour stocker des données de neurone ( ) associées aux un ou plusieurs neurones mis en œuvre par le réseau neuronal ; et - un ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) configuré pour réaliser un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées par la mémoire locale (502) de chaque élément de traitement par la propagation, réalisée de façon synchrone par chaque élément de traitement, des données de neurone vers la mémoire locale (502) de chaque élément de traitement à partir de la mémoire locale (502) d’un ou plusieurs éléments de traitement voisins de chaque élément de traitement, dans lequel chacun des éléments de traitement est configuré pour traiter, pendant une première itération de traitement, les données de neurone à partir des un ou plusieurs éléments de traitement voisins pour produire des données de neurone mises à jour ( ) et pour stocker les données de neurone mises à jour ( ) dans la mémoire locale (502) pour une utilisation lors d’une itération de traitement ultérieure. Circuit électronique selon la revendication 1, dans lequel le circuit de traitement de données (508) de chaque élément de traitement (PE) est en outre configuré pour calculer une valeur intermédiaire ( , partielle) à partir des données de neurone en provenance des un ou plusieurs éléments de traitement voisins. Circuit électronique selon la revendication 2, dans lequel le réseau neuronal comprend une couche d’entrée et au moins deux couches cachées, la couche d’entrée et les au moins deux couches cachées étant mises en œuvre par le réseau matriciel d’éléments de traitement, dans lequel le circuit de traitement de données (508) de chaque élément de traitement (PE) est configuré pour calculer la valeur intermédiaire ( , partielle) à partir des données de neurone en relation avec chacune des couches cachées. Circuit électronique selon l’une quelconque des revendications 1 à 3, dans lequel l’ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) est configuré pour réaliser un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées par la mémoire locale (502) de chaque élément de traitement par la propagation des données de neurone vers la mémoire locale (508) de chaque élément de traitement à partir de plusieurs des éléments de traitement voisins pendant plusieurs itérations, chaque élément de traitement étant configuré pour recevoir, de façon synchrone à chaque itération, les données de neurone stockées par la mémoire locale d’un des plusieurs éléments de traitement voisins, écrasant au moins partiellement les données de neurone stockées dans sa mémoire locale. Circuit électronique selon la revendication 4, dans lequel l’ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) est configuré pour propager les données de neurone vers la mémoire locale (508) des un ou plusieurs éléments de traitement voisins du réseau matriciel selon une séquence de translation suivant une spirale en expansion. Circuit électronique selon la revendication 4 ou 5, dans lequel l’ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) comprend, pour chaque élément de traitement (PE), au moins un multiplexeur (MUX_IN, MUX_OUT) configuré pour choisir à partir de quel élément de traitement voisin et/ou vers quel élément de traitement voisin les données de neurone sont propagées. Circuit électronique selon l’une quelconque des revendications 1 à 6, dans lequel le réseau matriciel (200, 500) d’éléments de traitement (PE) est configuré pour recevoir une ou plusieurs images en tant que données d’entrée. Circuit électronique selon l’une quelconque des revendications 1 à 7, dans lequel l’ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) est configuré pour réaliser un mélange latéral vers l’avant des données de neurone, et dans lequel les données de neurone de chaque élément de traitement (PE) sont un état d’activation ( ) des un ou plusieurs neurones mis en œuvre par l’élément de traitement (PE). Circuit électronique selon l’une quelconque des revendications 1 à 7, dans lequel l’ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT) est configuré pour réaliser un mélange latéral vers l’arrière des données de neurone, dans lequel les données de neurone de chaque élément de traitement (PE) comprennent : - un état d’activation ( ) des un ou plusieurs neurones mis en œuvre par l’élément de traitement (PE); et/ou - un paramètre ( représentant un signal d’erreur. Circuit électronique selon l’une quelconque des revendications 1 à 9, dans lequel le réseau neuronal est un réseau neuronal convolutif. Dispositif d’imagerie comprenant un empilement formé d’un niveau supérieur comprenant un capteur d’image (1202) et d’un niveau inférieur (1204) comprenant le circuit électronique selon l’une quelconque des revendications 1 à 10. Procédé de propagation de données dans un réseau neuronal, ce procédé comprenant : - le stockage de données de neurone ( ) associées à un ou plusieurs neurones mis en œuvre par le réseau neuronal dans une mémoire locale (502) de chaque élément de traitement (PE) d’un réseau matriciel (200, 500) d’éléments de traitement (PE), chaque élément de traitement (PE) du réseau matriciel comprenant un circuit de traitement de données (508) et la mémoire locale (502) ; - le calcul, par le circuit de traitement de données (508) de chaque élément de traitement (PE), d’une valeur intermédiaire à partir des données de neurone ; et - la réalisation, par un ensemble de circuits de propagation de données (503, MUX_IN, MUX_OUT), d’un mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées dans la mémoire locale (502) de chaque élément de traitement par la propagation, réalisée de façon synchrone par chaque élément de traitement, des données de neurone vers la mémoire locale (502) de chaque élément de traitement à partir de la mémoire locale (502) d’un ou plusieurs éléments de traitement voisins de chaque élément de traitement, dans lequel chacun des éléments de traitement est configuré pour traiter, pendant une première itération de traitement, les données de neurone à partir des un ou plusieurs éléments de traitement voisins pour produire des données de neurone mises à jour ( ) et pour stocker les données de neurone mises à jour ( ) dans la mémoire locale (502) pour une utilisation lors d’une itération de traitement ultérieure. Procédé selon la revendication 12, comprenant en outre le calcul, par le circuit de traitement de données (508) de chaque élément de traitement (PE), d’une valeur intermédiaire ( , partielle) à partir des données de neurone en provenance des un ou plusieurs éléments de traitement voisins. Procédé selon la revendication 13, dans lequel le réseau neuronal comprend une couche d’entrée et au moins deux couches cachées, la couche d’entrée et les au moins deux couches cachées étant mises en œuvre par le réseau matriciel d’éléments de traitement, le procédé comprenant en outre le calcul, par le circuit de traitement de données (508) de chaque élément de traitement, de la valeur intermédiaire ( , partielle) à partir des données de neurone en relation avec chacune des couches cachées. Procédé selon l’une quelconque des revendications 12 à 14, dans lequel le mélange latéral vers l’avant ou vers l’arrière des données de neurone stockées dans la mémoire locale (502) de chaque élément de traitement est effectué par la propagation des données de neurone vers la mémoire locale (508) de chaque élément de traitement à partir de plusieurs des éléments de traitement voisins pendant plusieurs itérations, chaque élément de traitement étant configuré pour recevoir, de façon synchrone à chaque itération, les données de neurone stockées par la mémoire locale d’un des plusieurs éléments de traitement voisins, écrasant au moins partiellement les données de neurone stockées dans sa mémoire locale.