GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

ibab

tensorflow-wavenet – DeepMindのWaveNet論文のTensorFlow実装

投稿日:

DeepMindのWaveNet論文のTensorFlow実装

DeepMindのWaveNet論文のTensorFlow実装

これは、オーディオ生成のためのWaveNet生成ニューラルネットワークアーキテクチャの TensorFlow実装です。

WaveNetニューラルネットワークアーキテクチャは生のオーディオ波形を直接生成し、テキスト読み上げと一般的なオーディオ生成で優れた結果を示します(詳細については、DeepMindのブログ記事と論文を参照してください)。

ネットワークは、以前のすべてのサンプルおよび可能であれば追加のパラメータが与えられた場合、オーディオ波形の次のサンプルを生成する条件付き確率をモデル化します。

オーディオ前処理ステップの後、入力波形は固定の整数範囲に量子化されます。 整数振幅は、テンソル形状(num_samples, num_channels)を生成するためにワンホットエンコードされます。

現在および以前の入力にのみアクセスする畳み込みレイヤーは、チャネルの次元を縮小します。

ネットワークのコアは、現在および過去のオーディオサンプルにのみアクセスする、拡張された畳み込み(ホールによる畳み込み)である因果的拡張レイヤのスタックとして構築されます。

一連の高密度後処理層によってすべての層の出力が結合され、元の数のチャンネルに戻され、続いてsoftmax関数が出力を分類分布に変換します。

損失関数は、各タイムステップの出力と次のタイムステップの入力とのクロスエントロピーである。

このリポジトリでは、ネットワーク実装はmodel.pyにあります。

要件

トレーニングスクリプトを実行する前に、TensorFlowをインストールする必要があります。 コードはTensorFlowバージョン1.0.1(Python 2.7およびPython 3.5)でテストされています。

さらに、オーディオを読み書きするためにはlibrosaをインストールする必要があります。

必要なPythonパッケージをインストールするには、

pip install -r requirements.txt

GPUサポートについては、

pip install -r requirements_gpu.txt

ネットワークのトレーニング

.wavファイルを含むコーパスを使用できます。 私たちは主にVCTKコーパスを使用しています (約10.4GB、 代替ホスト )。

ネットワークを訓練するために、

python train.py --data_dir=corpus

corpus.wavファイルを含むディレクトリです。 スクリプトはディレクトリ内のすべての.wavファイルを再帰的に収集します。

各トレーニング設定に関するドキュメントは、

python train.py --help

wavenet_params.jsonモデルパラメータの設定を見つけることができます。 これらは、訓練と世代の間で同じままである必要があります。

グローバルコンディショニング

グローバル条件付けとは、.wavファイルの訓練および生成中に相互排他的なカテゴリのセットのIDが指定されるようにモデルを変更することを指します。 VCTKの場合、このidはスピーカーの整数IDであり、その数は100を超える。 これにより、どのスピーカを模倣すべきかを選択するために、生成時にスピーカIDを指定することが可能になる(実際に必要となる)。 詳細については、ペーパーまたはソースコードを参照してください。

グローバルコンディショニングによるトレーニング

トレーニングのための上記の説明は、グローバルコンディショニングなしのトレーニングを指します。 グローバル条件付けで学習するには、次のようにコマンドライン引数を指定します。

python train.py --data_dir=corpus --gc_channels=32

–gc_channels引数は2つのことを行います:

  • これは、global.pyを含むモデルを構築する必要があることをtrain.pyスクリプトに伝えます。
  • これは、スピーカーのIDに基づいてルックアップされる埋め込みベクトルのサイズを指定します。

train.pyとaudio_reader.pyのグローバル条件付けロジックは、VCTKで使用されているファイルネーミングのパターンからスピーカーIDを特定できると考えられる瞬間、VCTKコーパスに「ハードワイヤード」されていますが、簡単に変更することができます。

オーディオの生成

VCTKコーパスからスピーカー280に基づいて@jyegerlehnerによって生成された出力例

generate.pyスクリプトを使用して、以前に訓練されたモデルを使用してオーディオをgenerate.pyことができます。

グローバルコンディショニングなしでの生成

走る

python generate.py --samples 16000 logdir/train/2017-02-13T16-45-34/model.ckpt-80000

logdir/train/2017-02-13T16-45-34/model.ckpt-80000は、以前に保存されたモデル(拡張子なし)へのパスである必要があります。 --samplesパラメータには、生成するオーディオサンプルの数を指定します(16000はデフォルトで1秒に相当します)。

生成された波形は、 --wav_out_pathを使用して--wav_out_pathするか、 – --wav_out_pathパラメータを使用して.wavファイルとして保存できます。

python generate.py --wav_out_path=generated.wav --samples 16000 logdir/train/2017-02-13T16-45-34/model.ckpt-80000

--save_everyに加えて--wav_out_path--wav_out_pathと、進行中のwavファイルがnサンプルごとに保存されます。

python generate.py --wav_out_path=generated.wav --save_every 2000 --samples 16000 logdir/train/2017-02-13T16-45-34/model.ckpt-80000

高速生成はデフォルトで有効になっています。 これはFast Wavenetリポジトリの実装を使用します。 リンクをたどって、どのように動作するかの説明ができます。 これにより、サンプルを生成するのに必要な時間が数分に短縮されます。

高速生成を無効にするには

python generate.py --samples 16000 logdir/train/2017-02-13T16-45-34/model.ckpt-80000 --fast_generation=false

グローバルコンディショニングによる生成

グローバルコンディショニングを組み込んだモデルから次のように生成します。

python generate.py --samples 16000  --wav_out_path speaker311.wav --gc_channels=32 --gc_cardinality=377 --gc_id=311 logdir/train/2017-02-13T16-45-34/model.ckpt-80000

場所:

--gc_channels=32は、埋め込みベクトルのサイズを32と指定し、トレーニング時に指定したものと一致する必要があります。

--gc_cardinality=377は、VCTKコーパス内の話者の最大のIDであるため、376が必要です。 他のコーパスが使用されている場合、この数字はトレーニング時にtrain.pyスクリプトによって自動的に決定されプリントアウトされる数値と一致する必要があります。

--gc_id=311は、サンプルが生成されるスピーカ311のIDを指定します。

テストの実行

テスト要件をインストールする

pip install -r requirements_test.txt

テストスイートを実行する

./ci/test.sh

不足している機能

現在、コンテクストスタックを可能にするか、またはどのようなスピーチが生成されるかを制御する余分な情報にローカル調整はありません。

関連プロジェクト







-ibab

執筆者: