>100 Views
June 19, 25
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2025年度前期輪読会 #9 (2025/06/17)【生成Deep Learning】 第11章 音楽生成 (11.3~11.4) 京都大学 大学院工学研究科 M1 河田 賢斗
アジェンダ ■ 11.3 MuseGAN • • • • 11.3.1 バッハ合唱曲データセット 11.3.2 MuseGAN 生成器 11.3.3 MuseGAN 評価器 11.3.4 MuseGAN の分析 ■ 11.4 まとめ
11.3 MuseGAN n 画像生成問題として音楽生成を考える GAN の適用が可能では? 「MuseGAN」と命名 2017年に 論文「MuseGAN: Multi-Track Sequential Generative Adversarial Network for Symbolic Music Generation and Accompaniment」 で紹介される 複数小節の音楽を生成可能となる 高レベルな音楽的な特徴をきめ細かく制御すること 図1. ピアノロール が可能となる 3
11.3.1 バッハ合唱曲データセット MuseGAN の訓練のために必要なMIDIファイルをダウンロードする バッハの4声合唱229曲のデータセットを活用 下図2のコードによりデータセットをダウンロードする • 時間ステップごとの4声各々の音程のMIDIノート番号(4つの数字)からなる配列 • 4分音符4拍分(1小節) が16時間ステップ⇒1時間ステップは4分音符1/4拍分 • train, valid, testのセットに分割されている⇒trainのデータセットを使用する 図2. データセットのダウンロード 4
11.3.1 バッハ合唱曲データセット GANに適した形状に修正する 各曲の出だし2小節を抽出→2小節の音楽を生成 1小節=4分音符4拍分=16時間ステップ・4声を通して84段階の音程がある データの形状は以下の通り [BATCH_SIZE, N_BARS, N_STEPS_PER_BAR, N_PITCHES, N_TRACKS] ここで、 • BATCH_SIZE = 64 (64曲一括処理) • N_BARS = 2 (2小節分) • N_STEPS_PER_BAR = 16 (1小節=16時間ステップ⇒16分音符ベース) • N_PITCHES = 84 (音高はMIDIノート番号で84種類) 音程の番号をone-hot エンコーディングして⾧さ84のベクトルにする • N_TRACKS = 4 (4声部) 5
11.3.1 バッハ合唱曲データセット(参考) ←図3. 2小節分の生データを処理し、GAN を訓練するピアノロールデータに変換する 6
11.3.2 MuseGAN 生成器 MuseGANの構成 生成器と評価器から成る • 生成器の入力 : 単一のノイズベクトル(従来のGAN) , 4つの異なる入力(MuseGAN) 4つの入力 ① 和音 ② スタイル ③ 旋律 ④ グルーブ 4つの入力を独立に扱うことで生成 される音楽の属性の変更が可能 和音と旋律はテンポラルネット ワークに渡される 全トラックの各小節が連結され、 楽譜が生成される ↑図4. 生成器の高レベルの図 7
11.3.2 MuseGAN 生成器 テンポラルネットワーク 入力は2小節のため、32時間ステップに相当する⇒入力の⾧さは32(=Z_DIM) (図5.①) 2次元転置畳み込み演算の適用のため、32チャネルの 1×1 テンソルに変形(図5.②) Conv2DTranspose層(畳み込み層)を通じて、テンソルのサイズを1つの軸(時間軸)に拡 張し、⾧さをN_BARS とする(図5.③) Reshape 層で不要な次元を削除する(図5.④) 畳み込み演算を用いる理由 ① 小節の一貫性をネットワークに学 習させるため ② 音楽が小節をまたいでどのように 流れるのかを学習する機会を持たせ るため → 図5. テンポラルネットワークのコード 8
11.3.2 MuseGAN 生成器 和音、スタイル、旋律、グルーブ 和音 • 入力 : ⾧さはZ_DIM • 目的 : トラック全体で共有される、時間とともに変化する音楽の一般的な進行を制 御すること • 特徴 : TemporalNetworkを用いて単一のベクトルを、小節ごとに異なった潜在ベク トルに変換する スタイル • 入力 : ⾧さはZ_DIM • 目的 : 曲の全体的なスタイルを制御する • 特徴 : すべての小節とトラックを通して同じであり、変換されることはない 9
11.3.2 MuseGAN 生成器 旋律 • 入力 : [N_TRACKS, Z_DIM] の形状の配列であり、各トラック用の⾧さZ_DIMのラ • ンダムなノイズベクトルが渡される 出力 : 各トラックに特化したTemporalNetwork に入力ベクトルが渡され、小節ご とに⾧さZ_DIMのベクトルとなる グルーブ • • 入力 : [N_TRACKS, Z_DIM] の形状の配列であり、各トラック用の⾧さZ_DIMのラ ンダムなノイズベクトルが渡される 特徴 : 入力ベクトルはテンポラルネットワークに渡されず、直接そのまま次に渡さ れる 表1. MuseGAN生成器の要素 → 小節ごとに 出力が違うか トラックごとに 出力が違うか スタイル × × グルーブ × 〇 和音 〇 × 旋律 〇 〇 10
11.3.2 MuseGAN 生成器 小節生成器 結合 4つの潜在ベクトル 小節生成器 入力ベクトル (⾧さ : 4×Z_DIM) ピアノロール表現 (単一トラック・一小節) 転置畳み込み層を用いて時間と音程の次元を拡張するニューラルネットワーク 4つの潜在ベクトル(和音、スタイル、旋律、グルーブ : 入力) ピアノロール表現(出力結果) • 形状 : [1, N_STEPS_PER_BAR, N_PITCHES,1] のテンソル 11
11.3.2 MuseGAN 生成器 小節生成器を作成するKeras のプログラム ↑→ 図6. Kerasのプログラム ① 入力は⾧さZ_DIM×4のベクトル ② Dense層でテンソルに変形 ③ 時間ステップを拡張 ④ 音高方向に拡張 ⑤ Tanh活性化関数を使用 ⑥ 小節連結の準備として、サイズ1 の次元を追加 12
11.3.2 MuseGAN 生成器 MuseGAN生成器を作成する 図7.↑→ MuseGAN生成器を作成するKerasコード ① 生成器への入力を定義 ② 和音・旋律の入力をテンポ ラルネットワークに渡す ③ トラックごとに独立の小節 生成器ネットワークを構築 ④ トラックと小節の組み合わ せで小節を生成しながら ループ ⑤ 4つのテンソル(入力)から 複数トラック、小節に渡る 楽譜を出力する 13
11.3.3 MuseGAN 評価器 MuseGAN 評価器 目的 : 生成器が作成した楽譜を、本物の合唱曲集と見分ける 図8. ↑→ MuseGAN評価器を作成 するKerasプログラム ① 複数トラック・複数小節 の楽譜の配列 ② 小節の軸に沿ってテンソ ルを縮退させる ③ 音程の軸に沿ってテン ソルを縮退させる ④ 時間ステップの軸に 沿ってテンソルを縮退 させる ④ ノードを1つ持つDense 層 14
11.3.4 MuseGAN の分析 入力パラメータの影響分析 MuseGANの特徴 • 生成器からの出力にて、84音程の全ての中で最大値を持つ音符を選択 • 閾値0と設定するのではなく、単純な最大値を取る モデルの生成例 入力パラメータが、生 成された音楽の系列 データの高レベルな特 徴に直接影響を与える →図9. MuseGANが生成した 楽譜の例 15
11.4 まとめ 音楽生成 逐次的なアプローチが必ずしも必要ではない 楽譜を画像として扱う⇒畳み込み⇒複数トラックの楽譜を生成 • 4つの入力ノイズベクトルを編成し、音楽の高レベルな特徴を完全に制御出来るよう に • 完璧な再現は難しいが、幅広い問題に適用可能なGANの力を際立たせるもの 16