wavernn (複合)

ユースケースと概要説明

WaveRNN は、元々 PyTorch* でトレーニングされ、その後 ONNX* 形式に変換されたテキスト読み上げタスクモデルです。モデルは LJSpeech データセットでトレーニングされました。WaveRNN はメルスペクトログラムから波形回帰を実行します。詳細についてはこちらリポジトリーを参照してください。

ONNX モデル

利便性のため、事前トレーニングされたモデルを ONNX 形式で提供します。

PyTorch から ONNX への変換を再現する手順

モデルは以下の手順で取得した ONNX 形式で提供されます。

  1. 元のリポジトリーのクローンを作成します

git clone https://github.com/as-ideas/ForwardTacotron
cd ForwardTacotron
  1. 変換がテストされたコミットをチェックアウトします。

git checkout 78789c1aa845057bb2f799e702b1be76bf7defd0
  1. README.md に従い、LJSpeech データセットを前処理します。

  2. スクリプト wavernn_to_onnx.py を ForwardTacotron ルート・ディレクトリーにコピーし、git patch 0001-Added-batch-norm-fusing-to-conv-layers.patch を適用します。

  3. https://github.com/fatchord/WaveRNN/tree/master/pretrained/ から WaveRNN モデルをダウンロードし、pre-trained ディレクトリーに展開します。

mkdir pretrained
wget https://raw.githubusercontent.com/fatchord/WaveRNN/master/pretrained/ljspeech.wavernn.mol.800k.zip
unzip ljspeech.wavernn.mol.800k.zip -d pretrained && mv pretrained/latest_weights.pyt pretrained/wave_800K.pyt
  1. スクリプトを実行して WaveRNN を onnx 形式に変換します

python3 wavernn_to_onnx.py --mel <path_to_preprocessed_dataset>/mel/LJ008-0254.npy --voc_weights pretrained/wave_800K.pyt --hp_file hparams.py --batched

注: ネットワークの自己回帰的な性質により、モデルは wavernn_upsampler.onnx, wavernn_rnn.onnx の 2 つに分割されます。最初は時間次元で特徴マップを拡張し、2 番目は拡張された特徴マップのすべての列を繰り返し処理します。

複合モデル仕様

メトリック

ソース・フレームワーク

PyTorch*

精度

主観的

wavernn-upsampler モデル仕様

wavernn-upsampler モデルはメルスペクトログラムを受け入れ、2 つの特徴マップを生成します。1 つ目はアップサンプル・レイヤーと畳み込みのシーケンスを使用して 1 ステップでメルスペクトログラムを拡張し、2 つ目はアップサンプル・レイヤーと畳み込みを使用して 3 つのステップで畳み込みメルスペクトログラムを拡張します。

メトリック

GOPs

0.37

MParams

0.4

入力

メルスペクトログラム、名前: mels、形状: 1, 200, 80、形式: B, T, C

説明:

  • B - バッチサイズ

  • T - メルスペクトログラムの時間

  • C - メルスペクトログラムのメル数

出力

  1. 処理されたメルスペクトログラム、名前: aux、形状: 1, 53888, 128、形式: B, T, C

    説明:

    • B - バッチサイズ

    • T - オーディオの時間 (メルスペクトログラムの時間 * hop_length に等しい)

    • C - 処理されたメルスペクトログラム内の特徴数。

  2. アップサンプリングおよび処理された (時間による) メルスペクトログラム、名前: upsample_mels、形状: 1, 55008, 80、形式: B, T', C

    説明:

    • B - バッチサイズ

    • T' - バッチ間のクロスフェードのためにサンプル数が埋め込まれたオーディオの時間

    • C - メルスペクトログラムのメル数

wavernn-rnn モデル仕様

wavernn-rnn モデルは、wavernn-upsampler から 2 つの特徴マップを受け取り、ステップが進ごとに B サンプルによる音声回帰に使用されるロジスティクス分布の混合のパラメーターを生成します (B はバッチサイズ)。

メトリック

GOps

0.06

MParams

3.83

入力

  1. upsampled_mels のタイムスライス、名前: m_t、形状: B, 80

  2. aux の時間/空間スライス、名前: a1_t、形状: B, 32、2 番目の次元は 32 = aux.shape[1]/4

  3. aux の時間/空間スライス、名前: a2_t、形状: B, 32、2 番目の次元は 32 = aux.shape[1]/4

  4. aux の時間/空間スライス、名前: a3_t、形状: B, 32、2 番目の次元は 32 = aux.shape[1]/4

  5. aux の時間/空間スライス、名前: a4_t、形状: B, 32、2 番目の次元は 32 = aux.shape[1]/4

  6. 自己回帰における GRU レイヤーの非表示状態、名前: h1.1、形状: B, 512

  7. 自己回帰における GRU レイヤーの非表示状態、名前: h2.1、形状: B, 512

  8. 自己回帰の以前の予測 (最初はゼロ)、名前: x、形状: B, 1

注: B - バッチサイズ。

出力

  1. 自己回帰における GRU レイヤーの非表示状態、名前: h1、形状: B, 512

  2. 自己回帰における GRU レイヤーの非表示状態、名前: h2、形状: B, 512

  3. 物流物流混合パラメーター、名前: logits、形状: B, 30。ロジスティック分布の混合のパラメーターに分割できます: 確率 = logits[:, :10]、平均値 = logits[:, 10:20]、スケール = logits[:, 20:30]

注: B - バッチサイズ。

モデルをダウンロードして OpenVINO™ IR 形式に変換

以下の例に示すように、モデルをダウンロードし、必要に応じてモデル・ダウンローダーやその他の自動化ツールによってモデルを OpenVINO™ IR 形式に変換できます。

モデル・ダウンローダーの使用例:

omz_downloader --name <model_name>

モデル・コンバーターの使用例:

omz_converter --name <model_name>

デモの使い方

Open Model Zoo が提供する次のデモでこのモデルを使用して、その機能を確認できます。