Como fallar en generar “corridos tumbados” mediante IA

“Corridos tumbados” y Machine Learning

Martin vega
LCC-Unison
6 min readMay 24, 2021

--

Photo by Russ Photographer on Unsplash

Eliud Gilberto Rodríguez Martínez, Hugo Francisco Cano Beyliss, Martín José Vega Noriega.

Universidad de Sonora, Licenciatura, Hermosillo, Sonora,
México

mjvnor@outlook.com, slabxcobra@gmail.com, eliud.giroma@gmail.com.

Resumen. Este proyecto fue hecho con el objetivo de generar corridos tumbados mediante redes neuronales para la clase de redes neuronales del profesor Julio Waissman. Nos dimos a la tarea de usar distintos métodos para generar canciones, utilizando diferentes redes neuronales como RNNs, WaveNets, y sintetizadores. Aquí explicamos porque pudimos realizar dicha tarea pero con el inconveniente de que los resultados no son los esperados debido a diversos problemas que surgieron a la hora de realizar dicha tarea como problemas con un dataset con mucho ruido (tienen mas de un instrumento) y los problemas de no tener un equipo requerido para manejar grandes redes.

Palabras clave: corridos tumbados, redes neuronales, lstm, wavenet, n-synth, keras

El por que del proyecto

Decidimos hacer este proyecto debido a una tarea que nos asignaron en la clase de redes neuronales del profesor Julio Waissman Vilanova, esta tarea se trataba de generar música a partir del uso de redes neuronales recurrentes y nosotros decidimos aprovechar esta oportunidad para crear corridos tumbados, los cuales son muy populares principalmente en el norte de México.

¿Qué son los corridos tumbados?

Los corridos tumbados son una aberración del regional mexicano los cuales son una variante del corrido tradicional pero con inclusiones del hip-hop y trap, sus cantantes suelen portar vestimentas características del trap. Sin duda una chulada que deberías escuchar.

Lo que hicimos…

Lo primero que intentamos

Para nuestro caso no hay ningún dataset de MIDIs de corridos tumbados, así que nos dimos a la tarea de crear uno. Primero quisimos generar corridos tumbados con todos los instrumentos que tienen ese tipo de canciones, pero nos dimos cuenta que era demasiado tardado y difícil de implementar, así que utilizamos el programa “SpleeterGui” para sacar los requintos de los corridos tumbados que teníamos a nuestra disposición. ¿Por qué el requinto?, el requinto es el instrumento principal de los corridos tumbados, sin ese instrumento estos no serían corridos tumbados. Utilizamos una IA proporcionada por Google que se llama “Onsets and Frames” la cual es un framework de transcripción automática de música con modelos de piano y batería, que nos va a ayudar a transformar nuestros requintos a MIDIs.

  • Colab:

Generamos alrededor de 241 corridos tumbados en el formato MIDI y de estos sacamos las notas y los acordes con ayuda de una biblioteca llamada “music21” y las metemos como entrada a nuestra red. Tomamos entonces una red neuronal recurrente tipo lstm para generar corridos tumbados (hicimos lo mismo en nuestro ultimo intento) y este es el resultado:

  • Colab:

Por que fallamos

Fallamos debido a que nuestro dataset no fue lo suficientemente bueno, este contenía demasiado ruido y contenían otros instrumentos aparte de los requintos. También nos hizo falta hacer más epochs para que se generaran mejor las canciones ya que si dejábamos que hiciera más epochs tardaba más de 15 horas y el colab ya no te permite usar la gpu cuando sobrepasas ese tiempo.

Lo segundo que intentamos

Lo segundo que intentamos fue usar un proyecto de magenta llamado de N-SYNTH, que es un sintetizador neural. Los sintetizadores N-SYNTH manipulan datos en vez de manipular el sonido; analiza los archivos de audio, aprende cómo se relacionan los datos y luego produce nuevos archivos de audio desde cero. Para escuchar música con calidad cercana a la vida real, se necesitan 48000 samples. Este sintetizador genera un sample a la vez basado en unas de las cuantas miles de samples anteriores, así como el audio en el que ha sido entrenado y suena un poco peor debido a que en vez de los 48000, se usan 16,000 samples, que sigue siendo bastante.

  • Resultado:
  • Colab:

Por que fallamos

El algoritmo fue entrenado con sonidos agudos, entrenó con 300,000 notas de mil instrumentos diferentes. Cuando se combinan dos sonidos que son completamente diferentes, es más complicado para el sintetizador ya que tiene que manejar más sonidos que solo notas simples, aparte del hecho que el sintetizador está entrenado en sonidos agudos, por lo que tratará de interpretar cualquier otra frecuencia como aguda, lo que hace que, aparte de crearse en baja calidad por usar los 16,000 samples, se creen melodías raras debido a la posible falta de instrumentos, y el querer tomar la frecuencia como aguda, generando aberraciones de audios que parecen de películas de terror.

Lo último que intentamos

Lo último que intentamos usar fue una wavenet. Se usa una versión simplificada de la arquitectura de una WaveNet sin añadir conexiones residuales ni conexiones saltables ya que el rol que cumplen estas capas es el de mejorar la convergencia rápida y WaveNet toma ondas de audio en bruto como entrada, pero, en nuestro caso, la entrada sería un set de nodos y acordes, ya que estamos generando música.

  • Resultados:

Junior H (best 5) | 50 epoch

Junior H (best 5) | 500 epoch

Full dataset | 50 epoch

Full dataset | 200 epoch

  • Colab:

Por que fallamos

Son varias las posibilidades pero lo que creemos fue que el modelo no consiguió sacar las características importantes de las canciones, esto debido a que el modelo funcionaba con un solo tipo de instrumento, y nosotros al tener un dataset no tan limpio como nos gustaría, este introducía ruido afectando a la fase de aprendizaje, además podría darse la posibilidad de que el modelo necesitara de más epoch para entrenar o más canciones.

¿Qué es una LSTM?

Las redes Long Short-Term Memory (LSTM), son un tipo de red neuronal recurrente, la cual extiende la memoria de las redes neuronales recurrentes, estas tienen el problema de memoria a corto plazo por lo que usan únicamente la información previa por lo que no tienen la lista de toda la información anterior disponible para el nodo neural. Debido a su característico comportamiento se utilizan para resolver problemas de reconocimiento de voz, reconocimiento de escritura a mano, composición de música, etc. problemas complejos que las redes neuronales recurrentes no podían resolver.

¿Qué es una Wavenet?

WaveNet es un tipo de red neuronal conocido como red neuronal convolucional profunda para generar audio muestra a muestra. La técnica es capaz de generar sonidos realistas como voces humanas modelando formas de onda directamente mediante redes neuronales entrenadas directamente a partir de muestras del habla humana real.​ La capacidad de Wavenet para generar formas de onda permite modelar cualquier clase de audio, incluyendo música.​ En WaveNet, la red toma las muestras de una señal como una entrada y sintetiza muestra a muestra la salida.

¿Qué es una Interpolación?

La interpolación consiste en realizar una suposición fundamentada con la información de un determinado conjunto de datos. Es una “mejor suposición” utilizando la información que se tiene a mano. La interpolación es algo para lo que usamos la IA a menudo. Alimentar datos a una computadora y permitir que haga conjeturas fundamentadas por nosotros. En teoría, la interpolación también es útil para extraer datos sobre situaciones y utilizar experiencias conocidas para expandir el conocimiento a áreas desconocidas. Sin embargo, esto se suele denominar extrapolación.

Conclusión

Nuestra conclusión es que hay que intentar mejorar nuestro dataset mucho más, si este hubiera estado más limpio, el output de nuestro segundo intento habría mejorado bastante.

También deberíamos de haber utilizado otro sistema además de google colab para correr más tiempo los modelos durante períodos de tiempo más largos.

Repositorio de GitHub

Bibliografía

Hawthorne, C., Elsen, E., Song, J., Roberts, A., Simon, I., Raffel, C., … & Eck, D. (2017). Onsets and frames: Dual-objective piano transcription. arXiv preprint arXiv:1710.11153.

--

--