WAVEGLOW: A FLOW-BASED GENERATIVE NETWORK FOR SPEECH SYNTHESIS
WAVEGLOW: A FLOW-BASED GENERATIVE NETWORK FOR SPEECH SYNTHESIS
Abst
WaveGlow:メルスペクトログラムからスピーチを生成する手法を提案。高速化のため、自己回帰をやめる。
1. Intro
スピーチ生成のアプリは生成の速さが大事。
TTSタスクでは、エンコーダとデコーダ(ボコーダ)で構成されてることが多いが、デコーダ部は自己回帰モデルを利用しているため、生成のコストが高い。
自己回帰なしでやってるのもParallel WaveNetとかあるけど、学習が大変。
自己回帰なしのボコーダ:WaveGlowを提案します。
2. WaveGlow
ガウス分布から適当なノイズ(出力次元と同次元)をサンプリングし、写像を繰り返して、所望のXを得る。
z~N(z;0,I)
x = f0 o f1o ...fk(z)
これを直接学習する。可逆変換できるように。
log pθ(x) = logpθ(z) + Σlog|deg(J(f^-1i(x)))|
z = fk^-1 o f^k-1o...of^0(x)
順方向パスでは、8つのオーディオサンプルのグループをベクトルとして入力する。(これはaqueeze操作と呼ばれる)。その後いくつかの処理をとおる。
2.1. Affine Coupling Layer
可逆なnnは通常カップリングレイヤを利用する。今回はアフィンカップリングレイヤを使う。半分は値を保持し、もう半分をアフィン変換するための値を生成する。
xa, x = split(x)
(log s, t) = WN(xa, mel-spetrogram)
xb' = s・xb + t
f^-1coupling(x) = concat(xa, xb')
WNはどんな変換でもよい。カップリングレイヤは可逆だが、WNは可逆である必要はない。xaはそのまま通るので、xbがxaとxb'から計算できればよいからだ。WNはwabenetに似たような構成にしている。
2.2 1x1 Intvertible Convolution
アフィンカップリングレイヤでは片方のチャネルが一生かわらないから、チャンネルを入れ替える。
メモ
可変長のデータをどうやって処理してるのかよくわからんなー。
コードを見た方がよいのかなー。
お、結構すごいかも。。。
どうやって、可変長の出力をGlowで生成するの?
→ノイズを出力次元にあるようにサンプリング
→どうやって、狙った出力を作るの?
Parallel WaveNet, Clarinet, MCNNとか見ておいた方がよいの?
学習の安定性最優先で行きたい
?やっぱり、入出力の操作がよくわからんなー。
NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM PREDICTIONS
NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM
PREDICTIONS
Abst
Tacotron2について紹介する。seq2seqでテキストから、音声のmel-scale spectrogramを生成する。
1. Inrtro
色々生成モデルはあったけど、ノイズがあったし、人っぽくなかった。
WaveNetは成功をおさめたが、学習はまだ難しい。
tacotronは特徴抽出も自動でやって、スペクトログラムを生成し、Griffin-Lim algで位相の推定をして、波形生成をしていた。でもこれは、あまり生成モデルとして、良くなく、単純にwavenetの代わりとして使っていたといっていた。
よって、この論文では、seq2seqでテキストを解析し、wavenetで生成を行う。
2. Model Architecture
(1)再帰型seq2seqの特徴推定。これはattentionでシーケンスのメルスペクトログラムを入力から推定する。(2)修正されたWaveNetでメルスペクトログラムから波形の生成を行う。
2.1. Intermediate Feature Representation
二つのコンポーネントの橋渡しとして、mel-周波数スペクトログラムを利用する。
2.3 WaveNet Vocoder
参考
https://akifukka.hatenablog.com/entry/tacotrn2_1
https://akifukka.hatenablog.com/entry/tacotrn2_2
https://akifukka.hatenablog.com/entry/tacotrn2_3
メモ
やっぱり詳しいモジュールの話は、実際に実装するときでいいかなー。
固定長でデコードして、長さは後で線形補完しようかな。。(出力の長さはわかってるからな。。)
PixelCNN++ とParallel WaveNetのデコードを見ておいた方がいいのかな。
とりあえず、なんか適当にコードを書きたくなってきたなー。
単語
muffled:音を殺した
TACOTRON: TOWARDS END-TO-END SPEECH SYNTHESIS
TACOTRON: TOWARDS END-TO-END SPEECH SYNTHESIS
Abst
テキストからの音声生成は通常複数のステージがあるけど、それだと複数のドメインエキスパートが必要になるから、end-to-endでできるようにしました。
1. Introduction
複数のモジュール構成は大変。ダイレクトにできたら、アノテーションも少なくて、うれしいはず。でも発音には色々あるから、テキストから発音を構成するのは基本無理。seq2seqとattentionを組み合わせて頑張ります。
2. Related Work
WaveNetは遅いし、発音の特徴が必要。DeepVoiceは全部NNにしたけど、個々の学習が必要。似たやつもあるけど、中々学習が大変。また、事前学習をするやつもあるけど、我々はやらない。
3. Model Architecture
3.1 CBHG Module
CBGHはシークエンスから表現を抽出する強力なモジュールだ。まず、畳み込んで、maxpoolをとる。これに畳み込んで、またresnetで入力とつなぐ。(これ使うなら、実装をコードで見に行こうかなー)(Bidirectional LSTMって出力は何になるの?)
3.2 Encoder
3.3 Decoder
メモ
生成の周りだけ、わかればいいかなー。
bidirectionalの様子:https://qiita.com/gacky01/items/f2537468b7381269588b
わかりやすいなー。
結局エンコーダはこれでよくて、デコーダは自己回帰系でやればいいのか?
え、もしかして、スペクトログラムから波形の生成をしている?位相も大丈夫なの?
まぁちゃんと調べるのは2でいいかな。
単語
prosody:韻律論
dubbed:吹き替え
SAMPLERNN: AN UNCONDITIONAL END-TO-END NEURAL AUDIO GENERATION MODEL
SAMPLERNN: AN UNCONDITIONAL END-TO-END NEURAL AUDIO GENERATION MODEL
Abstract
条件なしでオーディオ信号を一度に作る手法を提案する。我々のモデルは階層構造中で自己回帰マルチレイヤパーセプトロンというメモリの少ないモジュールと、ステートフルなrnnを組み合わせて、長い系列の信号に含まれる変化をとらえることができる。
1. Introduction
オーディオの生成はチャレンジングなタスクだ。この難しさの理由の一つは、信号の次元と意味レベルの不一致だ。スピーチ生成では、スピーチに対応した発言の生成に興味がある。低サンプリングの16khzでも、一ワードに平均6000信号も付くなくてはいけない。
伝統的に高次元の生音源はスペクトラルや特徴に圧縮されてきた。
この論文では、オーディオデータの依存モデルをRNNでモデル化する。RNNはよく研究されているが、依存の幅が長時間にわたる場合うまくいかないことが知られている。
この論文では、end-to-endの条件なしのオーディオ生成モデルを提案する、扱いやすい形で。我々のモデルは異なる時間クロックの時は異なるモジュールを利用する(WaveNetでは一定だった)ので、異なるレベルの抽象化をフレキシブルにできる。
貢献は以下だ。
1. RNNでメモリを効率化して頑張ります。
2. 上記の効果を色々調べました。
3. データセットで結果を見ました。
2. Sample RNN Model
SampleRNNを提案します。これはオーディオの密度モデルだ。SampleRNNは過去のサンプルで条件づけて、Xの確率をモデル化します。
P(X) = Σi,T p(xi+1 | x1, ..., xi)
RNNは以下の式で定義される。
ht = h(ht-1, xi = t)
p(xi+1|x1,...,xi) = Softmax(MLP(ht))
Hはメモリセルで、GRUとか、LSTMとかで使われる。しかし、生オーディオの処理は異なるスケールの情報が入り組んでいるため、難しい。
SampleRNNはモジュールの階層構造を用いて、この問題を解決する。各階層構造は、異なる時間の解像度を持つ。一番低いモジュールは、各サンプルを処理し、高い階層のモジュールは長い時間を処理する。各モジュールは、下のモジュールに依存する。一番下のモジュールはサンプルレベルの予測を出力する。全体はend-to-endで学習する。
2.1 Frame-Level Modules
各サンプルで処理するよりも、高い階層のSampleRNNのモジュールは、重なってない、FS(Frame Size)のサンプルを処理する。各レベルのモジュールは、それまで履歴を要約し、下のジュールへ伝えていく。
上の階層で条件づけるフレームの変数の数は固定長の隠れ状態ht(k)で表現される。tは格段の時間に関係する。RNNは各時刻tでメモリの更新をする、ひとつ前の状態と現在の入力をもって。この入力はk=Kでは単純なフレームだが、それ以外では、状態ベクトルと、高い階層のベクトルと、入力フレームになる。
よって、異なるモジュールは異なる解像度の処理をすることになる。我々は下の階層に入力する前に、各ベクトルcをr(k)のベクトルへ更新する必要がある、これを、線形写像でやる。
ここで、段kのフレームレベルの式をだす。kは省略する。
まとめた分のhをアップサンプリングしてcにして、入力に渡す。
2.2 Sample-Lelvel Module
一番低いモジュール(k = 1)は、FS(1)上の分布samplexi+1に渡る分布を出力する。ci(k=2)と同様に先行して、一番近くの高いモジュール(情報をエンコードしている、そのフレームの事前を)。FS(1)は通常小さな値で、近くのサンプルに相関があるから、モデル化しやすく、MLPでいく。eiはxiを表現することを保証し、埋め込みレイヤを通ったあとに、。。(ダメだ難しい。。。)ソフトマックスでいく?
2.2.1 Outoput Quantization
サンプルレベルのモデルはq通りの離散の確率を算出する
GMM使うより、こっちのSoftMaxの方がよかったです。
また、量子化して出力しています。入力も量子化した方が結果がよかったです。
2.2.2 Conditionally Independent Sample Output
サンプルレベルの自己回帰モデルの重要度を示すため、これを、Multi-SoftMaxに置き換えてみた。出力依存cだけにしてみた。でもこれはすごく悪かった。
2.3 Truncated BPTT
短い長さで切っても意外と学習できたよ。
メモ
Fig1, ??やりたいことはわかるけど、なんかタスクの全体像が見えないなー。
低い(low )モジュール(k = 1):入力が上からのアップサンプリング
高い(high)モジュール(k = K):入力が各サンプル
生成モデルの話をしてるのかなー。そう。
実装を見ないと細かいところがわからないなー。
まぁでもそんなに、長い系列を扱うわけじゃないから、そんなに気にしなくてもいいかなー.自己回帰系の生成モデル使うだけでもいいかも。
その他
https://www.jstage.jst.go.jp/article/jasj/74/7/74_387/_pdf
https://qiita.com/icoxfog417/items/f170666d81f773e4b1a7
単語
at a time:一度に
stateful:状態変化を保持するシステム
discrepancy:不一致
utterances:言葉
tractable:扱いやすい
density:密度
tier:ひな段
exclusive:排他的
preceding:先行する
2016wavenet
WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
Abst.
このモデルは確率的で自己回帰的だ。予測は今までのすべてで条件づけられる。テキスト-to-speechではsotaだ。WaveNetは異なる人の特徴をとらえて、スイッチすることができる。これはまた、話者の識別モデルでも使えるはずだ。
1.Introduction
これは最近のニューラル自己回帰生成モデルに触発されてはじめた。
PixelRNNは高次の画像をモデル化できる。これらは高解像の音声データにも通用するのか?
この論文はPixelCNNに則っている。貢献は以下だ。
1. WaveNetはスピーチをかつてないほどリアルに生成できる。
2. 長い時系列依存が必要になるので、dilted causual convolutionを導入しました。
3. 話者が条件付けられれば、一つのモデルで複数の話者を生成できる。
4. 小さいスピーチのデータセットでもうまくいったし、音楽にも応用できるはず。
色々な音声にかかわる分野で結果を残せるはず。
2.WaveNet
ある信号x={x1,...,xT}の同時確率p(x)は(1)で表される。すべてのサンプル点xtがそれまでの過去により条件づけられる。
PixelCNNと同じように、条件付き確率の分布は畳み込みレイヤにためられる。ネットワークにはpoolingがなく、モデルのアウトプットは入力と同じ次元になる。モデルの出力は次の値の確率を出力する。対数尤度は扱いやすいし、モデルのoverfit、underfitも分かる。
2.1 Dilated Causal convolutions
WavNetの主な特徴はcausal convolutionだ。これにより、モデルがデータの順番を違反することを防げる。p(xt+1|x1,...,xt)は未来の情報に依存できない。データを全て一回ずつ使うなら、間隔を広げていけば、receptive fieldをかなり広げられる。
2.2 Softmax Distribution
値の分布の形は、混合ガウスとかではなく、各ピクセル値のsoftmaxでいく。値がでかいので、量子化して行う。
2.3 Gated Activation Units
PixelCNNと同じユニットを使う
z = tanh(Wf,k * x)・σ(Wg,k * x)
*は畳み込みで、・は要素積。σはシグモイド関数Wは学習パラメータ。LeRUとかより良い感じ。
2.4 residual and skip connections
収束速度の向上とより深いネットワークの為に、rsidualとparameterised skip connectionが使われる。図4がたくさん重ねられる。
2.5 Conditional Wavenets
hという追加の入力があった場合、条件付き確率になるり、過去のデータ+hで条件づけられる。これにより狙った生成が可能になる。例えば話者で条件づけたり。
二種類の情報で条件づける:全体的と局所的。全体的は全ての時刻の出力に関与する。例えば、アクティベーションは入力にVhが入る。
局所条件付けでは、入力より短い周波数のサンプリングのデータで、入力の周波数にアップサンプリングして利用する。
2.6 Context Stacks
WaveNetの受容野を広げる方法について、述べてきた。補完的な方法は、信号の長い領域を処理し、局所を条件づける、小さなコンテキストの積み重ねを利用することだ。様々な長さと隠れ層の複数のコンテキストスタックを使うこともできる。広い受容野のスタックはレイヤごとのユニットは小さくなる。これはpoolingしてもよい。
3.4 Speech Recognition
識別モデルでは、LSTMを使うことが多かったけど、今回のことで、容易に受容野をふやすことができるようになった。このタスクでは平均poolingを拡張畳み込みの後に追加し、160倍のダウンサンプリングをしました。lossは通常の予測とクラスの予測を用いたところ、良い性能であった。
単語
fidelity:忠実
tractable:扱いやすい
ingredient:成分
complementary:補完的
疑問点
結局畳み込みの具体的なやり方がよくわからなかったなー。
→まぁここはコード見ればいいかな。
特徴ベクトルの作り方はよくわからなかったなー。
VAEのエンコーダ的な役割はできない?
Synergetic Reconstruction from 2D Pose and 3D Motion for Wide-Space Multi-Person Video Motion Capture in the Wild
・Abstract
色々なマーカレスmocapの提案があるが、実用化はあまりされていない。複数台カメラを用いる、マーカレスの正確で滑らかなmocapを提案する。これは、広大なスペースで複数人いても大丈夫なものだ。キーアイディアは、各人の3Dポーズを推定し、複数カメラの十分小さい矩形領域を決定することだ。人間の骨格構造を用いた、この予測と時空間のフィルタリングは、人の3D復元を容易にし、精度に貢献する。正確な3D復元はまた、次のフレームの各カメラ内の矩形を推定するのに利用される。これは3Dモーションから2Dポーズへのフィードバックだで、これはシナジー効果をもたらし、全体のパフォーマンスを向上させる。
・1.Intro
人間のモーションデータは色々なところで利用される。これを得るにはいろいろな方法がある、光学マーカ式mocapやIMUのmocapなど。マーカレスの深度カメラ、単眼/複数カメラ。でも限られた環境でしか利用されてない。
なぜ実際の環境でダメなのか?mocapは現実環境では厳しい条件だからだ。人間の動きは連続だから、motionデータも連続でなくてはいけない。現実世界には難しい要素が三つある。一つ目は複数人数だ。オクルージョンや、人物同定が大変。二つ目は、広大なフィールドだ。広いとキャリブレーションエラーも上がる。また、開けていると、対象が範囲から出たり、違う人が入ったりする。さらにイベントによっては、マーカやIMUを付けられない。さらに他にも、ライトのコンディションや、センサが適切な位置で使えないなどある。よって、最新技術でも中々大変。
ここでは、一人のmocap法を拡張して、複数人の正確で滑らかな3Dの画像ベース復元を議論する。我々は、異なる方向からの同期された複数の校正済みカメラを用いる。同様に、復元のために、関節の動きのフィルタリングを利用して人間の骨格モデルも利用する。キーアイディアは、3Dのポーズを推定し、十分小さい矩形を決めることだ。矩形を使うと、top-downで対象のkeypointsの位置を推定できる。それらは関節のヒートマップを受ける。各カメラのPCMと3Dポーズの推定により、キーポイントは推定される。双方の誤差を最小化することで、3Dポーズが復元される。これは次のフレームで矩形推定に利用される。これはトータルのパフォーマンスを向上させる。
実験では色々な環境でためした。Inverse Kinematic(逆運動)により、関節の角度も算出可能になる。
・2. Related work
・2.1.Single-view pose estimation
単眼姿勢推定では、画像から関節の二次元位置を特定する。基本的に二つのアプローチがある。top-dwonアプローチでは、まず画像内で人の位置を特定し、キーポイントを特定する。bottom-upアプローチでは、まずすべてのキーポイントを特定し、関節をくっつけていく。通常top-downの方が正確で、bottom-upの方が高速だ。しかし、top-downでは、人の検出がかなり精度にかかわる。よって、オクルージョンがあると、失敗しやすい。
再帰は3Dポーズ推定も盛んだ。これは2Dの関節を三次元にもっていく。でも3Dの姿勢推定は基本的に不良問題設定だ。いろいろな仮定が必要になる。だから、こみった環境ではやはり、複数カメラを使ったほうがよい。
・2.2.Multi-view 3D pose estimation
複数画像からの3Dポーズ推定は広く研究されている。最新のやつでは、体の三次元位置を複数カメラで特定し、連続して、その領域を追跡する。このトラッキングベースのアプローチは、ポーズを独立して推定できる。これは、非常に良い結果だった。しかし、人の詳細なモデルを事前に作る必要があった。よって、光の状態とか服の色とかで失敗しやすい。
近年は、2Dポーズ推定の発展が目覚ましいので、それを複数台で組み合わせて3Dにするものも多い。しかし、それらは2Dポーズの推定が難しい場合、関節の3D復元をしない。
早い研究はbottom-upのアプローチをとって、複数台のカメラで3D関節推定の後平滑化して、高精度を達成した。しかし、みっつ問題があった。一つは、一人専用で、複数人に対応してなかった。二つ目は、4台のカメラの重なる狭いスペースしか対象ではなかった。三つめに、フィルタリングのためにIkを計算するとき、RoMを考慮してなかった。これらの欠点をこの論文では克服する。
・3.Synergitic reconstruction
提案3D復元システムはnc個のカメラでnpの人数を対象に行われる。カメラから見えなくなることを防ぐため、一か所に複数の異なる方向を向いたカメラを設置する。
各対象のキーポイントはtop-downで推定される(HRNet)。これで、PCMを得る。PCMを各関節のピクセルの代わりに使う。PCMで最適な人間の骨格を生成する。骨格モデルは40DoFだ。次のフレームの3D位置も正確に算出される。ポーズの情報はHRNetに矩形情報として、渡される。これを繰り返す。
初期化周りは付録に書きます。
・3.1.Determine bounding box from 3D motion
最近、top-downの姿勢推定は目覚ましい。矩形さえしっかりしていれば、オクルージョンがあってもかなり正確に推定できる。でも複数人数は中々難しい。矩形が難しいから。。
提案手法は高精度なmocapを実現できる。フレームレートが大丈夫なら、過去の3Dモーションから正確な現在の3Dモーションを推定できる。矩形も同様に算出できる。基本的に、HRNetを利用する。入力画像はW'H'3にトリムされ、PCMが計算される。
HRNetは体がそんなに傾いていない仮定があるので、傾いているときは、画像ごと傾ける。これには首の位置とかを使う。
カメラは見えているやつだけ使う。
・3.2 Spatiotemporal 3D motion reconstruction
上記手法は検出ミスで死んだりする。でも、PCMは正しい検出確率を作っている可能性がある。これは、PCMはTP/FPを考慮するといける。格子上に空間を区切ってやる。
各カメラの推定を写像して、格子のmaxをとればかなりロバストになる。
しかしながら、これは複数人の環境を想定しているので、top-downの手法は意図した人のOCMを矩形の中で計算しようとするが、これには限界がある。オクルージョンがすごいきついと、無理になる。
よって、オクルージョンの状況によりPCMを重みづけする方法をとる。
次に、キーポイントから骨格の関節位置を推定する。これはIKでやる。
しかし、関節位置は上記のように最適化されるが、動きが滑らかな様子は考慮されない。時系列のlow passフィルターでこれを実現する。でもこれにより、骨格か崩壊する可能性がある。よって、もう一度、ここでIKを走らせる。
・次に調べること
(RoM):range of motion, K. Yonemoto, S. Ishigami, and T. Kondo. Measurement Method for Range of Joint Motion (Japanese). The Japanese Journal of Rehabilitation Medicine, 32(4):207–217, 1995.
(HRNet):B. Xiao, H. Wu, and Y. Wei. Simple Baselines for Human Pose Estimation and Tracking. In European Conference on Computer Vision (ECCV), 2018.
・単語
spatiotemporal:時空の
apparently:どうやら
examining:調べる
accomplishes:成し遂げる
erroneously:誤って
lattice:格子
referencing:参照する