Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Tue 19 February 2008 13:16

Lise.C
Juste Inscrit !
Lieu: Toulouse
Date d'inscription: 19 Feb 2008
Messages: 5

Méthode SVM ENVI 4.3

Bonjour,

Je voudrais faire sous ENVI une classification par la méthode SVM d'une image Spot, mais j'aimerais  choisir correctement le 'kernel type' et comprendre toutes les variables à rentrer selon le 'kernel type' (par exemple en kernel type linéaire, je dois rentrer penalty et pyramid level).
J'ai déja lu pas mal de docs sur le sujet et je pense avoir compris le principe de la méthode, mais pas le rôle réel de ces variables.
J'ai testé plusieurs classifs en changeant de paramètres et soit les résultats sont identiques, soit le logiciel plante (notamment en changeant le paramètre pyramid).
Est ce que qqun aurait déja une expérience sur les classifs par la methode SVM et pourrait m'éclairer?

Merci bien.
Lise

Hors ligne

 

#2 Mon 31 March 2008 19:21

pellet
Juste Inscrit !
Date d'inscription: 7 Nov 2007
Messages: 4

Re: Méthode SVM ENVI 4.3

Bonjour,
Je travaille actuellement sur la réalisation de classifications d'images Quickbird (parcelles agricoles) à très haute résolution (0.60m) et je souhaite utiliser la méthode SVM sous le logiciel ENVI. Comme Lise.C je rencontre plusieurs difficultés et j'aimerais savoir si quelqu'un aurait une expérience dans cette méthode et pourrait répondre à mes questions.
D'après la littérature (C-W. HSU, C-C. CHANG and C-J. LIN, A pratical Guide to Support Vector Classification,2008), le kernel à utiliser préférentiellement est le RBF. Il faut au préalable réaliser une mise à l'échelle des données. Comment fait-on concrètement cette mise à l'échelle ?
Ensuite, il faut réaliser une validation croisée afin de déterminer les meilleurs paramètres C et gamma à utiliser. C est le paramètre de pénalité ("Penalty Parameter ") qui sert à fixer le compromis entre la minimisation de l'erreur d'apprentissage et la maximisation de la marge. Gamma intervient dans la fonction kernel.  Comment fait-on concrètement pour réaliser une validation croisée de ces paramètres sous ENVI ?
Sous ce logiciel, il y a deux paramètres supplémentaires à choisir : "Pyramid Levels" pour fixer le nombre de niveaux de traitement hiérarchiques  à appliquer et "Pyramid Reclassification Threshold" pour spécifier le seuil de probabilité  qu’un pixel classé à un niveau de résolution inférieur doit atteindre pour éviter d’être reclassé à une résolution plus fine.  Comment savoir quelles valeurs prendre ? J'ai testé différentes valeurs mais le logiciel plante à chaque fois.
Merci d'avance,
Audrey

Hors ligne

 

#3 Tue 01 April 2008 17:44

Emilie_ENVI
Participant actif
Date d'inscription: 6 Jun 2006
Messages: 83

Re: Méthode SVM ENVI 4.3

Bonjour Aurdrey,

Expliquer la classification « Maximum de vraisemblance », ou encore « Minimum Distance »… bon c’est assez facile… mais il faut l’avouer expliquer la classif SVM ce n’est pas la même chose.

Je l’avoue aussi, je ne suis pas une experte de cette classif… Bon, j’ai parcouru le document que tu mentionnes dans ton post.

Concernant ta première question sur la mise à l’échelle :
Selon moi, l’implémentation SVM faite sous ENVI réalise cette opération. Tu n’as donc pas à t’occuper de cette étape. Tu peux directement utiliser ton image en entrée de l’outil SVM (sans prétraitement de mise à l’échelle).

Concernant ta seconde question « comment déterminer les meilleurs paramètres C et Gamma » ?
Il faut que j’étudie cette question d’un peu plus près... je vais me renseigner et te recontacter des que j’en saurai plus.

Concernant ta derniere question sur le choix des parametres « Pyramid Level » et « Pyramid Reclassification Threshold » :
Je vais également me renseigner et te recontacter
Je comprends que la classification SVM d'ENVI permet d'appliquer un traitement hiérarchique qui permet d'accélérer la procédure (le processus est décrit dans la documentation). Le paramètre « Pyramid Levels » permet ainsi de fixer le nombre de niveau hiérarchique: le premier niveau est 0 (pas de traitement hiérarchique et toute l'image est prise en compte) et la valeur maxi dépend de la taille de l'image. Quel niveau utilises-tu ? et quelle est la taille de ton image ?
En effet, si on utilise des valeurs (pour le paramètre « Pyramid Levels ») qui depasse le maximum autorise (en fonction de la taille de ton image), le logiciel n’apprecie pas.

Emilie

Hors ligne

 

#4 Wed 02 April 2008 10:04

pellet
Juste Inscrit !
Date d'inscription: 7 Nov 2007
Messages: 4

Re: Méthode SVM ENVI 4.3

Merci beaucoup pour toutes ces informations. A bientôt par mail.
Audrey

Hors ligne

 

#5 Wed 02 April 2008 11:53

David Sheeren
Participant occasionnel
Lieu: ENSAT Castanet-Tolosan
Date d'inscription: 12 Oct 2005
Messages: 44

Re: Méthode SVM ENVI 4.3

Bonjour,

Je ne pourrai pas répondre à toutes les questions posées car je ne
connais pas encore suffisamment les différents paramètres de la méthode
SVM. Ce que je peux conseiller pour déterminer la valeur du seuil
'penality' notamment, c'est de tester plusieurs classifs avec
différentes valeurs de seuil et de constuire la courbe ROC (Receiver
Operating Characteristic) :
http://www.educ.necker.fr/cours/poly/bi … es_ROC.htm

A partir ce cette courbe, il est possible de déterminer le seuil qui
minimise le taux de faux-positifs et qui maximise le taux de
vrais-positifs. On exploite donc les infos des matrices de confusion
calculées pour les différentes valeurs du seuil.

Il est possible de déterminer une courbe ROC dans ENVI mais je ne pense
pas que ce soit faisable à partir de différents résultats de classif. Il
faudrait regarder l'aide...

Cordialement,

David

Hors ligne

 

#6 Wed 02 April 2008 12:30

Emilie_ENVI
Participant actif
Date d'inscription: 6 Jun 2006
Messages: 83

Re: Méthode SVM ENVI 4.3

Bonjour Audrey,

Voici des nouveaux éléments de réponses…

J’ai bien eu confirmation que la méthode SVM implémentée dans ENVI fait bien une normalisation qui permet une mise à l’échelle des comptes numériques (avant d’opérer le SVM). Cette mise à l’échelle permet donc d’éviter que des valeurs importantes (fortes) aient un poids plus important dans le process de classif SVM. Il existe deux grandes méthode de normalisation : gaussienne ou linéaire. La méthode choisie par ENVI est une normalisation linéaire.

Concernant les questions sur les autres paramètres (Gamma, C, Pyramide Level et Pyramid Reclassification Threshold)… je suis toujours en train de travailler sur ces questions. Je te tiens informé.

Juste une info à retenir : Le paramètre Gamma par défaut correspond a l’inverse du nombre de bandes de l’image. C’est une valeur certes convenable mais pas forcement la meilleure de valeur. Donc je poursuis mes recherches !

Emilie

Hors ligne

 

#7 Wed 02 April 2008 14:41

sawn
Juste Inscrit !
Date d'inscription: 17 Mar 2008
Messages: 3

Re: Méthode SVM ENVI 4.3

Bonjour,

Je travaille également sur la classification par la méthode SVM sous ENVI... et je rencontre les même problèmes explicités par Audrey...aussi, Emilie si tuarrives à avoir des infos pourrais tu égalemenet me contacter?
Toutes informations par un connaisseur du sujet seraient très bien venues.
Merci à tous
David

Hors ligne

 

#8 Wed 02 April 2008 21:44

pellet
Juste Inscrit !
Date d'inscription: 7 Nov 2007
Messages: 4

Re: Méthode SVM ENVI 4.3

Encore merci pour toutes ces informations. Je vais tester la méthode de David et je vous tiendrai au courant des résultats obtenus.
Audrey

Hors ligne

 

#9 Thu 03 April 2008 16:21

Emilie_ENVI
Participant actif
Date d'inscription: 6 Jun 2006
Messages: 83

Re: Méthode SVM ENVI 4.3

Bonjour,

Ca y est je commence, moi aussi, a y voir plus clair… je vais essayer de répondre aux différentes questions d’Audrey qui restaient en suspens (voir plus haut, post du 1er avril a 17h44). Je pense écrire un post un peu long… :-)

Pour la première question :
On peut donc considérer avoir trouvé la réponse (cf. post du 2 avril a 12h30)

Pour la seconde question :
« comment déterminer les meilleurs paramètres C et Gamma
Ces deux paramètres sont essentiels pour garantir la qualité du résultat du process SVM. Mais il n’existe pas réellement de méthode très facile pour déterminer la valeur idéale de ces paramètres. Il existe cependant différentes approches comme :

- La méthode de David  (cf. post du 2 avril a 11h53) … me semble intéressante à mettre en œuvre.
- Méthode un peu similaire (dans le sens « même logique ») : tu peux aussi lancer plusieurs classif SVM (avec différents couples C et Gamma) et regarder la matrice de confusion pour voir quel couple de paramètres te donne la meilleure précision
Classification -> Post Classification -> Confusion Matrix
- En effet, d’après la littérature, la méthode de « validation croisée » (cross-validation) permet aussi de trouver les meilleurs paramètres C et gamma à utiliser.
En quoi consiste cette méthode ?
Il faut mettre en place une « grille de recherche » (grid-search) pour Gamma et C qui va utiliser une validation croisée.
Pour la mise en place de cette grille, il faut procéder itérativement, en créant des couples de valeur Gamma et C.
Par exemple : commençons par lancer la classification SVM pour tout les couples C-Gamma tel que :
C = [2^(-5), 2^(-3), ..., 2^(15)]
et gamma = [2^(-15), 2^(-13), ..., 2^3]
Ce qui fait déjà un grand nombre de combinaison (~cent couples).
Pour chaque résultat nous allons créer un indicateur qui va représenter la valeur de la validation croisée pour estimer la précision de chaque combinaison. (J’expliquerai juste en dessous comment calculer cet indicateur de validation croisé, appelé « validation rate » dans le doc envoyée par Audrey).
On peut ainsi identifier un 1 er couple (Gamma-C), il faut ensuite affiner ces valeurs :
Par exemple : si nous obtenons la meilleur validation croisée pour C[2^(-1), 2^1] et gamma = [2^(-5), 2^(-3)], alors il faut mettre en place une nouvelle grille de recherche et relancer les process de classif tel que :
C = [2^(-1), 2^(-0.5), ..., 2^1]
Et Gamma = [2^(-5), 2^(-4.5), 2^(-4), ..., 2^(-3)]
Idem le calcul de la validation croisée nous permettra d’identifier quel nouveau couple C-Gamma optimise la précision.
On peut bien sur continuer a affiner notre recherche et donc recréer une nouvelle grille de recherche, etc…
Question importante :
Comment calculer ce paramètre de validation croisée ?
La aussi c’est une méthode standard pour évaluer une classification qui consiste à utiliser un paramètre k de division (k-fold, le plus souvent k varie entre 4 et 10).
Prenons encore un exemple (c’est toujours plus simple) :
Avec k = 10, il suffit de diviser chaque ROI en 10 unîtes/sous-ensembles. 9 de ces sous-ensembles seront utilisés pour faire la classif SVM. Celui qui reste va servir pour la validation. En effet, on va pouvoir calculer le nombre de pixel de ce dernier sous-ensemble qui est bien dans sa bonne classe. Puis on change de sous-ensemble de référence et on refait le même calcul. Donc 10 itérations et donc 10 valeurs de validation, donc on peut calculer une moyenne. C’est bien cette moyenne qui représentera la valeur de la validation croisée pour ce couple Gamma-C. Et c’est bien cette valeur qui nous donnera une estimation de la précision de ce couple.

Si vous avez suivi le raisonnement, ca fait un très grand nombre de calcul de SVM. Totalement irraisonnable de faire ca à la main (interactivement avec ENVI)… Mais avec IDL, pas de problème, il faut donc coder tout ca et lancer le traitement en batch. Je ne pense pas que ca soit très compliqué mais il faut s’y mettre un peu tranquillement et ne pas s’emmêler les pinceaux :-)

Pour la troisième question
« Choix des paramètres « Pyramid Level » et « Pyramid Reclassification Threshold » »
Le paramètre « Pyramid Level » permet de réduire les temps de calcul du process SVM. Plus on augmente ce nombre et plus le temps de calcul réduira.
Attention : Il y a un nombre maximim de pyramide autorisé, on ne doit pas créer des sous-échantillons plus petit que 64 x 64. Donc si on a une image 535x525, le maximum autorisé pour ce paramètre sera = 3 (car 525/2^3 ~65).
Si vous n’avez pas à vous soucier des temps de calcul, je vous conseille de laisser Pyramid Level = 0 (l’image sera classée en pleine résolution)
Si vous utilisez un niveau de pyramide (valeur > 0) alors ENVI commencera par classer votre image à la plus basse résolution. Si le pixel classé a une valeur inferieure au seuil choisi (Pyramid Reclassification Threshold) alors le résultat de la classif pour ce pixel sera juger comme peu fiable et le pixel sera reclasser dans les classifications suivantes (à plus haute résolution). Un trop petit seuil de reclassification risque de réduire considérablement la précision. Le mettre à 1 donnera le même résultat que Pyramid Level = 0. La valeur 0.9 pour ce seuil semble être la valeur la plus couramment utilise et la plus appropriée.

Concernant le dernier paramètre "classification probability threshold"
Ce paramètre n’est pas si différent que les paramètres de seuils à renseigner pour les autres classif pixel (maximum de vraisemblance, minimum distance,…). Il n’y a pas de règle : il n’existe pas une manière prédéfinie pour paramétrer ce seuil. Tout dépend de l’objectif, des Rois et de votre image.
C’est donc un seuil qui permet de rendre la classification plus ou moins stricte en fonction d’une valeur de probabilité. Avec une valeur haute (par ex :0.98, classif tres stricte), vous aurez très certainement bien plus de pixels non classé.

Pour les questions sur les messages d’erreur :
C’est un problème que nous venons en effet de détecter et qui est déjà corrigé. Ce problème ne se représentera plus sur les prochaines versions (ENVI 4.5 pour bientôt). En fait, ce message d’erreur apparait pour toutes les images qui ont un nombre impaires de ligne et pour les quelles on spécifie un niveau de pyramid supérieur à 0. En attendant la nouvelle version, je vous suggère d’enlever une ligne à votre image (c’est juste un workarround). Si cette solution ne vous convient pas… contacter moi dès maintenant par email je verrai si peux faire quelque chose.

Voila… si vous avez de nouvelles questions sur la méthode SVM n’hésitez pas ! Je trouve ca vraiment très intéressant de rentrer en detail dans une cette methode de classification.
Si des experts SVM ont des choses à rajouter qu’ils n’hésitent pas non plus !

Emilie

Dernière modification par Emilie_ENVI (Thu 03 April 2008 16:23)

Hors ligne

 

#10 Fri 23 May 2008 10:55

pellet
Juste Inscrit !
Date d'inscription: 7 Nov 2007
Messages: 4

Re: Méthode SVM ENVI 4.3

Bonjour,
Juste pour information, il semblerait que le principal problème de la méthode SVM soit le temps de traitement très long, celui-ci augmentant avec le nombre et la taille des ROI. Il faut donc laisser le traitement et ne pas l'arrêter même si la barre d'avancement reste à 0% pendant plusieurs heures !
Audrey

Hors ligne

 

#11 Wed 23 July 2008 12:23

aster_931
Juste Inscrit !
Date d'inscription: 23 Jul 2008
Messages: 2

Re: Méthode SVM ENVI 4.3

je voudrais avoir une explication sur la possibilité d'appliqué la méthode SVM sur une image satellitaire d'une résolution de 32 metres et est ce que ca donne un resultat satisfaisant par rapport a une image classé avec la méthode maximum vraisemblance avec la meme résolution.

Hors ligne

 

#12 Wed 23 July 2008 12:27

aster_931
Juste Inscrit !
Date d'inscription: 23 Jul 2008
Messages: 2

Re: Méthode SVM ENVI 4.3

bonjour,
je voudrais aussi si ca existe la méthode SVM sur la version envi 4.2 car je possde cette version

Hors ligne

 

#13 Mon 29 June 2009 15:05

antoine cheula
Juste Inscrit !
Date d'inscription: 20 Sep 2006
Messages: 3

Re: Méthode SVM ENVI 4.3

Bonjour,

Merci beaucoup à Emilie pour ces riches informations sur la méthode SVM de classification. Si j'ai bien compris, il faut tester un très grand nombre de couple de paramètres pour régler au plus fin l'algorithme et le mieux est de "coder (en IDL) tout ca et lancer le traitement en batch".

Le problème est que je ne m'y connais pas trop en IDL. Est-ce que quelqu'un aurait un bout de code pour traiter ce genre de chose, ou une bonne référence qui me permettrait de me lancer dans l'IDL sans y passer trop de temps.

Hors ligne

 

#14 Thu 09 July 2009 12:03

antoine cheula
Juste Inscrit !
Date d'inscription: 20 Sep 2006
Messages: 3

Re: Méthode SVM ENVI 4.3

... en m'y intéressant de plus près, j'ai fini par trouver le code qu'il faut taper pour lancer une série de classification SVM permettant de tester des couples de paramètres C/Gamma.

Si ça intéresse quelqu'un :

pro svm

envi_batch_init
  image = 'mon_image'
  envi_open_file, image , r_fid=fid

  ; Classify all data in the file   
  envi_file_query, fid, dims=dims, nb=nb   
  pos  = lindgen(nb)   
  out_name = 'classif'
 
  ; Restore the ROI file used as the training pixels 
  envi_restore_rois, 'mes_roi's.roi'
  roi_ids = envi_get_roi_ids(fid=fid)
 
  ; restore the mask
  imask = 'mon_mask' 
  envi_open_file, imask, r_fid=m_fid
 

; Specify the SVM training and classification criteria
  thresh=0.01
  penalty=[2^(-5), 2^(-3), 2^(-1), 2, 2^(3), 2^(5), 2^(7), 2^(9), 2^(11)]
  kernel_type=1
  kernel_gamma=[2^(-11), 2^(-9), 2^(-7), 2^(-5), 2^(-3), 2^(-1), 2, 2^(3)]
  kernel_degree=3
  kernel_bias=2
 
  for i=0,8 do begin
    for j=0,7 do begin
      penalty1=penalty(i)
      kernel_gamma1=kernel_gamma(j)

         ; call the svm classification
           envi_doit, 'envi_svm_doit', $   
               fid=fid, pos=pos, dims=dims, $   
               out_name=out_name+string(i)+string(j), $   
               roi_ids=roi_ids, thresh=thresh, $ 
               penalty=penalty1, kernel_type= kernel_type, $
               kernel_degree=kernel_degree, kernel_bias=kernel_bias, $
               kernel_gamma = kernel_gamma1
   
  endfor
     endfor
   

end

Hors ligne

 

#15 Thu 24 December 2009 08:15

hadoudja
Juste Inscrit !
Lieu: Comores
Date d'inscription: 23 Dec 2009
Messages: 1

Re: Méthode SVM ENVI 4.3

Bonjour tout le monde,
Merci beaucoup à Emilie et antoine cheula.
La méthode la plus utilisée pour déterminer les hyper paramètre de SVM est la validation croisé (Voir l’explication de  Emilie), mon problème est le suivant :
Comment faire pour diviser le roi en k=10 par exemple (en supposant qu’on utilise la méthode de k-fold) pour que les neufs parties jouent le rôle de zone d’entrainement et l’autre partie le rôle du zone test.
Est-ce qu’il y a quelqu’un qui a un bout de programme en IDL qui réalise la validation croisée ou seulement des explications pour m’aider à écrire le programme ?
Cordialement

Hors ligne

 

#16 Tue 03 July 2012 01:29

nousab
Juste Inscrit !
Date d'inscription: 6 May 2012
Messages: 9

Re: Méthode SVM ENVI 4.3

Bonjour tout le monde,

j'essaie de faire la classification SVM sous ENVI mais j'obtiens toujours l'eurreur suivante: envi_svm_doit: An error has occurred during processing
Error:"IDL SVM Library Malloc allocation error" The result maybe invalid.
[img][/img]
Quelqu'un a une idée comment résoudre ce problème???

Cordialement


-- Nousab --

Hors ligne

 

Pied de page des forums

Powered by FluxBB