たれぱんのびぼーろく

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

瞬間周波数

瞬間周波数 (Instantaneous frequency)

Instantaneous frequencyは位相を時間で微分したものである1
* (Boashash, 1992) * Abe, Toshihiko, Takao Kobayashi, and Satoshi Imai. “Harmonics tracking and pitch extraction based on instantaneous frequency.” International Conference on Acoustics, Speech, and Signal Processing, ICASSP-95., Vol. 1. IEEE, 1995.

Instantaneous phase and frequency - Wikipedia the interval (-π, π] or [0, 2π) : wrapped phase
. Otherwise : unwrapped phase, which is a continuous function of argument t, assuming sa(t) is a continuous function of t.

Related Phase Shift2とやらを利用.
深層学習による位相情報を考慮した音声合成の検討

現在では位相が及ぼす影響は少なくないことが分かっており, 雑音除去などの分野では位相情報の重要性に関して研究がなされている 3.

音響特徴量

音響特徴量のリストはwikipediaへ移管 (音声分析/音響特徴量)。


  1. The IF is defined as the phase derivavative(※筆者注: 微分導関数の意) with respect to time. from Abe 1995
    1. Saratxaga et al., “Simple representation of signal phase for harmonic speech models,” Electronics letters, vol. 45, no. 7, pp. 381–383, 2009.
  2. K.K.Paliwai et al., “The importance of phase in speech enhancement,” Speech communication, vol. 53, no. 4, pp. 465–494, 2011.

Pythonモジュール/パッケージの闇にのまれないために

module resolution (モジュール解決)

  1. find build-in module
  2. find from sys.path directory list

sys.pathのデフォルトlistは

  • 実行スクリプトの場所 || cd
  • PYTHONPATH
  • インストールごとのデフォルト (?)

パッケージ / package

Python用語.
モジュールの詰め合わせ、が大雑把な意味あい.

パッケージ内参照

  • absolute import: パッケージ名をrootとしたimport
  • relative import: 各モジュールから相対的にみたimport

同じディレクトリ内のmodule名を書くだけじゃダメ

同じディレクトリ内の兄弟モジュール (e.g. sibling.py) をimportするために

import sibling

はダメ.
sys.pathを全てなぞるので、同名の別moduleをimportする危険があるため、禁止になったそう.
正しくrelative importするか、absolute importで書くこと.
[Python] importの躓きどころ - Qiita

Windows Insider Previewでの遊び方

Windows OSは開発途上のプレビュー版 (オープンベータ版) をWindows Insider Programとして公開している。
新機能がもりもりで楽しく遊ぶことができる。
ただし、安易な火遊びは怪我の元。いくつか注意事項がある。

アップデート直後なら引き返せる

バージョンアップデート直後なら、
設定 -> 更新とセキュリティ -> 回復 -> 前のバージョンのWin10に戻す
からアップデートのロールバックが可能。5分ほどで前のバージョンに戻る。
一度入れたら引き返せない片道切符、ではない。

途中で引き返せない

逆に言えば、Insider Previewをしばらく続けて何度もバージョンを上げていくと、そこから安定版へは容易に引き返せないことになる。
ある日、最近使っていなかったが大事な機能がおかしい。バージョンを戻してもダメだ。おそらく何個か前のバージョンでバグったんだろう。しかし、もう、そこへは戻れない… (っらぃ)
PCの初期化に関わる方法で治せるそうだが、やりたくはない。

徹底解説!CycleGANで声質変換 (voice conversion, ボイチェン)

CycleGANの声質変換における利用を調べ、技術的詳細を徹底解説する。

CycleGAN-VCとは

CycleGANを話者変換 (声質変換, Voice Conversion, VC) に用いたもの。
CycleGANは2つのGeneratorが2つのドメインを相互変換するモデルであり、ドメイン対でペアデータがない (non-parallel) な場合でも学習が可能。
ゆえに話者Aの発話データと、話者Bの発話データを集めるだけでVCが可能になる。
CycleGANそものもの解説は山のようにあるので別記事を参照されたし。

論文・研究

2本の論文が発表されている.

  • Kaneko, et al.. PARALLEL-DATA-FREE VOICE CONVERSION USING CYCLE-CONSISTENT ADVERSARIAL NETWORKS
  • Fang, et al.. HIGH-QUALITY NONPARALLEL VOICE CONVERSION BASED ON CYCLE-CONSISTENT ADVERSARIAL NETWORK

また個人による研究も行われている

Kaneko, et al.

CycleGAN & Gated-CNN & identity-mapping lossでvoice conversion (MCEP変換)
non-parallelな声質変換のためにCycleGANを、時系列情報取り込みのためにTemporal convolutionを、linguistic informationを保持するためにidentity-mapping lossを採用。 waveformをWORLDで音響特徴量への変換したのち、MCEPsをCycleGANで、F0およびaperiodiciesは負荷の低い既存技術で変換、最後にWORLDで元に戻す。

技術的詳細

  • ネットワーク
    • Generator: 1D-GatedFullyConvNet (Down & Up sampling, total 12 layer, some of which contain instanceNorm, resBlock and PixelShuffler)
    • Discriminator: 2D-GatedCNN (4 GatedConv with IN, 1 FC)
  • 学習

    • CycleGAN
      • with Identity Mapping loss
    • LSGAN
    • Losses
      • Gadv:
      • Gcyc: L1 loss
        • λcyc = 10
      • Gid: L1 loss
        • λid: 5 for first 104iterations
      • Ddis:
    • optimization
      • method: Adam
        • momentum term β1: 0.5
      • Learning Rate:
        • G: from 0.0002, linearly decay over 2×105 iterations (decay start: 2×105 iterations)
        • D: from 0.0001, linearly decay over 2×105 iterations (decay start: 2×105 iterations)
    • mini-batch: N=1
  • データ

    • dataset: VCC2016
      • for training
        • SF1 & SM1: VCC2016 training 前半81発話 (100001 ~ 100081)
        • TF2 & TM3: VCC2016 training 後半81発話 (100082 ~ 100162)
      • for evaluation
        • VCC2016 evaluation 54発話
    • processing: waveform -> MCEPs, F0s, APs -> waveform
      • MCEPs: 24dim. converted by Gated-1D-CNN
      • F0: F0 by WORLD -> logarithm Gaussian normalization (logF0のsource正規化)
      • APs: no change
    • cropped a fixed-length segment (128 frames == 640 msec) randomly

データ詳細

training:evaluation == 162: 54 と言っているので、VCC2016 datasetをそのまま使っている模様.
source (SF1 & SM1) は前半の81発話、target (TF2 & TM3) は後半81発話を利用してオーバーラップなしのデータにしてる 1
The speech data were downsampled to 16 kHz, とあるが、そもそも16 kHzなのでここはよく分からない.
VCC2016データセット - たれぱんのびぼーろく
あがっているサンプルがevaluation SF1 200001の変換なので、(当然だが) 学習データとは別の評価用データを使って評価している模様.

logF0の部分: WORLDはf0とってくるので、自前でlogとること。
WORLDの論文にlogは書いていないみたいだし、CycleGAN-VC再現実装ではlog取るコードがあったのでたぶん正しい.

LSGAN

Sigmoidを除去したいLS-GANなのに、DでFC後にsigmoid通してる、謎
再現実装でもDの最終dence (==FC) にsigmoid入れたうえでL2 lossをとっている。はて…?

from (ablation) studies

w/o identity-mapping loss cause significant degradation (e.g. linguistic structure collapse)

まだわかっていないところ

w/o explicit density estimation. This allows to avoid over-smoothing caused by statistical averaging
多分、分布を仮定しないから的な話?

c.f.

DiscoGAN
DualGAN

実装上の注意

from Lie Mao

README.mdからは、200,000 iterationが最低必要、"take very long time even using a NVIDIA GTX TITAN X graphic card."が重要情報。
original project page: 実装上の知見はなし

from my results

(当然ではあるが) 毎回MCEPsへ変換していると前処理時間がえぐいことになる (1 サンプル1秒の前処理でも合計すると莫大な時間に)

Fang, et al.

Hiho

音韻性: 低次元音響特徴量 by CycleGAN
話者性: スペクトログラム高精細化 by pix2pix

入力のチャンネル方向の情報が入れ替わってしまう場合が多い ...
このような入れ替わりを抑制するためには、入力と変換結果の差が小さくなるようなIdentity制約を与えれば良い.

?

特徴量変換はウインドウ 5msで

  • 9-dim MCEPs: CycleGAN
  • f0: 線形変換
  • APs: そのまま

特徴量から(低品質な)スペクトログラムを生成、これをpix2pixで高精細化

Ladv:Lcyc:Lid = 1:10:0

#

a least squares GAN, which replaces the negative log likelihood objective in Ladv by a least squares loss

解読状況

Kaneko, et al.

3.1

不明点

  • contextual informationの指しているところ
  • cycle consistency lossの出典が知っているところと違う…?みる価値あるかも
  • そもそもGANがlogとるところ

3.2

sequential and hierarchical structures, e.g., voiced/unvoiced segments and phonemes/morphemes
の正確に意味するところ

GLUに切片的なアレがついてる。どうもついているのが標準らしい、要修正

ID lossはstructureに制約を書けるけどlinguistic informationマッピングを常に保証してくれるには十分じゃない この真意は? strctureとは

やはりid lossの理解は甘い感じがある.

  • identity mapping lossの出典 [24] Y. Taigman, A. Polyak, and L. Wolf, “Unsupervised cross-domain image generation,” in ICLR, 2017.

4.1

データ処理: 完全に理解した
Implementation details以降はしらぬ


  1. > For the first half, 81 sentences were used for the source and the other 81 sentences were used for the target divide training set into two subset for non-parallel, use different subset between source and target

ニューラルネットワークのアーキテクチャとそれぞれが持つ意味

ニューラルネットワークには、パーセプトロンから派生した(とみることが出来る)様々なアーキテクチャが存在する。
アーキテクチャはどのような形をしているのか。その形にはどのような (直感的・理論的) 意味があるのか。

データ構造に (アーキテクチャで) 意味を持たせる

FFNは全部から入力を受け取るので順序に意味はない.
c.f. context

unbounded context
finite context

batch norm

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

内部の共変量シフト(Internal Covariate Shift)と結び付けて理解されてい(た)
How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)

勾配消失などの学習難があり、その解決を目指して様々なアーキテクチャが提案されてきた。
ただ、最近初期値の大切さと良い設定方法が良く研究され、学習難が小さくなってきてる。
結果、昔導入してスタンダード化されたアーキテクチャが一部無意味になりつつある。

Generative Adversarial Networks

(広義の) 変換タスクを、敵対する2つのネットワークによって達成するもの.

(広義の) 変換タスク??

生成モデルとしてのGAN

x ~ P(X) を実現するような、生成ネットワーク G(Z)を生成する.
タスクとしては、入力zを適切な出力へ変換するタスク.
zが正規分布等のランダム分布にしているので何が出るかはランダムに見えるが、結局のところ z => output の変換タスクに変わりない.

conversion, transformation, conditioningとしてのGAN

Xsource domain => Ytarget domain を達成する変換タスク.
y ~ P(Y)を実現するような、ネットワークG(x)を生成する.
zかxかの違いなので本質的に一緒.
conditioning (条件付け) は生成モデルでもよく行われるが、結局 入力対 (z, c) => outputの変換タスクに変わりない.

conditioningラベルの渡し方

メインのinput (zやimageやaudio) に合わせてCNNなりを設計するが、その時に同時入力としてどうラベルを渡すか.
どうも明示されずに実装ごとに違いがあるみたい、要詳細検討
ACGANではchannel方向のone-hot vecotorで入れている模様 (10 classが(110, 1, 1)の入力から始まっている)
zが1x1なので純粋にchannel方向one-hotにできているが、画像入力の場合はどうするんだろうか. やはり一面1で埋めるのだろうか.

conditional DRAGANでのラベルの与え方 - 緑茶思考ブログ

  • CGAN
  • ACGAN

D(Adv)以外のネットワーク

補助タスク的なものの導入

  • ACGAN: conditioning

目的をじっくり考えつつ、素早く手を動かす

何かを達成するためには、効率の観点から見ると、

  • 目的とじっくり向き合うこと
  • まず手を動かすこと

の両立が重要。

目的の熟慮なき努力は絶望的な非効率を生む

YouTuberデビューした。炎上ネタでバズとった。チャンネル登録者数爆増。このパターンで伸びてる、いい感じだ!
ある日ふと思う。なんでYouTuber始めたんだろ?
やってて楽しくないんだよな…。
あれ、実は俺、同じ感覚の人が集まった小さいコミュニティを持ちたかっただけでは…? うわああぁぁ

何かを始め、波に乗り、努力しても、行きたくない高みに到達したのでは意味がない。
エベレスト登頂に価値を見出す人も見出さない人もいるのだ。
登ってから目的違いに気づき、下山して1から別の所を目指すのは絶望的に非効率だ (投下した莫大な努力量と釣り合ってない)

つまり、(努力が必要な) 遠くへ行くには、じっくり事前に目的を決めることが効率よい

まず手を動かさないと効率が悪すぎる

私は、同じ感性をもつ仲間と一緒に過ごすコミュニティが欲しい
1ヶ月かけて調査を行い、YouTuberデビューの綿密な計画を立て、他のYouTuberデビュー企画勢とコミュニケーションを取った。あとはデビューするだけだ!
デビューして気づく。あれ、想像より動画作成に時間がかかるな。他のデビュー勢見てると意外と時間なくなっちゃう。あ、投稿者ページにこんな便利機能あったのか…
やって初めてわかる問題、想定より遅れる動画投稿、崩れる計画。何が悪かったのか…

完璧な計画を立てるためには無限のリソースが必要だ。
計画自体は重要だとしても、限られたリソースで立案するために効率よく計画立てをする必要がある。
立案の前提となる情報収集において、手を動かすことは非常に効率がいい。
なぜなら、デビューしてわかったように、1やれば10の問題が噴出するからだ。
何を調べるか10個分時間をかけて頭を捻らなくても、1やれば10噴出してくるのだ。
そして1は実際にやろうとしてたことであるから、出てくる10の問題は大概有用だ。

つまり手を動かすことは近い計画・問題を検討する上で非常に効率がいいのだ。

遠く: 目的を熟慮、近く: まず実行

必要努力と結果の関係が大事。
目的は、高い努力 (熟慮) を必要とし、遠くを見通すことができる。
実行は、小さな努力 (実行) を必要とし、近くを素早く見渡すことを可能にする。

両方は相補的なのだ。両立こそが重要

デュエルの商標

決闘

バンナム

デュエル

デュエル\DUEL 同じく

書体はどれも普通.

「デュエル」「デュエル/決闘」は商標登録なし
ゲームでは"闘い"が非常に一般的な概念なので、ゲーム関係商品で「デュエル 」(たんなる決闘の英語訳)「デュエル/決闘」(決闘に英訳くっつけただけ) をくっつけただけでは識別がつかない(と私は思う、ので出願しても拒絶されると私は思う)