サーバ

2023年03月22日

制御性を備えた音楽生成に関する Diffusion-LM

Diffusion-lm improves controllable text generation.
Xiang Lisa Li, John Thickstun, Ishaan Gulrajani, Percy Liang, Tatsunori B. Hashimoto   Stanford Univeristy
arXiv preprint arXiv:2205.14217 (2022).

再トレーニングなしで言語モデルを制御することは、自然言語生成における未解決の主要な問題です。
単純な文の属性 (感情など) を制御する事には成功していますが、複雑できめ細かい制御 (構文構造など) についてはほとんど進展がありません。
この課題に対処するために、Diffusion-LM と呼ばれる継続的な拡散に基づく新しい非自己回帰言語モデルを開発しました。
...................


Diffusion-LM on Symbolic Music Generation with Controllability

これが、 Diffusion-LM Improves Controllable Text Generationを音楽へ応用した物の様です。

Diffusion-LM on Symbolic Music Generation with Controllability





セットアップですがcondaではなくpipで良いのではないでしょうか?
pip install mpi4py
pip install torchvision torchaudio
pip install blobfile
pip install -e improved-diffusion/
pip install transformers
pip install spacy==3.2.4 datasets==2.4.0 huggingface_hub==0.4.0 wandb pillow miditok==1.2.9 mpi4py==3.0.3 scipy==1.7.3 miditoolkit==0.1.16

しかし、huggingface_hubのバージョンで問題が起きる時もあったのですが
何か、エラーが生じる条件が一定ではない様なんですが...


 Datasets:
 https://drive.google.com/file/d/1lmMu8lPo7rsgCIO0yjceap8TUfM72aFK/view?usp=sharing
と書いてありますが、このデータセットのmidiファイルは有効なファイルでしょうか? 全部ファイルサイズが一緒で、そもそもmidiとして読み込めないので、何か間違ってるとしか思えません。
  tokens = tokenizer.midi_to_tokens(MidiFile(os.path.join(data_args.data_path, split, midi_file_name)))
 File "/usr/local/lib/python3.9/dist-packages/miditoolkit/midi/parser.py", line 31, in __init__
  mido_obj = mido.MidiFile(filename=filename, clip=clip, charset=charset)
  raise IOError('MThd not found. Probably not a MIDI file')
OSError: MThd not found. Probably not a MIDI file
このデータセットは使えませんでした。


  from symbolic_music.utils import is_midi_task
ModuleNotFoundError: No module named 'symbolic_music'
  from improved_diffusion import dist_util, logger
ModuleNotFoundError: No module named 'improved_diffusion'

また、こういった所がModuleNotFoundErrorになったり、ならなかったりしました。 それが生じたり生じない時があったのですが...
  import blobfile as bf
ModuleNotFoundError: No module named 'blobfile'

これは明確に必要です。
pip install blobfile
インストールしたはずなんですが...

続きを読む

tak_tak0 at 21:46コメント(0) この記事をクリップ!

2023年02月23日

WaveNet , LSTM アプローチによる自動音楽生成

https://github.com/abhayp2204/Music-Generator

このプロジェクトはWaveNetとLSTMによる自動音楽生成に焦点を当てます。

WaveNet の構造は、言語モデルに似ています。次の単語を予測する代わりに、音符とコードから次の音符を予測します

手順

複数のMIDIファイルから音符とコードを単一リストに集めます。
外れ値を除き、学習プロセスを簡略化するために、出現頻度が低い音符を削除します。(任意の閾値)





.................
どうやったら実行出来るのか全然書いてありませんが、
https://github.com/abhayp2204/Music-Generator/blob/main/LSTM/main.ipynb
このノートブックの通りに実行すれば良いはずです。

...このコードではいちいちnote(音符)を表示しているので、表示領域を取られるのですが...


ValueError Traceback (most recent call last)
<ipython-input-13-ff9b507ff251> in <module>
----> 1 notess = sum(notes_array,[])
   2 unique_notes = list(set(notess))
   3 print("Unique Notes:",len(unique_notes))
   4 freq=dict(map(lambda x: (x,notess.count(x)),unique_notes))
   5 freq
ValueError: operands could not be broadcast together with shapes (0,) (513,)

明示的には書いていないようですが何故か読み込むmidiファイルに制約があるようです。
メロディとコードだけで良いと思うのですが...何か3トラック以上あるようなmidiしか読み込まないような...







学習データは読み込んだmidiファイルの音列で、過去の音から次を予測するよう学習します。

model.fit( )が実行出来れば、こんな感じだと思います。

Epoch 1/100
25/25 [==============================] - 11s 59ms/step - loss: 3.4364 - accuracy: 0.0539 - val_loss: 3.4022 - val_accuracy: 0.0849
Epoch 2/100
25/25 [==============================] - 0s 15ms/step - loss: 3.3827 - accuracy: 0.0728 - val_loss: 3.3935 - val_accuracy: 0.0894
.................



model.save("s2s")
こうしてモデルを保存しています。
s2sはディレクトリで fingerprint.pb  saved_model.pb keras_metadata.pb s2s/variables 等のファイルで構成されます。

そのあと直ぐに
model = load_model("s2s")
とモデルの読み込み方も書いてあります。




.................
音楽生成(予測)をしているのは、その後で
pred_index = np.argmax(model.predict(music_pattern))
out_pred.append(ind2note[pred_index])

そこまでの音列がmusic_patternで、model.predictで次の音を予測します。 しかしこれはインデックスなので、音符に戻します。
music_patternに任意の音列を入力すれば、続きの生成を出来るはずです。

続きを読む

tak_tak0 at 18:42コメント(0) この記事をクリップ!

2023年02月22日

リードシート生成 条件付きseq2seqフレームワーク


Generating lead sheets with affect: A novel conditional seq2seq framework.
Dimos Makris, Kat R. Agres, Dorien Herremans
International Joint Conference on Neural Networks (IJCNN). IEEE, 2021.

ディープニューラルネットワークによって自動作曲は進歩しましたが、未だに高レベルの音楽的特性を条件として生成する事は困難です
この研究では、専門家によって定義されたムードタグを使用して、コード進行の価数 (ポジティブまたはネガティブ) を計算する新しいアプローチを提案します。
これによって価数、フレージング、および拍子の観点から音楽生成を操作出来る条件付きリードシート生成の新しい戦略を提案します。
...................
...................


https://github.com/melkor169/LeadSheetGen_Valence
githubの方にはほとんど実行方法しか書いてありません。
Example: [python3 gen_leadsheet.py -ts 4/4 -b 12 -v 2 -d hig]
こう書いてある通り、 gen_leadsheet.py で生成します。



-o MIDI/MusicXML 出力フディレクトリ
-ts 拍子記号
-b 小節数
- v コード配置に必要な平均価数。
-ddensity: バーのイベントの平均密度 ( 「low」「med」「hig」)
-tdiversit

各パラメータの指定出来る値域は狭いです。
...



...事前学習モデルはどこにあるのかと思ったのですが、
Preprocessing-Training/Data_CMajor_v2.1.pickle
このファイルが、その様です。


failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
実行にはGPUが必要でした。



...................
...................


モデル学習が出来るコードが無いので、やれる事が少ないです。

指定出来るパラメータの幅も小さいし、全ての組み合わせでも大した量にはならないです。
そのため生成音楽のバリエーションは少なく、自由な音楽生成は出来そうにないです。


tak_tak0 at 21:43コメント(0) この記事をクリップ!
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村
adsense
Archives
amazon
blogchart
QRコード
QRコード
Recent Comments