En los cursos de aprendizaje automático en
Artezio, conocí un modelo de aprendizaje que podía hacer música. La música es una parte esencial de mi vida, durante muchos años toqué en grupos (punk rock, reggae, hip hop, rock, etc.) y soy un oyente fanático.
Desafortunadamente, muchos grupos, de los cuales yo era un gran admirador en mi juventud, se separaron por varias razones. O no se separaron, pero lo que están grabando ahora ... en general, sería mejor si se separaran.
Tenía curiosidad si ahora hay un modelo listo para usar que puede aprender sobre las pistas de uno de mis grupos favoritos y crear composiciones similares. Como los propios músicos ya no tienen mucho éxito, ¿tal vez la red neuronal pueda manejarlos?
FuenteAl estudiar los modelos terminados, me topé rápidamente con
un artículo con una visión general de las seis opciones más famosas. Se trata, por supuesto, de formatos de música digital. Se puede ver en el artículo que se pueden distinguir dos enfoques principales para la generación de música: en función del flujo de audio digitalizado (el sonido que escuchamos de los altavoces: audio sin formato, archivos wav) y en función del trabajo con MIDI (notación musical).
Dejé caer las opciones con audio sin formato, y es por eso.
- Los resultados no son impresionantes: el uso de tales modelos para música polifónica da un resultado muy específico. Esto es inusual, puede crear pinturas interesantes, pero no es adecuado para mis propósitos: suena extraño, pero quería escuchar algo similar al original.
FuenteUn buen ejemplo con música de piano:
Y con música orquestal o rock, suena mucho más extraño:
Aquí los chicos intentaron procesar Black Metal y no solo en audio sin formato.
- En las composiciones de mis bandas favoritas, suenan varios instrumentos: voces, batería, bajo, guitarras, sintetizadores. Cada instrumento suena junto con el resto. Estoy buscando un modelo que actúe de la misma manera, es decir, que funcione no solo con instrumentos individuales, sino que también tenga en cuenta su sonido conjunto.
Cuando un músico necesita aprender una parte de un instrumento de oído, intenta aislar el instrumento que necesita del flujo de sonido completo. Luego repite su sonido hasta lograr un resultado similar. La tarea no es la más fácil incluso para una persona con buena audición: la música puede ser difícil, los instrumentos se "fusionan".
FuenteEncontré herramientas de software que intentaron resolver un problema similar. Hay varios proyectos que hacen esto en base al aprendizaje automático. Por ejemplo, mientras escribía este texto, Magenta lanzó un nuevo instrumento, Wave2Midi2Wave, capaz de "quitar" notas de piano y de forma realista "reproducirlas". Existen otras herramientas, aunque en general esta tarea aún no se ha resuelto.
Entonces, para aprender una parte de un trabajo, es más fácil tomar notas preparadas. Esta es la forma más fácil. Es lógico suponer que será más fácil para las redes neuronales trabajar con la representación musical de la música, donde cada instrumento está representado por una pista separada.
- En el caso del audio sin formato, el resultado es una mezcla de todos los instrumentos, las partes no se pueden cargar individualmente en el secuenciador (editor de audio), corregir, cambiar el sonido, etc. Estoy bastante contento si la red neuronal compone un hit, pero comete un error en un par de notas: cuando trabajo con notas, puedo corregirlas fácilmente, con audio sin procesar esto es casi imposible.
La notación musical también tiene sus inconvenientes. No tiene en cuenta la masa de matices de rendimiento. Cuando se trata de MIDI, no siempre se sabe quiénes eran estos archivos MIDI, qué tan cerca están del original. Quizás el compilador simplemente cometió un error, porque no es una tarea fácil "eliminar" el juego.
Al trabajar con notas polifónicas, es necesario asegurarse de que los instrumentos estén afinados en cualquier momento. Además, es importante que la secuencia de estos momentos sea lógica desde el punto de vista humano de la música.
Resultó que no hay tantas soluciones que puedan funcionar con notas, e incluso no con un solo instrumento, sino con varios sonidos al mismo tiempo. Inicialmente pasé por alto el proyecto Magenta de Google TensorFlow, porque se describió como "no polifónico". En ese momento, la biblioteca MusicVAE aún no se había publicado, por lo que me decidí por el proyecto BachBot.
FuenteBachbot
Resultó que la solución a mi problema ya existe. Escucha el
feliz cumpleaños sintonizado por BachBot y suena como un coral de Bach.
El coral es una música específica, consta de cuatro voces: soprano, viola, tenor y bajo. Cada uno de los instrumentos puede producir una nota a la vez. Aquí tienes que profundizar un poco más en la música. Hablaremos de música en la dimensión de cuatro cuartos.
En una notación musical, una nota tiene dos indicadores: tono (to, re, mi ...) y duración (entero, medio, octavo, dieciseisavo, treinta segundos). En consecuencia, una nota completa dura un latido completo, dos medias notas un latido completo, dieciseis dieciseisavos un latido completo.
Al preparar los datos para entrenar la red neuronal, los creadores de BachBot tuvieron en cuenta lo siguiente:
- para no derribar el modelo con acordes de diferentes teclas, que juntas no sonarían armoniosas, todos los corales condujeron a la misma tecla;
- la red neuronal se debe suministrar con valores discretos, y la música es un proceso continuo, lo que significa que es necesaria la discretización. Un instrumento puede tocar una nota larga y completa, y el otro al mismo tiempo unos dieciseisavos. Para resolver este problema, todas las notas se dividieron en dieciseisavos. En otras palabras, si aparece una cuarta nota en las notas, llega cuatro veces como la misma decimosexta entrada, la primera vez con la bandera que se presionó y las siguientes tres veces con la bandera que continúa.
El formato de datos es el siguiente: (tono, nota nueva | continuación del sonido de la nota anterior)
(56, cierto) # Soprano
(52, Falso) # Alt
(47, Falso) # Tenor
(38, Falso) # Bajo
Después de haber conducido todos los corales del conjunto de datos de música popular21 a través de este procedimiento, los autores de BachBot descubrieron que no hay muchas combinaciones de combinaciones de cuatro notas en corales (si los lleva a la misma clave), aunque parece que podría haber 128 x 128 x 128 x 128 (128 niveles de tono utilizados en midi). El tamaño de un diccionario condicional no es tan grande. Esta es una observación curiosa, volveremos a ella cuando hablemos de MusicVAE. Entonces, tenemos los corales de Bach grabados en forma de secuencias de tales cuatro patas.
A menudo se dice que la música es un lenguaje. Por lo tanto, no es sorprendente que los creadores de BachBot aplicaran la tecnología popular en PNL (procesamiento del lenguaje natural) a la música, es decir, entrenaron a la
red LSTM en el conjunto de datos generado y obtuvieron un modelo que puede complementar uno o varios instrumentos o incluso crear corales desde cero. Es decir, configuras el alt, el tenor y el bajo, y BachBot agrega la melodía de soprano para ti, y juntos suena como Bach.
Aquí hay otro ejemplo:
Suena genial!
Puedes ver
este video con más detalle. Hay una analítica interesante allí, recopilada sobre la base de una encuesta en el sitio
bachbot.comSe alienta a los usuarios a distinguir los corales originales de Bach de la música creada por la red neuronal. Los resultados mencionan que si una red neuronal crea una parte de bajo para todas las demás configuraciones, solo la mitad de los usuarios pueden distinguir los corales creados por una red neuronal de los originales. Es gracioso, pero la mayoría de los expertos en música se confunden. Con otras herramientas, las cosas están un poco mejor. A mí me suena insultante como bajista: el violinista parece ser necesario por el momento, pero es hora de que los bajistas repasen las habilidades de los paneles de yeso.
Magenta
Al estudiar BachBot, descubrí que estaba incluido en el proyecto Magenta (Google TensorFlow). Decidí echarle un vistazo más de cerca y descubrí que, en el marco de Magenta, se han desarrollado varios modelos interesantes, uno de los cuales se dedica exclusivamente a trabajar con composiciones polifónicas. Magenta hizo sus maravillosas herramientas e incluso ya lanzó el complemento para el editor de audio Ableton, que es especialmente bueno en términos de aplicación para músicos.
Mis favoritos:
beat blender (crea variaciones en una parte de batería dada) y
bucles latentes (crea transiciones entre melodías).
La idea principal de la herramienta MusicVAE, que decidí usar, es que los creadores intentaron combinar el modelo y el codificador automático variado -
VAE en la red LSTM.
Si recuerdas, en una conversación sobre Bach Bot, notamos que el diccionario de acordes no consta de elementos de 128x128x128x128, sino mucho menos. Los creadores de MusicVAE también notaron esto y decidieron usar un espacio latente comprimido.
Por cierto, lo cual es típico, para entrenar MusicVAE, no necesita traducir las fuentes en una clave. Supongo que la transposición no es necesaria porque el codificador automático seguirá convirtiendo el código fuente y la información de tonalidad desaparecerá.
VAE está diseñado de tal manera que permite que el decodificador recupere eficientemente los datos del conjunto de datos de entrenamiento, mientras que el espacio latente representa una distribución uniforme de las características de los datos de entrada.
Este es un punto muy importante. Esto hace posible crear objetos similares y llevar a cabo una interpolación lógicamente significativa. En el espacio original, tenemos 128x128x128x128 variantes de combinar el sonido de cuatro notas, pero de hecho, no todas se usan (suenan bien para el oído humano). Un codificador automático variacional los convierte en un conjunto mucho más pequeño en un espacio oculto, y puede llegar a operaciones matemáticas en este espacio que tengan un significado significativo desde el punto de vista del espacio original, por ejemplo, los puntos vecinos serán fragmentos musicales similares.
Un buen ejemplo es cómo agregar lentes a una foto usando un codificador automático en
este artículo . Puede leer más sobre cómo funciona Muisc VAE en el sitio web oficial de Magenta en
este artículo , también hay un enlace a arXiv.
Entonces, el instrumento está seleccionado, queda por usarlo con mi objetivo original: crear nueva música basada en pistas ya grabadas y evaluar cuánto sonará como el sonido del grupo original. Magenta no funciona en mi computadora portátil con Windows y durante mucho tiempo ha estado calculando un modelo sin una GPU. Después de sufrir con máquinas virtuales, un contenedor acoplable, etc., decidí usar la nube.
Google proporciona
portátiles colab donde puede disfrutar de modelos magenta. Sin embargo, en mi caso, no fue posible entrenar el modelo, el proceso se bloqueó todo el tiempo debido a varias restricciones: la cantidad de memoria disponible, paradas de tiempo de espera, falta de una línea de comando normal y derechos de root para instalar las bibliotecas necesarias. Hipotéticamente, incluso existe la oportunidad de usar la GPU, pero, repito, no pude instalar el modelo e iniciarlo.
Estaba pensando en comprar un servidor y, oh, buena suerte, descubrí que Google proporciona servicios en la nube de Google Cloud con una GPU, e incluso hay un período de prueba gratuito. Es cierto que en Rusia están oficialmente disponibles solo para personas jurídicas, pero me dejaron entrar en modo de prueba gratuita.
Entonces, creé una máquina virtual en GoogleCloud con un módulo GPU, encontré en Internet varios archivos midi de uno de mis grupos favoritos y los cargué en la carpeta midi en la nube.
Instalar magenta:
pip install magenta-gpu
Es genial que todo esto se pueda instalar con un equipo, pensé, pero ... errores. Parece que tienes que tocar la línea de comando, lo siento.
Observamos los errores: la biblioteca rtmidi no está instalada en la máquina en la nube, sin la cual Magenta no funciona.
Y, a su vez, se bloquea debido a la falta del paquete libasound2-dev, y tampoco tengo privilegios de root.
No tan aterrador:
sudo su root apt-get install libasound2-dev
Hurra, ahora pip install rtmidi se ejecuta sin errores, al igual que pip install magenta-gpu.
Lo encontramos en Internet y descargamos los archivos fuente en la carpeta midi. Suenan algo
como esto .
Convertimos midi a un formato de datos con el que la red ya puede trabajar:
convert_dir_to_note_sequences \ --input_dir=midi\ --hparams=sampling_rate=1000.0\ --output_file=notesequences_R2Midi.tfrecord \ --log=DEBUG \ --recursive
y comenzar a entrenar
music_vae_train \ --config=hier-multiperf_vel_1bar_med \ --run_dir=/home/RNCDtrain/ \ --num_steps=1 \ --checkpoints_to_keep=2 \ --hparams=sampling_rate=1000.0 \ --hparams=batch_size=32,learning_rate=0.0005 \ --num_steps=5000 \ --mode=train \ --examples_path=notesequences_R2Midi.tfrecord
De nuevo el problema. Tensorflow se bloquea con un
error : no puede encontrar la biblioteca, afortunadamente, hace unos días alguien ya describió este error, y las fuentes de Python pueden repararse.
Subimos a la carpeta
/usr/local/lib/python2.7/dist-packages/tensorflow_probability/python/distributions#
y reemplace la línea de importación, como se describe en el error en github.
Lanza music_vae_train nuevamente y ... ¡Hurra! ¡El entrenamiento se ha ido!
Fuentehier-multiperf_vel_1bar_med: utilizo un modelo polifónico (hasta 8 instrumentos) que produce una medida cada uno.
Un parámetro importante es checkpoints_to_keep = 2, la capacidad del disco en las nubes es limitada, uno de los problemas es que el proceso de aprendizaje se ha interrumpido todo el tiempo debido al desbordamiento del disco, los puntos de control son bastante pesados: 0.6-1 gigabytes cada uno.
En algún lugar de las 5000 eras, el error comienza a saltar alrededor de 40-70. No sé si este es un buen resultado o no, pero parece que con unos pocos datos de entrenamiento, la red se volverá a entrenar más y no tiene sentido pasar el tiempo de las GPU que me proporcionaron de forma gratuita en los centros de datos de Google. Pasamos a la generación.
Por alguna razón, cuando la instalación de Magenta no instaló el archivo de generación en sí, tuve que soltarlo con mis manos en la carpeta para los demás:
curl -o music_vae_generate.py https://raw.githubusercontent.com/tensorflow/magenta/master/magenta/models/music_vae/music_vae_generate.py
Finalmente, crea los fragmentos:
music_vae_generate --config=hier-multiperf_vel_1bar_med --checkpoint_file=/home/RNCDtrain/train/ --mode=sample --num_outputs=32 --output_dir=/home/andrey_shagal/ --temperature=0.3
config - tipo de generación, exactamente igual que durante el entrenamiento - multipista, 1 reloj
checkpoint_file - carpeta donde obtener el último archivo con el modelo entrenado
modo - muestra - crea una muestra (hay otra opción interpolar - crea una medida de transición entre dos medidas)
num_outputs - cuántas piezas generar
temperatura - un parámetro de aleatorización al crear una muestra, de 0 a 1. En 0, el resultado es más predecible, más cercano a la fuente, en 1 - Soy un artista, tal como lo veo.
En la salida, obtengo 32 fragmentos por medida. Después de haber iniciado el generador varias veces, escucho los fragmentos y pego lo mejor en una sola pista: neurancid.mp3.
Entonces "pasé este verano". Estoy satisfecho Por supuesto, es poco probable que la radio "Máximo" lo lleve a la lista de reproducción, pero si escuchas, realmente se parece al grupo Rancid original. El sonido, por supuesto, es diferente de la grabación de estudio, pero trabajamos principalmente con notas. Además, hay espacio para la acción: procese midi con varios complementos VST, vuelva a grabar partes con músicos en vivo o espere hasta que los chicos de Wave2Midi2Wave lleguen a las guitarras con una sobrecarga.
No hay quejas sobre las notas. Idealmente, me gustaría que la red neuronal creara una obra maestra o al menos un éxito para el top 100 de Billboard. Pero mientras aprendió a
usar el alcohol y las drogas de los rockeros
, tocar todo el ritmo una nota en octavos (de hecho, no solo, sino que estoy orgulloso de su paternidad transición de 20 a 22 segundos). Hay razones para esto, y más sobre ellas.
- Pequeña cantidad de datos.
- El modelo que utilicé produce fragmentos del tamaño de una medida. En el punk rock, por regla general, no se producen muchos eventos en una sola medida.
- Las transiciones interesantes y la melodía funcionan solo en el contexto de los riffs de tono, las transiciones de acorde a acorde, y el codificador automático, junto con una pequeña cantidad de datos, parece haber perdido la mayoría de las melodías, e incluso redujo todos los riffs a dos acordes atonales consonantes y varios. Necesitamos probar un modelo que funcione con 16 medidas, es una pena que solo haya tres voces disponibles.
Me puse en contacto con los desarrolladores, me recomendaron tratar de reducir la dimensión del espacio latente, porque entrenaron su red en 200,000 pistas, y yo entrené en 15. No pude lograr el efecto visible de reducir el espacio z, pero todavía hay algo con lo que jugar.
Por cierto, la monotonía y la monotonía están lejos de ser siempre un signo negativo. Desde rituales chamánicos hasta fiestas tecno, como sabes, un paso. Debemos tratar de entrenar a la modelo en algo como esto: rave, techno, dub, reggae, hip-hop. Seguramente, existe la posibilidad de crear algo agradablemente zombie. Encontré unas 20 canciones de Bob Marley en midi y, voila la, un muy buen loop:
Por encima de las partes midi, se vuelven a grabar con bajos y guitarras en vivo, procesados por sintetizadores VST para que el fragmento suene más jugoso. En el original, la red emitió solo notas. Si los juegas con un reproductor midi estándar, suena así:
Seguramente, si crea una serie de dibujos temáticos básicos de batería, comience en beat blender + partes básicas de bajo y sintetizadores con un bucle latente (había más información sobre ellos), es muy posible ejecutar un algoritmo para la radio tecno que creará continuamente nuevas pistas o incluso una pista interminable Zumbido eterno!
MusicVAE también brinda la oportunidad de entrenar a la red para generar fragmentos de trío de 16 compases: batería, bajo y plomo. También bastante interesante. Datos de entrada - archivos midi multipista - el sistema se divide en triples en todas las combinaciones posibles y más adelante entrena el modelo. Tal red requiere significativamente más recursos, ¡pero el resultado es inmediatamente 16 ciclos! Imposible de resistir. Traté de imaginar cómo podría sonar un grupo que toca algo entre Rancid y NOFX, cargando para entrenar sobre un número igual de pistas de cada grupo:
También hay partes midi regrabadas guitarras en vivo. Jugador midi estándar como este:
Interesante! ¡Definitivamente es mejor que mi primer grupo! Y, por cierto, este mismo modelo nos da un jazz libre decente:
Los problemas que encontré:
- Falta de una buena y conveniente plataforma que reduzca el tiempo que lleva esperar al entrenamiento. El modelo funciona solo en Linux, el entrenamiento es largo, sin una GPU durante mucho tiempo, y todo el tiempo quiero intentar cambiar los parámetros y ver qué sucede. Por ejemplo, un servidor en la nube con un procesador GPU de 100 eras para el modelo “trío de 16 ciclos” contó 8 horas.
- Un problema típico de aprendizaje automático es la falta de datos. Solo 15 archivos midi: es muy pequeño para entender la música. La red neuronal, a diferencia de mí en mi juventud, no escuchaba 6 álbumes rancios antes de los hoyos, no fui a conciertos, este resultado se obtuvo de 15 pistas midi desconocidas para cualquiera que esté lejos del original. Ahora, si te quedas alrededor del guitarrista con sensores y tomas cada sonido de cada nota ... Veamos cómo se desarrolla la idea Wave2Midi2Wave. Tal vez dentro de unos años sea posible rechazar notas para resolver tal problema.
- El músico debe caer claramente en el ritmo, pero no perfectamente. En el fin de semana midi, no hay dinámica en las notas (por ejemplo, en la batería), todas se ejecutan al mismo volumen, exactamente en un clic (como dicen los músicos, es decir, exactamente en el ritmo), incluso si las diversifica al azar, la música comienza a sonar más vivaz y más agradable. Nuevamente, Wave2Midi2Wave ya está lidiando con este problema.
Ahora tienes una idea de las posibilidades de la IA para crear música y mis preferencias musicales. ¿Qué papel crees que la IA espera en el proceso creativo en el futuro? ¿Puede una máquina crear música en pie de igualdad o incluso mejor que un ser humano para ser un asistente en el proceso creativo? O la inteligencia artificial se hará famosa en el campo musical solo por las artesanías primitivas.