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
poppy-kine:gmmriemannian [2018/11/29 14:48]
m16devan [Code]
poppy-kine:gmmriemannian [2020/07/03 17:25] (current)
mai ↷ Page moved from gmmriemannian to poppy-kine:gmmriemannian
Line 106: Line 106:
  
 La première partie du code concerne les paramètres qui sont similaires aux parties décrites plus haut. La première partie du code concerne les paramètres qui sont similaires aux parties décrites plus haut.
-Ensuite, la seconde partie permet de charger+ 
 +Ensuite, la seconde partie permet de charger ​le modèle d'​exercice idéal ainsi qu'un exercice de référence:​ 
 +<code matlab>​ 
 +% model 
 +load modelExo3 
 +exo=3; 
 + 
 +% data correct train  
 +dirTrain='​data/​Assis3Maxime/';​ 
 +fnameTrain='​SkeletonSequence1.txt';​ 
 +[oriMatTrain,​posMatTrain,​dataTrain] = loadData(dirTrain,​fnameTrain,​filt,​est,​rem,​ws,​nbData);​ 
 +cuts=[0 model.cuts 300]; 
 +</​code>​ 
 + 
 +La troisième partie du code génère les caractéristiques d'​erreurs pour chaque fichier d'​erreur correspondant à la différence entre le mouvement d'​erreur et le mouvement idéal appris. Ces différences sont calculées séparément par partie du corps et par segment temporel de l'​exercice.  
 +<code matlab>​ 
 +% data Erreur train 
 +cptErr=0; 
 +for err=[1 2 3] 
 +    cptErr=cptErr+1;​ 
 +    dirTrain=sprintf('​data/​ErreursAssis3Maxime/​erreur%i/',​err);​ 
 +    for nf=1:nspp 
 +        fnameTrain=sprintf('​SkeletonSequence%i.txt',​nf-1);​ 
 +        [oriMatTrainErr{nf},​posMatTrainErr{nf},​dataTrainErr{nf}] = loadData(dirTrain,​fnameTrain,​filt,​est,​rem,​ws,​nbData);​ 
 +        [dataTrainErr{nf},​r,​allPoses,​poses,​motion,​distFI] = temporalAlignmentEval(model,​ dataTrain,​dataTrainErr{nf},​fastDP);​ 
 +    end 
 +    Mtr=[];​Mte=[];​ 
 +    for c=1:​length(cuts)-1 
 +        for bp=1:3 
 +            diff1=[];​diff2=[];​ 
 +            for nf=1:nspp 
 +                diff{nf}=[];​ 
 +            end 
 +            for t=cuts(c)+1:​cuts(c+1) 
 +                for i=(bp-1)*3+1:​(bp-1)*3+3 
 +                    for nf=1:nspp 
 +                        diff{nf}=[diff{nf} logmap(dataTrainErr{nf}{i}.data(:,​t),​dataTrain{i}.data(:,​t))'​];​ 
 +                    end 
 +                end 
 +                if bp<3 
 +                    for i=(bp-1)*3+10:​(bp-1)*3+12 
 +                        for nf=1:nspp 
 +                            diff{nf}=[diff{nf} (dataTrain{i}.data(:,​t)-dataTrainErr{nf}{i}.data(:,​t))'​];​ 
 +                        end 
 +                    end 
 +                end 
 +            end 
 +            Mtr{c}.bodypart{bp}=[];​ 
 +            for nf=1:nspp 
 +                Mtr{c}.bodypart{bp}=[Mtr{c}.bodypart{bp};​ diff{nf}];​ 
 +            end 
 +        end 
 +    end 
 +    Train{cptErr}=Mtr;​ 
 +end 
 +</​code>​ 
 +Il y a principalement deux choses à modifier dans cette partie. La première et le nombre de type d'​erreurs. Dans l'​exemple il y a 3 types d'​erreurs //[1 2 3]//. La seconde variable à modifier est le chemin vers le dossier où sont stockés les exemples d'​erreur //​dirTrain//​. A l'​intérieur de ce dossier, il doit y avoir //n// dossiers appelés //​erreur#​n//​ où //#n// est remplacé par le numéro d'​erreur. 
 + 
 +La quatrième partie concerne l'​apprentissage du modèle SVM à partir des erreurs: 
 +<code matlab>​ 
 +% Learning SVM Modèle 
 +for c=1:​length(Train{1}) 
 +    for bp=1:​length(Train{1}{c}.bodypart) 
 +        X=[];​Y=[];​ 
 +        for err=1:​cptErr 
 +            X=[X;​Train{err}{c}.bodypart{bp}];​ 
 +            Y=[Y;​err;​err];​ 
 +        end 
 +        u=unique(Y);​ 
 +        numClasses=length(u);​ 
 +        for k=1:​numClasses 
 +            G1vAll=(Y==u(k));​ 
 +            svmModelsSegmented{c}.bodypart{bp}.models{k} = fitcsvm(X,​G1vAll,'​KernelScale','​auto','​Standardize',​true);​ 
 +            svmModelsSegmented{c}.exercise=exo;​ 
 +        end 
 +        G1vAll=ones(size(G1vAll));​ 
 +        svmModelsSegmented{c}.bodypart{bp}.errorModel = fitcsvm(X,​G1vAll,'​KernelScale','​auto','​Standardize',​true);​ 
 +    end 
 +end 
 +</​code>​ 
 + 
 +Enfin, la dernière partie permet de sauvegarder le modèle SVM (le nom //fname// peut être modifié) : 
 +<code matlab>​ 
 +% Save 
 +fname=sprintf('​errorFeatures/​errorFeaturesModelAssis3Maxime'​);​ 
 +save(fname,'​svmModelsSegmented'​);​ 
 +</​code>​ 
  • poppy-kine/gmmriemannian.1543502927.txt.gz
  • Last modified: 2019/04/25 14:08
  • (external edit)