$$ \newcommand{\dint}{\mathrm{d}} \newcommand{\vphi}{\boldsymbol{\phi}} \newcommand{\vpi}{\boldsymbol{\pi}} \newcommand{\vpsi}{\boldsymbol{\psi}} \newcommand{\vomg}{\boldsymbol{\omega}} \newcommand{\vsigma}{\boldsymbol{\sigma}} \newcommand{\vzeta}{\boldsymbol{\zeta}} \renewcommand{\vx}{\mathbf{x}} \renewcommand{\vy}{\mathbf{y}} \renewcommand{\vz}{\mathbf{z}} \renewcommand{\vh}{\mathbf{h}} \renewcommand{\b}{\mathbf} \renewcommand{\vec}{\mathrm{vec}} \newcommand{\vecemph}{\mathrm{vec}} \newcommand{\mvn}{\mathcal{MN}} \newcommand{\G}{\mathcal{G}} \newcommand{\M}{\mathcal{M}} \newcommand{\N}{\mathcal{N}} \newcommand{\S}{\mathcal{S}} \newcommand{\diag}[1]{\mathrm{diag}(#1)} \newcommand{\diagemph}[1]{\mathrm{diag}(#1)} \newcommand{\tr}[1]{\text{tr}(#1)} \renewcommand{\C}{\mathbb{C}} \renewcommand{\R}{\mathbb{R}} \renewcommand{\E}{\mathbb{E}} \newcommand{\D}{\mathcal{D}} \newcommand{\inner}[1]{\langle #1 \rangle} \newcommand{\innerbig}[1]{\left \langle #1 \right \rangle} \newcommand{\abs}[1]{\lvert #1 \rvert} \newcommand{\norm}[1]{\lVert #1 \rVert} \newcommand{\two}{\mathrm{II}} \newcommand{\GL}{\mathrm{GL}} \newcommand{\Id}{\mathrm{Id}} \newcommand{\grad}[1]{\mathrm{grad} \, #1} \newcommand{\gradat}[2]{\mathrm{grad} \, #1 \, \vert_{#2}} \newcommand{\Hess}[1]{\mathrm{Hess} \, #1} \newcommand{\T}{\text{T}} \newcommand{\dim}[1]{\mathrm{dim} \, #1} \newcommand{\partder}[2]{\frac{\partial #1}{\partial #2}} \newcommand{\rank}[1]{\mathrm{rank} \, #1} $$

Audio Classification

Introduction

La base de données free-spoken est une base de 2000 signaux audio (.wav) constituée des chiffres de 0 à 9 prononcés chacun 50 fois par quatre différents speakers masculins anglophones (jackson, nicolas, theo, yweweler). A partir de cette base de données, le but de ce projet est de construire sous Keras deux réseaux de neurones en parallèle : un pour la classification du speaker (4 classes) et un pour la classification des chiffres (10 classes).

Il existe de nombreuses façons de représenter un signal sonore. Vous utiliserez la librairie librosaqui dispose de nombreuses fonctions spécialisées dans l’extraction de caractéristiques sonores (see features extraction librosa). Vous pouvez utiliser pour caractéristiques le mel-scaled spectrogram qui permet de représenter visuellement l’évolution du contenu fréquentiel d’un signal au cours du temps.

Afin de pouvoir utiliser cette librairie, vous utiliserez google colab qui permet de profiter d’un environnement python plus adapté. Pour vous aider sur la partie fastidieuse du travail, un début de notebook python ProjetAudio est fourni.

Il contient l’installation de la librairie librosa, le chargement du dataset, et la création des mel-scaled spectrogram.

Pour l’entraînement et le test des vos réseaux, il faudra veiller à utiliser le même nombre d’occurrences de chaque classe. Pour ce faire, vous diviserez de manière aléatoire votre dataset en prenant $N$ ($N$ à choisir) occurrences de chaque mot pour chaque speaker pour vos données d’entraînement, et donc $50-N$ occurrences pour vos données de test.

HomeWork

La première étape concerne la mise en forme des données à partir des signaux audio : génération des entrées du réseau (mel-scaled spectrogram) et labelisation des données.
Il vous reste donc seulement à procéder à la création des labels. Les noms des fichiers audio sont de la forme chiffre_speaker_occurence.wavchiffre est un entier compris entre $0$ et $9$, speaker est une chaîne appartenant à {"jackson", "nicolas", "theo", "yweweler"}, et occurence est un entier compris entre $0$ et $49$. Un exemple de fichier est : 1_jackson_18.wav.

  1. Faire une fonction Python permettant la mise en forme des données, à savoir la création de couples (mel-scaled spectrogram, labels).
  2. La suite sur travail consiste à construire vos deux réseaux de neurones, les entraîner et évaluer leurs performances.
  3. Proposez une architecture de réseau de neurones prenant en entrée un mel-spectrogramme et prédisant le speaker. Vous justifierez vos choix (types de couches utilisées, fonctions d’activations,...). Un schéma de synthèse pourra être réalisé. Faire de même pour la prédiction du chiffre.
  4. Entraînez vos deux réseaux de neurones, puis quantifiez leurs performances respectives. Il est demandé de faire un analyse soignée des résultats (présentez les résultats sous forme de matrices de confusion et analysez les résultats obtenus)
  5. Fusionner les prédictions de ces deux réseaux de neurones en parallèle et évaluer la performance globale (une prédiction sera bonne lorsque à la fois le speaker et le mots prononcé ont été correctement prédits).

Les deux questions principales posées dans ce problème sont les suivantes :

  • Est-ce que le réseau prédisant le chiffre est capable de généraliser à d’autres voix que celles sur lesquelles il a été entrainé ?
  • Est-ce que le réseau prédisant le speaker est capable de généraliser à d’autres mots que ceux sur lesquels il a été entrainé ?
  • Pour apporter des élements de réponses vous pouvez respectivement :
    1. utiliser les données de trois speakers pour l’entraînement de votre réseau prédisant le chiffre, puis tester les performances sur les données du quatrième speaker pour évaluer si le réseau prédisant le chiffre possède des capacités de généralisation à une nouvelle voix.
    2. utiliser seulement sept des chiffres pour l’entrainement de votre réseau prédisant le speaker, puis tester les performances sur les trois chiffres restants pour évaluer si le réseau est capable de reconnaitre le speaker sur des nouveaux mots prononcés.

    Livrables

    Les livrables à fournir sont :

    • Un rapport pdf d’environ 10 pages expliquant, le sujet, le choix de votre démarche, la mise en oeuvre, les tests réalisés, et l’analyse soignée des résultats.
    • Les fichiers Python commentés.
    Le rapport et le travail (mise en oeuvre en Python) conduiront à la note d’évaluation. Il est important de noter que l’originalité de la démarche et la pertinence de l’analyse des résultats auront une grande importance dans l’évaluation.
    Pour vous aider, voici un notebook détaillant les différentes étapes d’un projet deep learning (RESSOURCE). N’hésitez pas à vous en inspirer lors de vos créations de réseaux dans le futur.

    References