FR 3085517 A1 20200306 FR 1857852 A 20180831 Architecture de calculateur d'une couche de convolution dans un réseau de neurones convolutionnel L'invention concerne les réseaux de neurones artificiels, plus 5 précisément les réseaux de neurones convolutifs ou convolutionnels et porte en particulier sur un calculateur configuré pour mettre en oeuvre une couche de convolution dans un réseau de neurone convolutionnel. Les réseaux de neurones artificiels constituent des modèles de calculs 10 imitant le fonctionnement des réseaux de neurones biologiques. Les réseaux de neurones artificiels comprennent des neurones interconnectés entre eux par des synapses, qui sont classiquement implémentées par des mémoires numériques. Les synapses peuvent être également implémentées par des composants résistifs dont la conductance varie en fonction de la tension 15 appliquée à leurs bornes. Les réseaux de neurones artificiels sont utilisés dans différents domaines de traitement du signal (visuel, sonore, ou autre) comme par exemple dans le domaine de la classification d'image ou de la reconnaissance d'image. 20 Les réseaux de neurones convolutionnels correspondent à un modèle particulier de réseau de neurones artificiels. Les réseaux de neurones convolutionnels ont été décrits initialement dans l'article de K. Fukushima, Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 25 36(4)1 93-202,1980. ISSN 0340-1200. doi: 10.1007/BF00344251 ». Les réseaux de neurones convolutionnels (désignés en langue anglo-saxonne par les expressions "convolutional neural networks", ou "deep (convolutional) neural networks" ou encore "ConvNets") sont des réseaux de 30 neurones sans connexion récurrente (c Pour une implémentation sur un circuit intégré propre à une application (ASIC), l'implémentation d'opérateurs MAC peut également être réalisée de façon optimisée. Ainsi, l'invention ne nécessite pas de structure de calcul qui nécessite une implémentation dédiée telle qu'un arbre additionneur. L'invention présente donc l'avantage d'une implémentation nécessitant moins de logique à mettre en oeuvre et donc moins d'énergie consommée pour le circuit intégré final. En outre, par un chaînage des calculs de convolution pour l'ensemble des matrices d'entrée, l'invention permet de minimiser le nombre d'accès en lecture et écriture mémoire par cycle et donc le nombre de blocs de mémoire 25 RAM nécessaires. Cela est avantageux pour l'intégration de l'architecture de calcul proposée par l'invention sur un circuit à logique programmable FPGA, qui dispose généralement de moins de blocs mémoire que de blocs de processeurs DSP. Ainsi l'invention permet d'utiliser tous les processeurs 30 DSP d'un circuit FPGA sans que cela soit limité par le nombre de bloc mémoire RAM disponibles. 5 Pour une implémentation de l'invention sur un circuit intégré ASIC, il est également avantageux d'utiliser moins de blocs mémoire pour optimiser la surface et la consommation. 5 L'invention a pour objet un calculateur pour calculer une couche de convolution d'un réseau de neurones artificiel, comprenant au moins un ensemble d'au moins deux modules de calcul de somme partielle connectés en série, un organe de stockage des coefficients d'au moins un filtre de convolution, chaque module de calcul de somme partielle comprenant au 10 moins une unité de calcul configurée pour réaliser une multiplication d'une donnée d'entrée du calculateur et d'un coefficient d'un filtre de convolution, suivie d'une addition avec la sortie du module de calcul de somme partielle précédent dans la série ou avec une valeur prédéfinie pour le premier module de calcul de somme partielle de la série, chaque ensemble 15 comprenant en outre, pour chaque module de calcul de somme partielle sauf le premier de la série, un registre à décalage connecté en entrée pour stocker la donnée d'entrée pendant la durée de traitement des modules de calcul de somme partielle précédents dans la série, le calculateur comprenant en outre au moins un accumulateur connecté en sortie de 20 chaque ensemble et une mémoire. Selon un aspect particulier de l'invention, les données d'entrée proviennent d'au moins une matrice d'entrée et le calculateur fournit en sortie, pour chaque sous-matrice d'entrée de dimension égale à celle du filtre de convolution, la valeur d'un neurone de sortie correspondant, l'ensemble 25 des neurones de sortie étant agencés dans au moins une matrice de sortie. Selon un aspect particulier de l'invention, chaque module de calcul de somme partielle comporte au plus un nombre d'unités de calcul égal à la dimension du filtre de convolution. Selon un aspect particulier de l'invention, chaque ensemble comporte 30 au plus un nombre de modules de calcul de somme partielle égal au nombre de matrices d'entrée. 6 Selon un aspect particulier de l'invention, le calculateur comprend au plus un nombre d'ensembles égal au nombre de matrices de sortie. Selon un aspect particulier de l'invention, pour chaque donnée d'entrée reçue, chaque module de calcul de somme partielle est configuré 5 pour calculer un résultat partiel de convolution pour tous les neurones de sortie connectés à la donnée d'entrée. Selon un aspect particulier de l'invention, chaque module de calcul de somme partielle comporte plusieurs unités de calcul, étant chacune configurée pour calculer un résultat partiel de convolution pour des neurones lo de sortie différents des autres unités de calcul. Selon un aspect particulier de l'invention, chaque module de calcul de somme partielle est configuré, pour chaque donnée d'entrée reçue, pour sélectionner, dans l'organe de stockage, les coefficients d'un filtre de convolution correspondant aux neurones de sortie respectifs à calculer pour 15 chaque unité de calcul. Selon un aspect particulier de l'invention, le calculateur reçoit plusieurs matrices d'entrée, les traitements des matrices d'entrée étant répartis sur l'ensemble des modules de calcul de somme partielle. Selon un aspect particulier de l'invention, les matrices d'entrée sont 20 des images. Selon un aspect particulier de l'invention, l'organe de stockage a une topologie de tore à deux dimensions. Selon un aspect particulier de l'invention, l'au moins un accumulateur connecté en sortie de chaque ensemble est configuré pour finaliser un calcul de convolution permettant d'obtenir la valeur d'un neurone de sortie, à partir des sommes partielles délivrées par l'ensemble, la mémoire étant utilisée pour sauvegarder des résultats partiels du calcul de convolution. Selon un aspect particulier de l'invention, les adresses des valeurs stockées dans la mémoire sont déterminées de manière à éviter que deux 30 neurones de sortie en cours de calcul ne partagent le même bloc mémoire. 7 Selon un aspect particulier de l'invention, le calculateur comprend en outre un module d'activation d'un neurone de sortie connecté en sortie de chaque accumulateur. 5 D'autres caractéristiques et avantages de la présente invention apparaîtront mieux à la lecture de la description qui suit en relation aux dessins annexés qui représentent : Les figures -I a,-I b,-1 c,1d, plusieurs illustrations du fonctionnement d'une couche de convolution d'un réseau de neurones convolutionnel, 10 La figure 2, un schéma d'un module de calcul de somme partielle selon l'invention configuré pour calculer une somme partielle d'un calcul de convolution, - La figure 2a, une illustration d'un exemple de calcul réalisé par le module de calcul décrit à la figure 2, 15 - La figure 2b, une illustration d'un exemple de distribution des coefficients d'un filtre dans un module de calcul de somme partielle, - La figure 2c, un schéma d'un tore 2D pour stocker les coefficients d'un filtre en mémoire, - La figure 2d, un schéma d'un arbre de distribution pour stocker les 20 coefficients d'un filtre en mémoire, - La figure 3, un schéma d'un ensemble de modules de calcul de somme partielle selon l'invention comprenant plusieurs desdits modules agencés en cascade, - La figure 4, un schéma d'un calculateur d'une couche de convolution 25 selon l'invention. Un réseau de neurones convolutif ou convolutionnel est généralement constitué d'une ou plusieurs couches de convolution qui sont connectées en série ou en cascade. Une ou plusieurs couches de regroupement ou « pooling » en anglais peuvent être disposées entre deux couches de convolution. 8 L'invention concerne précisément une architecture de calculateur configuré pour mettre en oeuvre une couche de convolution d'un réseau de neurones convolutionnel. Pour faciliter la compréhension de l'invention, on rappelle tout d'abord 5 le principe général de fonctionnement d'une couche de convolution. Une couche de convolution réalise une connexion entre une matrice d'entrée I et une matrice de sortie O. La matrice d'entrée I peut être une matrice contenant des données d'entrées fournies au réseau de neurones, 10 lorsque la couche de convolution est la première couche du réseau de neurones. La matrice d'entrée I peut aussi être une matrice contenant les résultats fournis par une couche de convolution précédente, lorsque le réseau de neurones comporte au moins deux couches de convolution. La matrice de sortie O comprend les valeurs des neurones qui sont 15 connectés à la matrice d'entrée I. La matrice de sortie O peut être la matrice d'entrée d'une autre couche de convolution. Les matrices d'entrée et de sortie peuvent aussi être appelées cartes d'entrée et de sortie. 20 Dans une couche de convolution, chaque neurone est connecté à au moins une partie (sous-matrice) de la matrice d'entrée I. Les sous-matrices ont la même taille pour une même couche et leur taille est égale à la taille du filtre de convolution. Elles peuvent être décalées les unes des autres de manière régulière et peuvent se chevaucher. La matrice d'entrée peut être de 25 dimension quelconque. Elle peut notamment avoir N dimensions, N étant un nombre entier supérieur à deux. Cependant, la matrice d'entrée est généralement à deux dimensions. Dans les cas d'applications où le réseau de neurones reçoit en entrée des images, la matrice d'entrée contient les valeurs des pixels d'une image 30 en niveaux de gris. Pour une image en couleur ou plus généralement une 9 image à plusieurs composantes, une matrice d'entrée différente est utilisée pour chaque composante. Dans un réseau de neurones, les neurones sont connectés à leur 5 sous-matrice d'entrée I par des synapses dont le poids est réglable. La matrice W des poids synaptiques (les poids synaptiques sont encore appelés « coefficient de poids» ou «coefficients de convolution » ou « pondérations ») appliquée aux sous-matrices d'entrée des neurones est la même pour tous les neurones d'une même matrice de sortie. Une telle matrice W est encore 10 appelée filtre ou « noyau de convolution ». Le fait que le noyau de convolution soit partagé pour l'ensemble des neurones d'une même matrice de sortie O, et donc appliqué sur l'ensemble de la matrice d'entrée, diminue la mémoire nécessaire pour le stockage des coefficients, ce qui optimise les performances. Par exemple pour la reconnaissance d'images, cela permet 15 de minimiser le nombre de filtres ou de représentations intermédiaires qui codent au mieux les caractéristiques de l'image et qui sont réutilisables sur toute l'image. Les coefficients d'un noyau de convolution W (c'est-à-dire les poids synaptiques) peuvent correspondre à des filtres classiques de traitement du signal (par exemple Gaussien, Gabor, Laplace...), ou être 20 déterminés par apprentissage, supervisé ou non-supervisé, par exemple en utilisant un algorithme de rétro-propagation du gradient. Les coefficients des noyaux de convolution peuvent être positifs ou négatifs et sont généralement normalisés entre -1 et 1, tout comme les valeurs d'entrée et de sortie des neurones. 25 Une couche de convolution peut contenir un ou plusieurs noyaux de convolution qui ont chacun une matrice d'entrée, qui peut être la même, mais qui ont des coefficients différents correspondant à des filtres différents. 30 Chaque noyau de convolution dans une couche produit une matrice de sortie différente de sorte que les neurones de sortie sont différents pour 10 chaque noyau. Autrement dit, plusieurs matrices de sortie différentes peuvent être connectées à une ou plusieurs matrices d'entrée différentes. Chaque matrice de sortie est associée à un filtre W différent. De même, chaque matrice d'entrée peut aussi être associée à un filtre différent. 5 Les réseaux convolutionnels peuvent également inclure des couches de "pooling" locales ou globales qui combinent les sorties de groupe de neurones d'une ou plusieurs cartes de sortie. La combinaison des sorties peut consister par exemple à prendre la valeur maximale ou moyenne des 10 sorties du groupe de neurones, pour la sortie correspondante, sur la carte de sortie de la couche de « pooling ». Les couches de « pooling » permettent de réduire la taille des cartes de sorties d'une couche à l'autre dans le réseau, tout en améliorant ses performances en le rendant plus tolérant à de petites déformations ou translations dans les données d'entrée. 15 Les figures I a-1 d illustrent le fonctionnement général d'une couche de convolution. La figure 1a représente une matrice d'entrée I de taille (1,,ly) 20 connectée à une matrice de sortie O de taille (0,,0y) via une couche de convolution réalisant une opération de convolution à l'aide d'un filtre W de taille (K,,Ky). Une valeur 0i,i de la matrice de sortie O (correspondant à la valeur de sortie d'un neurone de sortie) est obtenue en appliquant le filtre W sur la 25 sous-matrice correspondant de la matrice d'entrée I. Sur la figure I a, on a représenté la première valeur 00,0 de la matrice de sortie O obtenue en appliquant le filtre W à la première sous-matrice d'entrée de dimensions égales à celle du filtre W. Sur la figure 1 b, on a représenté la deuxième valeur 00,1 de la matrice 30 de sortie O obtenue en appliquant le filtre W à la deuxième sous-matrice d'entrée. 11 La figure 1c représente un cas général de calcul d'une valeur 03,2 quelconque de la matrice de sortie. De façon générale, la matrice de sortie O est connectée à la matrice d'entrée I par une opération de convolution, via un noyau de convolution ou 5 filtre W. Chaque neurone de la matrice de sortie O est connecté à une partie de la matrice d'entrée I, cette partie étant appelée « sous-matrice d'entrée » ou encore cc champ récepteur du neurone » et étant de mêmes dimensions que le filtre W. Le filtre W est commun pour l'ensemble des neurones d'une matrice de sortie 0. 10 Les valeurs des neurones de sortie sont données par la relation suivante : ikm=inO(K,-1,1,-('si) x, min(K),- j.si) , OL,J = g ( LI=0 I I.si+k,j.si+1. Dans la formule ci-dessus, go désigne la fonction d'activation du 15 neurone, tandis que si et si désignent les paramètres de décalage (c @0'modK, @wx = t @IxmodK,- el:4mnd K, + Kx sinon Y mod KY - @OY modKY si @,Y modKY > @0Y modK - Y @W Y @IY mod KY - @0Y modKY + KY sinon En utilisant ces relations et la contrainte qu'un neurone de sortie doit être entièrement calculé par la même unité de calcul MAC au sein de chaque module de calcul de sommes partielles, on en déduit pour chaque nouvelle 5 donnée d'entrée reçue, les adresses des coefficients du filtre à lire en mémoire pour calculer une somme partielle associée à un neurone de sortie donné. La figure 2b illustre un exemple de mécanisme de distribution des -Io coefficients d'un filtre de dimensions 3x3. Sur la figure 2b sont représentées des matrices 3x3 qui donnent, à différents instants, les indices des coefficients du filtre à utiliser pour calculer une somme partielle associée à un neurone de sortie de coordonnées réduites données par les coordonnées des éléments de la matrice. 15 L'indice d'un coefficient du filtre est donnée par la relation Pwx +@Wy*Kx. La première matrice W° donne les indices des coefficients à utiliser pour la première donnée d'entrée 10,0. Pour chaque nouvelle donnée d'entrée lue sur une ligne de la matrice d'entrée, la matrice des coefficients du filtre 20 subit une permutation circulaire des colonnes. Par exemple, la matrice W1 est utilisée pour la deuxième donnée d'entrée lo,l. Lorsqu'une ligne entière de la matrice d'entrée est lue et qu'une nouvelle ligne est débutée, on reprend la première matrice W° et on lui applique une permutation circulaire des lignes pour obtenir la matrice W2. 25 Ensuite, à chaque nouvelle donnée d'entrée lue sur une ligne, on applique à nouveau une permutation circulaire des colonnes, ce qui donne la matrice W3 pour la deuxième donnée d'entrée de la seconde ligne sur l'exemple de 20 la figure 2b. Ceci est la conséquence de la distribution des coefficients du filtre selon le neurone de sortie choisi ci-avant et découle directement des relations précédentes. 5 La distribution des coefficients des filtres aux unités de calcul peut être réalisée de plusieurs manières. La figure 2c illustre une implémentation du stockage des coefficients des filtres sous la forme d'une mémoire ayant une topologie de tore à deux dimensions. L'exemple de la figure 2c correspond à l'exemple de la figure 2b 10 c'est-à-dire un filtre de dimensions 3x3. Le dispositif décrit à la figure 2c comprend autant de registres REG que de coefficients, chaque registre étant encadré par un multiplexeur MUX à deux entrées et une sortie et un démultiplexeur DEMUX à une entrée et deux sorties. Les connexions entre les différents multiplexeurs et 15 démultiplexeurs sont agencées pour permettre la réalisation de permutations en fonction des coordonnées en x et en y. Il est possible de stocker soit les valeurs des coefficients des filtres dans les différents registres soit les adresses de ces coefficients stockés par ailleurs dans une autre mémoire. 20 A chaque nouvelle donnée d'entrée reçue, le mécanisme de permutation décrit à la figure 2b est appliqué au dispositif de la figure 2c et les différentes unités de calcul MAC viennent lire les valeurs des coefficients dans les registres correspondants. Dans le mode de réalisation décrit aux figures 2b et 2c, les 25 permutations sont réalisées en un cycle. Lors d'un saut de ligne d'une matrice d'entrée, les positions des coefficients de pondérations sur les colonnes sont remises à leur position initiale (position pour lx = 0) en même temps que les permutations des lignes sont effectuées. Cela est possible, car la taille de l'image à traiter est connue, on peut donc en déduire l'état des 30 permutations des colonnes du filtre W à la fin d'une ligne d'une image d'entrée. Les multiplexeurs MUX utilisés pour permuter les lignes sont 21 connectés de telle manière à permuter aussi les colonnes du filtre W pour les remettre à leurs positions initiales. La figure 2d décrit une autre structure de stockage et de distribution 5 des coefficients. Cette structure est en arbre. Elle comporte autant de registres REG ou mémoires ROM que de coefficients. Elle comporte en outre plusieurs dispositifs de permutation PERi,PER2 aptes à lire les valeurs dans les différents registres et à les permuter pour fournir en sortie les valeurs des coefficients dans un ordre de lecture différent. 10 Cette structure est notamment décrite dans la demande de brevet française du Demandeur publiée sous le numéro FR 3050846. Dans le cas où le nombre d'unités de calcul MAC par module de calcul de somme partielle est strictement inférieur au nombre de coefficients 15 d'un filtre, un ou plusieurs multiplexeurs est ajouté à la structure de distribution décrite aux figures 2c ou 2d, afin de sélectionner les coefficients à lire en fonction du degré de parallélisme. Cette sélection des coefficients pour la sérialisation des calculs est opérée entre deux lectures de données d'entrée. 20 La logique de distribution des coefficients est identique pour tous les modules de calcul de sommes partielles à la différence près qu'une latence est introduite dans la transmission des coefficients au module de calcul selon le niveau du module dans la structure en cascade au sein d'un ensemble de modules. 25 II est ainsi possible d'avoir une logique de contrôle commune pour tous les modules de calcul, avec une bascule sur les signaux de contrôle allant d'un module au suivant et ainsi de suite. La logique de contrôle peut également être distribuée pour chaque module de calcul, avec la latence adéquate prise en compte directement dans la logique de contrôle. 30 22 La figure 3 représente un schéma d'un ensemble PE_BLOC de modules de calcul de sommes partielles agencés en cascade, c'est-à-dire connectés en série. L'ensemble PE_BLOC comprend un nombre de modules de calcul compris entre 1 et N, N étant le nombre de matrices à traiter en 5 entrée de la couche de convolution. Le choix du nombre de modules de calcul est fonction du degré de parallélisation de l'ensemble PE_BLOC. L'ensemble PE_BLOC reçoit en entrée les données d'entrée Ini,j appartenant aux N matrices d'entrée de la couche de convolution et ayant les mêmes coordonnées (i,j) dans chaque matrice. Par exemple, il s'agit du 10 même pixel dans chaque image. Lorsque l'ensemble PE_BLOC comporte plusieurs modules de calcul de sommes partielles, ceux-ci sont agencés en cascade de sorte que le premier module de calcul PE_POOL1 reçoit la valeur 0 sur son entrée « i » et chaque module de calcul suivant est connecté, par son entrée « i » à la sortie du module de calcul précédent. Ce principe est 15 illustré sur la figure 3 avec trois modules de calcul de sommes partielles. Le dernier module de calcul PE_POOL3 délivre en sortie le résultat du calcul effectué globalement par l'ensemble PE_BLOC. Sans sortir du cadre de l'invention, la valeur 0 reçue sur l'entrée « i » du premier module de calcul PE POOL, peut être fixée à une valeur prédéterminée différente de la valeur 20 0 de sorte à ajouter une valeur biais aux calculs. De la même façon que pour un module de calcul de sommes partielles, les traitements réalisés par l'ensemble PE_BLOC sont plus ou moins parallélisables en fonction du nombre de modules de calcul de sommes partielles qu'il contient. 25 Lorsque l'ensemble PE_BLOC contient autant de modules de calcul de sommes partielles que de nombre de matrices N en entrée, les calculs sont entièrement parallélisés et chaque module de calcul de sommes partielles traite les données relatives à une matrice. Les valeurs obtenues en 30 sortie de l'ensemble PE_BLOC correspondent à des sommes partielles des produits entre une donnée d'entrée et un coefficient de pondération, sur 23 l'ensemble des matrices. Cette valeur est formalisée par une relation du type S = In,I.si+k,j.s i+I-Wk,1 n=0 Pour pouvoir réaliser la somme sur N matrices, les modules de calcul de sommes partielles sont chainés et des latences doivent être imposées 5 aux données d'entrée de chaque module de calcul dans le but de synchroniser la sortie d'un module de calcul avec l'entrée « i » du module de calcul suivant. La latence à imposer en entrée du kième module de calcul est égale à (k-1)*T,. En effet, chaque module de calcul doit attendre le calcul réalisé par les précédents modules de calcul pour réaliser son calcul. La 10 durée du traitement réalisé par un module de calcul pour une donnée d'entrée est égale à Tc. Pour implémenter cette latence, un ou plusieurs registres à décalage REG°, REG1, REG2 sont positionnés entre l'entrée de l'ensemble PE_BLOC et les entrées des modules de calcul PE_POOL2, PE POOL3, hormis le premier module de calcul PE_POOL1. 15 Un registre à décalage positionné en amont du kième module de calcul implémente une latence égale à (k-1)"Tc. Par exemple, il n'y a aucune latence en entrée du premier module de calcul PE_POOL1. Un registre à décalage REGo d'un temps de cycle Tc est positionné en amont du deuxième module de calcul PE_POOL2. Ce registre à décalage maintient la donnée 20 d'entrée pendant un temps de cycle avant de la fournir en entrée du deuxième module de calcul PE_POOL2. Un registre à décalage de deux temps de cycle 2*Tc (ou deux registres à décalage REGi,REG2 d'un temps de cycle chacun) est positionné en amont du troisième module de calcul PE_POOL3 et ainsi de suite. 25 Les modules de calcul de somme partielle PE_POOL1, PE_POOL2, PE POOL3, d'un même ensemble PE_BLOC sont configurés pour traiter les données d'entrées lues dans un nombre N de matrices d'entrées avec une latence croissante en fonction de l'indice de la matrice d'entrée. Comme 24 indiqué sur la figure 3, cette latence peut être introduite sous la forme de registres REG0, REG1, REG2 positionnés sur les bus de données d'entrées B1,B2,B3 de l'ensemble PE_BLOC. 5 Cette latence est appliquée de la même manière aux coefficients des filtres de convolution en fonction de la matrice d'entrée. Pour appliquer cette latence aux coefficients des filtres, une possibilité est d'ajouter des registres à décalage REGo,REG1,REG2 de même nature sur les bus de données reliant la mémoire de stockage des coefficients des filtres aux modules de 10 calcul PE POOL. Une autre possibilité consiste à décaler circulairement les coefficients de pondération dans la mémoire, le décalage circulaire étant égal à (n-1), avec n l'indice de la matrice d'entrée qui varie de 1 à N. Ce décalage est, par exemple, réalisé matériellement après l'application des permutations. 15 Lorsqu'un ensemble PE_BLOC ne contient qu'un seul module de calcul de sommes partielles, celui-ci effectue séquentiellement les opérations pour toutes les matrices d'entrée. Les données d'entrée sont alors présentées en entrée de l'ensemble PE BLOC par paquets de N données de 20 mêmes coordonnées dans chaque matrice. Dans ce cas, la somme partielle sur les N matrices n'est pas effectuée par l'ensemble PE_BLOC mais est effectuée par un additionneur externe à l'ensemble PE_BLOC. Lorsque l'ensemble PE_BLOC contient un nombre de modules de 25 calcul de sommes partielles strictement supérieur à 1 et strictement inférieur à N, les calculs sont partiellement parallélisés et séquentialisés. Chaque module de calcul traite les données correspondant à une partie seulement des matrices. Les sommes partielles sont réalisées pour une partie des matrices, la somme finale sur l'ensemble des matrices étant 30 réalisée par un additionneur externe à l'ensemble PE_BLOC. 25 Le tableau suivant illustre un exemple de séquencement des opérations réalisées par un ensemble PE_BLOC comprenant deux modules de calcul de sommes partielles PE_POOLo, PE_POOL1 et recevant en entrée quatre matrices indexées par les index 0,1,2,3. 5 Cycle Te 2 4- Te 3 * Tc 4 4- Te 5 -4- Te 6 * Te PE POOL° 0 2 0 2 0 2 PE POOL, 1 3 1 3 1 3 Le degré de parallélisme de l'ensemble PE_BLOC est égal à Tn=N/Nb_PE_POOL, avec Nb_PE_POOL le nombre de modules de calcul de sommes partielles. 10 Au total, pour traiter une donnée d'entrée sur chaque matrice d'entrée et pour un neurone de sortie associé, le temps de calcul nécessaire à l'ensemble PE_BLOC est égal à Tr*Tc. Il convient de noter que les filtres appliqués aux matrices d'entrée peuvent être différents les uns des autres et ainsi, chaque module de calcul 15 de somme partielle PE_POOL accède à des filtres différents. La figure 4 schématise un exemple d'architecture d'un calculateur CONV d'une couche de convolution selon un mode de réalisation de l'invention. Le calculateur CONV comprend un ou plusieurs ensembles 20 PE_BLOC de modules de calcul de sommes partielles, le nombre maximum d'ensembles étant égal au nombre de matrices de sortie M de la couche de convolution. Chaque ensemble PE_BLOC reçoit les mêmes entrées simultanément. Autrement dit, chaque donnée d'entrée produite en entrée du calculateur CONV est dupliquée sur les entrées de chaque ensemble 25 PE_BLOC. Le calculateur CONV comporte en outre une première mémoire W MEM pour sauvegarder les coefficients d'un ou plusieurs noyaux de convolution Wm. Le nombre de noyaux de convolution est au plus égal au 26 nombre de matrices d'entrée N multiplié par le nombre de matrices de sortie M, NxM. La mémoire W_MEM est associée à un bus de lecture de taille égale à Nb_PE*Nb_PE_POOL*Nb_PE_BLOC, où Nb_PE_BLOC est le nombre d'ensembles PE_BLOC dans un calculateur CONV. La mémoire 5 W MEM, ou son adressage (dans le cas d'une mémoire RAM), est implémentée, par exemple, au moyen d'un des dispositifs décrits aux figures 2c ou 2d. La mémoire W_MEM ainsi que la logique de contrôle de cette mémoire peut également être distribuée dans les ensembles PE BLOC. 10 Le calculateur CONV comporte en outre au moins un additionneur ou accumulateur connecté d'une part à la sortie de chaque ensemble PE_BLOC et d'autre part à une seconde mémoire RAM. La seconde mémoire RAM peut être dupliquée pour chaque additionneur. Bien que sur la figure 4 on a représenté un seul additionneur pour chaque ensemble PE_BLOC, il est 15 possible d'avoir plusieurs additionneurs traitant en parallèle les données produites par un ensemble PE_BLOC lorsqu'il y a plusieurs unités de calcul MAC par module de calcul de somme partielle. Le nombre d'additionneurs est égal au nombre d'unités de calcul MAC par module de calcul de somme partielle ou autrement dit à la taille du bus de données en sortie d'un 20 ensemble PE_BLOC. Les valeurs délivrées en parallèle en sortie d'un ensemble PE_BLOC correspondent à des neurones de sortie différents et peuvent donc être traitées en parallèle par chaque additionneur. La seconde mémoire RAM est utilisée pour stocker des résultats de sommes partielles réalisées par un accumulateur pour finaliser la somme sur 25 la taille du noyau de convolution et sur l'ensemble des matrices dans le cas où les ensembles PE_BLOC n'ont pas un degré de parallélisation maximum. La mémoire RAM est dimensionnée pour stocker au minimum un nombre égal à M*(0,*(Ky-1)+Kx-1) sommes partielles. La mémoire RAM est assortie d'un bus de lecture/écriture de taille égale au nombre de sommes partielles 30 calculées parallèlement, soit Nb_PE*Nb_PE_BLOC. Les adresses des 27 valeurs stockées dans la mémoire RAM sont calculées pour éviter que deux neurones de sortie en cours de calcul ne partagent le même bloc mémoire. Pour pouvoir obtenir la valeur d'un neurone de sortie, il faut sommer les sommes partielles délivrées par un ensemble PE_BLOC afin de traiter 5 toutes les données d'entrée d'un champ réceptif d'un neurone. Autrement dit, il faut sommer toutes les sommes partielles associées à une donnée d'entrée connectée à un même neurone. Sachant que les données d'entrée sont reçues séquentiellement, il est nécessaire de stocker dans la mémoire RAM plusieurs sommes partielles. Cependant il n'est pas nécessaire de stocker 10 toutes les sommes partielles pour tous les neurones d'une matrice de sortie car une fois la valeur d'un neurone calculé, son espace mémoire peut être réallouer pour calculer un autre neurone. L'adressage de la mémoire RAM est déterminé en fonction des adresses des neurones de sortie. Chaque adresse de la mémoire RAM est 15 associée à un neurone de sortie différent. Lorsqu'un calcul de convolution est terminé, la place mémoire utilisée pour stocker les résultats partiels du calcul est libérée et peut être réutilisée pour un autre neurone de sortie. Le calculateur CONV comporte en outre un module d'activation F 20 configuré pour appliquer une fonction de transfert propre au neurone au résultat du calcul de convolution. La fonction d'activation mise en oeuvre par le module d'activation F peut prendre différentes formes. Elle peut par exemple être une fonction du type RELU pour « Rectifier Linear Unit » en anglais qui est une fonction du type f(x)-max(0,x) où max() désigne la 25 fonction maximum des deux opérandes. La fonction réalisée peut aussi être du type f(x)-log(1-Fexp(x)). La fonction d'activation peut aussi être une fonction sigmoïde, par exemple une fonction tangente hyperbolique. Tout autre fonction non linéaire appropriée peut aussi être envisagée. Par ailleurs, le module d'activation F peut comporter un registre à 30 décalage afin d'ajuster la dynamique des valeurs des neurones de sortie. 28 Le calculateur CONV peut comporter un un gestionnaire de sortie GES pour reformer un vecteur de M valeurs en sortie du calculateur dans le cas où Nb_PE_BLOC est strictement inférieur à M. En effet, dans ce cas de figure, un ou plusieurs ensembles PE_BLOC réalisent des calculs de 5 convolution pour plusieurs neurones de sortie associés (potentiellement) à différents noyaux de convolution. Dans ce cas, les données traitées par un ensemble PE_BLOC sont des vecteurs de taille égale au nombre de neurones associés. Le gestionnaire de sortie peut comporter un démultiplexeur et un ou plusieurs registres. Le calculateur CONV peut aussi comporter un gestionnaire d'entrée (non représenté sur la figure 4) pour gérer le séquencement des données d'entrée lorsque le traitement des matrices d'entrée est partiellement ou totalement séquentialisé, c'est-à-dire lorsque Nb_PE_POOL REVENDICATIONS1. Calculateur (CONV) pour calculer une couche de convolution d'un réseau de neurones artificiel, comprenant au moins un ensemble (PE_BLOC) d'au moins deux modules de calcul de somme partielle (PE_POOL,,PE_POOL2,PE_POOL3) connectés en série, un organe de stockage (W_MEM) des coefficients d'au moins un filtre de convolution, chaque module de calcul de somme partielle (PE POOL2) comprenant au moins une unité de calcul (PE0,PE1) configurée pour réaliser une multiplication d'une donnée d'entrée du calculateur et d'un coefficient d'un filtre de convolution, suivie d'une addition avec la sortie du module de calcul de somme partielle (PE_POOL1) précédent dans la série ou avec une valeur prédéfinie pour le premier module de calcul de somme partielle (PE_POOL1) de la série, chaque ensemble (PE_BLOC) comprenant en outre, pour chaque module de calcul de somme partielle sauf le premier de la série, un registre à décalage connecté en entrée pour stocker la donnée d'entrée pendant la durée de traitement des modules de calcul de somme partielle précédents dans la série, le calculateur (CONV) comprenant en outre au moins un accumulateur connecté en sortie de chaque ensemble (PE_BLOC) et une mémoire (RAM). 2. Calculateur (CONV) selon la revendication 1 dans lequel les données d'entrée proviennent d'au moins une matrice d'entrée et le calculateur (CONV) fournit en sortie, pour chaque sous-matrice d'entrée de dimension égale à celle du filtre de convolution, la valeur d'un neurone de sortie correspondant, l'ensemble des neurones de sortie étant agencés dans au moins une matrice de sortie. 31 3. Calculateur (CONV) selon la revendication 2 dans lequel chaque module de calcul de somme partielle (PE_POOL) comporte au plus un nombre d'unités de calcul (PE) égal à la dimension du filtre de convolution. 5 4. Calculateur (CONV) selon l'une des revendications 2 ou 3 dans lequel chaque ensemble (PE_BLOC) comporte au plus un nombre de modules de calcul de somme partielle égal au nombre de matrices d'entrée. 10 5. Calculateur (CONV) selon l'une des revendications 2 à 4 comprenant au plus un nombre d'ensembles (PE_BLOC) égal au nombre de matrices de sortie. 6. Calculateur (CONV) selon l'une des revendications 2 à 5 dans lequel, 15 pour chaque donnée d'entrée reçue, chaque module de calcul de somme partielle (PE_POOL) est configuré pour calculer un résultat partiel de convolution pour tous les neurones de sortie connectés à la donnée d'entrée. 20 7. Calculateur (CONV) selon la revendication 6 dans lequel chaque module de calcul de somme partielle (PE_POOL) comporte plusieurs unités de calcul (PE), étant chacune configurée pour calculer un résultat partiel de convolution pour des neurones de sortie différents des autres unités de calcul (PE). 25 8. Calculateur (CONV) selon l'une des revendications 6 ou 7 dans lequel chaque module de calcul de somme partielle (PE_POOL) est configure, pour chaque donnée d'entrée reçue, pour sélectionner, dans l'organe de stockage (W_MEM), les coefficients d'un filtre de convolution correspondant aux neurones de sortie respectifs à calculer pour chaque unité de calcul (PE). 9. Calculateur (CONV) selon l'une des revendications 2 à 8, ledit calculateur recevant plusieurs matrices d'entrée, les traitements des matrices 32 d'entrée étant répartis sur l'ensemble des modules de calcul de somme partielle. 10.Calculateur (CONV) selon l'une des revendications 2 à 9 dans lequel les 5 matrices d'entrée sont des images. 11.Calculateur (CONV) selon l'une des revendications précédentes dans lequel l'organe de stockage (W_MEM) a une topologie de tore à deux dimensions. 10 12.Calculateur (CONV) selon l'une des revendications précédentes dans lequel l'au moins un accumulateur connecté en sortie de chaque ensemble (PE_BLOC) est configuré pour finaliser un calcul de convolution permettant d'obtenir la valeur d'un neurone de sortie, à partir 15 des sommes partielles délivrées par l'ensemble (PE_BLOC), la mémoire (RAM) étant utilisée pour sauvegarder des résultats partiels du calcul de convolution. 13.Calculateur (CONV) selon la revendication 12 dans lequel les adresses 20 des valeurs stockées dans la mémoire (RAM) sont déterminées de manière à éviter que deux neurones de sortie en cours de calcul ne partagent le même bloc mémoire. 14.Calculateur (CONV) selon l'une des revendications précédentes 25 comprenant en outre un module d'activation (F) d'un neurone de sortie connecté en sortie de chaque accumulateur. 30