FR 3094104 A1 20200925 FR 1902855 A 20190320 Description Titre de l'invention : Procédé et dispositif de détermination de la taille mémoire globale d'une zone mémoire globale allouée aux données d'un réseau de neurones compte tenu de sa topologie [00ol] Des modes de mise en oeuvre et de réalisation de l'invention concernent les réseaux de neurones, par exemple les réseaux de neurones profonds, notamment l'apprentissage approfondi (en anglais « deep learning »), et plus particulièrement la détermination de la taille mémoire globale d'une zone mémoire globale à allouer dans une mémoire destinée à stocker des données d'entrée et des données de sortie de chaque couche d'un réseau de neurones. [0002] Les réseaux de neurones sont massivement utilisés pour résoudre divers problèmes statistiques notamment le problème de la classification de données. [0003] Après une phase d'apprentissage automatique généralement supervisée, c'est-à-dire sur une base de données de référence déjà classifiées, un réseau de neurones « apprend » et devient tout seul capable d'appliquer la même classification à des données inconnues. [0004] On peut citer par exemple les réseaux de neurones à convolution ou CNN (« Convolutional Neural Networks » en anglais) qui sont un type de réseau de neurones dans lequel le motif de connexion entre les neurones est inspiré par le cortex visuel des animaux. Ils permettent avec efficacité la reconnaissance d'objets ou de personnes dans des images ou des vidéos. [0005] Un réseau de neurones convolutif contient généralement quatre types de couche traitant successivement l'information : la couche de convolution qui traite par exemple des blocs de l'image les uns après les autres ; la couche non-linéaire qui permet d'améliorer la pertinence du résultat ; la couche de mise en commun (appelée « pooling ») qui permet de regroupe plusieurs neurones en un seul neurone ; la couche entièrement connectée (appelée « fully-connected » ou couche dense) qui relie tous les neurones d'une couche à tous les neurones de la couche précédente. [0006] Chaque couche prend en entrée des données et délivre en sortie après traitement par ladite couche, des données de sortie (« features » en anglais). [0007] La couche de convolution correspond généralement. à un produit scalaire entre les neurones de la couche précédente et les poids du réseau de neurones. Elle constitue la première couche d'un réseau de neurones convolutif. 2 [0008] Par « poids », qui est un ternie dont la signification dans le domaine des réseaux de neurones est bien connue de l'homme du métier, on entend des paramètres de neurones configurablcs pour obtenir de bonnes données de sortie. [0009] Le but de la couche de convolution est de repérer la présence d'un ensemble de données spécifiques dans les images reçues en entrée. Pour cela, on réalise un filtrage par convolution. Le principe est de faire glisser une fenêtre représentant les données à détecter, et de calculer le produit de convolution entre la fenêtre et chaque portion de l'image balayée. [0010] On obtient pour chaque produit de convolution, des données de sortie indiquant où se situent les données spécifiques sur l'image. [0011] La couche de mise en commun est souvent placée entre deux couches de convolution. Elle reçoit en entrée les données de sortie de la couche de convolution à qui on applique une opération de « pooling » qui consiste à réduire la taille des données tout en préservant leurs caractéristiques importantes. Elle permet de réduire le nombre de paramètres et de calculs dans le réseau. On améliore par conséquent l'efficacité dudit réseau. [0012] La couche entièrement connectée constitue la dernière couche d'un réseau de neurones convolutif ou non convolutif. Elle permet de classifier les données d'entrée du réseau de neurones. [0013] Les architectures typiques de réseaux de neurones empilent quelques paires de couches de convolution et couches non-linéaires puis ajoutent une couche de pooling et répètent ce schéma jusqu'à obtenir des données de sortie de taille suffisamment petite, puis terminent par deux couches entièrement connectées. [0014] Aujourd'hui, les réseaux de neurones sont de plus en plus complexes et requièrent un espace important en mémoire. [0015] Plusieurs types de mémoire vive sont compatibles avec l'utilisation d'un réseau de neurones par exemple une mémoire TCM (« Tightly-Coupled Memory » en anglais) ou une mémoire vive statique (SRAM pour l'anglais « Stade Random Access Memory ») ou une mémoire externe. [0016] Si le réseau de neurones a besoin d'une grande mémoire, le système dans lequel le réseau de neurones est implémenté pourrait combiner plusieurs types de mémoire, par exemple la mémoire TCM avec la mémoire externe, ralentissant le temps d'exécution du réseau. [0017] 11 existe donc un besoin de limiter autant que possible, voire d'optimiser, la taille mémoire nécessaire à l'exécution du réseau de neurones. [0018] L'optimisation de la taille mémoire conduit également à une optimisation de la surface du système et à une réduction de sa consommation d'énergie lors de l'exécution du réseau de neurones. 3 [0019] Une solution décrite dans la demande de brevet français déposée le 06/12/2018 sous le n°1872443, prévoit une optimisation de la taille mémoire de chaque zone mémoire élémentaire allouée à chaque couche. En d'autres termes, l'optimisation est réalisée couche par couche indépendamment de la topologie du réseau de neurones, ce qui permet de réduire la taille mémoire et par conséquent le temps d'exécution du réseau de neurones. [0020] Tl a été observé par les inventeurs que la réduction de la taille mémoire en fonction de l'architecture du réseau de neurones peut permettre de n'utiliser que la mémoire interne, diminuant ainsi le temps d'exécution du réseau de neurones de façon significative. [0021] Ainsi, selon un mode de mise en oeuvre et de réalisation, est-il proposé d'optimiser la taille mémoire nécessaire à l'exécution du réseau en fonction de la topologie dudit réseau dans le but d'avoir une taille mémoire adaptée à tout le réseau et non pas à chaque couche. [0022] Selon un aspect, il est proposé un procédé de détermination de la taille mémoire globale d'une zone mémoire globale à allouer dans une mémoire destinée à stocker des données d'entrée et des données de sortie de chaque couche d'un réseau de neurones. [0023] Le procédé comprend pour chaque couche courante du réseau postérieure à la première couche, une détermination d'une paire de zones mémoire élémentaires à partir de chaque précédente zone mémoire élémentaire associée à la couche précédente. [0024] Les deux zones mémoire élémentaires de ladite paire ont respectivement deux tailles mémoire élémentaires et sont toutes les deux destinées à stocker des données d'entrée et des données de sortie de ladite couche, les données de sortie étant stockées selon respectivement deux placements différents. [0025] La taille mémoire globale correspond à la plus petite taille mémoire élémentaire en sortie de la dernière couche. [0026] Les données d'entrée et de sortie sont stockées dans des zones mémoire élémentaires associées à chaque couche postérieure à la première couche. Ces zones mémoire élémentaires sont avantageusement dans la mémoire RAM. [0027] Pour chaque couche postérieure à la première couche, on détermine deux zones mémoire élémentaires stockant chacune les mêmes données d'entrée et de sortie. Seul le placement desdites données de sortie diffère entre les deux zones mémoire élémentaires. [0028] Ces deux placements différents conduisent à deux tailles mémoire élémentaires dif- férentes où l'une des deux sera plus avantageuse pour l'optimisation de la mémoire globale du réseau de neurones. [0029] En sortie de la dernière couche, on obtient une pluralité de zones mémoire élé- mentaircs ayant des tailles mémoire élémentaires différentes. La plus petite taille élémentaire entre ces tailles mémoire élémentaires sera sélectionnée pour représenter une taille mémoire globale d'une zone mémoire globale. [0030] Par « zone mémoire globale » on entend par exemple une zone mémoire apte à stocker les données d'entrée et de sortie de l'ensemble des zones mémoire élémentaires desquelles la zone mémoire élémentaire ayant la plus petite taille élémentaire en sortie de la dernière couche résulte. [0031] Ainsi le choix de la taille de la zone mémoire globale est effectué après avoir parcouru toutes les couches du réseau de neurones. [0032] Selon un mode de mise en oeuvre, il est possible, par exemple en fonction du type de couche, qu'au moins une des deux tailles mémoires élémentaires soit supérieure ou égale à la somme des tailles mémoire des données d'entrée et de sortie de ladite couche. [0033] En ce qui concerne la première couche, deux variantes sont possibles selon que les données initiales subissent ou non un traitement de modification. [0034] Ainsi, selon un mode de mise en oeuvre, le procédé comprend un traitement initial des données initiales d'entrée du réseau de neurones, et dans ce cas on associe à la première couche une unique zone mémoire élémentaire destinée à stocker les données initiales traitées correspondant aux données d'entrée de la deuxième couche. [0035] Par « traitement initial » on entend par exemple une mise en forme des données initiales ou un filtrage par convolution ou plus généralement toute opération modifiant lesdites données initiales. [0036] Les deux zones mémoires élémentaires apparaissent alors dans ce cas dès la deuxième couche. [0037] Selon un autre mode de mise en oeuvre, correspondant à une absence de traitement initial sur les données initiales, on associe à la première couche, une paire de zones mémoires élémentaires déterminées à partir d'une zone mémoire ou mémoire tampon contenant les données initiales d'entrée du réseau de neurones. [0038] Les deux zones mémoires élémentaires de la première couche sont toutes les deux destinées à stocker des données d'entrée et des données de sortie de ladite première couche, les données de sortie de la première couche étant stockées selon respectivement deux placements différents. [0039] Ainsi, dans ce cas, puisque la première couche comprend deux zones mémoires élé- mentaires, on détermine dans la deuxième couche à partir de ces deux zones mémoires élémentaires de la première couche, une paire de zones mémoire élémentaires relative à chaque zone mémoire élémentaire de la première couche. [0040] Selon un mode de mise en oeuvre, les données d'entrée et de sortie d'au moins une des deux zones mémoire élémentaires de chaque paire peuvent être juxtaposées. [0041] La juxtaposition des données d'entrée et de sortie d'une des deux zones mémoire élé- mentaires permet d'avoir une meilleure occupation mémoire. [0042] Selon un mode de mise en oeuvre, pour chaque couche courante postérieure à la première couche et incluant éventuellement la première couche (ceci est également vrai pour la première couche lorsqu'elle est déjà associée également à deux zones mémoires élémentaires), la détermination des deux tailles mémoire élémentaires des deux zones mémoire élémentaires de chaque paire et le placement des données de sortie dans ces deux zones mémoire élémentaires dépendent au moins du type de la couche courante. [0043] En d'autres termes, en fonction du type de la couche par exemple une couche de convolution, dense, non-linéaire ou une couche de mise en commun, et/ou de la taille mémoire des données d'entrée et de sortie, et/ou de l'emplacement des données d'entrée, deux placements sont choisis. [0044] Les deux zones mémoire élémentaires peuvent comporter avantageusement, en fonction par exemple du type de la couche, une zone mémoire additionnelle permettant d'éviter un écrasement des données utiles dans chaque zone mémoire élémentaire. [0045] Selon un mode de mise en oeuvre, pour chaque couche courante postérieure à la première couche et incluant éventuellement la première couche (ceci est également vrai pour la première couche lorsqu'elle est déjà associée également à deux zones mémoires élémentaires), la détermination des deux tailles mémoire élémentaires des deux zones mémoire élémentaires de chaque paire et le placement des données de sortie dans ces deux zones mémoire élémentaires dépendent de la fonction associée à la couche courante. [0046] Par exemple, on peut citer comme fonction une conversion des données d'entrée ayant une taille de 16 bits vers une taille 8 bits ou 8 bits à 16 bits. [0047] Les deux zones mémoire élémentaires peuvent comporter également dans ce cas en fonction du type de la fonction associée à la couche courante, une zone mémoire additionnelle permettant d'éviter un écrasement des données utiles dans chaque zone mémoire élémentaire. [0048] Selon un mode de mise en oeuvre, le procédé comprend en outre, après la déter- mination de la plus petite taille élémentaire en sortie de la dernière couche, un parcours des couches dudit réseau de la dernière couche à la première couche et dans lequel on extrait pour chaque couche, à partir de l'emplacement de la zone mémoire globale déterminée, l'adresse relative de chaque zone mémoire élémentaire de laquelle la zone mémoire globale résulte. [0049] Le parcours des couches de la dernière à la première couche peut être réalisé par exemple par l'algorithme Viterbi connu de l'homme du métier. [0050] Bien entendu, le parcours desdites couches peut être réalisé par tout algorithme qui a 6 pour but de trouver la séquence de zones mémoire élémentaires la plus probable ayant produit la zone mémoire globale. [0051] Lors de ce parcours, l'algorithme extrait l'adresse relative de chaque zone élé- mentaire sélectionnée. [0052] On entend par « adresse relative », le décalage en mémoire par rapport à une adresse fixe relative à l'emplacement des données initiales d'entrée du réseau de neurones. [0053] Selon un mode de mise en oeuvre, pour chaque couche, on détermine l'adresse absolue de chaque zone mémoire élémentaire à partir de chaque adresse relative extraite. [0054] Par « adresse absolue », on entend l'adresse de l'emplacement de la zone mémoire élémentaire sélectionnée dans la zone mémoire globale destinée à stocker les données d'entrée et de sortie du réseau de neurones. [0055] Selon un mode de mise en oeuvre, pour chaque couche courante postérieure à la première couche, les N zones mémoire élémentaires associées à ladite couche courante ayant les tailles mémoire les plus petites sont conservées. [0056] Sans cette sélection, on se retrouve avec un nombre important de zones mémoire élé- mentaires qui peut être difficilement géré. [0057] Restreindre le nombre de zones mémoire élémentaires pour chaque couche à N zones mémoire élémentaires permet non seulement de faciliter la gestion de celles-ci mais aussi de ne conserver que les zones mémoire élémentaires conduisant à une bonne optimisation mémoire du réseau de neurones. [0058] Selon un mode de mise en oeuvre, N est paramétrable. [0059] N est par exemple paramétrable en fonction de la complexité du réseau de neurones et du dispositif l'exécutant. [0060] On peut également lui donner une valeur par défaut par exemple 16. [0061] Selon un autre aspect, il est proposé un dispositif comprenant une entrée destinée à recevoir des paramètres définissant les différentes couches successives d'un réseau de neurones, et des moyens de traitement couplés à ladite entrée, et destinés à déterminer la taille mémoire globale d'une zone mémoire globale à allouer dans une mémoire destinée à stocker des données d'entrée et des données de sortie de chaque couche du réseau de neurones. [0062] Les moyens de traitement sont configurés pour déterminer, pour chaque couche pos- térieure à la première couche, une paire de zones mémoire élémentaires à partir de chaque précédente zone mémoire élémentaire associée à la couche précédente, ayant respectivement une première et une seconde taille mémoire élémentaire et étant chacune destinée à stocker des données d'entrée et des données de sortie de ladite couche, les données de sortie étant stockées selon deux placements différents, la taille mémoire globale correspondant à la plus petite taille mémoire élémentaire en sortie de 7 la dernière couche du réseau de neurones. [0063] Selon un mode de réalisation, au moins une des deux tailles élémentaires est su- périeure ou égale à la somme de la taille mémoire des données d'entrée et de sortie [0064] Selon un mode de réalisation, les moyens de traitement sont configurés pour effectuer un traitement initial des données initiales d'entrée du réseau de neurones, une unique zone mémoire élémentaire étant associée à la première couche comprenant les données initiales traitées correspondant aux données d'entrée de la deuxième couche. [0065] Selon un mode de réalisation, les moyens de traitement sont configurés pour associer à la première couche, une paire de zones mémoires élémentaires déterminées à partir d'une zone mémoire ou mémoire tampon contenant les données initiales d'entrée du réseau de neurones. [0066] Selon un mode de réalisation, les moyens de traitement sont configurés pour juxtaposer les données d'entrée et les données de sortie d'au moins une des deux zones mémoire élémentaires. [0067] Selon un mode de réalisation, pour chaque couche postérieure à la première couche et incluant éventuellement la première couche, les moyens de traitement sont configurés pour déterminer le placement des données de sortie des deux zones mémoire élémentaires en fonction au moins du type de la couche. [0068] Selon un mode de réalisation, pour chaque couche postérieure à la première couche et incluant éventuellement la première couche, les moyens de traitement sont configurés pour déterminer le placement des données de sortie des deux zones mémoire élémentaires selon la fonction associée à la couche. [0069] Selon un mode de réalisation, après avoir déterminé la plus petite taille élémentaire en sortie de la dernière couche, les moyens de traitement sont configurés pour parcourir les couches dudit réseau de neurones de la dernière couche à la première couche, et sont configurés pour extraire pour chaque couche, à partir de l'emplacement de la zone mémoire globale déterminée, l'adresse relative de chaque zone mémoire élémentaire de laquelle la zone mémoire globale résulte. [0070] Selon un mode de réalisation, les moyens de traitement sont configurés pour dé- terminer pour chaque couche l'adresse absolue de chaque zone mémoire élémentaire à partir de chaque adresse relative extraite. [0071] Selon un mode de réalisation, les moyens de traitement sont configurés pour conserver, pour chaque couche postérieure à la première couche, les N zones mémoire élémentaires associée à ladite couche ayant les tailles mémoire les plus petites. [0072] Selon un mode de réalisation, N est paramétrable. [0073] Selon un autre aspect, il est également proposé un microcontrôleur comportant ledit dispositif tel que défini ci-avant. [0074] D'autres avantages et caractéristiques de l'invention apparaîtront à la lecture de la 8 description détaillée de modes de mise en oeuvre et de réalisation, nullement limitatifs, et des dessins annexés sur lesquels : [0075] [fig.1] illustre schématiquement un mode de réalisation de l'invention, [0076] [fig.2] illustre schématiquement un mode de mise en oeuvre de l'invention, [0077] [fig.3] illustre schématiquement un mode de mise en oeuvre de l'invention, [0078] [fig.4] illustre schématiquement un mode de mise en oeuvre de l'invention, [0079] [fig.5A] illustre schématiquement un mode de mise en oeuvre de l'invention, [0080] [fig.5B] illustre schématiquement un mode de mise en oeuvre de l'invention, [0081] [fig.5C] illustre schématiquement un mode de mise en oeuvre de l'invention, [0082] [fig.6] illustre schématiquement un mode de mise en oeuvre de l'invention, [0083] [fig.7] illustre schématiquement un mode de mise en oeuvre de l'invention. [0084] Sur la figure 1, la référence DIS désigne un dispositif par exemple un micro- contrôleur, un générateur de code ou tout autre objet pouvant contenir une architecture logicielle embarquée ou matérielle. [0085] Le dispositif DIS peut également être un module intégré à un ordinateur. [0086] Ledit dispositif comprend une mémoire volatile MV par exemple une mémoire RAM (pour « Random Access Memory » en anglais). Ici, la mémoire volatile MV comprend une première mémoire RAMI et une deuxième mémoire RAM2. [0087] Bien entendu, ladite mémoire volatile MV peut comprendre plus de deux mémoires. [0088] Le dispositif DIS comprend également une mémoire non-volatile MNV comprenant une entrée EN destinée à recevoir les différents paramètres définissant l'architecture d'un réseau de neurones RN, c'est-à-dire la configuration de ses couches et ses poids. [0089] La mémoire non-volatile MNV est également configurée pour recevoir une suite d'instructions définissant un algorithme, avantageusement un algorithme de Viterbi dont le fonctionnement sera détaillé ci-après. [0090] La mémoire volatile MV est configurée pour stocker dans une des deux mémoires RAMI et RAM2, les données d'entrée et de sortie de la couche courante destinées à occuper une zone mémoire élémentaire ZA. [0091] Le dispositif DIS comprend un module MO configuré pour réaliser des actions dé- 9 terminées. [0092] Le module MO comprend des moyens de traitement OP configurés pour déterminer la taille mémoire globale d'une zone mémoire globale à allouer comprenant l'ensemble des zones mémoire élémentaires ZA sélectionnées en fonction de la plus petite taille mémoire élémentaire ZA en sortie de la dernière couche du réseau de neurones RN, dans la mémoire volatile MV. [0093] Pour cela, les moyens de traitement OP sont couplés aux deux mémoires RAMI et RAM2, et sont configurés pour déterminer, pour chaque couche du réseau de neurones postérieure à la première couche une paire de zones mémoire élémentaires ZA1 et ZA2 ayant respectivement une première et une seconde taille mémoire élémentaire. [0094] Les deux zones mémoire élémentaires sont destinées à stocker des données d'entrée et des données de sortie de ladite couche selon deux placements différents. [0095] Les moyens de traitement OP comprennent une unité de calcul UC, des moyens de commande MC et des moyens d'allocation MA. [0096] Les moyens de traitement OP sont couplés à la mémoire non-volatile MNV par l'entrée EN pour permettre à l'unité de calcul UC de récupérer les paramètres relatifs aux couches et aux opérations du réseau de neurones RN. [0097] Ladite unité de calcul UC comprend par exemple un microprocesseur configure pour réaliser les calculs nécessaires à la détermination des deux tailles mémoire élémentaires des deux zones mémoire élémentaires ZA1 et ZA2. [0098] L'unité de calcul UC est configurée pour envoyer les résultats desdits calculs aux moyens de commande MC. [0099] Les moyens de commande MC sont configurés pour choisir [0100] - en fonction des résultats de calcul, pour chaque couche postérieure à la première couche, les deux placements des données de sortie pour chaque zone mémoire élémentaire ZAI et ZA2 et [0101] - la taille mémoire globale de la zone mémoire globale à allouer comprenant l'ensemble des zones mémoire élémentaires ZA sélectionnées en fonction de la plus petite taille mémoire élémentaire ZA en sortie de la dernière couche du réseau de neurones RN. [0102] Lesdits moyens de commande MC sont couplés aux moyens d'allocation MA qui sont configurés pour allouer ladite zone mémoire globale comprenant l'ensemble des zones mémoire élémentaires ZA ainsi sélectionnées après autorisation des moyens de commande MC. [0103] Pour faire cette sélection, l'unité de calcul UC est configurée pour exécuter ledit al- gorithme dont les instructions sont stockées dans la mémoire non-volatile MV. [0104] Les moyens de commande MC et d'allocation MA peuvent être par exemple réalisés par des modules logiciels au sein du microprocesseur et/ou par des circuits logiques spécifiques. [0105] La figure 2 représente un diagramme de flux des différentes étapes conduisant à la détermination et à l'allocation de la taille mémoire globale de la zone mémoire globale comprenant l'ensemble des zones mémoire élémentaires sélectionnées ZA. [0106] L'étape SO comprend la réception de l'architecture du réseau de neurones RN par l'entrée RN pour être stockée dans la mémoire non-volatile MNV. [0107] Les moyens de commande MC sont configurés pour extraire ladite architecture, c'est-à-dire la configuration des couches, des opérations entre les couches et des poids du réseau de neurones RN. [0108] Les moyens de commande MC sont ensuite configurés pour envoyer la configuration de chaque couche postérieure à la première couche à l'unité de calcul UC configurée pour calculer une valeur MG associée au type de ladite couche et/ou à l'opération réalisée par la couche dans l'étape SI. [0109] Le calcul sera détaillé dans la figure 3. [0110] La valeur MG permet de déterminer les placements possibles des données de sortie M2 de la couche pour les zones mémoire élémentaires ZA1 et ZA2 associées à ladite couche. Le placement des données d'entrée M1 est initialement déterminé. [0111] La valeur MG calculée représente également une taille mémoire additionnelle de la zone mémoire élémentaire ZA. [0112] L'étape S1 est répétée pour toutes les couches postérieures à la première couche du réseau de neurones RN. [0113] Les moyens de commande MC choisissent ensuite dans l'étape 52 les deux placements pour chaque zone mémoire élémentaire ZA1, ZA2. L'étape S2 sera détaillée dans la figure 4. [0114] La détermination des deux placements est également répétée pour toutes les couches postérieures à la première couche du réseau de neurones RN une fois l'étape SI terminée. [0115] Les moyens de commande MC sélectionnent ensuite à l'étape S3 la taille mémoire globale correspondant à la plus petite taille mémoire élémentaire ZA en sortie de la dernière couche du réseau de neurones RN. [0116] A L'étape S4, les moyens de commande MC autorisent l'unité de calcul UC exécuter ledit algorithme par exemple l'algorithme Viterbi pour parcourir les couches dudit réseau de neurones RN de la dernière couche à la première couche et extraire pour chaque couche à partir dudit emplacement de la zone mémoire globale déterminée, l'adresse relative de chaque zone mémoire élémentaire ZA de laquelle la zone mémoire globale résulte. [0117] On entend par « adresse relative », le décalage en mémoire par rapport à une adresse fixe relative à l'emplacement des données initiales d'entrée du réseau de neurones RN. 11 [0118] Bien entendu, le parcours desdites couches peut être réalisé par tout algorithme qui a pour but de trouver la séquence de zones mémoire élémentaires la plus probable ayant produit la zone mémoire globale. [0119] Dans l'étape 55, les moyens de commande MC autorisent les moyens d'allocation MA à allouer ladite zone mémoire globale ayant une taille égale à la plus petite taille mémoire élémentaire ZA en sortie de la dernière couche du réseau de neurones. [0120] Une fois le bloc de la zone mémoire globale alloué, l'unité de calcul UC est configure° pour calculer les adresses absolues de chaque zone mémoire élémentaire ZA sélectionnée dans l'étape S6. [0121] Par « adresse absolue », on entend l'adresse de l'emplacement de la zone mémoire élémentaire sélectionnée dans la zone mémoire globale destinée à stocker les données d'entrée et de sortie du réseau de neurones. [0122] Ledit calcul est détaillé dans la figure 7. [0123] La figure 3 illustre un diagramme de flux détaillé de l'étape SI. [0124] Dans l'étape S11, la configuration de chaque couche i postérieure à la première couche du réseau de neurones RN est envoyée à l'unité de calcul UC. [0125] Si ladite couche i est dans une couche dense (S15), la valeur MG sera égale à -1 dans S19. [0126] Si la couche i est une couche de convolution (S14), la valeur MG est calculée. Elle peut être négative, positive ou égale à 0 dans S18. La valeur MG est par exemple calculée selon la formule ci-dessous : [0127] MG = (CEIL(CONVI_PADX+1. CONV1_STRIDEX) + CONV1_OUT_DIM_X x CEIL(CONVI_PADY+1, CONV1_STRIDEY)) x CONV1_OUT_CH), dans laquelle : [0128] CUL est une fonction qui permet d'arrondir un nombre jusqu'au nombre entier supérieur. [0129] CONV_PADX est une variable qui représente le nombre de zéros ajoutés horizon- talement en parlant de la gauche. [0130] CONVI_STRIDEX est une variable qui représente le pas de déplacement horizontal du noyau de convolution. [0131] CONVI_OUT_DIM_X est une variable qui représente la taille des (Tonnées de sortie pour la dimension horizontale. [0132] CONVI_STRIDEY représente le pas de déplacement vertical du noyau de convolution. [0133] CONV1_OUT_CH représente le nombre de canaux de sortie. [0134] Si la couche i est une couche non-linéaire (S13), la valeur MG est égale à 0 dans Si? et si la couche est une couche de mise en commun (S12), la valeur MG est également égale à 0 dans S16. [0135] La couche i peut également être une couche « Soft Max » connue de l'homme du 12 métier. Dans ce cas, la valeur MG est également égale à 0. [0136] Si la couche i permet par exemple de réaliser une opération de conversion (S20) des données d'entrée, la valeur MG est également calculée dans S21 en fonction du type de conversion. [0137] Par exemple, si c'est une conversion 16 bits à 8 bits, la valeur MG est égale à 0. Si c'est une conversion 8 bits à 16 bits, la valeur MG est égale à la taille des données d'entrée. [0138] Si c'est une conversion 16 bits à 32 bits, la valeur MG est égale à la taille des données d'entrée. [0139] Si c'est une conversion 8 bits à 32 bits, la valeur MG est égale à 3 fois la taille des données d'entrée et si c'est une conversion 32 bits à 8 ou 16 bits, la valeur MG est égale à 0. [0140] Bien sûr, la valeur MG est également déterminée selon d'autres types d'opération tant qu'elles sont détectables par l'unité de calcul UC. [0141] Les moyens de commande MC vérifient lors de l'étape S111, s'il y a encore des couches du réseau de neurones RN à traiter. [0142] Si oui, les moyens de commande MC autorisent, dans l'étape S112, l'unité de calcul UC à extraire la configuration d'une des couches restantes. Si non, on passe à l'étape 52. [0143] La figure 4 illustre un diagramme de flux détaillé de l'étape S2. [0144] Pour chaque couche i postérieure à la première couche du réseau de neurones RN, les moyens de commande MC récupèrent la valeur MG calculée par l'unité de calcul UC l'étape S2000. [0145] A l'étape S2001, les moyens de commande MC récupèrent les données relatives à la précédente zone mémoire élémentaire ZA de la précédente couche i-1 c'est-à-dire les emplacements des données de sortie qui représentent les données d'entrée de la couche 1. [0146] S'il y a au moins deux précédentes zones mémoire élémentaires ZA, les moyens de commande MC commencent par récupérer les données relatives à la zone mémoire élémentaire ZA qui a la plus petite taille et procèdent à l'exécution d'instructions qui seront décrites ci-après. [0147] Ces instructions sont répétées pour toutes les zones mémoire élémentaires de la couche i-1 et cela par ordre croissant. [0148] A l'étape S2002, les moyens de commande MC vérifient si la valeur MG est su- périeure ou égale à 0. Si non, les moyens de commande MC autorisent à l'étape S2003 l'unité de calcul UC à effectuer un premier calcul d'une première valeur mémoire NTP1 représentative de l'adresse minimale de la zone mémoire élémentaire ZA1 et selon la formule suivante : 13 [0149] NTP1 = MIN(TP, ZA TP - Act(i)) [0150] Dans laquelle : [0151] MIN représente l'opération permettant de retenir la plus petite valeur entre les deux arguments TP, ZA TP - Act(i), [0152] TP représente l'adresse minimale de la zone mémoire élémentaire précédente ZA de la couche i-1, [0153] ZA TP représente l'adresse minimale des données d'entrée de la couche i et ; [0154] Act(i) représente la taille des données de sortie de la couche i. [0155] Les moyens de commande MC autorisent également l'unité de calcul UC à effectuer un deuxième calcul d'une deuxième valeur mémoire NBT1 représentative de l'adresse maximale de la zone mémoire élémentaire ZA2 et selon la formule suivante : [0156] NBT1 = MAX(BT, ZA BT-FAct(i)) [0157] Dans laquelle : [0158] MAX représente l'opération permettant de retenir la plus grande valeur entre les deux arguments BT et ZA BT+Act(i-1), [0159] BT est l'adresse maximale de la zone mémoire élémentaire précédente ZA de la couche i-1, [0160] ZA_BT représente l'adresse maximale des données d'entrée de la couche i et ; [0161] Act(i) représente la taille des données de sortie de la couche i. [0162] Lesdites premières et deuxièmes valeurs mémoire NTP1, NBT1 permettent de dé- terminer les deux placements des données de sortie des deux zones mémoire ZA1 et ZA2 associées à la couche i. [0163] Si la valeur MG est supérieure ou égale à 0, les moyens de commande MC vérifient à l'étape S2004 si la taille mémoire des données de sortie Act(i-1) de la couche i-1 est supérieure ou égale à la taille des données de sortie Act(i) de la couche i. [0164] Si la taille mémoire des données de sortie Act(i) de la couche i est strictement su- périeure à la taille mémoire des données de sortie Act(i-1) de la couche i-1, on passe à l'étape S2005. Si non, on passe à l'étape S2006. [0165] Dans l'étape S2005, les moyens de commande MC autorisent l'unité de calcul UC effectuer un troisième calcul d'une troisième valeur mémoire NTP2 représentative de l'adresse minimale de la zone mémoire élémentaire ZAI et selon la formule suivante : [0166] NTP2 = MIN(TP, ZA_BT - Act(i) - MG(i)) [0167] Dans laquelle : [0168] MIN représente l'opération permettant de retenir la plus petite valeur entre les deux arguments TP, ZA_BT- Act(i) - MG(i). [0169] TP représente l'adresse minimale de la zone mémoire élémentaire précédente ZA de la couche i-1, [0170] ZA_BT représente l'adresse maximale des données d'entrée de la couche i, 14 [0171] Act(i) représente la taille des données de sortie de la couche iet; [0172] MG(I) représente la taille additionnelle correspondant à la valeur MG. [0173] L'unité de calcul UC réalise également ici ledit deuxième calcul de la deuxième valeur NBT1 selon la même formule. [0174] Lesdites deuxièmes et troisièmes valeurs mémoire NBT1, NTP2 permettent de dé- terminer les deux placements des données de sortie des deux zones mémoire ZAI et ZA2 associées à la couche i. [0175] Dans l'étape S2006, les moyens de commande MC autorisent l'unité de calcul UC à effectuer un quatrième calcul d'une quatrième valeur mémoire NTP3 représentative de l'adresse minimale de la zone mémoire élémentaire ZA1 et selon la formule suivante : [0176] NTP3 = MIN(TP, ZA TP - Act(i)) [0177] Dans laquelle : [0178] MIN représente l'opération permettant de retenir la plus petite valeur entre les deux arguments TP, ZA TP- Act(i). [0179] TP représente l'adresse minimale de la zone mémoire élémentaire précédente ZA de la couche i-1, [0180] ZA TP représente l'adresse minimale des données d'entrée de la couche i et ; [0181] Act(i) représente la taille des données de sortie de la couche i. [0182] L'unité de calcul UC réalise également dans cette étape ledit deuxième calcul de la deuxième valeur NBT1 selon la même formule. [0183] Lesdites deuxièmes et quatrièmes valeurs mémoire NBT1. NTP3 permettent de dé- terminer les deux placements des données de sortie des deux zones mémoire ZAI et ZA2 associées à ladite couche L [0184] A partir de l'une des étapes S2003, S2005 ou S2006, les moyens de commande MC passent ensuite à l'étape S2007 dans laquelle, en fonction des résultats desdits calculs, les moyens de commande MC déterminent les deux placements ZAI et ZA2. [0185] Une fois cela fait, les moyens de commande MC vérifient à l'étape S2008 s'il reste dans ladite couche i-1, une autre zone mémoire élémentaire ZA à traiter. [0186] Si oui, on revient à l'étape S2001. Si non, les moyens de commande MC incrémente la valeur i à l'étape S2009 et vérifient à l'étape S2010 s'il y a des couches restantes dans le réseau de neurones RN. [0187] Si oui, on passe à l'étape S2000 pour récupérer la valeur MG de la nouvelle couche i. Si non, on passe à l'étape S3 pour déterminer la plus petite taille élémentaire en sortie de la dernière couche. [0188] Les figures 5A à 5C représentent des exemples des placements des données de sortie des deux zones mémoire élémentaires ZAI et ZA2. [0189] Par exemple, dans la figure 5A, la valeur MG est supérieure ou égale à 0 et la taille des données de sortie Act(i) de la couche i est inférieure à la taille des données de sortie Act(i-1) de la couche précédente i-1. [0190] Les moyens de commande MC déterminent un premier et un deuxième placement des données de sortie des deux zones mémoire élémentaires ZA1 et ZA2 comme illustré. [0191] La taille des données de sortie de la couche i ne dépasse pas la limite supérieure prévue par la quatrième valeur mémoire NTP3 dans la zone mémoire élémentaire ZA1. [0192] La taille des données de sortie de la couche i ne dépasse pas non plus la limite in- férieure prévue par la première valeur mémoire NBT1 dans la zone mémoire élémentaire ZA2. [0193] Par conséquent, les données d'entrée et de sortie de la zone mémoire élémentaire ZA2 sont juxtaposées ce qui permet d'avoir une meilleure occupation mémoire. La taille de zone mémoire élémentaire ZA2 est ici supérieure à la somme des tailles des données d'entrée et des données de sortie. [0194] Dans la figure 5B, la valeur MG est supérieure ou égale à 0 et la taille des données de sortie Act(i) de la couche i est supérieure à la taille des données de sortie Act(i-1) de la couche précédente i-1, les moyens de commande MC déterminent un premier et un deuxième placement des données de sortie des deux zones mémoire élémentaires ZA1 et ZA2 comme illustré. [0195] La taille des données de sortie de la couche i ne dépasse pas la limite supérieure prévue par la quatrième valeur mémoire NTP2 dans la zone mémoire élémentaire ZA1. [0196] La taille des données de sortie de la couche i ne dépasse pas non plus la limite in- férieure prévue par la première valeur mémoire NBT1 dans la zone mémoire élémentaire ZA2. [0197] Par conséquent, les données d'entrée et de sortie de la zone mémoire élémentaire ZA2 sont ici juxtaposées ce qui permet d'avoir une meilleure occupation mémoire. La taille de la zone mémoire élémentaire ZA2 est ici supérieure à la somme de la taille des données d'entrée et des données de sortie. [0198] Dans la figure 5C, la valeur MG est strictement inférieure à O. [0199] Les données de sortie de la couche i ne dépassent pas la limite supérieure prévue par la première valeur mémoire NTP1 dans la zone mémoire élémentaire ZA1. [0200] Les données de sortie de la couche i ne dépassent pas non plus la limite inférieure prévue par la première valeur mémoire NBT1 dans la zone mémoire élémentaire ZA2. [0201] Par conséquent, les données d'entrée et de sortie de la zone mémoire élémentaire ZA2 sont ici juxtaposées ce qui permet d'avoir une meilleure occupation mémoire. La taille de la zone mémoire élémentaire ZA2 est ici supérieure à la somme de la taille des données d'entrée et des données de sortie. [0202] La figure 6 représente une vue d'ensemble des étapes S2 à S4 pour les couches allant de i à i + 4, avec i = 1. 16 [0203] La couche i qui est ici la première couche du réseau comprend une zone mémoire élémentaire ZA comportant des données initiales d'entrée du réseau de neurones traitées et correspondant aux données d'entrée de la couche i + 1. [0204] A la couche i + 1, les moyens de commande MC déterminent les deux placements des données de sortie des deux zones mémoire élémentaires ZA1 et ZA2 associées à ladite couche i+ 1. [0205] La taille de la zone élémentaire ZA2 est ici supérieure à la somme des tailles mémoire des données d'entrée et de sortie de ladite couche i + 1. On peut voir aussi que les données d'entrée et les données de sortie sont juxtaposées. [0206] A la couche i + 2, les moyens de commande MC déterminent deux nouvelles zones mémoire élémentaires ZA1 et ZA2 à partir de la zone mémoire élémentaire ZA1 de la couche i + 1 et déterminent également deux nouvelles zones mémoire élémentaires ZA1 et ZA2 à partir de la zone mémoire élémentaire ZA2 de la couche i + 1. [0207] On a donc 4 zones mémoire élémentaires dans la couche i + 2. [0208] On peut également voir qu'au niveau des deux zones mémoire ZA2 de la couche i + 2, les données d'entrée et de sortie sont juxtaposées et que la taille de chaque zone mémoire élémentaire ZA2 est supérieure ou égale à la somme des tailles mémoire des données d'entrée et de sortie de la couche i + 2. [0209] Dans certains cas, on peut également avoir une zone mémoire élémentaire, associée à une couche du réseau de neurones, dont la taille est égale à la somme des tailles mémoire des données d'entrée et de sortie de la couche. [0210] Dans le but de ne pas se retrouver avec un nombre important de zones mémoire élé- mentaires qui ne peut pas être géré, restreindre le nombre de zones mémoire élémentaires pour chaque couche à N zones mémoire élémentaires permet non seulement de faciliter la gestion de celles-ci mais aussi de ne conserver que les zones mémoire élémentaires conduisant à une bonne optimisation mémoire du réseau de neurones. [0211] On peut par exemple conserver N zones mémoire élémentaires associées à la couche i + I. [0212] N étant paramétrable, on choisit de conserver ici les trois plus petites zones mémoire élémentaires ZA. [0213] Une autre alternative consiste à générer N zones mémoires élémentaires associées à ladite couche. [0214] A la couche i + 3, les moyens de commande MC déterminent deux nouvelles zones mémoire élémentaires ZA1 et ZA2 à partir de chaque zone mémoire élémentaire conservée dans la couche i + 2. [0215] On peut également ici conserver N zones mémoire élémentaires ZA par exemple 3. [0216] Ainsi, on a trois zones mémoire élémentaires conservées au lieu de 6. [0217] La couche i + 4 représente ici la dernière couche du réseau de neurones RN. 17 [0218] Après avoir déterminé les zones mémoire élémentaires ZA1 et ZA2 par rapport à chaque zone élémentaire ZA associée à la couche i-i-3, on peut également conserver N zones mémoire élémentaires ici 3. [0219] On a donc trois zones mémoire élémentaires conservées au lieu de 6. [0220] A partir des zones mémoire élémentaires conservées, les moyens de commande MC sélectionnent la zone mémoire élémentaire ayant la plus petite taille mémoire élémentaire ici ZG. [0221] Cette zone mémoire élémentaire ZG a une taille mémoire élémentaire minimale qui correspond à la taille mémoire globale à allouer pour le réseau de neurones. [0222] Les moyens de commande MC autorisent ensuite l'unité de calcul UC à exécuter ledit algorithme par exemple l'algorithme Vitcrbi pour parcourir les couches dudit réseau de neurones RN de la dernière couche i + 4 à la première couche i et extraire pour chaque couche à partir dudit emplacement de la zone mémoire globale ZG déterminée, l'adresse relative de chaque zone mémoire élémentaire ZA de laquelle la zone mémoire globale résulte. [0223] Bien entendu, si ladite zone mémoire élémentaire ZA comprend des données initiales d'entrée du réseau de neurones non traitées cela équivaut à considérer la couche i+1 comme la première couche du réseau de neurones RN. [0224] Dans cc cas les données initiales non traitées sont stockées dans une unique zone mémoire ou mémoire tampon et les deux zones mémoires élémentaires de la première couche, dans ce cas la couche 2, sont déterminées comme indiqué ci-avant. Notamment s'applique à cette première couche tout ce qui a été décrit ci-avant en référence aux figures 3, 4, 5A et 5B pour une couche courante i postérieure à la première couche [0225] La figure 7 illustre un diagramme de flux détaillant l'étape S6 comprenant le calcul des adresses absolues de chaque zone mémoire élémentaire ZA sélectionnée. [0226] Pour cela, les moyens de commande MC déterminent l'adresse relative minimale entre les adresses relatives de toutes les zones mémoire élémentaires ZA sélectionnées dans l'étape S61 puis soustraient ladite valeur minimale aux autres adresses relatives des autres zones mémoire élémentaires ZA sélectionnées dans l'étape S62 pour générer des adresses relatives positives. [0227] L'unité de calcul UC génère ensuite dans l'étape S63, pour chaque couche, une adresse absolue en prenant en compte l'adresse relative positive et l'adresse absolue de la zone mémoire globale. [0228] Par ailleurs, l'invention n'est pas limitée à ces modes de réalisation et de mise en oeuvre mais en embrasse toutes les variantes. A titre d'exemple, lors de l'entraînement du réseau de neurones, on peut déterminer des placements de gradients d'erreur ayant une taille sensiblement égale à la taille des données de sortie associées à chaque 18 couche. 19 [Revendication 1] [Revendication 2] [Revendication 3] [Revendication 4] [Revendication 5] [Revendication 6]