1. Introduction 2. Extraction des descripteurs

publicité
 TP Signal Image 2012 : Apprentissage Automatique TP Apprentissage Automatique Date : 23 Mars 2012 Auteur : Mathieu Lagrange 1. Introduction Ce TP vise à construire un système simple de détection de la voix chantée dans un flux audio. Au final, l’entrée du système est un fichier wav contenant la totalité du signal audio, et la sortie sera une classification de l’audio à deux classes (chantée ou non-­‐
chantée). Pour arriver à cela, nous allons construire un modèle pour la détection de la voix chantée à l’aide des méthodes d’apprentissage automatique. Nous avons à notre disposition une base de données de soixante fichiers de musique pop de 15 secondes, tirés aléatoirement, et labélisés pour indiquer le début et la fin de la voix chantée. Le rôle d’apprentissage automatique est donc d’inférer des modèles satisfaisant à partir de ces données d’apprentissage pour pouvoir classifier des fichiers audio comme décrits. Pour modéliser la connaissance d’apprentissage nous allons nous appuyer sur des mélanges de distributions (comme compromis entre les modèles paramétriques et densités noyaux). La loi de décision sera ensuite la loi MAP, ou la vraisemblance des classes en absence de l’information à priori. Pour préparer votre environnement de travail, téléchargez le fichier suivant et le décompresser sur votre machine : http://cosmal.ucsd.edu/arshia/ATIAM/ATIAM_TP_ML09.zip Lancez Matlab, et allez vers le dossier que vous venez de décompresser dans Matlab. Ajoutez le toolbox NETLAB à votre environnement Matlab : >> addpath(‘netlab’)
2. Extraction des descripteurs La première étape de modélisation est de choisir comment nous allons décrire ou représenter les sons (soit pour l’apprentissage ou au moment de la décision). Notre base de données d’apprentissage contient de la musique (dossier music) et également des labels (dossier label) comportant le même nom que le fichier son. Vous pouvez chargez les fichiers son dans Matlab et les écouter : [d,sr] = wavread(fullfile('music','3.wav'));
soundsc(d,sr);
Également, vous pouvez lire les labels correspondant en utilisant la commande textread dans Matlab: 1 TP Signal Image 2012 : Apprentissage Automatique [stt,dur,lab] = textread(fullfile('labels','3.lab'), '%f %f
%s','commentstyle','shell');
[stt(1:4),dur(1:4)]
% regardons des données un peu
ans =
0
3.3470
3.3470
1.0540
4.4010
2.6190
7.0200
1.2860
lab(1:4)
ans =
'vox'
'mus'
'vox'
'mus'
% donc 3.wav commence par 3.35 de voix, ensuite la musique, etc.
Pour notre tâche de classification, nous n’allons pas utiliser la forme d’onde des sons, mais des coefficients cepstraux, à l’aide de la fonction mfcc.m (écrit par Malcolm Slaney). Pour les voir, % MFCCs on a 20ms timebase:
cc = mfcc(d,sr,1/0.020);
% How big is it?
size(cc)
ans =
13
749
% First 13 cepstra (0..12) is standard;
% Take a look at the cepstra:
figure,imagesc(cc)
axis xy
% It's hard to see much in the cepstra.
% C0 is scaled differently because it's the average.
À part les coefficients MFCC, nous allons ajouter leur première et deuxième dérivée pour ajouter une dimension temporelle aux données : >> cc = [cc; deltas(cc); deltas(deltas(cc,5),5)];
>> size(cc)
ans =
39
11987
Au final, nous avons besoin de ranger tous les descripteurs et labels par trame d’analyse. Pour vous faciliter la vie, toutes les données d’apprentissage sont préparées et disponibles dans le fichier ftrslabs.mat . Vous pouvez le charger dans Matlab : load ftrslabs.mat
Nous avons maintenant les données d’apprentissage prêt dans la matrice ftrs, avec les descripteurs dans les lignes, et une autre variable labs scalaire avec les labels correspondants (pour chaque ligne de ftrs où 1 indique chantée). Nous sommes maintenant prêt à modéliser/apprendre notre classifieur ! 3. Modèle de mélange Gaussien Si on savait la distribution des descripteurs pour notre classification (chantée ou non-­‐
chantée), on pourrait classifier des nouveaux arrivés en utilisant le ratio de 2 TP Signal Image 2012 : Apprentissage Automatique vraisemblance des deux classes. Pour cela, nous allons estimer les PDFs des échantillons individuels dans notre base d’apprentissage. Pour avoir une idée, nous allons d’abord examiner les données en utilisant seulement 2 dimensions (pour pouvoir les visualiser), mais en pratique on voudrait utiliser toutes les dimensions possibles (donc 39 dimensions dans notre cas). Comparons les deux premières dimensions du cepstre pour toutes les données d’apprentissage : % Sort training data into sung and unsung frames
ddS = ftrs(labs==1,:);
ddM = ftrs(labs==0,:);
% Compare scatter plots of 1st 2 dimensions
% First with sung frames (red dots) in front:
subplot(221)
plot(ddM(:,1),ddM(:,2),'.b',ddS(:,1),ddS(:,2),'.r')
% then with unsung frames (blue dots) in front:
subplot(222)
plot(ddS(:,1),ddS(:,2),'.r',ddM(:,1),ddM(:,2),'.b')
% Heavily overlapped, but some difference...
Maintenant, nous allons estimer une PDF continue sur ces deux ensembles en utilisant un mélange de Gaussiennes à 2 dimensions, avec le fameux algorithme EM. Nous allons utiliser les fonctions de Netlab qui implémentent les modèles et méthodes d’apprentissage pour nous. Pour utiliser Netlab, vous allez utiliser les fonctions suivantes. Vous devez regarder le help de chaque fonction pour vous familiariser (e.g. >>help gmm) o Gmm.m : Création du modèle de mélange de Gaussiennes (GMM). o Gmminit.m : Initialisation du modèle avec k-­‐Means sur les données. o Gmmem.m : Algorithme EM pour GMM. o Gmmprob.m : Calcule de la probabilité d’une donnée sur le GMM appris. I. Écrivez une fonction traingmms qui prend comme entrée : o Ensemble des descripteurs o Les labels correspondants o Et un entier indiquant le nombre de Gaussiennes par chaque GMM Qui apprend deux GMMs pour chaque classe (chantée/non-­‐chantée) en utilisant des fonctions de Netlab. La fonction imprime la précision du classifieur en pourcentage en utilisant les modèles appris et des données d’apprentissage elles-­‐mêmes. La sortie de la fonction sera les deux modèles GMM appris sur les données (sortie de gmmem) plus la précision calculée. L’entête de votre fonction ressemblera donc à : [gmS, gmM, precision] = traingmms (ftrs, labs, nmix) Pour la partie apprentissage, votre fonction doit : o Créer deux GMMs (avec fonction gmm) pour chaque classe o Utilisez ‘diag’ comme troisième paramètre (Matrice de covariance diagonale) o Initialiser chaque GMM avec K-­‐Means et les données séparées o Mettez le nombre maximal d’itérations à 5 (ou options(14)=5) 3 TP Signal Image 2012 : Apprentissage Automatique o Apprendre les modèles avec algorithme EM o Mettez le nombre maximal d’itérations à 20 (ou options(14)=20) Par exemple, pour utiliser juste les deux premières dimensions des descripteurs pour apprendre des GMMs à 5 Gaussiennes vous devez arriver à: [M0,M1] = traingmms(ftrs(:,[1 2]),
Warning: Maximum number of iterations
Warning: Maximum number of iterations
Warning: Maximum number of iterations
Warning: Maximum number of iterations
Accuracy on training data = 66.1%
Elapsed time = 36.7439 secs
labs, 5);
has been exceeded
has been exceeded
has been exceeded
has been exceeded
II. Evaluez la précision de votre classifieur, en variant : a. Le nombre de dimensions des descripteurs utilisés pour un nombre de mélange fixé (5). (Faites des pas de 5 : 5, 10, 15,…, 39) b. Le nombre de mélanges (variant de 5 à 10), pour des descripteurs à 5 dimensions. (5, 10, 15, 20) Fournissez deux plot qui montrent l’évolution de la précision en fonction de la dimension des données et la complexité d’apprentissage. 4. Évaluation Mesurer la performance sur la base de données d’apprentissage peut vous dire si votre modèle est en train d’apprendre ou pas, mais ce n’est pas une bonne mesure de performance dans le monde réel! L’évaluation doit se faire normalement sur des données qui n’ont pas été utilisées pour l’apprentissage. Nous allons donc évaluer notre système sur le fichier « dont_you_want_me-­‐human_league.wav » qui a été labélisé auparavant pour pouvoir tester la performance de notre système. Il y a plusieurs façons et mesures pour évaluer notre modèle. Pour ce TP, nous allons produire le résultat de classification pour chaque trame d’analyse, et ensuite le comparer par les labels correspondants. Les trames d’analyses ainsi que les labels correspondants viennent automatiquement par le chargement du fichier evaldata.mat (cc et lsamp respectivement). >> load evaldata.mat
% va charger: cc
lsamp
tt
III. En utilisant votre fonction traingmms, faire apprendre des GMMs en utilisant les dimensions [[1:4] [14:17] [27:30]] des données (ftrs), et sur des mélanges de 20 Gaussiennes. Faites ensuite une classification des données d’évaluation (cc – avec les mêmes dimensions utilisées lors de l’ apprentissage), calculez la précision en comparant le résultat avec des labels (lsamp). 4 TP Signal Image 2012 : Apprentissage Automatique 5. Malédiction de la dimensionalité Calculer et afficher l’histogramme des distances entre 1000 points d’un espace à n-­‐
dimensions, pour n = [2; 10; 100; 1000]. Pour cela, il vous est demandé d’implanter la fonction myDist(a), qui à partir d’une matrice contenant les vecteurs de description d’un ensemble d’objets, calcule toutes les paires de distance au sens de la norme euclienne (utiliser la fonction norm). Le résultat attendu est une matrice carrée à diagonale nulle. Au vu des différents histogrammes, en déduire une conséquence directe pour toute application pratique utilisant la notion de divergence entre objets représentés sous forme de vecteurs de caractéristiques. 6. Classification non paramétrique L’algorithme de classification des plus proches voisins, classifie une observation avec l’étiquette la plus souvent associée aux n-­‐plus proches voisins de cette observation au sein de la base d’apprentissage. Proposer un schema de classification base sur cette approche répondant au probleme de la detection de la partie chantée. Pour la base considérée ici, quel est le n optimal ? 5 
Téléchargement