Mise en place d'un système de reconnaissance
Objectif
L'objectif de ce mini-projet est de mettre en place tous les outils vus dans ce module pour l'apprentissage et la reconnaissance afin de définir un système complet.
Données
Les données que vous allez manipuler sont des fichiers audio issus d'un corpus de différents sons correspondant à des phrases ou mots. Ce corpus est extrait du projet open-source Common Voice de mozilla.
Un ensemble de fichiers vous est donc fourni, chacun au format compressé mp3. Ils sont situés dans le répertoire /scratch/I322/DATA/clips/ des machines de TP (accessible aussi dans cette archive ). Un fichier train.tsv qui contient une description d'une partie des fichiers est également présent. Vous ne traiterez que les fichiers audio décrits dans ce fichier.
Si vous devez créer de nouvelles données, pour éviter de surcharger votre compte et les accès réseaux lors des phases d'apprentissage et de reconnaissance, vous avez la possibilité de créer un sous-répertoire dans ce répertoire /scratch/. Notez toutefois que le répertoire /scratch/ est local à la machine.
Outils
Pour réaliser ce mini-projet, vous pourrez utiliser plusieurs outils:
- le shell-script et ses multiples commandes utiles:
- mkdir, cd, cp, mv,
- ln -s pour éviter des recopies inutiles,
- df et du pour gérer l'espace disque,
- head, tail, cat, echo,
- grep, find, sed voire awk,
- sox pour la manipulation (transcodage) de fichiers sons.
- vos propres outils réalisés en Python (ZCR)
- la boite à outils HTK disponible également dans le répertoire /scratch/I322/HTK/HTKTools/
- HCopy pour l'extraction de paramètres,
- HInit, HERest etc pour l'apprentissage des modèles,
- HCompV, HHEd pour l'initialisation et la manipulation des modèles,
- HVite et HResults pour évaluer le système.
- une documentation de cet outil est disponible ici : documentation ou en pdf.
Travail
Le but de ce mini-projet est de définir un système qui reconnaîtra soit:
- Le genre du locuteur (homme/femme),
- La classe d'âge du locuteur (adolescent, vingtaine, etc),
- L'accent du locuteur (français, belge, suisse),
Chaque groupe d'étudiant traitera un des points précédents.
Paramétrisation
Plusieurs paramètres sont possibles: ZCR, spectrogramme, MFCC. Vous en testerez plusieurs. Il sera à vous de définir le(s) paramètre(s) pour chaque méthode.
Modélisation
Le thème à reconnaître de chaque sujet n'inclus a priori pas de notion de séquentiallité. Ainsi, il ne sera pas forcément nécessaire d'utiliser une modélisation par HMM. Toutefois, pour des raisons d'efficacité, nous allons utiliser la boite à outils HTK et modéliser chaque classe par un modèle GMM. En effet, un GMM sera vu comme un HMM à un seul état. Cependant, si vous sentez la nécessité d'utiliser une modélisation pleinement HMM, vous pouvez le faire.
Apprentissage, développement
Pour définir votre système de reconnaissance, vous séparerez le corpus en 2 sous-corpus disjoints:
- un pour l'apprentissage (70%),
- un pour le développement, mise au point des paramètres (30%)
Le phase d'évaluation finale se fera sur un corpus de test indépendant. Le critère d'évaluation sera le taux de reconnaissances correctes. La granularité de la reconnaissance étant celle de la reconnaissance d'un fichier son. Vous donnerez également la matrice de confusion sur votre corpus de développement.
Si vous sentez que votre corpus est trop petit, vous pouvez mettre en place ce qu'on appelle une « validation croisée » : vous découpez votre corpus en n parties égales, vous faites n apprentissage avec à chaque fois n-1 parties pour l'apprentissage et 1 pour le développement, mais en choisissant à chaque fois une partie différente pour de développement. Puis, vous effectuez une moyenne du taux de reconnaissance de chaque système. Ceci sera le taux de votre système final.
Utilisation d'HTK
La plupart des différents programmes de la boite à outils HTK nécessitent une multitude de paramètres, notamment concernant les données. Il vous est fortement recommandé de définir un fichier de configuration pour ceux-ci. Vous pourrez ainsi l'utiliser pour la transformation des données (HCopy) ou l'apprentissage (HERest).
Afin de pouvoir déboguer plus facilement, vous ajouterez les paramètres suivants:
- SAVECOMPRESSED = F
- SAVEWITHCRC = F
- NATURALWRITEORDER = T afin d'écrire en little endian
- NATURALREADORDER = T afin de lire en little endian
Pour l'estimation des paramètres de vos modèles, n'oubliez-pas les paramètres suivants à donner à la commande HERest: -C, -t, -T, -H, -I, -M et -S.
Pour augmenter de nombre de gaussienne d'un modèle, vous pourrez utiliser la commande HHEd.
La commande HVite vous permettra d'effectuer la phase de reconnaissance que vous pourrez ensuite évaluer à l'aide de HResults.
Pour estimer un modèle, HTK a besoin d'une description de la structure de celui-ci avec des valeurs initiales. Ce modèle initial peut être dérivé du résultat obtenue par la commande HCompV.
N'utilisez pas le caractère jocker * dans vos fichiers .MLF.
Travail à distance
Si pour des raisons sanitaires nous devions de nouveau travailler à distance, il sera alors possible de travailler depuis chez vous sur ce projet en passant par le VPN de l'université.
Une fois votre connexion VPN active, vous aurez accès en ssh aux machines de la salle de TP. Répartissez-vous sur l'ensemble des machines de la salle U-004 qui sont nommées ainsi : u-004-1.univ-tln.fr, u-004-2.univ-tln.fr, ..., u-004-20.univ-tln.fr . Ne lancez rien de distant qui nécessite une interface graphique (navigateur, éditeur en mode fenêtre, etc).
Par exemple, pour utiliser les notebooks python, dans votre terminal distant, par exemple sur la machine u-004-1.univ-tln.fr, utilisez les commandes suivantes :
>$ jupyter-notebook --ip 0.0.0.0 --no-browser [I 08:58:20.109 NotebookApp] Writing notebook server cookie secret to /run/user/2732/jupyter/notebook_cookie_secret [I 08:58:24.018 NotebookApp] [jupyter_nbextensions_configurator] enabled 0.4.1 [I 08:58:24.036 NotebookApp] Serving notebooks from local directory: /home/perso/razik [I 08:58:24.036 NotebookApp] 0 active kernels [I 08:58:24.036 NotebookApp] The Jupyter Notebook is running at: [I 08:58:24.036 NotebookApp] http://0.0.0.0:8888/?token=1ff509131d0055ff51a53e8af2a6ae172332b17e27b4851a [I 08:58:24.036 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 08:58:24.036 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://0.0.0.0:8888/?token=1ff509131d0055ff51a53e8af2a6ae172332b17e27b4851a
Ensuite, dans le navigateur local de votre ordinateur, ouvrez l'url indiquée mais en remplaçant l'ip 0.0.0.0 par le nom de la machine sur laquelle vous êtes connectés. Donc avec cet exemple, ce sera l'url http://u-004-1.univ-tln.fr:8888/?token=1ff509131d0055ff51a53e8af2a6ae172332b17e27b4851a
Attention, les machines ne sont pas constamment allumées (extinction entre 20h et 8h). Si une des machines que vous voulez utiliser est éteinte en journée, contactez l'ingénieur en charge, Jean-Marc Prévot (sauf le mercredi).