見出し画像

MusicGEN で音楽をテキストからシュッと作る

いやぁ~~~ちょっと気を抜いたら新しいサービスがシュッとでてきてビビっちゃう(*´▽`*)


昨日もしれっと Meta さんが面白いものを出してましたね~~~



その名も MusicGEN !!



なんとテキストから音楽を生成できるのだ!~


(まんまやんけ!というのは気にしてはいけない)


GitHub はこちら



シュッと試したい人は Hugging Face Space でも提供されてるよ(*´▽`*)



まぁワタクシは Google Colab の Notebook が GitHub で提供されていたのでそちらを使いますがね(〇-〇ヽ)クイッ



提供されてるやつからちょいと改変してるので一応コードをぺたぺたしておきマッスル

※ 大きなモデル使う時は多分メモリ的に無課金だと無理そうな気がしております

まずはデフォ通りの流れ作業

from google.colab import drive
drive.mount('/content/drive')
!python3 -m pip install -U git+https://github.com/facebookresearch/audiocraft#egg=audiocraft
# !python3 -m pip install -U audiocraft
from audiocraft.models import musicgen
from audiocraft.utils.notebook import display_audio
import torch

複数のモデルサイズが提供されているので全部試しちゃうぞ☆

small_model = musicgen.MusicGen.get_pretrained('small', device='cuda')
medium_model = musicgen.MusicGen.get_pretrained('medium', device='cuda')
melody_model = musicgen.MusicGen.get_pretrained('melody', device='cuda')
large_model = musicgen.MusicGen.get_pretrained('large', device='cuda')

こいつが生成する音楽の基となるテキストでござる~
配列で渡すことで複数の音楽が生成できるのですわ~
今回はとりあえず一つだけ

features = [
    'lofi slow bpm electro chill with organic samples',
]

んでポコポコ生成(30 秒作ってもらう)

small_model.set_generation_params(duration=30)
res_small = small_model.generate(features, 
    progress=True)

medium_model.set_generation_params(duration=30)
res_medium = medium_model.generate(features, 
    progress=True)

melody_model.set_generation_params(duration=30)
res_melody = melody_model.generate(features, 
    progress=True)

large_model.set_generation_params(duration=30)
res_large = large_model.generate(features, 
    progress=True)

ちなみに設定できるオプションはこんな感じぽいぽい

    def set_generation_params(self, use_sampling: bool = True, top_k: int = 250,
                              top_p: float = 0.0, temperature: float = 1.0,
                              duration: float = 30.0, cfg_coef: float = 3.0,
                              two_step_cfg: bool = False):
        """Set the generation parameters for MusicGen.

        Args:
            use_sampling (bool, optional): Use sampling if True, else do argmax decoding. Defaults to True.
            top_k (int, optional): top_k used for sampling. Defaults to 250.
            top_p (float, optional): top_p used for sampling, when set to 0 top_k is used. Defaults to 0.0.
            temperature (float, optional): Softmax temperature parameter. Defaults to 1.0.
            duration (float, optional): Duration of the generated waveform. Defaults to 30.0.
            cfg_coef (float, optional): Coefficient used for classifier free guidance. Defaults to 3.0.
            two_step_cfg (bool, optional): If True, performs 2 forward for Classifier Free Guidance,
                instead of batching together the two. This has some impact on how things
                are padded but seems to have little impact in practice.
        """
        assert du

https://github.com/facebookresearch/audiocraft/blob/5c52af7f9e17870643a41381021cbdb71b9945e9/audiocraft/models/musicgen.py#L94



さて、では生成されたみゅーじっくを聴かせてもらおうではないか!!!



いざ!!!


音楽ってどうやって乗せればいいかわかんないからとりあえずこんな形式でおいておくござる( ˘•ω•˘ )




うーん ( ˘•ω•˘ )



モデルが大きくなるにつれてよくなっている気がするけどワタクシの音痴耳では違いがよーわからんでござった(*´▽`*)



でもいい感じの lofi みゅーじっくで素敵(*´▽`*)



しかしまぁ他の音楽も試してみたいところ。


というわけでメタル!!


メタルは漢のロマン!!


Yeah~~~~~~~~

new_features = [
    'Wonderfully refined, superb metal music that makes you feel as if you are in heaven!',
]




そして出来上がったのがこちら






普通にえぇやん!!( ゚д゚)



メタルやでぇ、、、、



MusicGEN はサンプルとして音源を渡してそれっぽい感じにしてくれる雰囲気もあるのだけれど、テキストに特定のアーティストをいれてみたらどうなるのかしら??( ゚д゚)



というわけで



みんな大好き Metallica というテキストを含めたみたぜ!!

new_features = [
    'The ultimate music that is bold and subtle and piercing to the soul like Metallica.',
]




いざ!!




(-ω-;)ウーンなんか思ってたんと違う




他の文字にかどわかされたのかしら?(;´・ω・)



したらば



Simple is the best

new_features = [
    'Music like Metallica',
]




ポンっ!!



うぉぉぉぉぉーーーーーーーーーーーーーーーーーーーーーーーーーーーー( ゚д゚)



それっぽいぃぃぃぃぃぃ!!!!



すげぇぇぇぇ!!!



最後に


Model Card の Limitation にあるように

制限と偏見
データ モデルのトレーニングに使用したデータソースは、音楽プロフェッショナルによって作成され、権利者との法的契約によってカバーされています。モデルは20K時間のデータでトレーニングされていますが、より大きなデータセットでモデルをスケーリングすることで、モデルのパフォーマンスをさらに向上させることができると考えています。

軽減策 すべてのボーカルは、オープンソースのHybrid Transformer for Music Source Separation (HT-Demucs)を使用した最先端の音源分離手法でデータソースから削除されています。そのため、このモデルはボーカルを生成することができません。

制限事項

このモデルは、リアルなボーカルを生成することはできません。
このモデルは、英語の記述でトレーニングされているため、他の言語ではうまく動作しません。
このモデルは、すべての音楽スタイルと文化に対して同じようにうまく機能するわけではありません。
曲の終わりを無音にすることがある。
どのような種類のテキスト説明が最良の世代を提供するかを評価するのは困難な場合がある。満足のいく結果を得るためには、迅速なエンジニアリングが必要な場合がある。
偏り: データソースは多様性に欠ける可能性があり、すべての音楽文化がデータセットに等しく表現されているわけではありません。多種多様な音楽ジャンルが存在する中で、モデルの性能が均等に発揮されない可能性がある。モデルから生成されるサンプルは、トレーニングデータからのバイアスを反映することになる。このモデルに関するさらなる研究には、例えば、多様性と包括性の両方が得られるようにトレーニングデータをスケーリングすることによって、バランスのとれた公正な文化表現のための方法を含める必要があります。

リスクと害悪 モデルの偏りや限界により、偏った、不適切な、あるいは攻撃的とみなされるサンプルが生成される可能性があります。研究を再現し、新しいモデルをトレーニングするためのコードを提供することで、新しい、より代表的なデータへの適用を広げることができると考えています。

使用例 利用者は、モデルの偏り、限界、リスクを認識する必要があります。MusicGenは、制御可能な音楽生成に関する人工知能研究のために開発されたモデルである。そのため、さらなる調査やリスクの軽減なしに、下流のアプリケーションに使用するべきではありません。

https://github.com/facebookresearch/audiocraft/blob/main/MODEL_CARD.md



みたいっす



では、シュッと満足したのでおしまい

この記事が気に入ったらサポートをしてみませんか?