Analyse comparative : Choix de la CQT par rapport à la STFT et avantages du VGG19_BN pour la visualisation audio

Ce document présente une approche innovante pour la classification automatique de genres musicaux, baptisée ccmusic-database. Ce système tire parti de la puissance des réseaux de neurones profonds et des techniques avancées de traitement du signal audio pour identifier 16 genres musicaux distincts avec une grande précision.

  1. Le CQT comme alternative pertinente à la STFT

La transformation en temps court de Fourier (STFT) est une méthode courante pour l'analyse temps-fréquence des signaux audio. Cependant, dans le domaine de la musique, elle présente des limitations significatives dues à sa résolution en fréquence linéaire et constante. La musique repose sur des relations harmoniques et mélodiques qui sont mieux représentées sur une échelle logarithmique de fréquence. C'est là qu'intervient la transformation en fréquences constantes (CQT).

1.1 Avantages de la CQT pour l'analyse musicale

  • Alignement avec la perception auditive humaine : La CQT utilise une échelle logarithmique des fréquences, qui correspond mieux à la façon dont l'oreille humaine perçoit les hauteurs musicales. Les intervalles musicaux comme les octaves sont représentés de manière cohérente.
  • Résolution fréquentielle adaptative : La CQT offre une résolution en fréquence plus élevée dans les basses fréquences (où se situent souvent les fondamentales et les informations harmoniques importantes) et une meilleure résolution temporelle dans les hautes fréquences (où se trouvent les partiels et les détails timbraux).
  • Pertinence musicale : Les bandes de fréquences de la CQT sont généralement alignées sur les notes musicales, ce qui permet de mieux capturer les structures harmoniques, les accords et les mélodies.

1.2 Limites de la STFT pour la musique

  • Résolution fixe : La STFT applique la même résolution en temps et en fréquence sur toute la plage spectrale, ce qui n'est pas optimal pour capturer à la fois les nuances fines des basses fréquences et les transitoires rapides des hautes fréquences dans la musique.
  • Représentation non musicale : L'échelle linéaire de fréquence de la STFT ne reflète pas les relations musicales fondamentales basées sur des rapports de fréquences.

Code d'exemple pour la génération de spectrogrammes CQT


import librosa
import numpy as np

def creer_spectrogramme_cqt(chemin_audio, frequence_echantillonnage=22050, taille_fenetre=1024):
   """
   Génère un spectrogramme CQT à partir d'un fichier audio.

   Args:
       chemin_audio (str): Le chemin vers le fichier audio.
       frequence_echantillonnage (int): La fréquence d'échantillonnage du signal audio.
       taille_fenetre (int): La taille de la fenêtre FFT pour la CQT.

   Returns:
       np.ndarray: Le spectrogramme CQT sous forme de tableau NumPy en dB.
   """
   # Charger le signal audio
   signal_audio, sr = librosa.load(chemin_audio, sr=frequence_echantillonnage)

   # Calculer la CQT
   # n_bins : nombre total de bandes de fréquences à calculer
   # bins_per_octave : nombre de bandes par octave (correspond à la résolution logarithmique)
   # hop_length : le nombre d'échantillons entre les centres des fenêtres successives
   cqt_resultat = librosa.cqt(y=signal_audio, sr=sr, hop_length=taille_fenetre, n_bins=84, bins_per_octave=12)

   # Convertir l'amplitude en décibels (dB) pour une meilleure visualisation
   spectrogramme_db = librosa.amplitude_to_db(np.abs(cqt_resultat), ref=np.max)

   return spectrogramme_db

# Exemple d'utilisation :
# chemin_vers_fichier = "votre_musique.wav"
# spec_cqt = creer_spectrogramme_cqt(chemin_vers_fichier)
# print(f"Forme du spectrogramme CQT : {spec_cqt.shape}")
 
  1. VGG19_BN : Un atout pour l'analyse visuelle des spectrogrammes

Une fois l'audio transformé en représentation visuelle (spectrogramme CQT), le système utilise le modèle VGG19_BN, une architecture de réseau de neurones convolutifs (CNN) profonde, initialement conçue pour la classification d'images. Son adaptation à l'analyse de spectrogrammes audio présente des avantages notables.

2.1 L'apport de la normalisation par lots (Batch Normalization)

L'ajout de couches de normalisation par lots (BN) dans VGG19 améliore considérablement la stabilité et la vitesse d'entraînement. La BN aide à régulariser le réseau, réduisant la dépendance aux initialisations de poids et permettant l'utilisation de taux d'apprentissage plus élevés. Cela se traduit par un modèle plus robuste et plus rapide à converger.

2.2 L'expertise en extraction de caractéristiques visuelles

VGG19_BN, pré-entraîné sur de vastes ensembles de données d'images comme ImageNet, a développé une capacité exceptionnelle à extraire des caractéristiques hiérarchiques. Ces caractéristiques, allant des bords et textures simples aux motifs complexes, sont également pertinentes pour identifier des structures dans les spectrogrammes musicaux. Les couches profondes du réseau peuvent apprendre à reconnaître des patterns temporels et fréquentiels caractéristiques de différents genres musicaux.

Code d'exemple pour l'adaptation de VGG19_BN


import torch
import torchvision.models as models
from torch import nn

def creer_modele_classification_vgg19bn(nombre_classes=16):
   """
   Crée un modèle de classification basé sur VGG19_BN pour l'analyse de spectrogrammes.

   Args:
       nombre_classes (int): Le nombre de genres musicaux à classifier.

   Returns:
       torch.nn.Module: Le modèle VGG19_BN adapté.
   """
   # Charger VGG19_BN pré-entraîné sur ImageNet
   modele_base = models.vgg19_bn(weights=models.VGG19_BN_Weights.IMAGENET1K_V1)

   # Geler les poids des couches de caractéristiques pour le transfert d'apprentissage
   for parametre in modele_base.features.parameters():
       parametre.requires_grad = False

   # Modifier la tête de classification pour notre tâche spécifique
   # Le nombre de neurones dans la dernière couche de pooling de VGG19 est 25088 (512 * 7 * 7)
   nombre_entrees_classifieur = modele_base.classifier[0].in_features
   modele_base.classifier = nn.Sequential(
       nn.Linear(nombre_entrees_classifieur, 4096),
       nn.ReLU(True),
       nn.Dropout(p=0.5),
       nn.Linear(4096, 4096),
       nn.ReLU(True),
       nn.Dropout(p=0.5),
       nn.Linear(4096, nombre_classes)  # Couche de sortie avec le nombre de genres
   )

   return modele_base

# Exemple d'utilisation :
# modele_vgg = creer_modele_classification_vgg19bn(nombre_classes=16)
# print(modele_vgg)
 
  1. Architecture et Flux de Traitement

Le système intègre ces deux composants clés dans un flux de traitement cohérent :

  1. Chargement et prétraitement audio : Les fichiers audio sont chargés, normalisés et convertis à une fréquence d'échantillonnage commune.
  2. Conversion en spectrogramme CQT : L'audio est transformé en une représentation temps-fréquence CQT, puis redimensionné pour correspondre aux dimensions d'entrée attendues par VGG19_BN (par exemple, 224x224 pixels). Le mappage des valeurs CQT en une image couleur peut être optimisé.
  3. Extraction de caractéristiques par VGG19_BN : Le modèle VGG19_BN traite le spectrogramme pour en extraire des caractéristiques profondes.
  4. Classification : La nouvelle tête de classification du modèle prédit le genre musical le plus probable.
  5. Post-traitement : Les résultats sont affichés avec un score de confiance, indiquant les genres les plus probables.

L'utilisation de la CQT, grâce à sa résolution adaptative et son échelle logarithmique, combinée à la puissance d'extraction de caractéristiques visuelles de VGG19_BN, offre une approche performante et bien adoptée aux subtilités de l'analyse musicale.

Étiquettes: audio analysis music genre classification CQT STFT VGG19_BN

Publié le 29 juillet à 06h01