サーバ

2024年07月02日

barkの実装実行方法

Notice: Bark is Suno's open-source text-to-speech+ model.
If you are looking for our text-to-music models, please visit us on our web page and join our community on Discord.


Bark は、Suno が作成したトランスフォーマーベースのテキスト音声変換モデルです。
と言う事なんですが、これは基本的に音声合成のみしか機能無いと思って良いです。
git clone https://github.com/suno-ai/bark
cd bark
pip install .
...特に不足するパッケージはありませんでした。
githubに書いてある Basicの方法だけで十分かもしれませんが...
基本的に、最初のモデルのダウンロードに一番時間がかかると思います。


声を変えたい時はhistory_promptで変えます。 
audio_array = generate_audio(text_prompt, history_prompt="v2/en_speaker_1")
130人分も声があるんですが、しかし、色々試していくと、元の声が同じような気がして来るのですが...?
独自音声を導入する方法は無いでしょうか?
https://github.com/suno-ai/bark/tree/main/bark/assets/prompts
npzファイルのサイズはそれぞれ100kBも無いので、あまり大した情報を持ってない様ですが
ここに入ってる情報は何なのでしょうか?



Bark can generate all types of audio, and, in principle, doesn't see a difference between speech and music. Sometimes Bark chooses to generate text as music, but you can help it out by adding music notes around your lyrics.
とも書いてあるんですが...
基本的に、barkではまともな音楽は作れません。そう思っておいた方が良いです。文章を読み上げてるような音にしかなりません。


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


generate_audio()に、他にどんな引数があるか、どこにも説明されてないと思いますが、コードの方を見るとこう書いてありました。
text: text to be turned into audio
history_prompt: history choice for audio cloning
text_temp: generation temperature (1.0 more diverse, 0.0 more conservative)
waveform_temp: generation temperature (1.0 more diverse, 0.0 more conservative)
silent: disable progress bar
output_full: return full generation to be used as a history prompt
.................

generate_audioで出来ているなら、トランスフォーマーの方は特に使う事無いと思います。
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:10000 for open-end generation.
...このメッセージは表示されたとしても、audio_arrayは出来てるから問題ありません。




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

このbarkでは音声の質が少し悪いように感じる時が多くあります。また声のバリエーションが狭く、あまり様々なパターンが出せません。
商用利用も可能と言ってる所ぐらいしか、メリットが無いのでは...


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

2024年06月12日

微分不可能なルールに基づいた拡散モデルによるシンボリック音楽生成




Symbolic Music Generation with Non-Differentiable Rule Guided Diffusion
Yujia Huang, Adishree Ghatare, Ziniu Hu, Yisong Yue  California Institute of Technology
Yuanzhe Liu   Rensselaer Polytechnic Institute
Qinsheng Zhang, Siddharth Gururani   NVIDIA
Chandramouli S Sastry, Sageev Oore   Dalhousie University, Vector Institute
arXiv preprint arXiv:2402.14285. (2024).

ガイダンスの重要なアイデアは、損失の勾配を使用して各中間ステップを更新する事です。
ただし、ルールガイダンスを使用してシンボリック音楽を生成するには、まだ 2 つの課題があります。
まず、多くのルール (音符密度など) は微分化出来ません。次に、それらはバックプロパゲーションを妨げるブラックボックス API である可能性があります。
Stochastic Control Guidance
この目的のために、我々は確率的制御ガイダンス(SCG)を提案する。これは、微分不可能なルールの拡散モデルにおけるプラグアンドプレイガイダンスを可能にする新しいアルゴリズムである。

我々のアルゴリズムは確率的制御にヒントを得たもので、確率的動的システム内で最適制御としてルールガイダンスに従うサンプルを生成する問題を提起する。
我々は経路積分制御理論 を改良し、これを拡散モデル内での効率的な実装に適応させます。
具体的には、各サンプリングステップで複数の実現を生成し、ターゲットに最も適したものを選択します。
このプロセスでは、ルール関数の順方向評価のみが必要なので、微分不可能なルールにも適用出来ます。
4 Non-Differentiable Rule Guidance
拡散モデルにおける微分不可能なルールガイダンスのための確率的制御を紹介します。
4.1 Rule Guidance Problem
我々のアプローチは経路積分制御にヒントを得たものであり、ルール関数の順方向評価のみを必要とする。
したがって、我々の方法ではルール関数が微分可能である必要はない。
5 Latent Diffusion Architecture
Data Representation.
シンボリック音楽を 3 チャンネル テンソルとして表現します。
この表現の各列は 10 ミリ秒の時間枠を表します。
最初のチャンネルはピアノロールで、水平軸は時間、垂直軸はピッチを表します。各要素は 0 〜 127 の値を取り、音符の音量を示します。
2 番目のチャンネルはオンセットロールで、音符のオンセットの存在を示すバイナリ値で構成されます。
3 番目のチャンネルはペダルロールで、各時間枠のサスティンペダルコントロールを表します。

Model architecture.

まず、VAEモデルを使用して、ピアノロールの短いセグメントをエンコードします。
3×128×128
潜在空間に潜在コードを連結し、それらの結合分布を捉えるための拡散モデルを訓練する
VAE to encode piano roll
VAEについては、(Rombach et al.、2022トレーニングには、KL 正則化と組み合わせたノイズ除去の目的が含まれます。
つまり、音楽的に意味的な摂動 (隣接する音符の追加など) をデータに導入し、モデルを元の摂動されていないデータに戻すようにトレーニングします。

KL 正則化とノイズ除去の目的はどちらも、後続の段階で堅牢な生成機能を備えた拡散モデルを開発するために不可欠である事が証明されています。
6 Experiments
無条件生成(6.2)、
個別ルールガイダンス(6.3)
複合ルールガイダンス(6.4)
編集(付録C.2 )
といった幅広い記号音楽生成タスクで我々の手法を評価します。
第6.5節ではアブレーション研究を、第6.6節では主観評価を行います。


MAESTROデータセットにはクラシックピアノ演奏が約1200曲、約200時間の演奏
Muscoreから14000のMIDIファイルをクロールし、約700時間のデータを作成しました。
Pop1k7 Pop909 それぞれオーディオから変換された 108 時間と 60 時間のポップピアノ MIDI が含まれます。
Training and Inference Setup.
まず、ピアノロールを潜在空間にエンコードするVAEモデルをトレーニングし、次にVAEを固定してこの空間で拡散モデルをトレーニングします。

拡散モデルは、データセットベースの条件付け((Maestro)、(Muscore)、(pop1k7 pop909))でトレーニングされ、ドロップアウト率が 0.1 のClassifier-freeガイダンスに従います。
.................

6.3 Individual Rule Guidance
pitch histogram、音符密度 (垂直と水平)、コード進行の 3 つのルールを検討します。ピッチ ヒストグラムは微分可能で、他の 2 つは微分不可能です。
.................

6.5 Ablation Studies
サンプル数が多いほど損失は少なくなりますが、時間がかかります。
制御性と計算効率のバランスをとるために、分類器ガイダンスを SCG と統合します。

生成モデルは、音符密度に正確に従う音楽を生成出来ますが、音符のピッチは完全に無視します。
SCG は、他のガイド方法よりも大幅に低い損失を実現しながら、かなり高い音楽品質を維持します。
さらに、各ステップでサンプル数を調整する事で、制御性と品質のバランスを調整出来ます。



続きを読む

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

2024年06月06日

whole-song-genの実装方法

Whole-Song Hierarchical Generation of Symbolic Music Using Cascaded Diffusion Modelsの実装ですが、モデルを全体的に独自データで学習出来るかとも思ったんですが、
Currently, generation given prompt (e.g., first several measures) or with external control are not released. These will be properly reformatted in future version.
We only release a portion of the model checkpoints sufficient for testing. The complete set of checkpoints will be released in future versions.
こういう風にも書いてあり、機能は限定的です。

git clone https://github.com/zzwaang/whole-song-gen
cd whole-song-gen
pretrained_models  results_default data のそれぞれに download_link.txt があり、そのURLからダウンロードしなければいけないようです。

.................
...実行時に幾つか問題が生じたのですが。
whole-song-gen/data_utils/utils/read_file.py", line 2, in <module>
  import mir_eval
ModuleNotFoundError: No module named 'mir_eval'
whole-song-gen/data_utils/utils/format_converter.py", line 3, in <module>
  import pretty_midi as pm
ModuleNotFoundError: No module named 'pretty_midi'
whole-song-gen/model/stable_diffusion/sampler/sampler_sdf.py", line 4, in <module>
  from labml import monit
ModuleNotFoundError: No module named 'labml'
これらはインストールするだけです。
pip install mir_eval
pip install pretty_midi
pip install labml



AttributeError: module 'numpy' has no attribute 'bool'.
`np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
  https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'bool_'?
この問題は、  numpyを1.23.1 にする以外に、
How to solve AttributeError: module 'numpy' has no attribute 'bool'?
whole-song-gen/inference/generation_canvases.py で、
import numpy as np
np.bool = np.bool_
こうする方法があります。




AttributeError: module 'numpy' has no attribute 'int'.
`np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
  https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'inf'
これは、np.intをnp.int64等に変えるだけですが、それがどこにあるかと言うと
/usr/local/lib/python3.10/dist-packages/mir_eval/chord.py ...だと思います。


続きを読む

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