たれぱんのびぼーろく

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

徹底解説!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