WaveNetについて知る Part(1)

Deep Learning

はじめに

こんにちは、swim-loverです。Pythonをとりかかりとして、Pytorch Tensorflowで機械学習を勉強していいます。「使いながら覚える」をコンセプトに勉強しています。

今回、Generative ModelのDCGAN(1),DCGAN(2)に続いて、音声処理への応用例であるWaveNetについて取り上げたいと思います。

WaveNetについて

WaveNet はDeep Learningを利用した音声合成、音声認識技術になります。

下記の公式Blogは2016年9月のものです。

WaveNet: A generative model for raw audio
This post presents WaveNet, a deep generative model of raw audio waveforms. We show that WaveNets are able to generate speech which mimics any human voice and w...

音声合成の一つとして、TTS(Text to Speech)、つまり文章を音声として読み上げる分野は、concatinative TTSによるものから、prametric TTSによるものに移っている背景があったようです。

concatinative TTSは、膨大な数の声、音声を保存しておき、それらをつなぎ合わせて、繋がった音声にするもので、prametric TTSは、実際の音声の代わりに、音声の特徴量を保存しておき、特徴量から音声を出力するものです。Vocoder”ボコーダー”と呼ばれています。

WaveNet サンプル音声

上記のリンクにconcatinative、prametric、WaveNetの出力結果が掲載されています。

US English

  • parametric
  • concatinative
  • Wavenet

WaneNetの音声を聞いてみると、とても自然な声であることがすぐにわかります。

WaveNet オーディオ生成

WaveNetを音楽生成においても使ってみたようです。

入力はクラッシクのピアノの楽曲で学習したとのことです。

いくつかのサンプルを貼り付けておきます。

いい音楽かどうかは、別の問題として、これらの出力がピアノ楽曲を出力していることは驚いてしまします。(結果がよさそうなところだけ切り取ったという訳ではないと信じます。)

WaveNet をGoogle Asistantへ

下記の公式Blogは2017年10月のものです。

WaveNet launches in the Google Assistant
Just over a year ago we presented WaveNet, a new deep neural network for generating raw audio waveforms that is capable of producing better and more realistic-s...

2016年9月のBlogの時点では、高い処理能力が必要で、スマホなどのコンシューマデバイスで動作させるのは、難しかったようです。しかし、処理スピードのクオリティの改善によって、Google Asistantとして使われるようになったようです。

英語の日本語のサンプルがあるので貼り付けて置きます。

English(current best – non wavenet)

English (wavenet)

Japanese(current best – non wavenet)

Japanese(wavenet)

WaveNet ざっくり理解

以下はWaveNetの論文になります。ざっくり理解を進めてみたいと思います。

https://arxiv.org/pdf/1609.03499.pdf

初期のWaveNetは、0.02秒の音声を生成するのに1秒、つまり、1秒の音声を生成するのに50秒もかかっていました。これでは、全く使いものになりません。

最新のバージョンでは、1秒で、20秒分の音声を生成する、つまり1秒の音声を生成するのに0.05秒でできるようになっています。1000倍高速になっています。

WaveNet 生成モデルの導入

オーディオサンプルx={x1,…,Xt}の発生確率は、以下のように、条件付き確率の積に分解することができる。xtは,x1~xt-1までのサンプルを条件として、xt-1は,x1~xt-2までのサンプルを条件として、つまり、ひとつ前までのサンプルを条件とした確率の積で表現されることになりますが、何だがよくわかりません。

PixelCNNと同様に、畳み込み層のスタックによって、条件確率分布は、モデル化されるとのこと。

PixelCNNは、Wavenetの元になったDNN。プーリング層がない。出力は入力と同じ次元をもつ。(入力が16kHsampleであれば、出力も16kHz sample)

WaveNet Casual Convolutions

Casual ConvolutionsがWaveNetの主な部分となっているようです。

時刻tにおいて、サンプルx1,…,xtによって出力された条件付き確率p (xt+1 | x1,…,xt)は、先の時刻t+1,t+2,…に依存しない。下図はこのことを示しています。時間は左から右方向(→)へ進んでいるいると思いますが、オレンジ色のOutputからは、矢印がでていません。

また、Casual ConvolutionsがRecurrent(回帰的)な接続がありません。図でも上から下への矢印はありません。時系列データで用いるRNN(Recurrent Neural Network)よりも高速に処理できるとのこと。しかし、Casual Convolutions は多くのレイヤや大きいフィルタを必要とするとのことです。

Wavenet Dilated Casual Convolutions

Dilated Casual Convolutions は、Casual Convolutionsからdilation (skip)する処理が追加されてます。以下の例では、最初のhidden layerは、全て入力を取り込んでますが、次のhidden layer では、1skip、次のhidden layerでは、3skipしています。pooling 処理に似ていますが、出力数は入力数と同じです。

Dilated casual convolutionは、わずか数層で大きな受容野 (receptive field)をもつネットワークが可能となるようです。

まとめ

今回から、Generative Modelの音声処理への応用例であるWavenetについて取り上げました。

次回以降もWavenetについて取り上げたいと思います。

コメント

タイトルとURLをコピーしました