IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes prédictives Discussion :

Reconnaissance de forme par réseau neuronal


Sujet :

Méthodes prédictives

  1. #1
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut Reconnaissance de forme par réseau neuronal
    Salut !

    Je suis en train de développer un système de reconnaissance de formes. Pour cela j'utilise un réseau de neurones. Le problème, c'est que pour l'instant ça ne marche pas bien du tout. Les formes que je cherche à différencier dans un premier temps sont les lettres majuscules de l'alphabet. Mes entrées sont les points (noirs = 1 ou blancs = -1) d'une image de 20x20 pixels. Les sorties sont les points d'une image de 20x20 pixels, dont les valeurs sont calculées ainsi (voir schéma) :

    http://www-igm.univ-mlv.fr/~dr/XPOSE2002/Neurones/index.php?rubrique=Neuroneformel

    les 400 synapses et le seuil de comparaison sont propres à chaque neurone de sortie. Les entrées de ces neurones de sortie sont les sorties de tous les 400 neurones d'entrée. Vous suivez ?

    Je ne sais pas si je m'oriente bien, je débute completement dans ce domaine. Là je galère, et je voulais demander si quelqu'un pourrait m'aider, ou me donner un algo comprehensible, qui marche pour le besoin que j'éprouve. Je fais pas mal de recherches, mais pas moyen de trouver des explications à la fois claires pour un débutant et précises.

    Dois je diminuer le nombre de sorties, ou relier autrement les neurones ? Comment faire évoluer les pondérations des synapses ???

    Merci
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  2. #2
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    met-tu une synapse par lettre? ou est-ce autre-chose?
    quelle methode à-tu tenté (je n'y connais rien en neurone non plus mais bon, je peux toujours essayer)

    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Salut

    Une synapse par lettre ? Non, en fait chaque neurone de sortie a 400 synapses, ça fait donc 160.000 synapses en tout !

    Sinon, la méthode que j'utilise est le perceptron monocouche, enfin, si j'ai programmé comme il faut...

    a+
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  4. #4
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Euh, tu essaies d'implémenter un perceptron monocouche, certes, mais ces deux phrases :
    les 400 synapses et le seuil de comparaison sont propres à chaque neurone de sortie. Les entrées de ces neurones de sortie sont les sorties de tous les 400 neurones d'entrée
    me déroute !
    Il te faudra passer par une phase d'apprentissage, avec des images de référence, et une détection d'errur, par exemple.
    Si erreur (que tu auras toujours, donc lire si erreur donnée), changer le poids sinon, laisser.
    Un exemple simple !
    Tu prends une image en entrée simple et non bruitée (un A majuscule par exemple), tu le mets dans ton RN et tu fais une comparaison pixel par pixel entre ce qu'il te sort et ce qu'il devrait te sortir.
    Si l'erreur est importante, tu modifies les poids des pixels erronés, et tu recommences.
    Bien sûr tu ne fais pas ça à la main .
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est un sujet assez classique (la reco d'écriture), tu trouveras quantité d'articles à ce sujet sur le net et autres revues spécialisées.

    Reste que je te conseille de commencer avec un simulateur de RdN pour valider architectures, prétraitements (probablement la phase la plus importante), et algos avant de coder quoique ce soit. SNNS est un grand classique.

    En force brute (images non pré-traitées), les SVM (site -> kernel-machine) sont efficaces. Ce sont des cousins éloignés des RdN. Je n'ai plus suivi s'il avaient été appliqués à la reco d'écriture ou pas.

    Quant au perceptron monocouche, c'est l'exemple récurrent traité sur les tutoriels ... le plus inefficace qui soit. A se demander si les gens qui le présentent l'ont déjà essayé. ?: Certes, c'est le B-A-BA de la théorie, mais il ne reste qu'un jouet historique.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    ça me fait penser à tes algo génétiques progman... tu vas bien t'entendre avec Remiz
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Des réseaux de neurones pour la reconnaissance de formes... pourquoi pas, mais c'est quoi la sortie de ce réseau-là ? J'ai pas trop bien compris pourquoi il fallait 20x20 en sortie. 26, oui, mais 20x20...
    J'aurais déjà fait un multi-couche, c'est pas vraiment linéaire comme décision, d'où aussi l'intérêt des SVMs qui ne font de ce genre d'exercie qu'un bouchée de pain, sans compter qu'on a pas de problème de fitting.

  8. #8
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Miles : en fait tu as besoin d'un neurone de sortie par lettre ? Dans ce cas ça rédsimplifie mon algo. Mais ce qui ne me parrait pas logique avec cette méthode, c'est que quelle que soit la combinaison des entrées, l'importance d'une synapse donnée resterait la même tout le temps. Il faudrait que l'algo reconnaisse une lettre quelle que soit sa taille et sa position...

    Sinon que sont les SNNS et les SVM ?

    a+
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    SNNS :array: google => Stuttgart Neural Network Simulator
    SVM :array: google -> kernel-machines => Support Vector Machine
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Rémiz
    Il faudrait que l'algo reconnaisse une lettre quelle que soit sa taille et sa position...:
    C'est pas ce que tu veux ?? : :

  11. #11
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Ok, merci

    Miles : si, c'est ce que je voeux, mais justement je doute que ça marche. Car l'importance d'un pixel ne doit pas dépendre de sa position sur l'image, mais de sa position sur la lettre...Enfin, j'ai du mal à tout expliquer...

    Bon, sinon je regarde les SNNS et SVM...
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Rémiz
    Miles : si, c'est ce que je voeux, mais justement je doute que ça marche. Car l'importance d'un pixel ne doit pas dépendre de sa position sur l'image, mais de sa position sur la lettre...Enfin, j'ai du mal à tout expliquer...
    Ca, c'est sûr...
    Avec un réseau qui te sort 26 valeurs, tu auras simplement l'indication de quelle est la lettre présentée en entrée. Avec 20x20, tu veux sortir quoi comme valeur ?

  13. #13
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2004
    Messages : 148
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Je m'imaginais sortir le dessin d'une lettre standard, enregistrée en mémoire. Mais à mon avis, ça marcherait plus difficilement... En fait, avec avec 26 sorties, tu calcules le pourcentage de correspondance, et tu détermines la lettre en voyant la sortie qui a le plus gros pourcentage ?
    Celui qui pose une question est bête 5 minutes, celui qui ne la pose pas est bête toute sa vie...

  14. #14
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Rémiz
    En fait, avec avec 26 sorties, tu calcules le pourcentage de correspondance, et tu détermines la lettre en voyant la sortie qui a le plus gros pourcentage ?
    C'est le principe des algos compétitifs -- bien que pas nécessairement un pourcentage.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Rémiz
    Salut,

    Je m'imaginais sortir le dessin d'une lettre standard, enregistrée en mémoire. Mais à mon avis, ça marcherait plus difficilement... En fait, avec avec 26 sorties, tu calcules le pourcentage de correspondance, et tu détermines la lettre en voyant la sortie qui a le plus gros pourcentage ?
    Ben oui. Dans le cas contraire, il faut que tu testes tout de même quelle est la lettre la plus proche du résultat qui t'es fourni par le réseau qui n'a donc servi à presque rien...

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 102
    Points : 118
    Points
    118
    Par défaut
    Je pense que les réseaux neuronnaux sont un moyen fonctionnel et relativement facile a implémenté, mais il demande beaucoup plus de performance et donne un résultat beaucoup moins bon que la reconnaissance par correlation qui, selon moi, est souvent la méilleure solution . Je travaille actuellement sur un système de reconnaissance d'image, les deux methodes sont utilisés dans mon projet, et ce que je dis plus haut est le retour de mes premiers test. Essaye de te renseigner sur le sujet.
    Pensez au tag , à la balise [Code] ainsi qu'au règles ! C'est pour le bien de tous !

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    De toute manière, le problème des réseaux neuronaux est qu'on ne sait pas trop ce qu'on fait et quand on doit s'arrêter de faire apprendre - d'ailleurs, on ne sait pas trop non plus comment apprendre -

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Rémiz : tu devrais lire un peu plus de documentation sur le sujet avant de commencer à programmer, tu n'as sans doute pas vraiment compris le principe des réseaux neuronaux...

    En sortie, tu peux soit avoir 26 neurones, soit un seul neurone avec une valeur entre 0 et 1 qui te donnera la lettre, en découpant en 26 sous intervalles par exemple.
    ça n'a pas de sens d'avoir 400 sorties...

    D'autre part, un réseau d'une seule couche ne pourra certainement pas te donner de résultat, il faut au moins 2 couches. le perceptron multi couche est sans doute le plus simple à programmer.

    Ensuite tu as besoin d'une phase d'apprentissage, c'est à dire un certain nombre d'échantillons que tu sais classer, et tu appliques par exemple un algorithme de rétropropagation du gradient. Tu peux faire une recherche sur google pour avoir plus d'infos la dessus, c'est un sujet qui a été énormément exploré...

    Enfin, pour la reconnaissance de caracteres, l'expérience montre que l'entrée ne doit pas etre les 400 pixels, on obtient de bien meilleurs résultats en calculant un "feature vector" (je sais pas comment on dit en français) à partir de l'image, encore une fois je te renvois à toute la documentation que l'on trouve la dessus sur le net.

  19. #19
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    En sortie, tu peux soit avoir 26 neurones, soit un seul neurone avec une valeur entre 0 et 1 qui te donnera la lettre, en découpant en 26 sous intervalles par exemple.
    Juste une remarque la dessus: 1 seul neurone avec une valeur entre 1 et 26 (pour simplifier) n'est pas une bonne idée...
    Une fois la phase d'apprentissage terminée, ça fonctionnera parfaitement avec une entrée qui appartient au set d'apprentissage, par exemple un "B" parfait. Mais si on présente au réseau une lettre "manuscrite", qui ressemble autant à un "B" qu'à un "D", le réseau risque de sortir la valeur moyenne entre 2 et 4 ... soit un "C"... C'est génant (voir How should categories be encoded?)

    Sinon, tout à fait d'accord pour la phase d'apprentissage (tu peux faire des recherches du le terme retropropagation pour en savoir plus), et pour les feature vectors.

    Concernant les features, tu peux dans un premier temps (sans trop te compliquer la tâche) découper ton image de 20x20 en 25 blocs de 4x4. Pour chaque bloc, tu peux facilement trouver le pattern qui s'en rapproche le plus, parmis une trentaine de patterns predéfinis (tout noir, tout blanc, moitié-moitié vertical, .....). Ca ne te fait plus que 25 entrées pour ton réseau. Je n'ai pas eu l'occasion d'essayer (je compte le faire prochainement), mais d'après mes lectures le resultat est bien plus correct / efficace qu'avec une entrée par case. Bien sûr tu peux calculer des features beaucoup plus efficaces, mais c'est tout de suite plus difficile
    And still we will be here, standing like statues ...

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    merci pour la précision sur la sortie, j'avais pas pensé à ce probleme, ça me servira sans doute un jour

Discussions similaires

  1. Reconnaissance de forme par reseau de neurone artificiel
    Par tefymahery dans le forum MATLAB
    Réponses: 0
    Dernier message: 04/11/2013, 16h01
  2. Reconnaissance de formes par réseaux de neurones
    Par bilou_12 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 26/11/2012, 15h01
  3. Reconnaissance de forme par RN
    Par amintek dans le forum Images
    Réponses: 2
    Dernier message: 05/04/2007, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo