乾貨 | Github項目推薦 : GANSynth: 用GANs創作音樂

  • 2019 年 10 月 31 日
  • 筆記

AI科技評論按,截至翻譯開始前,該Github上的Star數已超過12000+。

GANSynth是一種利用生成對抗網絡合成音頻的算法。 詳情可在ICLR 2019論文中查看。它比NSynth數據集上的標準WaveNet基線能獲得更好的音頻質量,並且合成音頻的速度快數千倍。

項目地址:

https://github.com/tensorflow/magenta/tree/master/magenta/models/gansynth

Website:

https://magenta.tensorflow.org/gansynth

Paper《GANSynth: Adversarial Neural Audio Synthesis》:

https://openreview.net/forum?id=H1xQVn09FX

Colab:

https://colab.research.google.com/notebooks/magenta/gansynth/gansynth_demo.ipynb

生成

如果要生成一些聲音,首先需要按照Magenta的設置說明進行操作,然後下載預訓練檢查點,或者訓練自己的檢查點。 我們有幾個(檢查點)可供下載:

  • acoustic_only: 如論文所示,僅使用聲學儀器24-84(Mel-IF,逐行,高頻分辨率)進行訓練。
  • all_instruments: 在24-84(Mel-IF,Progressive,High Frequency Resolution)的所有樂器上進行訓練。

您可以通過解壓縮檢查點包並從Magenta目錄的根目錄中運行生成腳本來生成一些隨機聲音(隨機音高和潛在向量)。

python magenta/models/gansynth/gansynth_generate.py --ckpt_dir=/path/to/acoustic_only --output_dir=/path/to/output/dir --midi_file=/path/to/file.mid

如果指定了MIDI文件,就會合成音符,並在時間內隱向量之間進行插值。 如果沒有給出MIDI文件,則會合成隨機批處理的音符。

如果你已經從pip包中安裝,它將會安裝一個控制台腳本,以便可以從任何地方運行。

gansynth_generate --ckpt_dir=/path/to/acoustic_only --output_dir=/path/to/output/dir --midi_file=/path/to/file.mid

訓練

GANSynth可以僅用~3-4天內訓練單個V100 GPU上的NSynth數據集。如果要進行訓練,首先需要使用安裝或開發環境,並按照Magenta的設置說明進行操作,然後將NSynth數據集下載為TFRecords。

如果要測試該訓練是否生效,請從Magenta repo目錄的根目錄運行:

python magenta/models/gansynth/gansynth_train.py --hparams='{"train_data_path":"/path/to/nsynth-train.tfrecord", "train_root_dir":"/tmp/gansynth/train"}'

這將會使用合適的超參數運行模型,以便快速測試訓練(可以在model.py中找到)。你可以在configs/mel_prog_hires.py中找到論文中最佳表現的超參數配置(Mel-Spectrograms,Progressive Training,High Frequency Resolution)。 你可以通過將其添加為標誌來對這個配置進行訓練:

python magenta/models/gansynth/gansynth_train.py --config=mel_prog_hires --hparams='{"train_data_path":"/path/to/nsynth-train.tfrecord", "train_root_dir":"/tmp/gansynth/train"}'

你也可以更改它或進行其他配置以研究其他的表示。提醒一下,完整的超參數列表可以在model.py中找到。 默認情況下,該模型僅在聲學儀器間距24-84進行訓練,如論文中所示。 你可以在datasets.py中更改。

如果你已經從pip包中安裝,它將會安裝一個控制台腳本,以便可以從任何地方運行。

gansynth_train --config=mel_prog_hires --hparams='{"train_data_path":"/path/to/nsynth-train.tfrecord", "train_root_dir":"/tmp/gansynth/train"}'