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
- Gid: L1 loss
- λid: 5 for first 104iterations
- Ddis:
- optimization
- method: Adam
- 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
- 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秒の前処理でも合計すると莫大な時間に)
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以降はしらぬ