敵対的生成ネットワーク

最近話題の生成AIは、まるで魔法のように画像を生成してくれますが、それは魔法ではなくきちんとした手順にしたがって作られている、ということが少しでもわかるような、題材を試してみました。

それはGAN(Generative Adversarial Networks:敵対的生成ネットワーク)というディープラーニングの学習方法です。下記に学習済モデルをつかって様々なリズムループを生み出すPythonプログラミングがあり、これを実際に動かしてみました。
https://github.com/naotokui/LoopGAN
これはPytorchを使って実装されていますが、GPU(cuda)なしのPCでも動作するようにオリジナルから改変が加えられております。(素晴らしい! なぜならnVIDIAのグラボ必要になるのと、グラボがあっても安価なものだとcudaのメモリ不足で動かないようなことがあるから。音声ということで比較的データが軽いのと、短いデータなら問題なし)

その前にGANについての説明ですが、下記動画が分かりやすいです。(Neural Network Consoleについては、こちら https://decode.red/net/archives/tag/neuralnet)

ポイントは、GeneratorとDiscriminatorという二つのネットワークを直列につなぐ構成で、本物画像を学習させるときは、Discriminatorだけつかい、そのDiscriminatorのパラメータを固定してランダムベクトルから生成した偽物画像をGeneratorに学習させるということを交互に実行するところでしょうか。
これを繰り返しているとランダムベクトルを入力しているのに、Generatorのパラメータによる演算がされると、本物にちかいデータが作成されるようになります。その結果入力を変化させると様々なバリエーションを生むことができるようになります。プロンプトエンジニアリングによるテキストデータと、この入力に使用されるベクトルを関連づける学習を加えると、生成AIのようなことができるのでしょう。

それでは、下記に実際に波形を生成するプログラムの実行と、その結果を添付します。
環境 Anaconda / Windows 11 (Windows固有のPathまわりの修正とffmpegのimportを追加)

git clone https://github.com/naotokui/LoopGAN.git
cd LoopGAN
pip install ffmpeg
pip install -r requirements.txt
gdown -O drumbeats1_230000.pt 1B3ZWTJFuZbPPH4uIIz-pCcBTLu9-w4nw
jupyter notebook

Jupyter notebookでgenerate_audio.ipynbを選択します。



かなり長くなってしまいましたが、説明よりも実例をすべて掲載した方がわかりやすいと思い(後から見返した時も)、このようにしました。
生成するバリエーションを変えると無限にリズムループを生成します。

ここまで試してみると、生成AIで何ができて何ができないのかイメージできます。次のステップは何を学習するかになってきます。