Apakah Android memimpikan punk listrik? Bagaimana saya mengajar jaringan saraf untuk menulis musik

Dalam kursus pembelajaran mesin di Artezio, saya bertemu dengan model pembelajaran yang bisa membuat musik. Musik adalah bagian penting dalam hidup saya, selama bertahun-tahun saya bermain dalam kelompok (punk rock, reggae, hip-hop, rock, dll.) Dan saya adalah pendengar yang fanatik.

Sayangnya, banyak kelompok, yang mana saya adalah penggemar berat di masa muda saya, bubar karena berbagai alasan. Atau mereka tidak putus, tetapi apa yang mereka rekam sekarang ... secara umum, akan lebih baik jika mereka putus.

Saya ingin tahu apakah sekarang ada model siap pakai yang dapat belajar di trek salah satu grup favorit saya dan membuat komposisi yang sama. Karena musisi sendiri tidak lagi sangat sukses, mungkin jaringan saraf dapat menangani mereka?

Sumber

Mempelajari model yang sudah jadi, saya dengan cepat menemukan artikel seperti itu dengan ikhtisar dari enam opsi yang paling terkenal. Ini tentu saja tentang format musik digital. Dapat dilihat dari artikel bahwa dua pendekatan utama untuk generasi musik dapat dibedakan: berdasarkan aliran audio digital (suara yang kita dengar dari speaker - audio mentah, file wav) dan berdasarkan bekerja dengan MIDI (notasi musik).

Saya menjatuhkan opsi dengan audio mentah, dan itulah sebabnya.

  • Hasilnya tidak mengesankan - penggunaan model seperti itu untuk musik polifonik memberikan hasil yang sangat spesifik. Ini tidak biasa, Anda dapat membuat lukisan yang menarik, tetapi tidak cocok untuk tujuan saya: kedengarannya aneh, tapi saya ingin mendengar sesuatu yang mirip dengan aslinya.

Sumber

Contoh yang bagus dengan musik piano:


Dan dengan musik orkestra atau rock, itu terdengar jauh lebih aneh:


Di sini orang-orang mencoba memproses Black Metal dan tidak hanya dalam audio mentah.

  • Dalam komposisi band-band favorit saya, berbagai instrumen suara - vokal, drum, bass, gitar, synthesizer. Setiap instrumen berbunyi bersama dengan yang lainnya. Saya mencari model yang akan bertindak dengan cara yang sama, yaitu, akan bekerja tidak hanya dengan instrumen individu, tetapi juga memperhitungkan suara bersama mereka.

    Ketika seorang musisi perlu mempelajari bagian dari instrumen dengan telinga, ia mencoba untuk mengisolasi instrumen yang ia butuhkan dari keseluruhan aliran suara. Kemudian ia mengulangi suaranya sampai ia mencapai hasil yang sama. Tugasnya bukan yang termudah bahkan untuk orang dengan pendengaran yang baik - musik bisa sulit, instrumen "bergabung".

Sumber

Saya menemukan alat perangkat lunak yang mencoba memecahkan masalah serupa. Ada beberapa proyek yang melakukan ini berdasarkan pembelajaran mesin. Misalnya, ketika saya sedang menulis teks ini, Magenta merilis instrumen baru, Wave2Midi2Wave, yang mampu "melepas" catatan piano dan secara realistis "memainkannya kembali". Ada alat lain, meskipun secara umum tugas ini belum diselesaikan.

Jadi, untuk mempelajari bagian dari sebuah karya, paling mudah untuk membuat catatan yang sudah jadi. Ini cara termudah. Adalah logis untuk mengasumsikan bahwa akan lebih mudah bagi jaringan saraf untuk bekerja dengan representasi musik dari musik, di mana setiap instrumen diwakili oleh trek yang terpisah.

  • Dalam hal audio mentah, hasilnya adalah campuran dari semua instrumen, bagian tidak dapat secara individual dimuat ke sequencer (editor audio), dikoreksi, mengubah suara, dan sebagainya. Saya cukup senang jika jaringan saraf membuat hit, tetapi membuat kesalahan dalam beberapa catatan - ketika bekerja dengan catatan, saya dapat dengan mudah memperbaikinya, dengan audio mentah ini hampir mustahil.

Notasi musik juga memiliki kelemahan. Itu tidak memperhitungkan massa nuansa kinerja. Ketika datang ke MIDI, tidak selalu diketahui siapa file MIDI ini, seberapa dekat mereka dengan aslinya. Mungkin kompiler hanya membuat kesalahan, karena itu bukan tugas yang mudah untuk "menghapus" permainan.

Ketika bekerja dengan catatan polifonik, perlu untuk memastikan bahwa instrumen setiap saat selaras. Selain itu, penting bahwa urutan momen ini logis dari sudut pandang manusia.

Ternyata tidak ada begitu banyak solusi yang dapat bekerja dengan catatan, dan bahkan tidak dengan satu instrumen, tetapi dengan beberapa suara pada saat yang sama. Awalnya saya kehilangan pandangan tentang proyek Magenta dari Google TensorFlow, karena itu digambarkan sebagai "bukan polifonik." Pada saat itu, perpustakaan MusicVAE belum diterbitkan, jadi saya memilih proyek BachBot.

Sumber

Bachbot


Ternyata solusi untuk masalah saya sudah ada. Dengarkan Selamat Ulang Tahun yang disetel oleh BachBot dan terdengar seperti nyanyian Bach.


Paduan suara adalah musik tertentu, terdiri dari empat suara: sopran, biola, tenor dan bass. Setiap instrumen dapat menghasilkan satu not pada satu waktu. Di sini Anda harus masuk sedikit ke dalam musik. Kami akan berbicara tentang musik dalam dimensi empat perempat.

Dalam notasi musik, not memiliki dua indikator - pitch (to, re, mi ...) dan durasi (integer, setengah, delapan, keenam belas, tiga puluh detik). Dengan demikian, seluruh nada bertahan seluruh ketukan, dua setengah catatan seluruh ketukan, enam belas enam belas ketukan seluruh.

Dalam mempersiapkan data untuk pelatihan jaringan saraf, pencipta BachBot memperhitungkan hal-hal berikut:

  • agar tidak merobohkan model dengan akord dari kunci yang berbeda, yang bersama-sama tidak akan terdengar harmonis, semua paduan suara mengarah ke kunci yang sama;
  • jaringan saraf harus dilengkapi dengan nilai-nilai diskrit, dan musik adalah proses yang berkelanjutan, yang berarti bahwa diskritisasi diperlukan. Satu instrumen dapat memainkan nada yang panjang dan utuh, dan yang lain pada saat yang sama beberapa keenam belas. Untuk mengatasi masalah ini, semua nada dipecah menjadi enam belas. Dengan kata lain, jika not keempat muncul dalam note, ia muncul empat kali sebagai input keenambelas yang sama - pertama kali dengan bendera yang ditekan, dan tiga kali berikutnya dengan bendera yang diteruskan.

Format data adalah sebagai berikut - (nada, nada baru | kelanjutan bunyi not lama)

(56, Benar) # Soprano
(52, Salah) # Alt
(47, Salah) # Tenor
(38, Salah) # Bass

Setelah mengusir semua paduan suara dari dataset musik21 populer melalui prosedur ini, penulis BachBot menemukan bahwa tidak banyak kombinasi kombinasi dari empat catatan dalam paduan suara (jika Anda membawa mereka ke kunci yang sama), meskipun tampaknya berpotensi 128 x 128 x 128 x 128 (tingkat pitch 128 digunakan dalam midi). Ukuran kamus bersyarat tidak sebesar itu. Ini adalah komentar yang aneh, kami akan kembali ketika kami berbicara tentang MusicVAE. Jadi, kita memiliki paduan suara Bach direkam dalam bentuk urutan merangkak seperti itu.

Sering dikatakan bahwa musik adalah bahasa. Oleh karena itu, tidak mengherankan bahwa pencipta BachBot menerapkan teknologi populer di NLP (Natural Language Processing) untuk musik, yaitu mereka melatih jaringan LSTM pada dataset yang dihasilkan dan mendapatkan model yang dapat melengkapi satu atau beberapa instrumen atau bahkan membuat paduan suara dari awal. Artinya, Anda mengatur alt, tenor dan bass, dan BachBot menambahkan melodi sopran untuk Anda, dan bersama-sama itu terdengar seperti Bach.

Ini adalah contoh lain:

Kedengarannya bagus!

Anda dapat menonton video ini lebih detail. Ada analitik yang menarik di sana, yang dikumpulkan berdasarkan survei di situs bachbot.com

Pengguna didorong untuk membedakan paduan suara Bach asli dari musik yang diciptakan oleh jaringan saraf. Hasil menyebutkan bahwa jika jaringan saraf menciptakan bagian bass untuk semua pengaturan lain, maka hanya setengah dari pengguna dapat membedakan paduan suara yang dibuat oleh jaringan saraf dari yang asli. Lucu, tetapi kebanyakan ahli musik bingung. Dengan alat lain, segalanya sedikit lebih baik. Kedengarannya menghina bagi saya sebagai pemain bass - pemain biola tampaknya diperlukan untuk saat ini, tetapi sudah waktunya bagi pemain bass untuk memoles keterampilan drywall.


Magenta


Mempelajari BachBot, saya menemukan bahwa itu termasuk dalam proyek Magenta (Google TensorFlow). Saya memutuskan untuk melihat lebih dekat dan menemukan bahwa dalam kerangka Magenta beberapa model menarik telah dikembangkan, salah satunya hanya dikhususkan untuk bekerja dengan komposisi polifonik. Magenta membuat alat luar biasa dan bahkan telah meluncurkan plugin untuk editor audio Ableton, yang sangat bagus dalam hal aplikasi untuk musisi.

Favorit saya: beat blender (membuat variasi pada bagian drum yang diberikan) dan
loop laten (menciptakan transisi di antara melodi).

Gagasan utama alat MusicVAE, yang saya putuskan untuk digunakan, adalah bahwa pencipta mencoba untuk menggabungkan model dan variational auto encoder - VAE pada jaringan LSTM.

Jika Anda ingat, dalam percakapan tentang Bach Bot, kami perhatikan bahwa kamus akor tidak terdiri dari elemen 128x128x128x128, tetapi lebih sedikit. Pembuat MusicVAE juga memperhatikan ini dan memutuskan untuk menggunakan ruang laten terkompresi.

Ngomong-ngomong, yang khas, untuk melatih MusicVAE, Anda tidak perlu menerjemahkan sumber menjadi satu kunci. Transposing tidak perlu, saya kira, karena kode sumber masih akan dikonversi oleh auto-encoder dan informasi nada suara akan hilang.

VAE dirancang sedemikian rupa sehingga memungkinkan decoder untuk secara efisien memulihkan data dari dataset pelatihan, sementara ruang laten mewakili distribusi yang halus dari fitur-fitur data input.

Ini adalah poin yang sangat penting. Hal ini memungkinkan untuk membuat objek serupa dan melakukan interpolasi yang bermakna secara logis. Di ruang asli, kami memiliki varian 128x128x128x128 yang menggabungkan suara empat not, tetapi pada kenyataannya, tidak semua digunakan (terdengar bagus di telinga manusia). Encoder otomatis variasional mengubah mereka menjadi set yang jauh lebih kecil di ruang tersembunyi, dan Anda dapat menghasilkan operasi matematika di ruang ini yang memiliki makna yang bermakna dari sudut pandang ruang asli, misalnya, titik tetangga akan menjadi fragmen musik yang serupa.

Contoh yang baik adalah bagaimana menambahkan kacamata ke foto menggunakan auto encoder di artikel ini . Anda dapat membaca lebih lanjut tentang cara kerja Muisc VAE di situs web resmi Magenta di artikel ini , ada juga tautan ke arXiv.

Jadi, instrumen dipilih, tetap menggunakannya dengan tujuan asli saya - untuk membuat musik baru berdasarkan trek yang sudah direkam dan mengevaluasi berapa banyak ini akan terdengar seperti suara grup asli. Magenta tidak bekerja pada laptop Windows saya dan untuk waktu yang lama telah menghitung model tanpa GPU. Setelah menderita dengan mesin virtual, wadah buruh pelabuhan, dll., Saya memutuskan untuk menggunakan cloud.

Google menyediakan notebook colab tempat Anda dapat menikmati model Magenta. Namun, dalam kasus saya, itu tidak mungkin untuk melatih model, proses macet sepanjang waktu karena berbagai pembatasan - jumlah memori yang tersedia, batas waktu mati, kurangnya garis perintah normal dan hak root untuk menginstal perpustakaan yang diperlukan. Secara hipotesis, bahkan ada kesempatan untuk menggunakan GPU, tetapi, saya ulangi, saya tidak bisa menginstal model dan memulainya.

Saya berpikir untuk membeli server dan, oh, semoga berhasil, saya menemukan bahwa Google menyediakan layanan Google Cloud cloud dengan GPU, dan bahkan ada masa percobaan gratis. Benar, ternyata di Rusia mereka secara resmi hanya tersedia untuk badan hukum, tetapi mereka membiarkan saya masuk dalam mode uji coba gratis.

Jadi, saya membuat mesin virtual di GoogleCloud dengan satu modul GPU, menemukan di internet beberapa file midi dari salah satu grup favorit saya dan mengunggahnya ke folder midi di cloud.

Instal Magenta:

pip install magenta-gpu 

Sangat menyenangkan bahwa semua ini dapat diinstal dengan satu tim, saya pikir, tapi ... kesalahan. Sepertinya Anda harus menyentuh baris perintah, maaf.

Kami melihat kesalahan: perpustakaan rtmidi tidak diinstal pada mesin cloud, tanpanya Magenta tidak berfungsi.

Dan itu, pada gilirannya, lumpuh karena kurangnya paket libasound2-dev, dan saya juga tidak memiliki hak akses root.

Tidak begitu menakutkan:

 sudo su root apt-get install libasound2-dev 

Hore, sekarang instalasi pip rtmidi berjalan tanpa kesalahan, seperti halnya instalasi pip magenta-gpu.

Kami menemukan di Internet dan mengunduh file sumber di folder midi. Mereka terdengar seperti ini .

Kami mengonversi midi ke format data yang sudah dapat digunakan jaringan:

 convert_dir_to_note_sequences \ --input_dir=midi\ --hparams=sampling_rate=1000.0\ --output_file=notesequences_R2Midi.tfrecord \ --log=DEBUG \ --recursive 

dan mulai pelatihan

 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 

Lagi-lagi masalahnya. Tensorflow lumpuh dengan kesalahan - tidak dapat menemukan perpustakaan, untungnya, beberapa hari yang lalu seseorang telah menggambarkan kesalahan ini, dan sumber Python dapat diperbaiki.

Kami naik ke folder

 /usr/local/lib/python2.7/dist-packages/tensorflow_probability/python/distributions# 

dan ganti baris impor, seperti yang dijelaskan dalam bug di github.

Luncurkan music_vae_train lagi dan ... Hore! Pelatihan telah berakhir!

Sumber

hier-multiperf_vel_1bar_med - Saya menggunakan model polifonik (hingga 8 instrumen) yang masing-masing menghasilkan satu ukuran.

Parameter penting adalah checkpoints_to_keep = 2, kapasitas disk di awan terbatas, salah satu masalahnya adalah bahwa proses pembelajaran telah terputus sepanjang waktu karena overflow disk, pos pemeriksaan cukup berat - masing-masing 0,6-1 gigabytes.

Di suatu tempat di 5000 era, kesalahan mulai melonjak sekitar 40-70. Saya tidak tahu apakah ini hasil yang baik atau tidak, tetapi tampaknya dengan sedikit data pelatihan, jaringan akan dilatih kembali lebih lanjut dan tidak ada gunanya membuang waktu GPU sehingga dengan ramah disediakan kepada saya secara gratis di pusat data Google. Kami beralih ke generasi.

Untuk beberapa alasan, ketika menginstal Magenta tidak menginstal file generasi itu sendiri, saya harus meletakkannya dengan tangan saya di folder ke yang lain:

 curl -o music_vae_generate.py https://raw.githubusercontent.com/tensorflow/magenta/master/magenta/models/music_vae/music_vae_generate.py 

Akhirnya, buat fragmen:

 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 

konfigurasi - tipe pembangkitan, persis sama seperti saat pelatihan - multitrack, 1 jam
checkpoint_file - folder tempat mendapatkan file terakhir dengan model yang terlatih
mode - sample - buat sampel (ada pilihan lain interpolasi - buat ukuran transisi antara dua ukuran)
num_outputs - berapa banyak karya yang akan dihasilkan
suhu - parameter pengacakan saat membuat sampel, dari 0 hingga 1. Pada 0, hasilnya lebih mudah diprediksi, lebih dekat ke sumbernya, pada 1 - Saya seorang seniman, seperti yang saya lihat.

Pada output, saya mendapatkan 32 fragmen per ukuran. Setelah menyalakan generator beberapa kali, saya mendengarkan fragmen dan merekatkan yang terbaik dalam satu lagu: neurancid.mp3.


Jadi, "Saya menghabiskan musim panas ini." Saya puas. Tentu saja, radio "Maksimum" tidak mungkin membawanya ke daftar putar, tetapi jika Anda mendengarkan, itu benar-benar terlihat seperti grup Rancid yang asli. Suara, tentu saja, berbeda dari rekaman studio, tetapi kami terutama bekerja dengan catatan. Selanjutnya, ada ruang untuk tindakan - proses midi dengan berbagai plug-in VST, rekam ulang bagian-bagian dengan musisi live atau tunggu sampai orang-orang dari Wave2Midi2Wave mendapatkan gitar dengan kelebihan beban.

Tidak ada keluhan tentang catatan tersebut. Idealnya, saya ingin jaringan saraf untuk membuat karya besar atau setidaknya hit untuk top 100 Billboard. Tapi sementara dia belajar bagaimana menggunakan alkohol dan obat-obatan dari rocker , untuk memainkan seluruh ketukan satu nada dalam delapan (pada kenyataannya, tidak hanya, tetapi saya bangga dengan kebapakannya. transisi dari 20 hingga 22 detik). Ada alasan untuk ini, dan lebih banyak tentang mereka.

  1. Sejumlah kecil data.
  2. Model yang saya gunakan menghasilkan fragmen dalam ukuran satu ukuran. Dalam punk rock, sebagai suatu peraturan, tidak banyak peristiwa terjadi dalam satu ukuran.
  3. Transisi dan melodi yang menarik hanya bekerja dengan latar nada riff, transisi dari akor ke akor, dan auto-encoder, bersama dengan sejumlah kecil data, tampaknya telah kehilangan sebagian besar nada, dan bahkan mengurangi semua riff menjadi dua konsonan dan beberapa akor atonal. Kita perlu mencoba model yang bekerja dengan 16 ukuran, sangat disayangkan bahwa hanya tiga suara yang tersedia di dalamnya.

Saya menghubungi para pengembang, mereka merekomendasikan untuk mencoba mengurangi dimensi ruang laten, karena mereka melatih jaringan mereka pada 200.000 trek, dan saya melatih pada 15. Saya tidak bisa mencapai efek yang terlihat dari mengurangi ruang-z, tetapi masih ada sesuatu yang perlu dikerjakan.

By the way, monoton dan monoton jauh dari selalu minus. Dari ritual perdukunan ke pesta teknologi, seperti yang Anda tahu, satu langkah. Kita harus mencoba untuk melatih model pada sesuatu seperti ini - sambutan hangat, techno, dub, reggae, kontra hip-hop. Tentunya, ada peluang untuk menciptakan sesuatu yang menyenangkan zombie. Saya menemukan sekitar 20 lagu Bob Marley di midi dan, voila la, loop yang sangat bagus:


Di atas bagian midi direkam ulang dengan live bass dan gitar, diproses oleh synthesizer VST untuk membuat fragmen terdengar lebih segar. Dalam yang asli, jaringan mengeluarkan not-not saja. Jika Anda memainkannya dengan pemutar midi standar, kedengarannya seperti ini:


Tentunya, jika Anda membuat sejumlah gambar drum tematik dasar, mulai di beat blender + bagian dasar bass dan synths dengan loop laten (ada lebih banyak tentang mereka), sangat mungkin untuk menjalankan algoritma untuk radio techno yang akan terus membuat lagu baru atau bahkan satu trek tak berujung. Buzz abadi!

MusicVAE juga menyediakan kesempatan untuk melatih jaringan untuk menghasilkan fragmen trio 16-bar - drum, bass dan lead. Cukup menarik juga. Input data - file multitrack midi - sistem terbagi menjadi tiga kali lipat dalam semua kemungkinan kombinasi dan selanjutnya melatih model. Jaringan seperti itu membutuhkan sumber daya yang jauh lebih banyak, tetapi hasilnya segera 16 siklus! Tidak mungkin menolak. Saya mencoba membayangkan bagaimana sebuah grup yang memainkan sesuatu antara Rancid dan NOFX dapat terdengar, memuat untuk pelatihan tentang jumlah trek yang sama dari setiap grup:


Ada juga bagian midi yang direkam ulang gitar live. Pemain midi standar seperti ini:


Menarik! Ini jelas lebih baik daripada grup pertama saya! Dan omong-omong, model yang sama ini memberi kita jazz gratis yang layak:


Masalah yang saya temui:

  1. Kurangnya berdiri yang baik dan nyaman yang akan mengurangi waktu yang dibutuhkan untuk menunggu pelatihan. Model ini hanya bekerja di bawah linux, pelatihannya panjang, tanpa GPU untuk waktu yang sangat lama, dan sepanjang waktu saya ingin mencoba mengubah parameter dan melihat apa yang terjadi. Misalnya, server cloud dengan satu prosesor GPU 100 era untuk model "trio 16 siklus" dihitung selama 8 jam.
  2. Masalah pembelajaran mesin yang khas adalah kurangnya data. Hanya 15 file midi - sangat kecil untuk memahami musik. Jaringan saraf, tidak seperti saya di masa muda saya, tidak mendengarkan 6 album tengik, saya tidak pergi ke konser, hasil ini diperoleh dari 15 trek midi yang tidak diketahui oleh siapa pun yang jauh dari aslinya. Sekarang, jika Anda tetap di sekitar gitaris dengan sensor dan mengambil setiap suara dari setiap nada ... Mari kita lihat bagaimana ide Wave2Midi2Wave berkembang. Mungkin dalam beberapa tahun akan mungkin untuk menolak catatan dalam memecahkan masalah seperti itu.
  3. Musisi harus jatuh dengan jelas ke dalam ritme, tetapi tidak sempurna. Di akhir pekan pertengahan, tidak ada dinamika dalam catatan (misalnya, dalam drum), mereka semua dilakukan pada volume yang sama, persis dalam satu klik (seperti yang dikatakan oleh para musisi, tepatnya dalam irama), bahkan jika Anda secara acak mendiversifikasikannya, musik mulai berbunyi lebih hidup dan lebih menyenangkan. Sekali lagi, Wave2Midi2Wave sudah berurusan dengan masalah ini.

Sekarang Anda memiliki beberapa gagasan tentang kemungkinan AI dalam menciptakan musik dan preferensi musik saya. Menurut Anda peran apa yang menunggu AI dalam proses kreatif di masa depan? Dapatkah mesin menciptakan musik dengan pijakan yang sama atau bahkan lebih baik daripada manusia untuk menjadi asisten dalam proses kreatif? Atau kecerdasan buatan akan menjadi terkenal di bidang musik hanya untuk kerajinan primitif.

Source: https://habr.com/ru/post/id439546/


All Articles