dlb2018-team16 / DeepAlbum

5 stars 0 forks source link

Survey & Experiment #1

Closed yurfuwa closed 5 years ago

yurfuwa commented 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
yushinna commented 5 years ago

主だった情報・論文はこの辺りです。1.(2016年)が初出ですが、その後、そこまで進展していない模様。

  1. Audio texture synthesis and style transfer
  2. Neural Style Transfer for Audio Spectograms
  3. “Style” Transfer for Musical Audio Using Multiple Time-Frequency Representations

Music style transferで評価が高いのは、2018年にFacebook AI Researchが出したこちらのようです。

流し読みですが、この論文では、「Neural Style Transferは使わん」的なことが書いてあり、multi-domain wavenet autoencoderという手法が採用されています。

yushinna commented 5 years ago

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

yushinna commented 5 years ago

安田さん情報です。 Deep Learningを用いた音楽生成手法のまとめ [サーベイ]

yasudakn commented 5 years ago

http://createwith.ai/ A Universal Music Translation Network, CycleGANを使った日本語記事、AJ DJの徳井さんの記事が参考になります。 上の音楽生成サーベイはこの方が翻訳されたものです。

yurfuwa commented 5 years ago

https://github.com/andabi/deep-voice-conversion ちょっと趣が違うけど音声変換

hadusam commented 5 years ago

Neural Translation of Musical Style

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

hadusam commented 5 years ago

Neural Audio Synthesis of Musical Notes with WaveNet Autoencoders

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

hadusam commented 5 years ago

進め方

A Universal Music Translation Networkの実装を目標とする

yurfuwa commented 5 years ago

Nsynthから脱線してmodels 配下の Melody RNNとMusic VAE, drums rnn が組み込まれてる magenta studioで遊んでみたんですけど、組み合わせるとこちらもこちらで面白いですね https://magenta.tensorflow.org/studio/standalone

それっぽいメロディーを大量生成して、そのメロディーに対してドラムをつけれる。 以下は学習済みモデルから生成したmidiです。

ganerate_vae.zip

学習データに例えば東方の主旋律とベースライン突っ込めば、なんとなく東方っぽいメロディを無限生成できるかも?

yasudakn commented 5 years ago

nsynthのcolabで、巨大なデータセットを使った学習済みモデルを使った生成を試してみたんですが、NSynthの中身はwavenet autoencoderで生成にすごい時間かかります。 生成を早くする手法が、去年から出てきていて、nv-wavenet, wavernn, gansynth この中でgansynthのコードが、magenta modelsにあり、試してみてました。 gansynth colab こちらのデモは、ランダムまたは指定したmidiを入力に学習した音源で演奏するようなものです。 音源の指定もある程度出来るっぽいですね。割り当ては相対時間みたい

yasudakn commented 5 years ago

↑の論文はICRL 2019にAcceptされてます。 ICRL 2019の論文Autoencoder-based Music Translationがあります。これって、A Universal Music Translation Networkの題名すり替わったものみたいです。 この実装はいまだに見つからず。

hadusam commented 5 years ago

A Universal Music Translation Networkは実装みつからず。また学習にかなりの時間がかかる32 V100 GPU x 数日。 安田さんの書いて頂いたgansynthはNSynthデータセットを1つのV100GPUで4-5日で学習でき、かなり高速に学習できそう。 gansynthはrandamもしくはMIDIを入力として、Instrument(楽器/スタイル)を指定して音を生成できる。 これを自前データセットで学習してスタイル変換するのがよさそう

hadusam commented 5 years ago

@yurfuwa さんのmagenta studioを組み合わせて使うと面白そう。 もしgansynthのスタイル変換にvocalで歌手のスタイルをいれられたら、 magenta studioで特定の歌手っぽい曲を作る→スタイル変換にかけてVOCAL入れる 例:AIがB'zっぽく作った曲にB'zっぽい声で歌わせる、なんてことができるかも?(妄想)

hadusam commented 5 years ago

どちらにせよ現状では自前データでの学習がオリジナリティを出すために必要そうなので、見えているNEXTアクションとしては

yurfuwa commented 5 years ago

Hotな話題! https://twitter.com/jesseengel/status/1101178736227975169

yurfuwa commented 5 years ago

早速試してみました。ピアノ音源のmidiを変換 generated_wav.zip

yurfuwa commented 5 years ago

ピアノ音源なのに複数音源の原曲っぽくなった

yurfuwa commented 5 years ago

五月雨になってしまいましたが、例えば大量の単音源のmidiから、その曲っぽさを magenta studioでつくり、Gansynthで複数音源に拡張してオーケストラmidiつくる、とかできるんじゃないかなと

yasudakn commented 5 years ago

Piqcyでも紹介されてる https://twitter.com/icoxfog417/status/1101306704820461569?s=21

そもそもの信号処理とDTMの知識midiとかが不足していて論文や実装がよく理解出来ない…だれかおすすめの書籍がwebサイトあれば教えてー

yasudakn commented 5 years ago

NSynth Datasetのフォーマットを調査したノートをコミットしました。 8640fbfa0aa6add35bd3babe550381131ef493cd

結果としては、1つ1つのデータが4秒の中でMIDIの1音階(pitch)に制限して作ることがわかり、市販の音源を1音階のみ取り出して構成するのは容易ではないことが想定されます。オリジナルまたは別のデータセットを用意する場合は大きな課題になりそうです。

yasudakn commented 5 years ago

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に保存する機能の追加が必要そう。 まずは最小サイズで学習がうまく行くか試すことになるとは思います。

youny-nak commented 5 years ago

何ら貢献できずすみません。深夜や早朝に、この中に登場した論文を読んで追いかけていたのですが、@yasudakn さんのご解説で少しイメージがつきました。ご指摘の新たなデータセット作成について、骨が折れる作業になりそうですね。

yasudakn commented 5 years ago

ちょっとでも良いんで調べてわかった事は共有してもらえると進んでる感でて助かります。

yasudakn commented 5 years ago

信号処理と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

yurfuwa commented 5 years ago

midiは、最低限の音階メタデータのようなもので、マークアップに近いものですよね。wavやaviなどの信号処理とは根本的に原理が異なりますし、最低限FFTなどの習熟が必要などより高度な印象をうけます。 midiはデータとして分解するデータ量が圧倒的に低いので、作曲生成はmidiのほうが簡潔な気がします。世に公開されてるmidiは複数の音源がはいっているので、例えば下みたいなlibつかって、単音源に出力するなど前処理が必要だと思います。 https://github.com/vishnubob/python-midi

yurfuwa commented 5 years ago

ちなみに https://github.com/dlb2018-team16/NeuralStyleTransfer/issues/1#issuecomment-468132174 これは単音源にしてねと言われている学習モデルに無理やり複数音源ぶちこんだりしたりもできたので、パラメータや学習データ次第ではイケるかも?そういう技術チャレンジしてみるのもありかもですね

youny-nak commented 5 years ago

@yurfuwa さんの2つ上のコメントと同語反復で、本件関連性が薄いかもしれませんが、MIDIで思い出しましたので記載しておきます。20年ほど前に高校でバンドを組んでいたときに、打ち込み用のデータファイルを作成していました。メーカーの独自規格もあったりするのですが、当時のベーシックな規格だと、16のチャンネル(楽器)を割り当てることができて、指定できる楽器は128種類で、音量は128段階、そして4分音符=480の長さに分解して、数字を打ち込んでいった記憶があります。

yushinna commented 5 years ago

FreeのMidi音源いくつか見つけました。Magentaで学習させてみます。

Dataset https://colinraffel.com/projects/lmd/

Jazz https://freemidi.org/genre-jazz

ロック http://rock.freemidis.net/index.php

ゲーム系 https://www.vgmusic.com/music/console/nintendo/snes/

yasudakn commented 5 years ago

作曲生成はmidiで #1 のどれかのモデルで良いと思います! midiを使ったミュージック・シーケンサーとしては、NSynthやGANSynthでいろんな音源データセットを学習したシーケンサー(モデル)になるとは思ってます。End-to-Endまではいかなくても。オリジナル音源で学習したシーケンサーでも、既存の学習済みシーケンサーであろうとも。

yasudakn commented 5 years ago

@yushinna ここの記事が参考になるかと。記事まで探して学習には至っていませんでした。mp3/wav to midiは適当に探すとあったります。 https://qiita.com/tackey/items/1295a0347a8b4cc30d46

yasudakn commented 5 years ago

複雑な楽器や声が混ざった音源で、librosaとかの音源分離を使って、主要なドラムなどの和音は抜けるかもしれません。どこまで分離出来るか試してみないとわかりませんけれども http://www.hiromasa.info/posts/5/

ta9ryuWalrus commented 5 years ago

大学から与えられてる僕のアカウントでログインしたらGoogle Driveが容量無制限に使えるみたいなので、大きめのデータセットでも大丈夫そうです

yushinna commented 5 years ago

Magentaの学習済みモデルで曲生成してみました。 2019-03-08_143444_1.mid.zip

また、家にあったスピッツのアルバムをmp3を、以下のツールで、midiに変換してみました。 https://www.bearaudiotool.com/mp3-to-midi

が、結構ひどいです。一回これで学習試してみますが、音源分離しないと、○○風っぽく学習させるのは難しそうです。 チェリー.mid.zip

yasudakn commented 5 years ago

@ta9ryuWalrus それはありがたい! 8640fbfa0aa6add35bd3babe550381131ef493cd をgoogle driveに読み書きするように変更してみます。その後に新たなデータセット作ってもらって、GANSynth動かしてみましょう。

yasudakn commented 5 years ago

@ta9ryuWalrus 新たなデータセット作らずに、GANSynth動かしてみましょう。そのときに https://github.com/tensorflow/magenta/blob/master/magenta/models/gansynth/lib/datasets.py#L114 を1から2 or 3に変えるとacoustic から別のelectroかsynthetic に変えて学習するはず

yasudakn commented 5 years ago
yasudakn commented 5 years ago

instrumentsを換えて学習するコード例はこちらです。 https://gist.github.com/yasudakn/3a745f2a6abac7e70aaec28b15b1006c

yushinna commented 5 years ago

magentaに、ビートルズのアルバム1つ分の曲を学習させて、生成してみました。 generated.zip 曲はこちらでゲット。 http://bmh.webzdarma.cz/midieng.htm

うーん、言われてみるとビートルズっぽいかなあ・・もう少し学習データ増やさないとダメかもです。 または、もっと特徴的なスタイルのバンドを選ぶかですかね。

yushinna commented 5 years ago

やってみたいこと:口笛をiphoneで録音して、それをアプリに投げたら、曲生成してくれる

yushinna commented 5 years ago

Wavからmidiに変換するのは難しいという話。ツールもあるみたいですが、Windows。。 http://www.pluto.dti.ne.jp/~araki/soft/st.html Midiは無料ではポピュラーな曲があまりダウンロードできないので、データ収集が課題です。

yasudakn commented 5 years ago

ボーカルのようなピッチが変化する音色は苦手です。またドラムが入っていると最悪です。

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にすると、綺麗に学習出来るかも

とりあえず、前処理めんどい。。

yasudakn commented 5 years ago

今、学習するなら電気グルーヴの曲が良さそう😆

yurfuwa commented 5 years ago

https://github.com/dlb2018-team16/NeuralStyleTransfer/issues/1#issuecomment-472418124 @yushinna san が生成した曲をgansynthの学習済みモデルから一曲スタイル変換してみました。

2019-03-13_125709_02_gansynth.zip

各パート(ドラムとかベースとか)を曲生成してもらって、それをスタイル変換かけて 最終的にガッチャンコしたらそれなりにきこえるかも??

yushinna commented 5 years ago

ピエール滝・・・ スタイル変換、わりといい感じで聴けますね!

yasudakn commented 5 years ago

gansynthの学習でelectroのみは楽器に偏りが多く(分散が小さく)GANの学習がうまく進んでいないのかもしれません。 syntheticも追加してみようかな、または偏りを減らずようにデータセットをry とりあえず前者で再度トライしてみます。

yasudakn commented 5 years ago

今朝のDL輪読会のネタにあがってたもよう https://www.slideshare.net/DeepLearningJP2016/dlgansynth-adversarial-neural-audio-synthesis

ta9ryuWalrus commented 5 years ago

飲み込みに少し時間がかかっていて遅れをとってるのですが、モデルの学習ってどんな感じでされてますか、、 NSynthのデータは使わずに何らかの楽曲を使って学習させている感じなんですかね、

yasudakn commented 5 years ago

midi作成モデルの方ではスピッツなどの曲で学習させてるはずで、 midiからなんらかの楽器で演奏する方のモデルはnsynthで学習させてますよ。 論文ではacoustic に分類される楽器でピッチを制限して学習させています。学習済みモデルはこれです。 わたしが学習させてるのは、nsynthのacoustic ではなくelectronic とsynthetic です。 Nsynth datasetの詳細 https://magenta.tensorflow.org/datasets/nsynth

ta9ryuWalrus commented 5 years ago

ありがとうございます。 midi作成の方が頭から抜けていました

ta9ryuWalrus commented 5 years ago

NSynthのデータセットに、何らかの範囲を絞った(サイケデリック、ブルース、みたいな)ジャンルの楽曲のデータを新しい楽器としてつけ加えてまとめてgansynthを学習させてみたら、そういう曲調の音を合成できるのかなぁなんて思ったりもしたんですが、nsynthと同じ形式に変換するのめんどくさそうですね。。