FR 3089664 A1 20200612 FR 1872330 A 20181205 Description Titre de l'invention : Procédé et dispositif pour réduire la charge de calcul d'un microprocesseur destiné à traiter des données par un réseau de neurones à convolution [0001] Des modes de mise en oeuvre et de réalisation de l'invention concernent l'apprentissage approfondi (en anglais « deep learning »), notamment les réseaux de neurones profonds, et plus particulièrement la réduction de la charge de calcul d'une unité de calcul, par exemple un microprocesseur, traitant un ensemble initial de données par un réseau de neurones à convolution. [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] Les réseaux de neurones à convolution, ou CNN (« Convolutional Neural Networks en anglais) 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 convolutionnel contient généralement quatre types de couches traitant successivement l'information : [0006] - la couche de convolution qui traite par exemple des blocs de l'image les uns après les autres ; [0007] - la couche non-linéaire qui permet d'améliorer la pertinence du résultat ; [0008] - la couche de mise en commun (appelée « pooling ») qui permet de regrouper plusieurs neurones en un seul neurone ; [0009] - 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. [0010] 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). [0011] La couche de convolution correspond généralement. à un ensemble de produits scalaires entre les sorties de la couche précédente et les poids de ladite couche. Elle constitue généralement la première couche d'un réseau de neurones convolutionnel. [0012] Par « poids », qui est un terme 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 configurables pour obtenir de bonnes données de sortie. 2 [0013] 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. [0014] La fenêtre de filtrage est connue par l'homme du métier sous le terme de « noyau de convolution » et sous forme de matrice par exemple un noyau de 3x3 poids. [0015] On obtient pour chaque produit de convolution, des données de sortie indiquant où se situent les données spécifiques sur l'image. [0016] 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 «pool ing» 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. [0017] La forme la plus courante est une couche de mise en commun avec des fenêtres de filtrage sous forme de matrice, par exemple une matrice 2x2. [0018] 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. [0019] 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 mise en commun et répètent ce schéma jusqu'à obtenir des données de sortie de taille suffisamment petite, puis terminent par une ou plusieurs couches entièrement connectées. [0020] Aujourd'hui, les réseaux de neurones sont de plus en plus complexes et requièrent une grande puissance de calcul. [0021] L'instruction par seconde (« Instructions Per Second » en anglais) est une unité de mesure de la performance d'un système par exemple un microprocesseur. [0022] Plus la configuration du réseau de neurones est complexe, plus le nombre d'instructions exécutées par le système par seconde diminue. [0023] Il existe donc un besoin de réduire la charge de calcul par exemple d'un micro- processeur traitant les données reçues ou créées par un réseau de neurones à convolution. [0024] Selon un aspect, il est proposé un procédé de réduction de la charge de calcul d'une unité de calcul, par exemple un microprocesseur, traitant un ensemble initial de données par un réseau de neurones à convolution, ledit ensemble initial étant stocké dans une mémoire initiale selon une première et une deuxième directions orthogonales, ledit réseau comprenant au moins une couche de convolution suivie par au moins une 3 couche de mise en commun, ledit traitement comprenant un premier filtrage de l'ensemble initial de données par ladite au moins une couche de convolution en utilisant une première fenêtre glissante selon la première direction, chaque glissement de ladite première fenêtre produisant un premier ensemble de données, et un deuxième filtrage des premiers ensembles de données par ladite au moins une couche de mise en commun en utilisant une deuxième fenêtre glissante selon la deuxième direction. [0025] La combinaison de ces deux filtrages contribue à la réduction de la charge de calcul de l'unité de calcul. [0026] « Par mémoire initiale » on entend par exemple une mémoire volatile par exemple une mémoire RAM (pour « Random Access Memory »). [0027] La première fenêtre de filtrage est ici une fenêtre réalisant un filtrage par convolution. Ladite première fenêtre de filtrage est caractéristique de la couche de convolution. [0028] La deuxième fenêtre de filtrage permet d'appliquer l'opération de « peeling » sur les données de sorties obtenues par la première fenêtre filtrage. Ladite deuxième fenêtre de filtrage est caractéristique de la couche de mise en commun.Selon un mode de mise en oeuvre, la deuxième fenêtre glissante a une dimension N comptée selon la première direction, le premier filtrage comprenant N-1 glissements de ladite première fenêtre glissante selon la première direction et, un premier stockage de N premiers ensembles de données dans une première mémoire temporaire. [0029] Par « première mémoire temporaire » on entend par exemple une mémoire tampon (couramment désignée par le terme anglais « buffer »). [0030] Chaque glissement de la première fenêtre filtrage permet d'obtenir un premier ensemble de données de sortie. Chaque premier ensemble est stocké sur une ligne de la première mémoire temporaire qui comprend N lignes, N représentant la hauteur de la deuxième fenêtre glissante. [0031] Selon un mode de mise en oeuvre, l'ensemble initial de données est stocké matri- ciellement selon des lignes et des colonnes, la succession des lignes s'étendant selon la première direction, par exemple la direction verticale, et la succession des colonnes s'étendant selon la deuxième direction par exemple la direction horizontale, chaque ligne individuelle s'étendant selon la deuxième direction et chaque colonne individuelle s'étendant selon la première direction. [0032] Selon un mode de mise en oeuvre, la première fenêtre de glissement glisse par pas selon la première direction et à chaque pas, parcourt la ligne correspondante. Le pas peut être quelconque. Ainsi la première fenêtre de glissement peut glisser ligne par ligne ou bien sauter des lignes. [0033] Selon un mode de mise en oeuvre, le deuxième filtrage comprend des glissements de ladite deuxième fenêtre glissante, selon la deuxième direction, sur ladite première mémoire temporaire stockant les N premiers ensembles de données, chaque glissement produisant un deuxième ensemble de données, ledit deuxième filtrage comprenant un deuxième stockage de M deuxièmes ensembles de données dans une deuxième mémoire temporaire. [0034] Par « deuxième mémoire temporaire » on entend par exemple une mémoire tampon (couramment désignée par le terme anglais «huffer »). [0035] Autrement dit, chaque glissement de la deuxième fenêtre glissante sur ladite première mémoire temporaire comportant N premiers ensembles de données, produit un deuxième ensemble de données. [0036] Chaque deuxième ensemble de données représente les données de sortie de ladite couche de mise en commun. [0037] Selon un mode de mise en oeuvre, le premier stockage comprend un remplissage circulaire de ladite première mémoire temporaire par le premier ensemble de données produit à chaque glissement de la première fenêtre glissante. [0038] Le plus ancien premier ensemble de données est remplacé par le plus récent premier ensemble de données. [0039] Selon un mode de mise en oeuvre, le deuxième filtrage est effectué après un nombre de remplissages circulaires de ladite première mémoire temporaire. [0040] Par exemple, on peut effectuer le deuxième filtrage après deux glissements successifs de la première fenêtre glissante qui vient de produire deux nouveaux premiers ensembles de données. [0041] Selon un mode de mise en oeuvre, le premier filtrage et le deuxième filtrage se succèdent jusqu'au traitement de toutes les données de l'ensemble initial. [0042] Selon un mode de mise en oeuvre, ledit réseau de neurones comprend au moins une couche non-linéaire entre ladite au moins une couche de convolution et ladite au moins une couche de mise en commun. [0043] Selon un mode de mise en oeuvre, ledit réseau de neurones est défini par des pa- ramètres implémenté en virgule flottante ou en virgule fixe. [0044] Par « virgule flottante », on entend un nombre réel représenté par un signe, une mantisse et un exposant. [0045] Par « virgule fixe », on entend un nombre qui possède un nombre fixe de bits après la virgule. [0046] Par « paramètres » on entend par exemple les poids du réseau de neurones et les données définissant chaque couche du réseau. [0047] Selon un autre aspect, il est proposé un dispositif comprenant une mémoire initiale destinée à stocker un ensemble initial de données selon une première et une deuxième directions orthogonales, et une première mémoire destinée à stocker des paramètres définissant un réseau de neurones à convolution configuré pour traiter l'ensemble initial de données, ledit réseau comprenant au moins une couche de convolution suivie par au moins une couche de mise en commun, et une unité de calcul, par exemple un microprocesseur, configurée pour effectuer les opérations des différentes couches du réseau de neurones, ladite au moins une couche de convolution étant configurée pour effectuer un premier filtrage de l'ensemble initial des données en utilisant une première fenêtre glissante selon la première direction de façon à produire un premier ensemble de données à chaque glissement, et ladite au moins une couche de mise en commun étant configurée pour effectuer un deuxième filtrage des premiers ensembles de données en utilisant une deuxième fenêtre glissante selon la deuxième direction. [0048] Selon un mode de réalisation, la deuxième fenêtre glissante a une dimension N comptée selon la première direction, et dans lequel le dispositif comprend des moyens de traitement configurés pour limiter les glissements de la première fenêtre glissante à N-1 glissements selon la première direction, ledit dispositif comprenant en outre une première mémoire temporaire configurée pour stocker N premiers ensembles de données. [0049] Selon un mode de réalisation, l'ensemble initial de données est stocké matri- ciellement selon des lignes et des colonnes, la succession des lignes s'étendant selon la première direction, et la succession des colonnes s'étendant selon la deuxième direction, chaque ligne individuelle s'étendant selon la deuxième direction et chaque colonne individuelle s'étendant selon la première direction. [0050] Selon un mode de réalisation, les moyens de traitement sont configurés pour faire glisser la première fenêtre de glissement par pas selon la première direction et pour, à chaque pas, faire parcourir la ligne correspondante à la première fenêtre de glissement. [0051] Selon un mode de réalisation, lesdits moyens de traitement sont configurés pour faire glisser la deuxième fenêtre selon la deuxième direction sur la première mémoire temporaire stockant les N premiers ensembles de données, de façon à produire un deuxième ensemble de données à chaque glissement, ledit dispositif comprenant également une deuxième mémoire temporaire configurée pour stocker M deuxièmes ensembles de données. [0052] Selon un mode de réalisation, les moyens de traitement sont configurés pour effectuer un remplissage circulaire de la première mémoire temporaire avec les premiers ensembles de données produits lors des glissements de la première fenêtre glissante. [0053] Selon un mode de réalisation, les moyens de traitement sont configurés pour effectuer le deuxième filtrage une fois que la première mémoire a effectué un nombre de remplissages circulaires. [0054] Selon un mode de réalisation, les moyens de traitement sont configurés pour effectuer successivement les premiers et deuxièmes filtrages jusqu'au traitement de 6 toutes les données de l'ensemble initial. [0055] Selon un mode de réalisation, le réseau de neurones comprend au moins une couche non-linéaire entre ladite au moins une couche de convolution et ladite au moins une couche de mise en commun. [0056] Selon un mode de réalisation, les paramètres du réseau de neurones sont implémentés en virgule flottante ou en précision fixe. [0057] Il est également proposé un microcontrôleur comprenant ledit dispositif [0058] D'autres avantages et caractéristiques de l'invention apparaîtront à la lecture de la description détaillée des modes de mises en oeuvre et de réalisation, nullement li- mitatifs, et des dessins annexés sur lesquels : [0059] [fig.1] illustre schématiquement un mode de réalisation de l'invention, [0060] [fig.2] illustre schématiquement un mode mise en oeuvre et de réalisation de l'invention, [0061] [fig.3] illustre schématiquement un mode mise en oeuvre et de réalisation de l'invention, [0062] [fig.4A] illustre schématiquement un mode mise en oeuvre et de réalisation de l'invention, [0063] [fig.4B] illustre schématiquement un mode mise en oeuvre et de réalisation de l'invention, et [0064] [fig.4C] illustre schématiquement un mode mise en oeuvre et de réalisation de l'invention. [0065] Sur la figure 1, la référence MC désigne un objet électronique 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. [0066] L'objet MC comprend un dispositif MO par exemple un module comprenant une mémoire initiale MV par exemple une mémoire volatile RAM (pour « Random Access Memory ») configurée pour stocker un ensemble initial de données DI. [0067] Le dispositif MO comprend également une mémoire non-volatile MNV par exemple une mémoire ROM (pour « Read-Only Memory » en anglais) destinée à stocker les paramètres définissant un réseau de neurones à convolution RN. [0068] Par « paramètres » on entend les poids du réseau de neurones et les données dé- finissant chaque couche du réseau de neurones. [0069] Lesdits paramètres peuvent être implémentés en virgule fixe ou en virgule flottante. [0070] Par « virgule flottante », on entend un nombre réel représenté par un signe, une mantisse et un exposant. [0071] Par « virgule fixe », on entend un nombre qui possède un nombre fixe de bits après la virgule. 7 [0072] Cette configuration permet de traiter de manière spécifique les données DI stockées dans la mémoire initiale MV et délivrer des données de sortie. [0073] Pour ce faire, le dispositif MO comprend une unité de calcul UC par exemple un mi- croprocesseur configure pour effectuer les opérations définies par chaque couche du réseau de neurones RN. [0074] L'unité de calcul UC est par conséquent couplée à la mémoire non-volatile MNV pour extraire lesdits paramètres de chaque couche du réseau de neurones RN. Elle est également couplée à la mémoire volatile MV pour extraire l'ensemble initial de données DI sur lesquels le traitement s'effectuera. [0075] Le dispositif MO comprend une première mémoire temporaire MEMI et une deuxième mémoire temporaire MEM2. [0076] Par « temporaire » on entend une mémoire tampon (couramment désignée par le terme anglais « buffer »). [0077] La première et la deuxième mémoires temporaires MEMI et MEM2 sont couplées à l'unité de calcul UC. [0078] La première et la deuxième mémoires temporaires MEMI et MEM2 sont configurées pour stocker des données délivrées par l'unité de calcul UC. [0079] Le dispositif MO comprend des moyens de traitement MT couplées à l'unité de calcul UC et configurés pour contrôler le nombre d'opérations à effectuer pour chaque couche et par conséquent, contrôler le stockage des données délivrées par l'unité de calcul UC. [0080] Les moyens de traitement peuvent être réalisés par exemple par un module logiciel au sein du microprocesseur et/ou par des circuits logiques spécifiques. [0081] La figure 2 illustre schématiquement les différentes étapes de traitement de l'ensemble initial de données DI par les couches du réseau de neurones RN. [0082] Le réseau de neurones RN comprend au moins une couche de convolution CV suivie d'au moins une couche de mise en commun CMC. [0083] La couche de convolution CV permet de repérer la présence d'un ensemble de données spécifiques dans l'ensemble initial de données DI reçu dans l'étape VI. Pour cela, la couche de convolution réalise un filtrage par convolution dans l'étape V2 en utilisant une première fenêtre glissante FI illustrée dans les figures 4A, 4B et 4C. [0084] La première fenêtre glissante Fl permet de calculer le produit de convolution entre la fenêtre et chaque portion de l'ensemble initial de données DI. [0085] L'ensemble initial de données DI se présente comme une matrice ayant des lignes et des colonnes, la succession des lignes s'étendant selon une première direction et donc verticalement et la succession des colonnes s'étendant selon une deuxième direction c'est-à-dire horizontalement. [0086] La première fenêtre glissante Fl glisse selon la première direction et donc verti- 8 calcment, tout en parcourant à chaque glissement une ligne de l'ensemble initial de données DI. Chaque glissement produit un premier ensemble de données Dl dans l'étape V3. [0087] Par « glissement » on entend ici que la première fenêtre glissante Fl parcourt chaque ligne de l'ensemble initial de données DI. [0088] Chaque premier ensemhle de données Dl est stocké dans la première mémoire temporaire MEM1. [0089] Le réseau de neurones peut comprendre une couche non-linéaire CNL, qui permet d'améliorer la pertinence du résultat. Elle prend en entrée dans l'étape V4 un premier ensemble de données Dl et produit un ensemhle de données intermédiaire Dl 1 dans l'étape VS. [0090] Les ensembles de données intermédiaires Dll peuvent être mis dans une mémoire temporaire intermédiaire. [0091] La couche non-linéaire CNL étant optionnelle, les premiers ensembles de données Dl peuvent être envoyés directement à la couche de mise en commun CMC. [0092] La couche de mise en commun CMC reçoit donc les premiers ensembles de données Dl à qui on applique dans l'étape V6 une opération de « pool ing » qui consiste à réduire la taille des ensembles de données Dl tout en préservant leurs caractéristiques importantes. [0093] Pour cela, la couche de mise en commun CMC utilise une deuxième fenêtre glissante F2 illustrée dans les figures 4A, 4B et 4C. [0094] La deuxième fenêtre glissante F2 glisse selon la deuxième direction et produit un premier ensemble de données D2 dans l'étape V7. [0095] Chaque deuxième ensemble de données D2 est stocké dans la deuxième mémoire temporaire MEM2. [0096] La figure 3 illustre schématiquement un algorithme implémenté dans les moyens de traitement MT. [0097] Ledit algorithme permet aux moyens de traitement MT de contrôler le nombre d'opérations à effectuer pour chaque couche et par conséquent, contrôler le stockage des données délivrées par l'unité de calcul UC. [0098] Lorsque les moyens de traitement MT détectent la présence d'une couche de convolution CV dans l'étape SI, ils initialisent dans l'étape S2 une variable i à 0 et une variable NI également à 0. [0099] La variable i représente un index pat-courant la liste des lignes générées en sortie de la couche de convolution. [0100] La variable Ni représente le nombre de premiers ensembles Dl stockés dans la première mémoire temporaire MEM1. [0101] La première et la deuxième mémoire temporaire MEM1 et MEM2 sont vides à 9 l'étape S2. [0102] Dans l'étape S3, la première fenêtre glissante Fl glisse selon la première direction et donc verticalement, tout en parcourant à chaque glissement une ligne de l'ensemble initial de données DI. Chaque glissement produit un premier ensemble de données Dl .Ledit premier ensemble de données Dl peut être envoyé à la couche de non linéarité CNL dans l'étape S4 qui produit un ensemble intermédiaire de données Dl 1. Cette étape S4 est optionnelle. [0103] Dans l'étape 55, on incrémente la valeur de la variable N1 de 1 car on vient de stocker dans la mémoire temporaire MEM1 un premier ensemble de données Dl. [0104] Dans l'étape S6, on réalise une première comparaison entre la variable N1 et une troisième variable N représentative de la dimension de la deuxième fenêtre glissante F2 et du nombre maximum de premiers ensembles de données Dl que la première mémoire temporaire MEM1 peut contenir. [0105] Si la valeur de la variable N1 est égale à la valeur N, cela veut dire que la première mémoire temporaire MEM1 comprend N premiers ensembles de données Dl. Elle ne peut plus donc en contenir davantage. [0106] Si la valeur de la variable N1 est inférieure à la valeur N, cela veut dire que la première mémoire temporaire MEM1 peut stocker davantage de premiers ensembles de données Dl . [0107] Etant donné que dans cet exemple, on a stocké uniquement un premier ensemble de données DI, la valeur de la variable Ni est inférieure à la valeur N et donc on passe à l'étape S7 dans laquelle on incrémente la valeur de la variable i de 1. [0108] Dans l'étape S8, on réalise une deuxième comparaison entre la valeur de la variable i et une variable Max représentative du nombre maximal des lignes générées en sortie de la couche de convolution. [0109] Si la valeur de la variable i est supérieure à la valeur de la variable Max, cela veut dire qu'on a parcouru toutes les lignes générées. Les moyens de traitement MT passe à la couche de convolution CV suivante s'il en reste dans l'étape S9. [0110] Dans le cas contraire, on réitère les étapes S3. S4 et S5 jusqu'à ce que la valeur de la variable NI soit égale à la valeur de la variable N. [0111] On passe ensuite à l'étape SIO dans laquelle la couche de mise en commun CMC utilise la deuxième fenêtre de filtrage F2 selon la deuxième direction sur les N premiers ensembles de données Dl contenus dans la première mémoire temporaire MEM1 et produit un deuxième ensemble de données D2. [0112] Dans l'étape S11, on soustrait à la valeur de la variable NI un nombre défini N2 qui représente le nombre de glissements de la première fenêtre Fl à réaliser avant d'effectuer un deuxième filtrage. [0113] La valeur de la variable Ni est égale à N1-N2. [0114] Dans l'étape 512, on incrémente la valeur de la variable i de 1 et on vérifie dans l'étape S13 si la valeur de la variable i est inférieure à la valeur de la variable Max. [0115] Si non, on passe dans l'étape S14 à la couche de convolution CV suivante qui utilisera une autre première fenêtre de filtrage Fl et parcourra l'ensemble initial de données Dl. [0116] Si oui, on continue de filtrer ledit ensemble initial de données Dl avec la première fenêtre de filtrage N2 fois, c'est-à-dire jusqu'à ce que N1 soit égal à N. [0117] Les N2 premiers ensembles de données Dl écrasent les plus anciens premiers ensembles de données Dl dans la première mémoire temporaire MEM1. L'unité de calcul UC effectue donc un remplissage circulaire. [0118] La deuxième fenêtre glissante F2 réalise un glissement sur ladite première mémoire temporaire MEMI comprenant les deux nouveaux premiers ensembles Dl et produit un deuxième ensemble D2. [0119] Cet algorithme est réitéré jusqu'au traitement de toutes les lignes de l'ensemble initial de données DI. [0120] Les figures 4A, 4B et 4C illustrent schématiquement la mise en oeuvre dudit al- gorithme. [0121] Dans la figure 4A, la première fenêtre glissante Fl glisse une première fois sur la première ligne de l'ensemble initial de données DI et produit un premier ensemble de données Dl qui sera stocké dans la première mémoire temporaire MEM1. N1 est maintenant égal à 1. [0122] La première fenêtre FI glisse une deuxième fois sur la deuxième ligne de l'ensemble initial de données DI et produit un premier ensemble de données Di qui sera stocké dans la première mémoire temporaire MEM1. N2 est maintenant égal à 2. [0123] On réitère le glissement jusqu'à ce que N1 soit égal à N ici 5. N représente la hauteur de la deuxième fenêtre glissante. [0124] La première mémoire temporaire contient donc N premiers ensembles de données Dl. [0125] La deuxième fenêtre glissante F2 glisse selon la deuxième direction sur la première mémoire temporaire MEM1 et produit un deuxième ensemble de données D2 qui sera stocké dans la deuxième mémoire temporaire MEM2. [0126] On soustrait N2 à Ni qui est ici égal à 2. NI est donc égal à 3. [0127] La première fenêtre glissante Fi glisse une sixième fois sur la sixième ligne de l'ensemble initial de données DI et produit un premier ensemble de données Dl. N1 vaut 4. [0128] Le premier ensemble de données D1 écrase le plus ancien premier ensemble de données Dl. [0129] La première fenêtre FI glisse une septième fois sur la septième ligne de l'ensemble 11 initial de données DI et produit un premier ensemble de données Dl . N1 vaut 5. [0130] Le premier ensemble de données Dl écrase le plus ancien premier ensemble de données Dl . [0131] -11 est à noter que la première fenêtre Fl peut par exemple ne pas glisser sur chaque ligne de l'ensemble initial de données DI. La première fenêtre Fl peut avoir un pas de glissement (« stride » en anglais). [0132] Dans la figure 4B, la deuxième fenêtre glissante F2 glisse sur la première mémoire temporaire MEM1 contenant les deux nouveaux premiers ensembles de données Dl et produit un deuxième ensemble de données D2 qui sera stocké dans la deuxième mémoire temporaire MEM2. [0133] On soustrait N2 à Ni qui est ici égal à 2. N1 est donc égal à 3. [0134] On réitère les mêmes étapes dans la figure 3B et 3C jusqu'à ce qu'il n'y ait plus de lignes à traiter dans ledit ensemble initial de données DI. 12 [Revendication 1] [Revendication 2] [Revendication 3] [Revendication 4] [Revendication 5]