Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
ARCHITECTURE OF A COMPUTER FOR CALCULATING A CONVOLUTION LAYER IN A CONVOLUTIONAL NEURAL NETWORK
Document Type and Number:
WIPO Patent Application WO/2020/043753
Kind Code:
A1
Abstract:
Computer (CONV) for calculating a convolution layer of an artificial neural network, comprising at least one set (PE_BLOC) of at least two partial sum calculation modules connected in series, a member (W_MEM) for storing the coefficients of at least one convolution filter, each partial sum calculation module comprising at least one calculation unit configured to perform a multiplication of an input datum of the computer and a coefficient of a convolution filter, followed by an addition with the output of the previous partial sum calculation module in the series, each set (PE_BLOC) further comprising, for each partial sum calculation module except the first in the series, a shift register connected at the input to store the input data during the processing time of the previous partial sum calculation modules in the series.

Inventors:
LORRAIN VINCENT (FR)
BICHLER OLIVIER (FR)
GUIBERT MICKAEL (FR)
Application Number:
PCT/EP2019/072903
Publication Date:
March 05, 2020
Filing Date:
August 28, 2019
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
COMMISSARIAT ENERGIE ATOMIQUE (FR)
International Classes:
G06N3/063; G06F15/80; G06N3/04
Foreign References:
US20180046906A12018-02-15
FR3050846A12017-11-03
Other References:
PAOLO MELONI ET AL: "NEURAghe: Exploiting CPU-FPGA Synergies for Efficient and Flexible CNN Inference Acceleration on Zynq SoCs", ARXIV.ORG, CORNELL UNIVERSITY LIBRARY, 201 OLIN LIBRARY CORNELL UNIVERSITY ITHACA, NY 14853, 4 December 2017 (2017-12-04), XP080844383
K. FUKUSHIMA: "Neocognitron: A self-organizing neural network model for a mechanism of pattern récognition unaffected by shift in position", BIOLOGICAL CYBERNETICS, vol. 36, no. 4, 1980, pages 193 - 202, XP009056448, ISSN: 0340-1200, doi:10.1007/BF00344251
Attorney, Agent or Firm:
HAMMES, Pierre et al. (FR)
Download PDF:
Claims:
REVENDICATIONS

1. 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 (RE_ROOI_-I ,RE_ROOI_2,RE_ROOI_3) 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,PE-i) 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_POOLi) 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), les données d’entrée du calculateur provenant d’au moins deux matrices d’entrée, chaque module de calcul de somme partielle (PE_POOL) étant configuré pour recevoir en entrée les données d’entrée appartenant à des matrices d’entrée différentes et ayant les mêmes coordonnées dans chaque matrice d’entrée.

2. Calculateur (CONV) selon la revendication 1 configuré pour délivrer 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

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.

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.

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, 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.

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).

8. Calculateur (CONV) selon l’une des revendications 6 ou 7 dans lequel chaque module de calcul de somme partielle (PE_POOL) est configuré, 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 dans lequel les matrices d’entrée sont des images.

10. 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.

11. 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 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.

12. Calculateur (CONV) selon la revendication 1 1 dans lequel les adresses 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.

13. Calculateur (CONV) selon l’une des revendications précédentes comprenant en outre un module d’activation (F) d’un neurone de sortie connecté en sortie de chaque accumulateur.

Description:
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 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 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 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.

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 récognition unaffected by shift in position. Biological Cybernetics, 36(4):193-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 neurones sans connexion récurrente (« feedforward »), inspirés par les systèmes visuels biologiques. Les réseaux de neurones convolutionnels (CNN) sont utilisés notamment dans des systèmes de classifications d’images pour améliorer la classification. Appliqués à la reconnaissance d’images, ces réseaux permettent un apprentissage des représentations intermédiaires d’objets dans les images qui sont plus petites et généralisables pour des objets similaires, ce qui facilite leur reconnaissance. Cependant, le fonctionnement intrinsèquement parallèle et la complexité des classificateurs classiques de type réseau de neurones convolutionnels mettent un frein à leur implémentation efficace dans les systèmes embarqués. En effet, les systèmes embarqués imposent de fortes contraintes en matière de surface et de consommation.

En particulier, les réseaux de neurones convolutionnels comprennent une ou plusieurs couche(s) de convolution qui sont particulièrement coûteuses en nombres d’opération. Les opérations effectuées sont principalement des opérations de multiplication et accumulation (MAC). Par ailleurs, pour respecter les contraintes de latence et temps de traitement propres aux applications visées, il est nécessaire de paralléliser au maximum les calculs.

Il existe donc un besoin pour des calculateurs permettant de mettre en oeuvre une couche de convolution d’un réseau de neurones avec une complexité limitée permettant de satisfaire aux contraintes des systèmes embarqués et des applications visées.

Dans les architectures connues implémentant des couches de convolution, les opérations MAC sont effectuées en partie par des opérateurs de multiplication séparés des opérateurs d’addition. Le parallélisme est généralement obtenu en réalisant en parallèle des multiplications ou des sommes partielles puis en recombinant les résultats partiels à la fin du calcul, nécessitant ainsi des opérateurs d’addition supplémentaires. Des solutions ont été proposées pour implémenter des couches de convolution de réseaux de neurones à l’aide d’architectures de calcul spécialisé. Les solutions existantes peuvent être regroupées en deux approches calculatoires, une approche de type « instruction unique, données multiples » ou « single instruction on multiple data » SIMD en anglais dans laquelle les données d’entrée sont reçues et traitées en parallèle, par blocs et une approche de type « flux de données » ou « data flow » en anglais dans laquelle les données d’entrée sont reçus au fil de l’eau séquentiellement. L’invention se positionne dans le domaine des architectures de calcul selon l’approche « data flow ».

Dans cette approche, plusieurs architectures de calcul ont été proposées.

Une première architecture possible dite « ligne buffer » ou « line buffer » en anglais consiste à aligner les données en entrée sur le filtre de convolution de sorte à réaliser le calcul de convolution entièrement en parallèle en utilisant un arbre de recombinaison de produits. Des solutions suivant cette approche sont notamment décrites dans l’article « Optimizing FPGA-based accelerator design for deep convolutional neural networks, C Zhan et al » et dans l’article « Efficient FPGA accélération of convolutional neural networks using logical 3D compute array, A Rahman et al ».

Ces solutions présentent l’inconvénient d’implémenter la structure de calcul proposée autant de fois qu’il y a de matrices d’entrée ce qui engendre un surcoût en termes de surface utilisée. De plus, le fait d’aligner les valeurs d’entrée sur les coefficients du filtre de convolution complique l’utilisation de la mémoire externe.

Une seconde architecture possible dite architecture par somme partielle consiste à stocker non pas les valeurs d’entrée mais des sommes partielles du calcul de convolution. Une telle architecture est notamment décrite dans l’article « A high performance FPGA-based accelerator for large scale convolutional neural networks, H.Li et al ». Un inconvénient de cette solution est qu’elle nécessite l’emploi d’un arbre additionneur ou « adder tree » en anglais qui est un dispositif particulier composé essentiellement d’accumulateurs.

L’invention propose une architecture de calcul de couche de convolution qui utilise principalement des opérateurs MAC qui effectuent une addition suivie d’une multiplication. L’utilisation de tels opérateurs présente l’avantage de pouvoir exploiter efficacement les ressources d’un processeur de signaux (DSP) qui implémente nativement et de façon optimisée de tels opérateurs. Ainsi, l’invention est particulièrement adaptée pour une implémentation sous la forme d’un circuit à logique programmable de type FPGA contenant un très grand nombre (des centaines voire des milliers) de blocs de processeurs de signaux DSP.

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 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 DSP d’un circuit FPGA sans que cela soit limité par le nombre de bloc mémoire RAM disponibles. 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.

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 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 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 chaque ensemble et une mémoire, les données d’entrée du calculateur provenant d’au moins deux matrices d’entrée, chaque module de calcul de somme partielle (PE_POOL) étant configuré pour recevoir en entrée les données d’entrée appartenant à des matrices d’entrée différentes et ayant les mêmes coordonnées dans chaque matrice d’entrée.

Selon un aspect particulier de l’invention, 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 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 au plus un nombre de modules de calcul de somme partielle égal au nombre de matrices d’entrée.

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é 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 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 chaque unité de calcul.

Selon un aspect particulier de l’invention, les matrices d’entrée sont 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 neurones de sortie en cours de calcul ne partagent le même bloc mémoire. 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.

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 1 a,1 b,1 c,1 d, plusieurs illustrations du fonctionnement d’une couche de convolution d’un réseau de neurones convolutionnel,

- 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,

- 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 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 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. 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 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, 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 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.

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 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 en niveaux de gris. Pour une image en couleur ou plus généralement une 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 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 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 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 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.

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.

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 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.

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 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.

Les figures 1 a-1d illustrent le fonctionnement général d’une couche de convolution.

La figure 1 a représente une matrice d’entrée I de taille (l x ,l y ) connectée à une matrice de sortie O de taille (O x ,O y ) via une couche de convolution réalisant une opération de convolution à l’aide d’un filtre W de taille (K x ,K y ).

Une valeur Oy 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 sous-matrice correspondant de la matrice d’entrée I.

Sur la figure 1 a, on a représenté la première valeur O 0, o 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 O 0,i de la matrice de sortie O obtenue en appliquant le filtre W à la deuxième sous-matrice d’entrée. La figure 1 c représente un cas général de calcul d’une valeur 0 3,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 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 « 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 O.

Les valeurs des neurones de sortie 0, sont données par la relation suivante :

Dans la formule ci-dessus, g() désigne la fonction d’activation du neurone, tandis que et s j désignent les paramètres de décalage (« stride » en anglais) vertical et horizontal respectivement. Un tel décalage « stride » correspond au décalage entre chaque application du noyau de convolution sur la matrice d’entrée. Par exemple, si le décalage est supérieur ou égal à la taille du noyau, alors il n’y a pas de chevauchement entre chaque application du noyau. Le filtre W n correspond au noyau de convolution qui connecte la matrice de sortie O à une matrice d’entrée l n . Différents filtres peuvent être associés à différentes matrices d’entrée, pour la même matrice de sortie.

Pour simplifier, la fonction d’activation g() n’est pas représentée sur les figures 1 a-1d.

Les figures 1 a-1 c illustrent un cas où une seule matrice de sortie O est connectée à une seule matrice d’entrée I. La figure 1 d illustre un autre cas où plusieurs matrices de sortie O m sont connectées chacune à plusieurs matrices d’entrée l n . Dans ce cas, chaque matrice de sortie O m est connectée à chaque matrice d’entrée l n via un noyau de convolution K m n qui peut être différent selon la matrice de sortie.

Par ailleurs, lorsqu’une matrice de sortie est connectée à plusieurs matrices d’entrée, la couche de convolution réalise, en plus de chaque opération de convolution décrite ci-dessus, une somme des valeurs de sortie des neurones obtenues pour chaque matrice d’entrée. Autrement dit, la valeur de sortie d’un neurone de sortie est dans ce cas égale à la somme des valeurs de sorties obtenues pour chaque opération de convolution appliquée à chaque matrice d’entrée.

Les valeurs des neurones de sortie 0, j sont dans ce cas données par la relation suivante :

On décrit à présent, à l’appui des figures 2,3 et 4, un mode de réalisation du dispositif de calcul selon l’invention.

Comme indiqué en préambule, l’invention porte sur un calculateur configuré pour mettre en oeuvre une couche de convolution d’un réseau de neurones, réalisant la fonction décrite précédemment. Ainsi, le calculateur selon l’invention reçoit en entrée une ou plusieurs matrices d’entrée comprenant des données d’entrée et fournit en sortie une ou plusieurs matrices de sortie comprenant des valeurs de neurones de sortie. Les données d’entrée peuvent être des pixels d’une ou plusieurs images ou plus généralement des composantes d’une ou plusieurs images.

Le calculateur selon l’invention présente une architecture en trois blocs ou modules qui sont imbriqués. Chaque bloc correspond à un aspect dans le traitement de la convolution est décrit sur l’une des figures 2,3 et 4. Un premier module de calcul PE_POOL est décrit à la figure 2. Ce premier module de calcul PE_POOL est appelé par la suite module de calcul de somme partielle. En effet, comme cela sera explicité par la suite, un module de calcul PE_POOL réalise une somme partielle du calcul global de convolution permettant d’obtenir les valeurs de sortie des neurones.

Un module de calcul de somme partielle PE_POOL comporte une ou plusieurs unités de calcul PE 0 ,PE-i identiques chacune étant configurée pour réaliser une opération de multiplication de deux valeurs d’entrée suivie d’une opération d’addition du résultat de la multiplication avec une troisième valeur. Autrement dit, une unité de calcul PE 0 ,PEi est configurée pour réaliser une opération dite de multiplication puis accumulation encore appelé « multiply- accumulate » en anglais ou plus simplement MAC. Dans la suite de la description, les unités de calcul PE 0 ,PEi seront appelées unités de calcul MAC.

Un module de calcul de somme partielle PE_POOL comporte un nombre d’unités de calcul MAC compris entre un et K x * K y , selon le degré de parallélisation visé. Par exemple si le nombre d’unités de calcul MAC est égal à K x * K y , les calculs réalisés par un module de calcul de somme partielle PE_POOL sont entièrement parallélisés. Au contraire, s’il ne comporte qu’une seule unité de calcul MAC, tous les calculs réalisés sont séquentiels. Enfin, si ce nombre est strictement compris entre un et K x * K y , les calculs sont partiellement parallélisés et partiellement séquentialisés.

Un module de calcul de somme partielle PE_POOL reçoit, à chaque cycle d’horloge, une valeur ly d’une matrice d’entrée I, la matrice étant lue séquentiellement ligne après ligne. Chaque unité de calcul MAC PE 0 ,PEi reçoit cette valeur sur une entrée et reçoit un coefficient W k,i du noyau de convolution, sur une autre entrée. Une unité de calcul MAC réalise une multiplication de ces deux entrées, puis réalise une addition du résultat avec une valeur i qui correspond, dans le cas général, à la sortie d’un autre module de calcul de somme partielle PE_POOL comme cela sera explicité par la suite. Le nombre d’unités de calcul MAC est au plus égal à la dimension du noyau de convolution car, dans une couche de convolution, il y a au maximum K x * K y neurones de sortie connectés à la même donnée d’entrée de la matrice d’entrée.

La figure 2a illustre, sur un exemple, les calculs effectués par un module de calcul de somme partielle PE_POOL pour une donnée d’entrée l 4,3 reçue en entrée. Dans l’exemple de la figure 2a, le noyau de convolution W comprend quatre coefficients et est de taille K x * K y =2x2.

Chaque donnée de la matrice d’entrée I est au plus connectée à K x * K y = 4 neurones de sortie. Autrement dit, chaque donnée de la matrice d’entrée I contribue au calcul de la valeur de 4 neurones de sortie. Dans l’exemple illustré à la figure 2a, la donnée d’entrée l 4,3 est connectée aux quatre neurones de sortie 0 3,2, 0 3,3, 0 4,2, 0 4,3. Par exemple, la valeur du neurone de sortie 0 3 2 est obtenue en appliquant le filtre W à la sous-matrice d’entrée formée des données l 3 2 , l 3 3 l 42 l 4,3 . La valeur du neurone de sortie 0 3,3 est obtenue en appliquant le filtre W à la sous-matrice d’entrée formée des données l 3,3 , l 3,4, l 4,3, l 4,4 . Ainsi, la donnée d’entrée l 4,3 est commune aux quatre sous-matrices d’entrée connectées respectivement aux quatre neurones de sortie considérés.

Ce principe est valable pour toutes les données d’entrée à la différence près que les données d’entrées situées sur les bords de la matrice d’entrée I sont connectées à au moins un neurone de sortie et au plus K x * K y - 1 neurones de sortie.

Cette constatation sert de base à la mise en oeuvre du calcul opéré par un module de calcul de somme partielle PE_POOL. En effet, pour chaque donnée d’entrée, un module de calcul de somme partielle calcule tous les produits entre cette donnée d’entrée et un coefficient du filtre W qui contribuent partiellement au calcul de la valeur d’un neurone de sortie connecté à cette donnée d’entrée. En considérant l’exemple de la figure 2a, un module de calcul de somme partielle réalise les opérations suivantes pour la donnée d’entrée U, 3 :

- le produit l 4,3 * W-i ,i qui intervient dans le calcul du neurone de sortie

O3 2,

- le produit l 4,3 * Wi ,0 qui intervient dans le calcul du neurone de sortie

- le produit I 3 * W 0 I qui intervient dans le calcul du neurone de sortie

0 4 2

- le produit l 4, 3 * W 0, o qui intervient dans le calcul du neurone de sortie

0 3

Chaque produit calculé est ensuite sommé avec la donnée i qui sera explicitée par la suite.

Chaque module de calcul de somme partielle traite une donnée d’entrée pendant une durée T c (exprimée en nombre de cycles d’horloge). Cette durée de traitement T c dépend du degré de parallélisation implémenté c'est-à-dire du nombre Nb_PE d’unités de calcul MAC fonctionnant en parallèle dans un module de calcul de somme partielle. Précisément, T c = E{(K x * K y )/Nb_PE}, où E{} désigne la partie entière supérieure. Si le nombre Nb_PE d’unités de calcul MAC est égal à la dimension K x * K y du noyau de convolution (qui est aussi égale au nombre de neurones de sortie connectés à une même donnée d’entrée), le degré de parallélisation est maximal et la durée T c de traitement d’une donnée d’entrée est égale à un cycle d’horloge (en faisant l’hypothèse qu’un calcul MAC est effectué en 1 cycle). A l’inverse, si une seule unité de calcul MAC est disponible, les calculs réalisés sur une donnée d’entrée sont entièrement sérialisés et la durée T c est égale à K x * K y cycles d’horloge.

En reprenant l’exemple de la figure 2a pour lequel K x * K y = 4, si le module de calcul de somme partielle comporte une seule unité de calcul MAC, celle-ci gère le traitement d’une donnée d’entrée en quatre cycles d’horloge pour calculer les contributions de cette donnée d’entrée aux calculs de quatre neurones de sortie. Si le module de calcul de somme partielle comporte deux unités de calcul MAC, chacune gère le traitement de la donnée d’entrée pour calculer les contributions aux calculs de deux neurones de sortie différents parmi les quatre neurones de sortie connectés à la donnée d’entrée. Le traitement global de la donnée d’entrée dure deux cycles d’horloge. Si le module de calcul de somme partielle comporte trois unités de calcul MAC, une unité gère le traitement de la donnée d’entrée pour calculer les contributions aux calculs de deux neurones de sortie et les deux autres unités gèrent le traitement de la donnée d’entrée pour calculer les contributions aux calculs respectifs de deux autres neurones de sortie. Dans ce cas de figure, le traitement de la donnée d’entrée par la première unité de calcul MAC dure deux cycles d’horloge tandis que le traitement de la donnée d’entrée par les deux autres unités de calcul MAC ne dure qu’un cycle d’horloge. Globalement, le temps de traitement d’une donnée d’entrée par le module de calcul de somme partielle est de deux cycles d’horloge (durée de traitement maximale parmi les trois unités de calcul MAC). Enfin, si le module de calcul de somme partielle comporte quatre unités de calcul MAC, chacune gère le traitement de la donnée d’entrée relatif à un neurone de sortie différent et la durée de traitement global de la donnée d’entrée est égale à un cycle d’horloge.

Ainsi, le niveau de parallélisation du module de calcul de somme partielle est entièrement paramétrable.

A chaque cycle d’horloge, une unité de calcul MAC doit lire un coefficient du filtre W pour réaliser une multiplication avec la donnée d’entrée en vue du calcul d’un neurone de sortie différent. Selon le degré de parallélisation, les coefficients de pondération du filtre sont lus en parallèle et distribués à chaque unité de calcul ou sont lus séquentiellement par paquets ou les deux à la fois.

Le tableau suivant illustre un exemple de distribution des coefficients de pondération d’un filtre de dimensions 3x3 vers trois unités de calcul PE 0 , PE- I ,PE 2 . La durée de traitement d’une donnée d’entrée est égale à trois cycles d’horloges. Le tableau suivant donne, pour chaque cycle d’horloge, les indices des coefficients de pondération délivrés à chaque unité de calcul pour le traitement successif de deux données d’entrée l 0 et \^ . Les indices des coefficients de pondération correspondent à une lecture ligne par ligne, de gauche à droite.

Un module de calcul de somme partielle PE_POOL fournit en sortie un vecteur de sommes partielles dont la taille est égale au nombre d’unités de calcul au sein du module. Chaque valeur du vecteur est associée à un neurone de sortie différent.

Il existe une relation directe entre les adresses des données d’entrée (@l x ,@l y ), des coefficients du filtre (@W x ,@W y ) et des neurones de sortie (@O x ,@O y ) :

(@o x = @ - @w x

l@Oy = @Iy - @Wy

Les coefficients du filtre sont stockés dans une mémoire W_MEM. Il peut y avoir différents filtres pour différentes matrices d’entrée et pour différentes matrices de sortie comme cela sera explicité par la suite.

Les données d’entrée arrivent au fil de l’eau, elles correspondent à une lecture ligne après ligne de chaque matrice d’entrée. Pour pouvoir calculer les sommes partielles associés aux neurones de sortie, l’architecture du calculateur selon l’invention doit respecter deux conditions. Tout d’abord, un même neurone de sortie ne peut pas être traité par deux unités de calcul MAC différentes. Autrement dit, chaque unité de calcul MAC est en charge de calculer des sommes partielles qui contribuent à un ou plusieurs neurone(s) de sortie différent(s) de ceux traités par les autres unités de calcul MAC. Ensuite, pour une même donnée d’entrée, la répartition des calculs au sein de tous les modules de calcul de somme partielle doit être identique. Autrement dit, la répartition du traitement des neurones de sortie entre les unités de calcul MAC au sein d’un module de calcul de somme partielle est identique pour tous les modules de calcul de somme partielle.

Sachant que les adresses des données d’entrée (@l x ,@l y ) sont fixées par lecture séquentielle des données dans une matrice d’entrée, la répartition des affectations des neurones de sortie à chaque unité de calcul MAC dépend des adresses des coefficients du filtre en mémoire.

On décrit à présent un exemple de réalisation d’un mécanisme de distribution des coefficients d’un filtre en mémoire aux différentes unités de calcul MAC d’un module de calcul de somme partielle. Cet exemple est donné à titre illustratif et non limitatif, étant entendu que l’Homme du métier saurait sans difficultés adapter ce mécanisme à d’autres schémas de distribution.

En considérant un filtre de dimensions (K x ,K y ) on sait que, pour chaque nouvelle donnée d’entrée, il existe au plus K x * K y neurones de sortie différents connectés à cette donnée d’entrée. Dans l’exemple qui suit, on se place dans un cas où il existe exactement K x * K y neurones de sortie connectés à la donnée d’entrée (cas le plus général, hormis les données situées sur les bords de la matrice d’entrée).

Les K x * K y neurones de sortie peuvent être identifiés par leurs coordonnées réduites @O x mod K x et @O y mod K y dans une matrice de taille (K x ,K y ), avec mod la fonction modulo.

Une distribution possible des coefficients du filtre selon le neurone de sortie à calculer et en fonction de la donnée d’entrée reçue est donnée par les relations suivantes : @W X =

@I y mod K y @O y mod K y si @I y mod K y ³ @O y mod K y

@w y

@I y mod K y @O y mod K y + K y 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 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 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.

L’indice d’un coefficient du filtre est donnée par la relation @w x

+@w y * K x .

La première matrice W° donne les indices des coefficients à utiliser pour la première donnée d’entrée l 0, o- Pour chaque nouvelle donnée d’entrée lue sur une ligne de la matrice d’entrée, la matrice des coefficients du filtre subit une permutation circulaire des colonnes. Par exemple, la matrice W 1 est utilisée pour la deuxième donnée d’entrée l 0,i .

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 W 2 . 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 W 3 pour la deuxième donnée d’entrée de la seconde ligne sur l’exemple de 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.

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 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 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.

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 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 l x = 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 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 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 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 PER- I ,PER 2 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.

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 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.

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.

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. 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 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 l n 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 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_POOL-i 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 illustré sur la figure 3 avec trois modules de calcul de sommes partielles. Le dernier module de calcul PE_POOL 3 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-i peut être fixée à une valeur prédéterminée différente de la valeur 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.

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 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 l’ensemble des matrices. Cette valeur est formalisée par une relation du type :

Pour pouvoir réaliser la somme sur N matrices, les modules de calcul de sommes partielles sont chaînés et des latences doivent être imposées 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 k' eme module de calcul est égale à (k-1 ) * T c . 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 durée du traitement réalisé par un module de calcul pour une donnée d’entrée est égale à T c . Pour implémenter cette latence, un ou plusieurs registres à décalage REG 0 , REGi, REG 2 sont positionnés entre l’entrée de l’ensemble PE_BLOC et les entrées des modules de calcul PE_POOL 2 , PE_POOL 3 , hormis le premier module de calcul PE_POOL 1 .

Un registre à décalage positionné en amont du k' eme module de calcul implémente une latence égale à (k-1 ) * T c . Par exemple, il n’y a aucune latence en entrée du premier module de calcul PE_POOL 1 . Un registre à décalage REG 0 d’un temps de cycle T c est positionné en amont du deuxième module de calcul PE_POOL 2. Ce registre à décalage maintient la donnée d’entrée pendant un temps de cycle avant de la fournir en entrée du deuxième module de calcul PE_POOL 2 . Un registre à décalage de deux temps de cycle 2 * T C (ou deux registres à décalage REG I ,REG 2 d’un temps de cycle chacun) est positionné en amont du troisième module de calcul PE_POOL 3 et ainsi de suite.

Les modules de calcul de somme partielle PE_POOL-i, PE_POOL 2 , PE_POOL 3 , 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 indiqué sur la figure 3, cette latence peut être introduite sous la forme de registres REG 0 , REG-i, REG 2 positionnés sur les bus de données d’entrées B- I ,B 2 ,B 3 de l’ensemble PE_BLOC.

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 REG 0 ,REG I ,REG 2 de même nature sur les bus de données reliant la mémoire de stockage des coefficients des filtres aux modules de 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.

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 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 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 réalisée par un additionneur externe à l’ensemble PE_BLOC. 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_POOL 0 , PE_POOL 1 et recevant en entrée quatre matrices indexées par les index 0,1 ,2,3.

Le degré de parallélisme de l’ensemble PE_BLOC est égal à T n =N/Nb_PE_POOL, avec Nb_PE_POOL le nombre de modules de calcul de sommes partielles.

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 à T n * T c .

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 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 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 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 W m . Le nombre de noyaux de convolution est au plus égal au 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 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.

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 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 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 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 * (O x * (K y -1 )+K x -1 ) sommes partielles. La mémoire RAM est assortie d’un bus de lecture/écriture de taille égale au nombre de sommes partielles calculées parallèlement, soit Nb_PE * Nb_PE_BLOC. Les adresses des 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 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 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 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 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 fonction maximum des deux opérandes. La fonction réalisée peut aussi être du type f(x)=log(1 +exp(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 à décalage afin d’ajuster la dynamique des valeurs des neurones de sortie. 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 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<N.

Le calculateur CONV selon les modes de réalisation de l’invention peut être utilisé dans de nombreux domaines d’application, notamment dans des applications où une classification de données est utilisée. Les domaines d’application du calculateur CONV selon les modes de réalisation de l’invention comprennent par exemple des applications de surveillance vidéo avec une reconnaissance en temps réel de personne, des applications interactives de classification mises en oeuvre dans des téléphones intelligents (« smartphones ») pour des applications interactives de classification, des applications de fusion de données dans des systèmes de surveillance de domicile etc.

Le calculateur CONV selon l’invention peut être implémenté à l’aide de composants matériels et/ou logiciels. Les éléments logiciels peuvent être disponibles en tant que produit programme d’ordinateur sur un support lisible par ordinateur, support qui peut être électronique, magnétique, optique ou électromagnétique. Les éléments matériels peuvent être disponibles tous ou en partie, notamment en tant que circuits intégrés dédiés (ASIC) et/ou circuits intégrés configurables (FPGA) et/ou en tant que circuits neuronaux selon l’invention ou en tant que processeur de signal numérique DSP et/ou en tant que processeur graphique GPU, et/ou en tant que microcontrôleur et/ou en tant que processeur général par exemple. Le calculateur CONV comprend également une ou plusieurs mémoires qui peuvent être des registres, registres à décalage, mémoire RAM, mémoire ROM ou tout autre type de mémoire adapté à la mise en oeuvre de l’invention.

Bien que l’invention ait été décrite dans le cadre de données d’entrée en deux dimensions, elle peut être étendue à des calculs de convolution à N dimensions, avec N strictement supérieur à deux. Dans ce cas, les structures de données d’entrée, les noyaux de convolution et les cartes de sortie ont N dimensions au lieu de deux. En particulier si N=3, les données d’entrée peuvent être des séquences vidéos, les trois dimensions incluant les deux dimensions spatiales et le temps.