たれぱんのびぼーろく

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

2021-01-01から1年間の記事一覧

ポケットWi-FiにおけるクラウドSIM

業者がSIMを50枚用意、ポケットWi-Fi機器を100台用意する. ポケットWi-Fi機器には仮想的なSIMが動的に割り振られる. 普通は機器100台に対して100枚のSIMが必要なのに半分で済むので、安くできる. ただし、50枚分の容量を使い切ったら当然繋がらなくなるので…

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…

ParselMouth: ピッチ操作

manipulation = call(sound, "To Manipulation", 0.01, 75, 600) pitch_tier = call(manipulation, "Extract pitch tier") call(pitch_tier, "Multiply frequencies", sound.xmin, sound.xmax, 2) call([pitch_tier, manipulation], "Replace pitch tier") s…

論文紹介: 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的) …

multi-resolution Conv

違うカーネルサイズのConvを並列に並べるパターン. チャネルごとにカーネルサイズが違うと見做すこともできる. 出力次元はstrideとchannel数で決まるのでmulti-resolutionにするかどうかとは無関係. ちょこちょこ色んなとこで再開発されてるイメージ. Tacotr…

Tacotron 2

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

Vの3Dは「欠かすことのできない」ではない

3DはVTuberにとって「あれば活かしうる素晴らしいオプション」だが、必要条件ではない. もし3Dこそが本質ならば、論理的にYouTuberに勝てない. なぜなら物理的な人間の3D度は究極に高いから. そして実際、VTuberは3Dにこだわらない領域へも爆発的に浸透して…

論文解説: 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…

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

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

生成モデルと"温度"パラメータ: レアなサンプルはぽいっ

生成モデルにはしばしば temperature パラメータが設定される. こいつが何で、何をして、どう便利なのかを解説する. tempered softmax Dahl, et al. (2017). Pixel Recursive Super Resolution. Parmar, et al. (2018). Image Transformer. "truncation tric…

Lockファイル生成と動かせない依存性

Lockファイルは依存性のバージョンを厳密に指定することで動作を保証することを目的とする. 依存性の中にはハードウェアとの兼ね合いで(動作は同じ)ハードウェア固有バージョンを要求する場合がある. この2つは噛み合わせが悪い. Lockで厳密に縛るとハード…

DNNのCPU推論実装

BLAS: Intel MKL, OpenBLAS MKL-DNN PyTorch TorchScript libtorchから呼び出せるJIT-compiled モデル. 最初の20ループくらいで最適化が走るっぽい (ref). Fused-opsとかいろいろ. BLAS PyTorchは pip install時のCMakeでBLASライブラリを自動検出して利用. …

Makefileの存在意義: 依存性に基づく実行管理

Makefileの目的はファイル更新日とファイル依存木に基づいた無駄のないレシピ/コマンド実行である. (Target, Prerequisites, Recipe) の3つ組を考える. make Target すると Prerequisites ファイルの更新を確認し、更新があれば Recipe を実行し、なければパ…

OmegaConf まとめ

API docs がないので、全体を見通せるリストとして. config <=> others I/O from empty (.create()) dictionary (.create({"key": "value"})) list (.create([1, 2, 3])) YAML string (.create("k1: v1 /n k2: v2")) YAML file (.load(path)) dot-list (.fro…

OmegaConf で validation

Pythonは型ヒントを持っていても実行時validationを持たない. ただしPythonは型ヒントをアノテーションとして実行時まで抱えている. なのでカスタムvalidationを仕込むことができる. OmegaConf は Structured config の利用時にvalidationを提供する. MISSIN…

Pythonにおける型: 基本的な役割と応用方法

基本: 「Python ランタイムは、関数や変数の型アノテーションを強制しません。」 by Python Docs 基礎的な用途は型チェック・IDE/Linterサポート Pythonはアノテーションを手軽に取得できる(X.__annotations__)ので、ランタイムでこの型を利用できる. つま…

HydraとOmegaConf

Hydraの特徴: 実行時のconfig差し替えユーティリティが充実. Defaults List: yaml内からの他yamlの呼び出し/composeを可能にする Config Group: CLI引数でディレクトリ構造に基づいた他のyamlの呼び出し 要素ごとにConfigファイルを分割し、ディレクトリでグ…

サブバンド

例: 125 ms長のFIRフィルタ 125 msに含まれるサンプル数はsrに依存. sr=16kHzだと2000サンプル、sr=8kHzだと1000サンプル. 帯域を2分割すると 16kHz/2000サンプル => 8kHz/1000サンプルx2 になる. 新しいサンプルが来るたびにFIRフィルタをかけるため、フル…

論文解説: 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にお…