AI Training - Tutoriel - Comparer des modèles avec W&B pour la classification audio
Comparez 2 modèles en entraînant 2 jobs en parallèle. Voyez lequel est le meilleur avec vos données !
Objectif
L'objectif de ce tutoriel est de comparer deux méthodes en exécutant deux jobs en parallèle afin de classifier des audios. Pour voir quel modèle est le plus performant en termes de précision, de consommation de ressources et de temps d'entraînement, nous utiliserons l'outil Weights & Biases.
Cas d'usage
Le cas d'usage est la Spoken Digit Database. Elle est disponible sur Kaggle.
La base de données contient des fichiers audio de chiffres de zéro à neuf, enregistrés par différentes personnes. Elle contient au total 1700 fichiers audio.
Licence de la base de données : Attribution 4.0 International (CC BY 4.0)
Modèles d'IA
Pour construire ces classificateurs de sons, nous utiliserons deux méthodes.
Classification audio basée sur les caractéristiques audio
La première méthode consiste à créer un modèle d'intelligence artificielle (IA) pour classifier des fichiers audio en utilisant différentes caractéristiques des sons.
Pour cela, un traitement des données en amont est nécessaire. Chaque son constituera une ligne d'un fichier csv grâce à sa transformation en 26 paramètres calculés par Librosa.
Un réseau de neurones artificiels (ANN) est ensuite construit et entraîné sur 100 epochs. Il prend en entrée les 26 paramètres calculés par Librosa et renvoie en sortie une probabilité pour chaque classe.
Classification d'images basée sur les spectrogrammes
La seconde méthode consiste à créer un modèle de classification d'images utilisant les spectrogrammes de chaque son.
Les données doivent être traitées au préalable. À partir de chaque son, un spectrogramme (une image) est généré à l'aide du module Python Librosa. Un réseau de neurones convolutif (CNN) est ensuite construit et entraîné sur 100 epochs.
Il prend en entrée les spectrogrammes dont la taille est définie et renvoie en sortie une probabilité pour chaque classe.
Outil de comparaison
Deux modèles d'intelligence artificielle de natures différentes sont entraînés pour accomplir la même tâche : classifier des enregistrements audio de personnes prononçant des chiffres de zéro à neuf.
Pour les comparer, nous utilisons l'outil Weights and Biases, qui permet de suivre et d'enregistrer facilement les performances des modèles de deep learning.
Avec Weights & Biases, vous pouvez construire de meilleurs modèles plus rapidement grâce au suivi des expériences, au versioning des jeux de données et à la gestion des modèles.
Dans notre cas, nous pourrons suivre l'évolution des différents modèles en fonction des valeurs de précision et de perte. L'outil nous offre également la possibilité de visualiser les temps d'entraînement et la consommation de ressources (GPU).
Pour en savoir plus sur Weights & Biases, reportez-vous à la documentation.
Les principes de base de l'utilisation de Weights & Biases sont disponibles ici avec AI Notebooks.
Prérequis
- Un projet AI Training créé au sein d'un projet Public Cloud sur votre compte OVHcloud ;
- Un utilisateur pour AI Training ;
- Docker installé sur votre ordinateur local ;
- Vérifiez que vous disposez d'un compte Docker Hub ;
- Quelques connaissances sur la construction d'images et le Dockerfile ;
- Un compte Weights & Biases, que vous pouvez créer sur leur site. C'est gratuit pour les particuliers.
Accès à l'espace client OVHcloud
- Lien direct :
- Pour accéder à vos services :
Public Cloud> Sélectionnez votre projet
En pratique
Vous allez suivre différentes étapes pour traiter vos données et entraîner vos deux modèles.
- Traitement des données plus détaillé dans ce notebook concernant la classification des sons de mammifères marins.
- Le lien direct vers les fichiers Python complets se trouve ici.
Le tutoriel se déroule comme suit :
Nous allons principalement voir comment écrire le code de traitement des données et d'entraînement des modèles, les fichiers requirements.txt et packages.txt, ainsi que le Dockerfile. Si vous souhaitez consulter le code complet, reportez-vous au dépôt GitHub.
Cloner le dépôt GitHub
La première chose à faire est de cloner le dépôt GitHub.
Vous pouvez ensuite vous placer dans le répertoire dédié.
Envoyer votre jeu de données sur Public Cloud Storage
Téléchargez d'abord les données sur Kaggle.
Il s'agit d'un fichier zip (audio_files.zip) ! Nous allons l'envoyer dans un conteneur d'objets nommé spoken-digit.
Si vous souhaitez l'envoyer depuis l', rendez-vous dans la section Object Storage et créez un nouveau conteneur d'objets en cliquant sur Object Storage > Créer un conteneur d'objets.
Dans l'espace client OVHcloud, vous pouvez envoyer des fichiers mais pas des dossiers. Par exemple, vous pouvez envoyer un fichier .zip pour optimiser la bande passante, puis le décompresser plus tard en y accédant via un JupyterLab. Vous pouvez également utiliser l'OVHcloud AI CLI pour envoyer des fichiers et des dossiers (plus stable qu'un envoi via votre navigateur).
Si vous souhaitez le faire avec la CLI, suivez simplement ce guide. Vous devez choisir la région, le nom de votre conteneur et le chemin où se trouvent vos données, puis utiliser la commande suivante :
Vous devriez obtenir :
Écrire les fichiers Python de traitement des données
Pour la partie traitement des données, nous distinguons deux fichiers Python.
Audio vers fichier csv avec extraction de caractéristiques
Le premier fichier Python s'appelle data-processing-audio-files-csv.py. Il permet de transformer tous les sons en paramètres Librosa et de créer un fichier csv.
Reportez-vous aux commentaires du code pour plus d'informations.
L'en-tête du fichier csv :
Audio vers spectrogramme avec génération d'image
Le premier fichier Python s'appelle data-processing-audio-files-spectrograms.py. Il vous permet d'obtenir un spectrogramme (une image) correspondant à chaque son.
Reportez-vous aux commentaires du code pour plus d'informations.
Un exemple de spectrogramme :
Une fois le traitement des données terminé, les modèles d'IA doivent être construits.
Écrire les fichiers Python d'entraînement des modèles
Pour la partie entraînement des modèles, nous distinguons deux fichiers Python.
À propos de la WANDB API KEY : veillez à bien remplacer MY_WANDB_API_KEY par la vôtre dans les deux fichiers Python d'entraînement.
ANN pour la classification audio basée sur les caractéristiques des sons
Un réseau de neurones artificiels est construit pour classifier des audios en fonction de leurs caractéristiques.
Il prend en entrée les 26 paramètres Librosa préalablement normalisés.
Le modèle renvoie en sortie un score entre 0 et 1 pour chaque classe via une fonction d'activation softmax. La classe avec le score le plus élevé est susceptible d'être celle correspondant au chiffre prononcé.
Reportez-vous aux commentaires du code pour plus d'informations.
CNN pour la classification d'images basée sur les spectrogrammes
Un réseau de neurones convolutif est construit pour classifier des images qui sont en réalité des spectrogrammes.
L'avantage d'utiliser des CNN est leur capacité à développer une représentation interne d'une image à deux dimensions. Cela permet au modèle d'apprendre la position et l'échelle dans les différentes structures de données, ce qui est important lorsqu'on travaille avec des images.
Il prend en entrée les spectrogrammes préalablement traités par le générateur de données Keras pour la classification d'images.
Comme précédemment, le modèle renvoie en sortie un score entre 0 et 1 pour chaque classe via une fonction d'activation softmax.
Reportez-vous aux commentaires du code pour plus d'informations.
Pour pouvoir observer et comparer les performances de nos deux modèles, les métriques observées doivent être les mêmes.
L'accuracy nous permettra de mesurer la précision de notre modèle.
sparse_categorical_crossentropy ou categorical_crossentropy nous permettent de mesurer la perte.
Écrire les fichiers requirements.txt et packages.txt
Le fichier requirements.txt nous permettra d'indiquer tous les modules nécessaires au fonctionnement de notre application.
Le fichier packages.txt nous permettra d'installer et d'utiliser le module Librosa et ses dépendances.
Ces fichiers seront utiles lors de l'écriture du Dockerfile.
Écrire le Dockerfile de l'application
Votre Dockerfile doit commencer par l'instruction FROM indiquant l'image parente à utiliser. Dans notre cas, nous choisissons de partir d'une image python:3.9 :
Créez le répertoire personnel et ajoutez-y vos fichiers :
Installez le fichier packages.txt qui contient vos modules Python nécessaires à l'aide d'une commande apt-get install ... :
Installez le fichier requirements.txt qui contient vos modules Python nécessaires à l'aide d'une commande pip install ... :
Donnez les droits d'accès corrects à l'utilisateur OVHcloud (42420:42420) :
N'oubliez pas l'argument --user=42420:42420 si vous souhaitez simuler exactement le même comportement que celui qui se produira sur les jobs AI Training. Il exécute le container Docker en tant qu'utilisateur OVHcloud spécifique (utilisateur 42420:42420).
Ici, nous ne spécifions pas de commande (CMD) à exécuter par défaut puisque nous le ferons directement dans le job AI Training.
Construire l'image Docker depuis le Dockerfile
Lancez l'une des commandes suivantes depuis le répertoire du Dockerfile pour construire l'image de votre application :
N'oubliez pas de remplacer <your-docker-id> par le vôtre.
-
La première commande construit l'image en utilisant l'architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l'architecture
linux/amd64, qui est requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes avec une architecture différente (par exempleARM64surApple Silicon), l'image résultante ne sera pas compatible et ne pourra pas être déployée. -
La seconde commande cible explicitement l'architecture
linux/amd64afin de garantir la compatibilité avec nos services AI. Elle nécessitebuildx, qui n'est pas installé par défaut. Si vous n'avez jamais utilisébuildx, vous pouvez l'installer en exécutant :docker buildx install
L'argument point . indique que votre contexte de build (emplacement du Dockerfile et des autres fichiers nécessaires) est le répertoire courant.
L'argument -t vous permet de choisir l'identifiant à donner à votre image. En général, les identifiants d'image sont composés d'un nom et d'un tag de version <name>:<version>. Pour cet exemple, nous avons choisi audio-classification-models:latest.
Envoyer l'image vers votre Docker Hub
Pour en savoir plus sur le Docker Hub, cliquez ici.
Lancer les jobs
Nous utiliserons ici la CLI ovhai. Si vous souhaitez le faire depuis l'espace client OVHcloud, reportez-vous à cette documentation.
Les jobs sont lancés en deux étapes. D'abord, les jobs de traitement des données sont lancés. Une fois qu'ils sont Done, les jobs d'entraînement peuvent être exécutés.
Pour en savoir plus sur le fonctionnement des jobs et leur statut, consultez cette documentation.
Traitement des données
- Audio vers fichier
csvavec extraction de caractéristiques :
Pour exécuter ce job, vous devez brancher un volume contenant vos sons. Une fois le job au statut Done, votre fichier csv sera synchronisé avec votre Object Storage.
--volume <my-data>@<region>/:/workspace/data:RW:cache est le volume attaché pour le stockage des données. Ce volume est en lecture/écriture (RW) car le fichier csv sera créé et enregistré.
- Audio vers spectrogramme avec génération d'image :
Pour exécuter ce job, vous devez brancher un volume contenant vos sons. Une fois le job au statut Done, votre fichier csv sera synchronisé avec votre Object Storage.
--volume <my-data>@<region>/:/workspace/data:RW:cache est le volume attaché pour le stockage des données. Ce volume est en lecture/écriture (RW) car les spectrograms seront créés et enregistrés.
Ici, les modules Python et leurs dépendances ne sont pas adaptés à l'utilisation de GPUs.
Cependant, ces étapes prennent du temps. Nous utilisons donc autant de CPUs que possible (12).
À la fin du traitement des données, votre conteneur Object Storage devrait se présenter comme suit :
Pour obtenir le statut de vos jobs, exécutez la commande suivante :
Une fois vos données pré-traitées et les deux jobs au statut Done, vous pourrez démarrer vos deux jobs d'entraînement.
Entraînement des modèles
- ANN pour la classification audio basée sur les caractéristiques audio :
Pour exécuter ce job, vous devez brancher un volume contenant vos sons. Une fois le job au statut Done, votre fichier csv sera synchronisé avec votre Object Storage.
--volume <my-data>@<region>/:/workspace/data:RO:cache est le volume attaché pour le stockage des données. Ce volume est en lecture seule (RO) car le fichier csv sera uniquement lu.
- CNN pour la classification d'images basée sur les spectrogrammes :
Pour exécuter ce job, vous devez brancher un volume contenant vos sons. Une fois le job au statut Done, votre fichier csv sera synchronisé avec votre Object Storage.
--volume <my-data>@<region>/:/workspace/data:RO:cache est le volume attaché pour le stockage des données. Ce volume est en lecture seule (RO) car les données spectrograms seront uniquement lues.
Envisagez d'ajouter l'attribut --unsecure-http si vous souhaitez que votre application soit accessible sans authentification.
Vous pouvez maintenant comparer vos modèles avec Weights & Biases.
Comparer avec Weights & Biases
Vous pourrez vérifier l'entraînement de vos modèles une fois vos jobs en statut d'exécution. Exécutez la commande suivante :
Une fois les jobs en statut d'exécution, vous pouvez consulter les logs pour obtenir le lien Weight & Biases. Exécutez la commande :
Vous pouvez maintenant accéder au panneau Weights & Biases. Vous pourrez consulter les valeurs de précision et de perte pour les jeux d'entraînement et de validation.
- Données d'entraînement :
Précision :
Perte :
- Données de validation :
Précision :
Perte :
Vous pouvez ensuite observer quel modèle est le meilleur en termes de vitesse, de précision ou de consommation de ressources...
Dans ce cas, nous constatons que le modèle classifiant les spectrogrammes est meilleur en termes de précision et de perte sur le jeu de validation.
Cependant, il met plus de temps à s'entraîner et consomme plus de ressources de calcul.
Aller plus loin
- Pour construire une app permettant de classifier des audios, reportez-vous à ce tutoriel.
- Vous souhaitez savoir comment construire et utiliser une image Docker personnalisée avec AI Training ? C'est ici.
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
Votre avis nous intéresse !
N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :
- Sur le serveur Discord OVHcloud