Reconnaissance de caractères par réseau de neurones.

Le but de ce projet était de bâtir un exemple illustratif des capacités du Zisc. Le groupe de travail était constitué de Daniel CHAYVIALLE (mail), Arnaud CHEVRETON (mail) et Christophe HENRY (mail). Ce projet a été réalisé en l'equivalent de 6 semaines a temps plein et a été suivi par M. J. Callot (mail), professeur à l'ESIEE.

Le réseau de neurones

L'acronyme Zisc signifie Zero Instruction Set Computer. Ce type de circuit est aussi appelé reseau de neurones.

Nous avons utilisé une carte Zisc sur bus ISA pour PC prêtée par IBM-Corbeil. Cette carte est constituée de 16 boitiers Zisc contenant chacun 36 neurones. Nous disposions donc au total de 576 neurones.

Un neurone est constitué de 3 éléments principaux:

une zone mémoire de 64 octets contenant le modèle stocké dans le neurone

une UAL qui effectue des calculs de distance entre le modèle et le caractère d'entrée

un registre de catégorie qui donne la catégorie à laquelle appartient le neurone

La fonction de chaque neurone est de calculer la différence entre le modèle et l'entrée selon une norme (mathématique) donnée: norme 1 ou norme Sup. Cette différence est appelée distance.

Tous les neurones effectuent ce calcul en parallèle et renvoient leur distance et leur catégorie à une logique de décision. Cette dernière désigne celui ayant la plus faible distance comme ayant reconnu l'entrée. La catégorie permet alors de savoir quel est ce modèle reconnu.

Le Zisc ne se programme pas, il apprend par l'exemple. Il est typiquement utilisé dans des domaines tels l'identification, la reconnaissance, la classification et la recherche de données, opérations qu'il effectue extrêmement rapidement.

La reconnaissance de caractères

Notre but était d'explorer différentes méthodes de reconnaissance et d'obtenir les meilleurs résultats possibles. Connaissant ainsi les avantages et les limites de chaque méthode, il faudrait ensuite les combiner - en effectuant plusieurs passes - afin d'utiliser les avantages des unes pour s'affranchir des inconvénients et des résultats litigieux renvoyés par les autres.

Etant donnée la nécessité de disposer d'une carte Zisc pour le faire tourner, le programme développé n'est pas proposé en démonstration.

Caractères de taille 8 x 8 pixels

Nous avons tout d'abord développé des méthodes permettant de reconnaitre des caractères de taille 8 x 8 pixels, ce qui correspond à la taille de la zone mémoire d'un neurone, soit 64 pixels. La forme des modèles entrés est celle que nous avons considerée comme étant la plus générale, ceci afin d'avoir le meilleur taux de reconnaissance possible.

Approche naive

But: Tester le fonctionnement du Zisc.

Mise en oeuvre: La première idée est d'entrer les lettres telles quelles sous forme de 0 et de 1 dans les neurones.

Avantages: Cette méthode est simple.

Inconvenients: Le taux de reconnaissance est insuffisant même si l'on ajoute de (trop) nombreux neurones afin de tenir compte non seulement des différentes tailles, mais aussi des différentes formes et possibilités de placement de chaque lettre (10 neurones au minimum par lettre).

Si nous cherchons à réduire le nombre de neurones c'est plus par soucis de ne pas faire de gâchis et par contrainte de maintenance (et parce qu'un boitier de 36 neurones coute environ 400F) que par limitation puisque nous disposions de 576 neurones, et que la limite d'extension est purement pratique. En plus d'améliorer l'efficacité, chercher des algorithmes performants pour réduire le nombre de neurones utilisés améliore aussi l'efficience des résultats.

Calage

But: Ne pas avoir à tenir compte de l'emplacement de la lettre dans la grille 8 x 8 lors de l'envoi en reconnaissance

Mise en oeuvre:Toutes les lettres entrées sont déplacées afin de les caler a un endroit précis auparavant. Cette démarche nous a par ailleurs obligés a imposer une taille effective de lettre de 5 x 6 pixels. La présence de 1 a 2 pixels d'erreur à des emplacements critiques a bien entendu été prise en compte.

Avantages: Le nombre de neurones utilisés est considéablement réduit: en moyenne 4 par lettre.

Inconvenients:Les résultats ne sont pas beaucoup améliorés.

Système de poids

But: Tenir compte des caractéistiques propres à chaque lettre. Un 'F' auquel il manque des points ne doit pas être reconnu comme ètant un 'P' uniquement parceque le nombre de points de difféence est moindre par rapport au modèle du 'P' que par rapport au modèle du 'F'

Mise en oeuvre: Il faut tenir compte de la place de chaque point, ce que le calcul de distance ne fait pas. Nous l'avons donc indiqué au Zisc en modifiant les valeurs des points des modèles afin d'en favoriser ou défavoriser certains lors des calculs de distance. Ces valeurs sont appelées bonus/malus (c'est une notion relative) ou poids. Par exemple, la barre de droite dans le modèle du 'P' est "favorisée", alors que l'absence de barre a ce même endroit est "défavorisée"dans le modèle du 'F'. Ceci vaut bien entendu quand c'est un 'P' qui est entré. Si c'est un 'F', les modificateurs jouent dans l'autre sens.

Avantages: Rajouter des poids rend la méthode beaucoup moin sensible au bruit, et le taux de reconnaissance est de 95% pour un point d'erreur

Inconvenients: Le dosage du nombre de points de bonus/malus, de leur valeur et de leur emplacement est délicat et fastidieux. De plus, sa mise en oeuvre de manière automatique demanderait des calculs dont la durée est directement proportionnelle au nombre de neurones utilisés.

Méthode par barres

But: Prendre en compte les caractéristiques des lettres: barres,trous, etc ...

Mise en oeuvre: Une autre manière est de les entrer comme modèle dans les neurones et de demander à les reconnaître dans le caractère entré. Une fois le nombre et la position de chacune de ces caractéristiques connus, il ne reste plus qu'à demander au Zisc de reconnaître à quelle lettre cela correspond, en identifiant les caracteristiques trouvées avec celles stockées dans les neurones pour chaque lettre.

Avantages: Peut servir à départager des ex-aequo résultant de la méthode précédente.

Inconvenients: Très sensible au bruit, surtout s'il est mal placé.

Elle n'a pas été implémentée entièrement.

Caractères de taille 16 x 16 pixels

Cependant, une taille de 8 x 8 pixels s'avérait trop limitée pour effectuer la reconnaissance a partir de textes scannés par exemple. Ces textes, de plus, avaient de forte chances d'être écrits dans des polices de caractère standard du monde informatique. Ce sont donc des caractères appartenant à des polices standard de Windows que nous avons pris comme modèles. Les caractères passent a une taille maximum de 16 x 16 pixels.

Echantillonnage

But: Faire passer la taille des lettres de 16 x 16 à 8 x 8.

Mise en oeuvre: L'image d'entrée est balayée par une fenêtre de 2 x 2 pixels, et la valeur du pixel correspondant dans l'image échantillonnée dépend du nombre de pixels 'allumés' dans cette fenetre, ainsi que dans les cas litigieux (2 pixels 'allumes' sur 4), de l'etat des pixels de l'environnement immédiat. C'est cette image échantillonnée qui est envoyée en reconnaissance dans le réseau, les modèles adéquats étant chargés.

Avantages: Cette méthode est peu sensible au bruit, s'il n'y en a pas trop, et le taux de reconnaissance est de 96 a 99% sur un pixel d'erreur.

Inconvenients: Sensible à un fort bruit.

Projection

But: Projeter le caractère d'entrée successivement sur ses deux axes. On obtient ainsi une "signature du caractère".

Mise en oeuvre: Nous nous sommes limités à des caractères de taille 16 x 16 afin de pouvoir comparer cette méthode avec la précédente, mais il est possible de monter jusqu'a des caractères de taille 32 x 32, puisque la taille des modèles le permet.

La projection sur un axe revient à compter en chaque point de projection le nombre de pixels 'allumés' dans la ligne ou la colonne qui lui fait face. La signature de la lettre entrée est ensuite envoyée en reconnaissance. Les modèles sont bien entendu des signatures type, par exemple des polices predefinies. Ceci nécessite de caler la letrre avant toutes chose à un endroit défini, sinon la signature, si elle est décalée, ne sera pas correctement reconnue.

Avantages: Cette méthode est peu sensible à un bruit assez fort, pour peu qu'il soit "bien placé", c'est a dire qu'il ne fausse pas le calage évoqué ci-dessus. Le taux de raconnaissance est de 96%avec un pixel d'erreur et ne diminue que peu avec un nombre de pixlels d'erreur plus important.

Inconvenients: Sensible au bruit "mal placé" par rapport au calage.