Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
poppy-kine:gmmriemannian [2018/04/10 08:43]
m16devan
poppy-kine:gmmriemannian [2018/04/10 09:49]
m16devan [Code]
Line 14: Line 14:
  
     * 1. Apprentissage     * 1. Apprentissage
-Le script 'mainEvaluation.m' permet d'​apprendre un modèle à partir de démonstrations. Les premières lignes définissent les paramètres qui sont expliqués dans le code. Principalement,​ les paramètres qui changeront en fonction du nombre de données d'​apprentissage sont:+Le script 'mainLearning.m' permet d'​apprendre un modèle à partir de démonstrations. Les premières lignes définissent les paramètres qui sont expliqués dans le code. Principalement,​ les paramètres qui changeront en fonction du nombre de données d'​apprentissage sont:
 <code matlab> <code matlab>
 %% Parameters %% Parameters
Line 50: Line 50:
 </​code>​ </​code>​
 Le modèle GMM est appris à partir des données d'​apprentissage. Le nombre de gaussiennes du modèle est décidé par l'​intermédiaire du paramètre //​model.nbStates//​ au début du code. Le paramètre //nbIter// détermine le nombre d'​itérations maximum pour l'​apprentissage. ​ Le modèle GMM est appris à partir des données d'​apprentissage. Le nombre de gaussiennes du modèle est décidé par l'​intermédiaire du paramètre //​model.nbStates//​ au début du code. Le paramètre //nbIter// détermine le nombre d'​itérations maximum pour l'​apprentissage. ​
 +De plus, pour segmenter la séquence en différent segments temporels correspondant à différents mouvements unitaires, et ainsi utiliser ces segments lors de l'​évaluation,​ la fonction '
 +Le modèle appris est ensuite sauvegardé.
 +
 +    * 2. Evaluation ​
 +Le script '​mainEvaluation.m'​ permet d'​évaluer une séquence à partir d'un modèle appris. En plus des paramètres identiques à ceux de l'​apprentissage,​ le paramètre //Seuil// permet de définir le seuil utilisé pour le calcul des scores en pourcentage. C'est un seuil négatif qui plus il est proche de zéro, plus le calcul du score en pourcentage sera strict.
 +
 +La première étape est de charger les données (modèle appris, une séquence d'​apprentissage,​ la séquence de test à évaluer). La séquence d'​apprentissage est utile pour l'​alignement temporel.
 +<code matlab>
 +%% load data
 +% model
 +load modelExo3
 +
 +% data train for temporal alignment
 +dirTrain='​data/​Assis3Maxime/';​
 +fnameTrain='​SkeletonSequence1.txt';​
 +[oriMatTrain,​posMatTrain,​dataTrain] = loadData(dirTrain,​fnameTrain,​filt,​est,​rem,​ws,​nbData);​
 +
 +% data test
 +dirTest='​data/​Assis1Maxime/';​
 +fnameTest='​SkeletonSequence3.txt';​
 +[oriMatTest_,​posMatTest_,​dataTest_] = loadData(dirTest,​fnameTest,​filt,​est,​rem,​ws,​nbData);​
 +dataTest{1}=dataTest_;​oriMatTestLong{1}=oriMatTest_;​posMatTestLong{1}=posMatTest_;​
 +</​code>​
 +
 +Ensuite la séquence peut être évaluée:
 +<code matlab>
 +%% Evaluate sequence
 +for rep=1:​length(dataTest)
 +    % temporal alignment
 +    if registration==1
 +        [dataTestAligned,​r,​allPoses,​poses,​motion,​distFI] = temporalAlignmentEval(model,​ dataTrain,​dataTest{rep},​fastDP);​
 +        posMatTest=posMatTestLong{rep}(:,​r);​
 +    else
 +        dataTestAligned=dataTest{rep};​
 +    end
 +
 +    % compute likelihoods
 +    [Lglobal,​Lbodypart,​Ljoints] = computeLikelihoods(model,​dataTestAligned);​
 +
 +    % get scores
 +    seuils=[seuil seuil seuil seuil seuil seuil];​minseuils=[-500 -500 -500 -500 -500 -500]; %default values
 +    [Sglobal,​Sbodypart,​Sjoints] = computeScores(model,​Lglobal,​Lbodypart,​Ljoints,​seuils,​minseuils);​
 +    scoreLA=[Sbodypart{1}.global.global Sbodypart{1}.global.perSegment];​
 +    scoreRA=[Sbodypart{2}.global.global Sbodypart{2}.global.perSegment];​
 +    scoreCol=[Sbodypart{3}.global.global Sbodypart{3}.global.perSegment];​
 +    % For each score, the first value corresponds to global score for the
 +    % whole sequence, and then for each temporal segment
 +end
 +</​code>​
 +Le score pour chaque partie du corps se trouve dans //​scoreLA//,​ //scoreRA// et //​scoreCol//​ pour le bras gauche, le bras droit et la colonne respectivement. Chaque vecteur contient d'​abord le score calculé pour toute la séquence puis pour chaque segment temporel. ​
  • poppy-kine/gmmriemannian.txt
  • Last modified: 2020/07/03 17:25
  • by mai