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

Images Discussion :

Support Vector Machine Classification


Sujet :

Images

  1. #1
    Membre régulier

    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 114
    Points
    114
    Par défaut Support Vector Machine Classification
    Bonjour,
    J'ai un petit probleme de classification, je dois classer des images, pour cela j'ai 2000 images pour le training et 250 pour le testing et pour chaque image j'ai un vecteur caracteristique de 1536 valeurs et il y a 27 classes.
    Je pense qu'il est preferable d'utiliser les svm plutot que les reseaux de neurones mais j'ai vu les fonctions svmtrain et svmclassify et je ne vois pas trop comment les utiliser, ces fonctions peuvent-elles me servir? comment pourrais-je faire?
    Merci pour toute eventuelle reponse

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Je n'ai jamais utilisé SVM avec MatLab (et je ne le possède pas sur cette version) mais j'ai travaillé avec LibSVM (bibliothèque C++ libre), donc je peux essayer de t'aider . Est-ce que tu as lu des docs sur SVM et comment cela fonctionne ?

    Voilà ce que je peux te dire, d'après moi et la doc sur tes fonctions Matlab :
    • svmtrain
      Comme son nom l'indique, c'est la phase d'apprentissage. A partir de tes données de training, cette fonction va construire le modèle qui permettra de classer tes futures données inconnues.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SVMStruct = svmtrain(Training, Group)
      En entrée :
      * 'Training' est la matrice de données d'entraînement, où chaque ligne correspond à un échantillon et chaque colonne à un attribut.
      * 'Group' est un vecteur colonne, un tableau de caractères ou un tableau de string pour classer tes données d'entraînement en deux groupes : chaque élément indique la classe de l'échantillon correspondant.
      * Ensuite, tu peux mettre les options, càd le choix du noyau (linéaire, polynomial, gaussien,...), les paramètres correspondants, etc.
      En sortie :
      'SVMStruct' est une structure contenant toutes les infos pour pouvoir classer tes futures données inconnues (ce que j'appelle le modèle) : tes vecteurs de support et leurs indices, le nom des classes, des coefficients pour la fonction de décision, le type de noyau et ses paramètres, etc.
    • svmclassify
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Group = svmclassify(SVMStruct, Sample)
      Cette fonction va utiliser la structure créée précédemment pour classer tes échantillons inconnus, contenus dans 'sample' (évidemment, avec le même nombre de colonnes/attributs que 'training').
      'Group' contient la classe de chaque ligne de ton tableau 'sample'.

      Apparemment, tu peux aussi faire un affichage graphique (ça, j'aurais bien aimé l'avoir avec LibSVM !) pour visualiser ton hyperplan séparateur, voir la performance de la classification... Regarde les exemples fournis avec la doc (en ligne, c'est ici)


    J'espère avoir pu t'aider
    ++

  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
    Bonsoir,

    et si on commençait par analyser ce que tu nous présentes :
    - 2000 images => 2000 individus dans ton problème de classement.
    - 1536 caractéristiques => presque une caractéristique par image!!! ne risques tu pas un problème d'apprentissage par coeur?
    Comment arrives tu à avoir autant de caractéristiques?
    Quelles sont elles?
    - Pourquoi préfères tu les SVM? Les RdN sont considérés comme la méthode de classement la plus puissante actuellement, mais il faut savoir comment l'utiliser. Sinon la régression logistique est actuellement la méthode la plus utilisée => Donc on revient à la base :
    Que contiennent tes images?
    Qu'elles sont tes caractéristiques?
    Dans quelles classes souhaites tu les classer? Combien de classes?

    Bref, si tu veux juste utiliser les SVM... Ok.
    Mais si tu souhaites faire réellement du classement, il faudrait voir à détailler le problème
    => Dis nous ce que tu souhaites exactement.
    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.

  4. #4
    Membre régulier

    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 114
    Points
    114
    Par défaut
    Salut, merci pour tes infos Patchanka ja vais regarder tout ca.
    En fait je dois faire de la reconnaissance d'images de bois (27 especes => 27 classes). Pour avoir autant de caracteristiques, je calcule 24 (dans une fenetre 5x5 il y a 24 pixels entourant le pixel central) BGLAM (Basic Gray Level Aura Matrix) qui dependent du nombre de niveaux de gris de mon image (8 dans mon cas) et qui decrivent la texture de l'image, j'ai donc 24 matrices 8x8 que je ramene en un vecteur de 1536 valeurs pour chaque image.
    J'ai essaye les rdn avec le logiciel weka mais sans succes, j'ai peut etre trop de caracteristiques et je sais que les svm donnent de tres bons resultats, j'aimerais le programmer moi meme mais j'ai du mal avec une ou deux equations.
    Voila j'espere avoir ete un peu plus clair.

  5. #5
    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
    Bonjour,

    Il est impossible d'utiliser les RdN avec autant de caractéristiques.

    mmm... j'ai un doute sur les caractéristiques. Pourquoi n'as tu pas simplement essayé des méthodes comme les matrices de cooccurrences ou les run length. Tu auras juste une trentaine de caractéristiques qui te donneront déjà une bonne description.
    Est ce que la couleur est importante dans ton problème?

    Pour ce qui est des SVM, je ne connais pas
    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 9
    Points
    9
    Par défaut
    bonjour,

    mais pourquoi ne pas utiliser un filtre comme le filtre de gabor qui permet de représenter ton objet dans un vecteur de 256 éléments. ça va te réduire le nombre de caractéristiques et encore le temps!!

    bon courage!!!

  7. #7
    Membre régulier

    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 114
    Points
    114
    Par défaut
    En fait, tout ca a deja ete etudie (filtres de gabor, matrice de cooccurence, ondelettes), la reconnaissance est proche de 100% mais pas tout a fait, je dois etudier le LBP (Local Binary Pattern) qui decrit la texture d'une image et j'essaie de combiner ca avec des BGLAM comme je l'ai dit precedemment.
    Pour ce qui est des parametres, ce n'est pas un probleme je peux en avoir que 96 ou 512 mais je pense que plus j'en ai mieux c'est. Bref, je recherche surtout comment utiliser des SVM en multiclasse mais je ne sais pas si je peux le faire avec Matlab

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Les fonctions svmtrain et svmclassify de Matlab fonctionnent pour un problème binaire (à deux classes). Pour étendre la méthode à un problème multi-classe, tu peux utiliser la méthode 1 contre 1 ou la méthode 1 contre tous :
    • un contre un
      Tu construis un classifieur SVM pour chaque paire de classe (donc N*(N-1)/2 classifieurs pour un problème à N classes). La règle de décision en général est le vote majoritaire : chaque SVM analyse la donnée inconnue puis vote pour une classe ; la donnée inconnue est finalement associée à la classe ayant reçu le plus grand nombre de votes.
    • un contre tous
      Tu construis autant de classifieurs que de classes. Chaque SVM est alors entraîné à séparer les données d’une classe qui seront étiquetées +1, de celles de toutes les autres classes qui seront étiquetées –1. Chaque SVM étant associé à une classe, sa sortie peut être considérée comme une mesure d’appartenance à la classe. Pour un problème à N classes, il faut donc construire N classifieurs et effectuer jusqu’à N comparaisons pour la décision. La règle de décision est de considérer la plus grande valeur de sortie parmi l’ensemble des SVM.

    (petits extraits de la doc que je me suis construite à partir de recherches biblio )

    Par contre, je ne sais pas comment tu peux utiliser les fonctions svmtrain et svmclassify. Je pense que tu peux construire plusieurs modèles en appelant plusieurs fois svmtrain (suivant la méthode multi-classe que tu auras choisie), mais après, à toi de construire ta fonction de classification, en utilisant ou non svmclassify... A cogiter !

    Bon courage

  9. #9
    Membre régulier

    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 114
    Points
    114
    Par défaut
    Merci pour ce petit cours Patchanka t'assures , je vais essayer la methode un contre tous en creant N modeles et utiliser ensuite N fois la fonction svmclassify, enfin je vais voir ce que je peux faire.
    Mais si je veux construire ma fonction de classification sans svmclassify comment utiliser les parametres des modeles?
    Et si je veux partir de 0, sais-tu comment obtenir l'equation des 'boundary' optimum et la fonction de decision? il y a des alpha et des argmin que j'ai du mal a cerner

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    De rien
    Citation Envoyé par flo71 Voir le message
    Mais si je veux construire ma fonction de classification sans svmclassify comment utiliser les parametres des modeles?
    Et si je veux partir de 0, sais-tu comment obtenir l'equation des 'boundary' optimum et la fonction de decision? il y a des alpha et des argmin que j'ai du mal a cerner
    C'est là que ça se corse... Après avoir pas mal potassé de la biblio et étudié les codes de LibSVM, j'ai à peu près cerné comment fonctionnait SVM mais ce n'est pas évident (enfin, je trouve ; p't-être que pour les matheux, ça va !).

    Les alpha sont des multiplicateurs de Lagrange. Chacun est associé à un de tes échantillons, il y en a donc autant que d'échantillons. Seuls les vecteurs de support auront un alpha différent de zéro. Pour les autres échantillons, alpha est nul.

    Je n'ai pas eu l'occasion d'étudier en détail comment était utiliser le modèle pour classer les données. Dans l'idée, pour une donnée x à classer, tu lui appliques la fonction de décision f, et le signe de f te donne la classe.
    Si je ne me trompe pas, pour la fonction de décision, tu as :
    f(x) = sum{y_i*alpha_i*K(x,x_i)+b} pour i=1 jusqu'à n (nombre de vecteurs de support)
    avec :
    - y_i la classe du i-ème vecteur de support
    - alpha_i le multiplicateur de Lagrange du i-ème vecteur de support
    - K(x,x_i) le produit scalaire entre x et x_i, suivant le noyau choisi au tout départ
    - b le biais qui est égal à : b_i = y_i - sum{y_i*alpha_j*K(x_i,x_j)} pour j=1 jusqu'à n (ce que j'ai vu en théorie)
    Toutes ces valeurs sont calculées lors de l'apprentissage, et donc disponibles dans ton modèle.

    Quelques suggestions de lecture qui m'ont aidée à y voir plus clair, justement concernant la fonction de décision et l'optimisation de l'hyperplan :
    - un article (en français) : http://georges.gardarin.free.fr/Surv...Survey_SVM.pdf
    - une thèse (en français : p.1 à 43) : http://www.livia.etsmtl.ca/publicati...m_PhD_2007.pdf
    Après, j'ai bossé de façon plus spécifique sur LibSVM...

Discussions similaires

  1. Support vector machine
    Par ahlam2008 dans le forum Statistiques, Data Mining et Data Science
    Réponses: 7
    Dernier message: 20/10/2014, 14h15
  2. Classification (S.V.M) Support vector machines
    Par Pipoussa dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/06/2014, 14h00
  3. Questions Sur SVM(Support Vector Machines)
    Par vizardo16 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 11/04/2011, 17h12
  4. support vector machine sous matlab
    Par m2aziz dans le forum MATLAB
    Réponses: 1
    Dernier message: 29/03/2010, 10h31
  5. Bibliothèque Support Vector Machine (SVM)
    Par medchok dans le forum MATLAB
    Réponses: 0
    Dernier message: 08/04/2009, 14h52

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