たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

AI

PyTorch-TensorFlow: 初期化の違い

PyTorchとTensorFlowで再現性の違いが出ることはよくある。 その要因の一つが初期化手法の違い。 なのでドキュメントとコードを当たって初期化手法をチェックした。 PyTorch vs TensorFlow Linear: kaiming_uniform(a=√5) == ~U[±√1/fan_in] vs glorot_unifo…

Conv受容野サイズを計算する

Wikipedia/畳み込みニューラルネットワーク#受容野へ移行。

論文解説: Wang (2021) fairseq S^2: A Scalable and Integrable Speech Synthesis Toolkit

様々な音声合成の公開実装と評価をしました論文 by Fairseqチーム1。 文字/音素/Unit-to-MelとvocoderでSpeech Synthesisをして、Fairseqお得意の指標群で客観評価。 Models models Implemented by Fairseq S2 Text-to-Mel: Tacotron 2, Transformer TTS, Fa…

ニューラルネットワーク要素比較の難しさ

AI

まとめ: 要素の本質的な影響よりハイパラの影響が大きいため、要素入れ替えによる影響評価には向かない(不可能ではない。向かないだけ)。 要素入れ替え評価 特定コンポーネントの価値を評価する手法として、そのコンポーネント以外を固定にしてそのコンポ…

モデル解説: LPCNet系

LPCNet系とは、線形予測にNN残差予測を組み合わせたLPCNetを起源とするモデルクラス。線形予測符号化とWaveRNNが祖先。モデル効率の良さからくる高速性とオープンソースのC実装がウリ。 要素解釈 Excitation/Residual - 単なる非線形補完 古典的ソース・フィ…

論文解説: Tian (2020) FeatherWave: An efficient high-fidelity neural vocoder with multi-band linear prediction

提案モデル: mel-spec input (pitch-less), multiband LPCNet1 デモ 中国語デモ wavecoder.github.io ConditioningNetwork 入力にmel-specをそのまま利用2, 3, 4(pitch無し5, 80 dim6)。 Mel2LPcoeff LP係数はmel-specから計算7。各バンドではmel-specのう…

論文解説: Valin (2022) Neural Speech Synthesis on a Shoestring: Improving the Efficiency of LPCNet

LPCNet、効率化しました (x2.5~)。 背景 - ボトルネックはわかっている、観念しろ LPCNetはモバイルCPUリアルタイム推論ができるほど速い。 巨大化すれば品質も良い。 しかし速度制約を満たす中での品質には改善の余地があり1、一層の効率化が求められている…

PyTorchでLSTMCellをONNXにエクスポートする: こいつ、ばらけるぞ

PyTorchでnn.LSTMCellをONNXにエクスポートすると、LSTM operatorになるでもなく、LSTMCell operatorになるでもなく、プリミティブ opsの集まりとして出力される。 gist.github.com まず、ONNXにはRecurrentCellに相当するoperatorがない(参考: wikipedia/O…

僕が考えたさいきょうのPyTorch Linting rules

命名規則: saveされる変数はexposedとして扱う モデル状態は state_dict() で保存され、後日loadされる。 state_dict()はパラメータ(例: nn.Module) とバッファを変数名に基づいて保存し、load時は変数名に基づいて状態がrestoreされる。 なのでモジュール…

パディング/padding in PyTorch

幅のある入力をスライドさせながら処理していくとき、左右端をどうするかという問題がでてくる。 端を何かしらの値で埋める(入力をちょっと大きくしておく)処理をパディングという。 特にPyTorchにおけるパディング実装のまとめ。 F.pad torch.nn.function…

解説: OpenVINO Model Zoo WaveRNN(composite)

OpenVINO Model Zooにある wavernn (composite) というモデルの解説. 概要 mel2waveのWaveRNN Vocoder1. fatchordタイプ、すなわちResNetベースのPreNetをもちMoLパラメータを出力する. fatchordのLJSpeech学習済みモデル(ljspeech.wavernn.mol.800k.zip)…

WaveRNN系まとめ

WaveRNNに関する記事集

サーベイ: STFT損失 in 音声波形ドメイン

音声波形生成タスクにおいて生成された波形に対するSTFTを損失関数に使う研究のサーベイ Parallel WaveGAN NSF HiFi-GAN MultiBand-MelGAN StyleMelGAN GAN系でSoTAなvocoderはみんな採用してるイメージある. model loss name reference loss intent PWG1 mu…

粗い理解: gumbel softmax

確率分布からの微分可能なサンプリング手法 確率ベクトルにノイズ入れてargmaxすればindexが取れ、そのままone-hot vectorにもできる. => ノイズの入れ方を工夫すると分布通りのサンプリングが可能 (Gumbel-Max Trick) サンプリングはするけど微分もしたい a…

論文紹介: Liu (2020) Non-Parallel Voice Conversion with Autoregressive Conversion Model and Duration Adjustment

VCC2020 T10モデル1 (top score). ASRベースのrec-synでMOS 4.0 & similarity 3.6 を達成. Models ASR SI-ASR (N10と一緒?) Conversion model Encoder-Decoderモデル (≠S2S). Encoder LSTM -> 2x time-compressing concat2 -> LSTM Decoder Attention付きAR-…

徹底解説!non-local operations / self-attention

Non-local Neural Networks (2018) モジュールのお気持ち 「私が欲しいものだけぜーんぶください」 FC: とにかく全要素を取りこむ Conv: 決め打ちで局所だけ取りこむ RNN: hiddent-1だけ直接取りこむ => 現在値に基づいて動的に、全長から欲しい要素だけ、取…

論文解説: FastPitch: Parallel Text-to-speech with Pitch Prediction

FastSpeechにピッチ推定も兼ねてみました論文. Durationと同じくphoneme単位でPitchPredictorを学習. Scalar予測した値をlatentと同じFeature次元に変換したのち、なんとただsum(segFCでFeature次元に飛ばしているので学習可になり、その辺で音高次元でも暗…

論文解説: Ren (2019) FastSpeech: Fast, Robust and Controllable Text to Speech

速い、巧い、(安いかは微妙)FastSpeech 概要 Transformerで音素列を系列変換、動的にアップサンプリング、Transformerで↑系列をmel-specへ変換. 以上. 動的アップサンプリングは LengthRegulator で実行され、音素ごとの倍率が DurationPredictior で動的…

意図した中間表現の学習

モデルが中間表現として特定の値を取るように学習してほしい. A: モデルバイアスで自然とそう学習するように祈る B: モデル分割をして個別学習 C: その中間表現に対してLossを設定 D: Lossを設定したうえで次の層へは教師データを渡す(teacher forcing的) …

Tacotron 2

主張「TTSしたいならWaveNetを複雑な特徴量で直接条件付けるより "良いchar2specモデル+spec2wave WaveNet" がいいぜ」 概要 Attention Seq-to-Seq で文字列からメルスペクトログラムを生成、WaveNetで波形生成. LSTM Encoderが文章を丸呑み、最終出力をzと…

論文解説: Rivière (2020) Unsupervised pretraining transfers well across languages

多言語ASRの事前学習にCPCを利用、既存の教師ありモデルと同等以上の性能を発揮. 背景 小データの時どうするか => 近いドメインの大データでpre-training & Transfer learning ASRは音素っぽいものを事前学習できればわりと共用できそう => CPC 手法 CPCの教…

論文解説: Multi-band MelGAN: Faster Waveform Generation for High-Quality Text-to-Speech

MelGANに対してモデル・Lossの最適化をした上で、最終出力チャネルを複数にしてそれぞれサブバンドを予測. 通称 MB-MelGAN モデル MelGANベース、すなわちConvT1dベース. ResBlock導入やDilatedConvによる受容野拡大により、フルバンドモデルそのものをまず…

コーパス: Libri-light

Libri-light は LibriVox から生成されたコーパス1. なので LibriSpeech の親戚2. Unlabelled Speech Training Set unlab-60k unlab-6k unlab-600 Dev and Test Set (totally same as LibriSpeech3) dev-clean: 5.4 hours dev-other: 5.3 hours test-clean: …

新時代の古典: WaveNet

今やニューラルボコーダは当たり前で、用途に合わせて多種多様. その原点、WaveNet. 今ではWaveNetそのものは使われないが、その根本的アイデアは当たり前レベルに普及し、モジュールも各所で使われている. いわば新古典であるWaveNetをいま振り返る. Summar…

生成モデルは過剰なのか?

生成モデル: サンプル分布全体を学習 生成モデルはかなり高等なモデル. ごく稀なサンプルのバラエティを含め、全てをモデリングしようとする. 生成モデルの実用時には分布の細部を無視したほうが結果が良いことが多々ある. => 生成モデルと"温度"パラメータ:…

論文解説: Multiband-WaveRNN

Multiband-WaveRNN は「WaveRNNは表現力を余らせてる」という仮説の下で、サイズを変えていないWaveRNNへサブバンドN個の同時予測を課したモデル1. なんと実際にMOS差無しでNバンド予測に成功. 動作周波数を1/NにできるのでRTFが大幅に改善. 背景・モデル Wa…

Gated Activation Unit; tanh出力をsigmoidでゲーティング

Gated Activation Unit は活性化関数/ユニットの一種. output = tanh(Wfilter ∗ input) ⦿ σ(Wgate ∗ input) tanh(conv(input))で非線形変換した出力に対し、sigmoid(conv'(input)) で出てくる 0~1 を用いたGatingをかけているとみなせる. Gated PixelRNNにお…

音声合成器と特性: タスクごとに要件は違う

特性一覧 quality latency ↓ stream latency: サンプル出力時 - サンプル受信時 ↓ realtime factor; RTF: 処理時間/信号長 ↓ performance: リソース要求量/使用量 CPU/GPU/メモリ タスクと特性; 要件 音声素材検証 文章や補助入力を考えながら打って「よしこ…

BackwardとOptimizer

「誤差はいくつか」と「誤差をどう重みに反映するか」の役割分担. 特定の層だけ学習無しにしたい場合(例: Encoder-FixNet-Decoder)、誤差逆伝播をFixNetで止めるのはNG. なぜならEncoderへ誤差が伝わらないから. Backwardは通常通り計算して、OptimizerをE…

FairSeqのGSLMレポ解析

gslm/speech2unit: Speech-to-連続unit-to-離散unit. モデルと学習済みパラメータが配布. /pretrained: Speech-to-連続unitの部分 /cpc_feature_reader.py: PCP Speech-to-unitモデルの色々 CPCEncoder: [Conv-CN-ReLU]x5だけ. 超シンプル. CPCAR: ただのLST…