Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Efficient Neural Audio Synthesis #39

Open
Hiroshiba opened this issue Jun 1, 2018 · 1 comment
Open

Efficient Neural Audio Synthesis #39

Hiroshiba opened this issue Jun 1, 2018 · 1 comment

Comments

@Hiroshiba
Copy link
Member

リアルタイムで波形生成可能なWaveRNNを提案

論文本体・著者

Efficient Neural Audio Synthesis
https://arxiv.org/abs/1802.08435
ICLR2018

  • Nal Kalchbrenner (DeepMind) · Erich Elsen (Google) · Karen Simonyan (DeepMind) ·
  • Seb Noury (DeepMind) · Norman Casagrande (DeepMind) · Edward Lockhart (DeepMind) ·
  • Florian Stimberg () · Aäron van den Oord (Google Deepmind) ·
  • Sander Dieleman (DeepMind) · koray kavukcuoglu (DeepMind)

解きたい問題

リアルタイム音声合成は1秒間に数万サンプル生成する必要がある。WaveNetはSoTAな音声合成手法だが、巨大なネットワーク構造を持つ自己回帰モデルであり、生成が遅い。そこで、ネットワーク構造が小さい自己回帰モデルを提案する。更に高速化の工夫を行い、モバイルCPUでリアルタイム音声合成可能にしたり、リアルタイムの16倍早く音声合成できる手法を提案する。

新規性

  • 小さなネットワーク構造でWaveNetと同程度の自然性を持ちつつ、高速に音声合成できる手法を提案
  • プルーニングを使って、モバイルCPUでリアルタイム音声合成可能な手法を提案
  • 並列化することで更に高速化する手法を提案

実装

  • Dual Softmax
    • 1サンプル(16bit)推定を2段階に分ける
    • 1段目で粗い8bitを推定
    • 2段目で細かい8bitを推定
  • WaveRNN
    • 1層のGRUと2層の全結合×2
    • 論文 Fig. 1 より
    • Nvidia P100 GPUでリアルタイムの4倍早い(秒間96000サンプル)生成
      • GPUのレジスタを上手いこと使う
      • WaveNetだとリアルタイムの0.3倍程度だった
  • Sparse WaveRNN
    • 計算量を減らしてモバイルCPUでのリアルタイム音声合成を目指す
    • プルーニングする
      • 訓練が進むと重みの大きさのスパース性が増加する
      • 重みを大きさでソートして、小さいものからマスクをかけて省く
      • マスクをかける数はステップが進むに連れて増やす
      • ブロックごとにマスクをかけることで高速化している
    • 他にもGRUのシグモイド関数がモバイルCPUだと遅いのでソフトサイン関数にする、などの工夫
    • モバイルCPUでもリアルタイム音声合成可能になった
  • Subscale WaveRNN
    • バッチ並列で生成可能なようにネットワーク構造を変える
    • 系列データを飛ばし飛ばし生成することで、並列生成を可能にする
      • Bつ飛ばしで生成すれば、B並列で生成可能
    • 論文 Fig. 3 より
      • Nサンプルの音声をB×(N/B)行列に変形し、行ごとに生成していく
      • Fサンプル生成し終わったら次の行を生成し始めれば、F*(B-1)後にB並列生成になる
      • それまでに生成したサンプルであれば自由に条件付けとして入力可能
        • 図のxを生成するタイミングでは、青や緑のサンプルが生成済み
    • どれを条件付けとして入力するかは実装次第
      • 著者らの実装は10層のDilatedCNN。詳細は下記の実験項目参照

実験・議論

  • 実験条件
    • TTS(Text To Speech)タスク
    • 24kHz、16bitサンプル
    • 学習データは44時間の読み上げ音声
    • 入力は "conventional linguistic features" とピッチ
    • 平均オピニオン評点(MOS)やABテストで主観評価、NLLで定性評価
  • Subscale WaveRNNの実装
  • ABテスト
    • 論文 Tab. 2 より
    • 提案手法WaveRNNとのABテスト
    • WaveRNNによる音声合成の自然性は、WaveNetと顕著な差が無い
    • Sparse WaveRNNは、SparseにしていないWaveRNNより顕著に劣る
    • Subscale WaveRNN(16並列生成が可能)は、WaveRNNと顕著な差がない
  • MOSとNLL
    • 論文 Tab. 5 より
    • WaveRNNもSparse WaveRNNも、次元数を上げればWaveNet程度の自然性が得られる

読んだ中での不明点などの感想

  • これがデファクトになるかどうか見極めたい
    • モバイルCPUで生成可能なのは夢があるのでぜひデファクトになってほしい
    • 結局流行るかどうか
    • SNSではあまり盛り上がってないように見える(2018年6月1日現在)
  • 著者らの実装のSubscale WaveRNNをもう少し詳しく知りたい
  • ちなみにイントロでParallel WaveNetにも言及されていた
    • 逐次モデルではないため、うまく生成できない時系列データがあるのでだめ、みたいな消し方
    • 確かにイントネーション変換タスクとかは逐次モデルじゃないと解けないなぁ

関連論文

@kogaki
Copy link
Member

kogaki commented Jun 1, 2018

なるほど、RNNのまま時間のブロック単位で並列化するんですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants