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

Traitement d'images Discussion :

Construire un "bon" réseau de neurones pour de la reconnaissance d'image ?


Sujet :

Traitement d'images

  1. #1
    Candidat au Club Avatar de blaoi
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Construire un "bon" réseau de neurones pour de la reconnaissance d'image ?
    Bonjour tout le monde.


    I - Situation Initiale
    Mon projet est d'aider un robot motorisé a se déplacer en autonome a travers une ville, le tout grâce aux feux de signalisation pédestres. Pour se repérer, le robot dispose d'une camera accrochée a lui dont il reçoit les images en temps réel, il doit analyser ces images pour ensuite déterminer l'action a entreprendre. Par exemple si le feu est vert alors le robot peut avancer, si le feu est rouge il doit s’arrêter, si il n'y a aucun feu de signalisation alors on décide d'une action par défaut.
    La partie la plus importante est donc d'analyser l'image pour en ressortir un des trois résultats:
    1 - Feu vert
    2 - Feu rouge
    3 - Feu inexistant

    Voici quelques images parmi celles que j'utilise:
    Nom : image_4865.jpg
Affichages : 1068
Taille : 92,3 Ko
    Nom : image_320.jpg
Affichages : 1039
Taille : 86,9 KoNom : image_399.jpg
Affichages : 1028
Taille : 87,0 Ko

    II - Spécifications
    Pour permettre une certaine efficacité j'utilise le langage C et C++ pour récupérer l'image et l'analyser. Pour récupérer l'image j'utilise la librairie opencv et pour l'analyser j'utilise la librairie fann qui permet de construire un réseau de neurone artificiel pour ensuite pratiquer la reconnaissance d'image.



    Problème n°1: Taille du fichier de données.

    Pour entraîner le robot je dois lui fournir un fichier regroupant toutes les données des images.

    J'ai 11375 images en stock faisant chacune 640 pixels de large et 480 de haut. Pour chacun de ces pixels j’écris le code RGB en hexadécimale séparé par un espace. Pour chacune des images il y a un résultat attribué (sous la forme d'un nombre représentant la couleur du feu sur l'image).

    Le fichier ressemble a quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    11375 307200 1
    0xFFFFFF 0xFFFFFF 0xFFFFFF 0xFFFF45 . . .
    0
    0xFFFFFF 0xFFFFFF 0xFFFFFF 0x000000 . . .
    0
    . . .
    Je me retrouve donc avec:
    H + (F * w * h * c + CRLF - 1) + (F * (CRLF + 1))

    H: Le nombre de caractère pour écrire le header: entre 5 et 20.
    F: Le nombre d'images
    w: La largeur des images en pixel
    h: La hauteur des images en pixel
    c: Le nombre de caractère pour écrire un pixel en incluant l'espace qui précède (le -1 specifie celui qui manque a la fin de la ligne)
    CRLF: Les deux caractères de retour a la ligne et de nouvelle ligne

    Mon calcul est peut-être erroné mais il se rapproche de la taille que j'obtiens en pratique:

    Soit ici: 17 + (11375 * 640 * 480 * 9 + 2 - 1) + (11375 * (2 + 1)) =31 449 634 143octets (environs 31Go)

    Le problème étant que je travaille sur une machine 32bits et que la taille des fichiers ne peut pas excéder 2 147 483 647octets (environs 2.1Go), le seul remede que j'ai trouve jusqu'a present est de reduire F, le nombre d'image utilise lors du processus d'apprentissage. Je ne peux que très peu influencer la largeur et la hauteur de chaque image, quant au nombre de caractere utilise pour ecrire la valeur RGB d'un pixel je n'ai pas trouve mieux pour le moment.




    Problème n°2 : Quelle taille pour mon réseau de neurones ?

    Celui-ci est mon plus gros problème car l'architecture du réseau de neurones va influencer l’efficacité de l'analyse d'image ainsi que le temps d'apprentissage.
    Pour le moment voici mes paramètres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    116     const unsigned int num_input = number_of_input;
    117     const unsigned int num_output = number_of_output;
    118     const unsigned int num_layers = 1;
    119     const unsigned int num_neurons_hidden = 338;
    120     const float desired_error = (const float) 0.01;
    121     const unsigned int max_epochs = 1000000;
    122     const unsigned int epoch_between_reports = 1;
    123     unsigned int layers[4] = {num_input,8,9,num_output};
    124     struct fann *ann = fann_create_standard_array(4,layers);
    125     fann_set_activation_function_hidden(ann,FANN_SIGMOID_SYMMETRIC);
    126     fann_set_activation_function_output(ann,FANN_SIGMOID_SYMMETRIC);
    127     fann_train_on_file(ann,filename,max_epochs,epoch_between_reports,desired_error);
    128     fann_save(ann,"data.net");
    129     fann_destroy(ann);
    num_input et num_output correspondent a 307200 et 1 respectivement. Je n'arrive pas a voir le bout de la période d'apprentissage et je me demandais donc quels paramètres seraient optimals pour raccourcir le temps d'apprentissage.

    Voila j’espère avoir été assez claire dans mes explications et si vous avez des remarques, questions ou autres je suis preneur.

    Je vous remercie.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je ne connais pas FANN, mais des outils comme Theano ou Tensorflow avec la surcouche Keras permet de construire des réseaux rapidement. Cette surcouche autorise de travailler avec un mode bash qui permet l'apprentissage par paquet de données et non l'ensemble du dataset ce qui peut répondre à ta première problématique (dans la mesure ou tu changes de technologie si tu le peux). Pour la seconde question à savoir la taille de ton réseau de neurones, tu peux aussi regarder du côté de Google et de Tensorflow. Ces derniers mettent à disposition des exemples réseau et leurs entraînements. Pour citer quelque exemple de réseaux de neurone connu, tu as le VGG16, VGG19, ResNet ...

    Au plaisir de te lire.

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    - 1 - Bienvenue dans l'enfer des gros dataset du deep learning. J'ai le même problème avec des datasets encore plus gros et les 256Go de mon cluster ne sont pas suffisants. Il y a deux solutions à ma connaissance :
    • Entrainer plusieurs réseaux de neurones identiques (architecture et initialization) et entrainer chacun d'eux sur un sous ensemble d'images, faire la moyenne des poids, itérer jusqu'à convergence.
    • Faire un générateur d'images qui va proposer des batch à ton réseau. En fait pendant que le réseau traite un batch, le générateur va lire les images pour créer un autre batch.


    - 2 - le plus simple c'est de repartir d'un réseau pré-entrainé et de re-entrainer uniquement les dernières couches.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Une réseau de neurones pour un agent de dialogue en langage naturel
    Par Invité dans le forum Méthodes prédictives
    Réponses: 23
    Dernier message: 19/10/2013, 23h49
  2. Réseau de neurone pour prévision d'une série temporelle
    Par ranianwayra dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 22/08/2008, 23h55
  3. Réseau de neurones pour la classification de signaux.
    Par jeanlouis_lecodeur dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 26/03/2008, 18h28

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