Creando un canalización de clasificación de audio para identificar compositores de música clásica

Creando canalización clasificación audio para identificar compositores música clásica

Una guía paso a paso para construir el modelo de clasificación de aprendizaje automático basado en audio para varios compositores clásicos de primer nivel y hacerlo funcionar a través de Hugging Face

Foto de Stefany Andrade en Unsplash

Mientras descubrir la autoría de la música clásica compuesta puede parecer una tarea fácil para un entrenador humano, puede no serlo tanto para un algoritmo de aprendizaje automático.

Para superar esa dificultad, aquí muestro detalladamente cómo se puede construir su propio proceso de clasificación de audio y ponerlo a disposición del público en general utilizando varias herramientas gratuitas disponibles, como:

  • MusicNet Dataset: una colección seleccionada de 330 grabaciones de música clásica con licencia gratuita (CC0: Dominio público);
  • Notebooks de Kaggle: un servicio popular de propósito amplio que proporciona, por ejemplo, una capa gratuita de NVIDIA TESLA P100 GPU disponible para usuarios registrados de Kaggle para entrenar los modelos de aprendizaje automático;
  • El modelo wav2vec2-base-960h de Meta con alrededor de 95 millones de parámetros entrenables preentrenados y ajustados en 960 horas de audio de habla muestreado a 16 kHz en Librispeech, utilizado para entrenar los datos de audio de muestra de MusicNet:
  • finalmente, el portal de HuggingFace para entrenar, compartir y servir los modelos de aprendizaje automático.

Todo el código de principio a fin para seleccionar los datos, entrenar el modelo y enviarlo al repositorio de HuggingFace está disponible públicamente aquí. A continuación, describo los pasos más importantes.

Selección y muestreo de datos para la clasificación de audio de varias clases

Después de cargar los datos iniciales, se vuelven a muestrear a una frecuencia de 16 kHz, se convierten en una matriz NumPy utilizando la biblioteca torchaudio y se truncan aún más a muestras de 100 segundos para ahorrar memoria durante el entrenamiento:

def get_transform_audio(file):    audio,rate = torchaudio.load(str(file))    transform = torchaudio.transforms.Resample(rate,RATE_HZ)    audio = transform(audio).squeeze(0).numpy()    return audio[:MAX_LENGTH] # truncar hasta la primera parte del audio para ahorrar RAMdd['audio'] = dd['file'].progress_apply(get_transform_audio)