Closed yurfuwa closed 5 years ago
200 piano-only songs classified as Jazz and Classical(https://medium.com/@suraj.jayakumar/tonenet-a-musical-style-transfer-c0a18903c910)Style transferは変更したいStyleについてラベル付してあげるだけで良いのでラベリングは簡単そう | まだ微妙なものしかなく開拓しがいあるかもhttp://yusuke-ujitoko.hatenablog.com/entry/2018/01/27/003705ビートルズをClassicに変換http://createwith.ai/paper/20181012/1326音声合成・声質変換ツール PyWorldVocoder https://qiita.com/yuji1997/items/418cd1b914066bf8fd4cNeural Audio Synthesis(音声合成)https://www.slideshare.net/DeepLearningJP2016/dlefficient-neural-audio-synthesis |
---|
主だった情報・論文はこの辺りです。1.(2016年)が初出ですが、その後、そこまで進展していない模様。
Music style transferで評価が高いのは、2018年にFacebook AI Researchが出したこちらのようです。
流し読みですが、この論文では、「Neural Style Transferは使わん」的なことが書いてあり、multi-domain wavenet autoencoderという手法が採用されています。
A Universal Music Translation Networkの実装例を見つけました。 https://github.com/scpark20/universal-music-translation
また、こちらのGoogle Brainのものも面白そうです。手法はVEAです。実装例あり。 https://arxiv.org/abs/1803.05428 https://magenta.tensorflow.org/music-vae
安田さん情報です。 Deep Learningを用いた音楽生成手法のまとめ [サーベイ]
http://createwith.ai/ A Universal Music Translation Network, CycleGANを使った日本語記事、AJ DJの徳井さんの記事が参考になります。 上の音楽生成サーベイはこの方が翻訳されたものです。
https://github.com/andabi/deep-voice-conversion ちょっと趣が違うけど音声変換
JazzとClassicのStyle変換、実装も公開されている Blog : http://imanmalik.com/cs/2017/06/05/neural-style.html 実装 : https://github.com/imalikshake/StyleNet 論文 : https://arxiv.org/abs/1708.03535
WaveNetを使ったフルートとかオルガンの音の合成。2017なので古めかも。データセットあり。 Blog : https://magenta.tensorflow.org/nsynth 実装 : https://github.com/tensorflow/magenta/tree/master/magenta/models 論文 : https://arxiv.org/abs/1704.01279 データセット : https://magenta.tensorflow.org/datasets/nsynth
A Universal Music Translation Networkの実装を目標とする
Neural Audio Synthesis
の実装を一旦個々で進めるNsynthから脱線してmodels 配下の Melody RNNとMusic VAE, drums rnn が組み込まれてる magenta studioで遊んでみたんですけど、組み合わせるとこちらもこちらで面白いですね https://magenta.tensorflow.org/studio/standalone
それっぽいメロディーを大量生成して、そのメロディーに対してドラムをつけれる。 以下は学習済みモデルから生成したmidiです。
学習データに例えば東方の主旋律とベースライン突っ込めば、なんとなく東方っぽいメロディを無限生成できるかも?
nsynthのcolabで、巨大なデータセットを使った学習済みモデルを使った生成を試してみたんですが、NSynthの中身はwavenet autoencoderで生成にすごい時間かかります。 生成を早くする手法が、去年から出てきていて、nv-wavenet, wavernn, gansynth この中でgansynthのコードが、magenta modelsにあり、試してみてました。 gansynth colab こちらのデモは、ランダムまたは指定したmidiを入力に学習した音源で演奏するようなものです。 音源の指定もある程度出来るっぽいですね。割り当ては相対時間みたい
↑の論文はICRL 2019にAcceptされてます。 ICRL 2019の論文に Autoencoder-based Music Translationがあります。これって、A Universal Music Translation Networkの題名すり替わったものみたいです。 この実装はいまだに見つからず。
A Universal Music Translation Networkは実装みつからず。また学習にかなりの時間がかかる32 V100 GPU x 数日。 安田さんの書いて頂いたgansynthはNSynthデータセットを1つのV100GPUで4-5日で学習でき、かなり高速に学習できそう。 gansynthはrandamもしくはMIDIを入力として、Instrument(楽器/スタイル)を指定して音を生成できる。 これを自前データセットで学習してスタイル変換するのがよさそう
@yurfuwa さんのmagenta studioを組み合わせて使うと面白そう。 もしgansynthのスタイル変換にvocalで歌手のスタイルをいれられたら、 magenta studioで特定の歌手っぽい曲を作る→スタイル変換にかけてVOCAL入れる 例:AIがB'zっぽく作った曲にB'zっぽい声で歌わせる、なんてことができるかも?(妄想)
どちらにせよ現状では自前データでの学習がオリジナリティを出すために必要そうなので、見えているNEXTアクションとしては
早速試してみました。ピアノ音源のmidiを変換 generated_wav.zip
ピアノ音源なのに複数音源の原曲っぽくなった
五月雨になってしまいましたが、例えば大量の単音源のmidiから、その曲っぽさを magenta studioでつくり、Gansynthで複数音源に拡張してオーケストラmidiつくる、とかできるんじゃないかなと
Piqcyでも紹介されてる https://twitter.com/icoxfog417/status/1101306704820461569?s=21
そもそもの信号処理とDTMの知識midiとかが不足していて論文や実装がよく理解出来ない…だれかおすすめの書籍がwebサイトあれば教えてー
NSynth Datasetのフォーマットを調査したノートをコミットしました。 8640fbfa0aa6add35bd3babe550381131ef493cd
結果としては、1つ1つのデータが4秒の中でMIDIの1音階(pitch)に制限して作ることがわかり、市販の音源を1音階のみ取り出して構成するのは容易ではないことが想定されます。オリジナルまたは別のデータセットを用意する場合は大きな課題になりそうです。
shown in the paper, trained on only acoustic instruments pitch 24-84 (Mel-IF, Progressive, High Frequency Resolution).
とGANSynthのペーパーに書いてあり、別のElectronicまたはSyntheticで再現させるのは出来るはず。 ただ、訓練で使う70GBのデータセットの置き場がGoogle Driveも制限オーバー(15GB)だったような気がする。月額250円で100GBまで拡張可能。 データセットを再構築する際に小さくしておくとここまで必要ない。 どこまで学習させるかで、colabで継続実行するためのcheckpoint実装でGoogle Driveに保存する機能の追加が必要そう。 まずは最小サイズで学習がうまく行くか試すことになるとは思います。
何ら貢献できずすみません。深夜や早朝に、この中に登場した論文を読んで追いかけていたのですが、@yasudakn さんのご解説で少しイメージがつきました。ご指摘の新たなデータセット作成について、骨が折れる作業になりそうですね。
ちょっとでも良いんで調べてわかった事は共有してもらえると進んでる感でて助かります。
信号処理とDTMは、次の資料が必要な情報がまとまっていて参考になりました。 音楽情報処理の演習講義資料 http://winnie.kuis.kyoto-u.ac.jp/~itoyama/le4-music/le4-music-2017.pdf
上の演習資料のスペクトル分析は簡素過ぎてよく分からないんで、別で補う必要あると思います。ここら辺とかで http://climbsd.lowtem.hokudai.ac.jp/group/shigeru/tc/dataan2012/num5.pdf
midiは、最低限の音階メタデータのようなもので、マークアップに近いものですよね。wavやaviなどの信号処理とは根本的に原理が異なりますし、最低限FFTなどの習熟が必要などより高度な印象をうけます。 midiはデータとして分解するデータ量が圧倒的に低いので、作曲生成はmidiのほうが簡潔な気がします。世に公開されてるmidiは複数の音源がはいっているので、例えば下みたいなlibつかって、単音源に出力するなど前処理が必要だと思います。 https://github.com/vishnubob/python-midi
ちなみに https://github.com/dlb2018-team16/NeuralStyleTransfer/issues/1#issuecomment-468132174 これは単音源にしてねと言われている学習モデルに無理やり複数音源ぶちこんだりしたりもできたので、パラメータや学習データ次第ではイケるかも?そういう技術チャレンジしてみるのもありかもですね
@yurfuwa さんの2つ上のコメントと同語反復で、本件関連性が薄いかもしれませんが、MIDIで思い出しましたので記載しておきます。20年ほど前に高校でバンドを組んでいたときに、打ち込み用のデータファイルを作成していました。メーカーの独自規格もあったりするのですが、当時のベーシックな規格だと、16のチャンネル(楽器)を割り当てることができて、指定できる楽器は128種類で、音量は128段階、そして4分音符=480の長さに分解して、数字を打ち込んでいった記憶があります。
FreeのMidi音源いくつか見つけました。Magentaで学習させてみます。
Dataset https://colinraffel.com/projects/lmd/
Jazz https://freemidi.org/genre-jazz
作曲生成はmidiで #1 のどれかのモデルで良いと思います! midiを使ったミュージック・シーケンサーとしては、NSynthやGANSynthでいろんな音源データセットを学習したシーケンサー(モデル)になるとは思ってます。End-to-Endまではいかなくても。オリジナル音源で学習したシーケンサーでも、既存の学習済みシーケンサーであろうとも。
@yushinna ここの記事が参考になるかと。記事まで探して学習には至っていませんでした。mp3/wav to midiは適当に探すとあったります。 https://qiita.com/tackey/items/1295a0347a8b4cc30d46
複雑な楽器や声が混ざった音源で、librosaとかの音源分離を使って、主要なドラムなどの和音は抜けるかもしれません。どこまで分離出来るか試してみないとわかりませんけれども http://www.hiromasa.info/posts/5/
大学から与えられてる僕のアカウントでログインしたらGoogle Driveが容量無制限に使えるみたいなので、大きめのデータセットでも大丈夫そうです
Magentaの学習済みモデルで曲生成してみました。 2019-03-08_143444_1.mid.zip
また、家にあったスピッツのアルバムをmp3を、以下のツールで、midiに変換してみました。 https://www.bearaudiotool.com/mp3-to-midi
が、結構ひどいです。一回これで学習試してみますが、音源分離しないと、○○風っぽく学習させるのは難しそうです。 チェリー.mid.zip
@ta9ryuWalrus それはありがたい! 8640fbfa0aa6add35bd3babe550381131ef493cd をgoogle driveに読み書きするように変更してみます。その後に新たなデータセット作ってもらって、GANSynth動かしてみましょう。
@ta9ryuWalrus 新たなデータセット作らずに、GANSynth動かしてみましょう。そのときに https://github.com/tensorflow/magenta/blob/master/magenta/models/gansynth/lib/datasets.py#L114 を1から2 or 3に変えるとacoustic から別のelectroかsynthetic に変えて学習するはず
gdriveをマウントするときのコード https://gist.github.com/yasudakn/46f6b8ca2fdaebe00caf78e8e254f37a
gdriveにnsynth training datasetを書き出すコード https://gist.github.com/yasudakn/498fe6926894f961e36b00290d4e53fe
instrumentsを換えて学習するコード例はこちらです。 https://gist.github.com/yasudakn/3a745f2a6abac7e70aaec28b15b1006c
magentaに、ビートルズのアルバム1つ分の曲を学習させて、生成してみました。 generated.zip 曲はこちらでゲット。 http://bmh.webzdarma.cz/midieng.htm
うーん、言われてみるとビートルズっぽいかなあ・・もう少し学習データ増やさないとダメかもです。 または、もっと特徴的なスタイルのバンドを選ぶかですかね。
やってみたいこと:口笛をiphoneで録音して、それをアプリに投げたら、曲生成してくれる
Wavからmidiに変換するのは難しいという話。ツールもあるみたいですが、Windows。。 http://www.pluto.dti.ne.jp/~araki/soft/st.html Midiは無料ではポピュラーな曲があまりダウンロードできないので、データ収集が課題です。
ボーカルのようなピッチが変化する音色は苦手です。またドラムが入っていると最悪です。
http://www.interaction-ipsj.org/proceedings/2016/data/pdf/16INT012.pdf Robust PCAを使うとボーカルはだいたい分離出来るっぽく、python実装ありました https://github.com/hiromu/rpca_svs
調波成分と打音成分の分解はlibrosa.hpss使うと行けるかもしれません https://github.com/dlb2018-team16/NeuralStyleTransfer/issues/1#issuecomment-470379005
このあと、メロディの音源(ボーカルとか)をmidiにすると、綺麗に学習出来るかも
とりあえず、前処理めんどい。。
今、学習するなら電気グルーヴの曲が良さそう😆
https://github.com/dlb2018-team16/NeuralStyleTransfer/issues/1#issuecomment-472418124 @yushinna san が生成した曲をgansynthの学習済みモデルから一曲スタイル変換してみました。
2019-03-13_125709_02_gansynth.zip
各パート(ドラムとかベースとか)を曲生成してもらって、それをスタイル変換かけて 最終的にガッチャンコしたらそれなりにきこえるかも??
ピエール滝・・・ スタイル変換、わりといい感じで聴けますね!
gansynthの学習でelectroのみは楽器に偏りが多く(分散が小さく)GANの学習がうまく進んでいないのかもしれません。 syntheticも追加してみようかな、または偏りを減らずようにデータセットをry とりあえず前者で再度トライしてみます。
飲み込みに少し時間がかかっていて遅れをとってるのですが、モデルの学習ってどんな感じでされてますか、、 NSynthのデータは使わずに何らかの楽曲を使って学習させている感じなんですかね、
midi作成モデルの方ではスピッツなどの曲で学習させてるはずで、 midiからなんらかの楽器で演奏する方のモデルはnsynthで学習させてますよ。 論文ではacoustic に分類される楽器でピッチを制限して学習させています。学習済みモデルはこれです。 わたしが学習させてるのは、nsynthのacoustic ではなくelectronic とsynthetic です。 Nsynth datasetの詳細 https://magenta.tensorflow.org/datasets/nsynth
ありがとうございます。 midi作成の方が頭から抜けていました
NSynthのデータセットに、何らかの範囲を絞った(サイケデリック、ブルース、みたいな)ジャンルの楽曲のデータを新しい楽器としてつけ加えてまとめてgansynthを学習させてみたら、そういう曲調の音を合成できるのかなぁなんて思ったりもしたんですが、nsynthと同じ形式に変換するのめんどくさそうですね。。