文章目录
论文地址: ADAGAN:ADAPTIVE GAN FOR MANY-TO-MANY NON-PARALLEL VOICE CONVERSION
简介
AdaGAN是用于多对多的非平行数据的语音转换。相比较之前用于VC的GAN模型StarGAN,AdaGAN不仅在性能上有所提升,甚至AdaGAN可以实现零次转换(转换为训练集中没有的音色)。另外AdaGAN改进了训练网络,其计算代价很小。
Approach
problem formulation
先简单介绍一下需要用到的符号的含义
Z = { Z 1 , Z 2 , … , Z n } Z=\left\{Z_{1}, Z_{2}, \dots, Z_{n}\right\} Z={Z1,Z2,…,Zn} 表示说话人的集合 Z i Z_{i} Zi表示第 i i i个说话人
U = { U 1 , U 2 , … , U m } U=\left\{U_{1}, U_{2}, \dots, U_{m}\right\} U={U1,U2,…,Um} 表示说话内容, U i U_{i} Ui表示第 i i i个说话内容
X i ∈ p X ( ⋅ ∣ Z i , U i ) X_{i} \in p_{X}\left(\cdot | Z_{i}, U_{i}\right) Xi∈pX(⋅∣Zi,Ui) 表示第 i i i个说话人+第 i i i个说话内容的特征
语音风格转换在于,我们有原说话人的音频特征 ( Z 1 , U 1 ) (Z_{1}, U_{1}) (Z1,U1)和目标说话人对的音频特征 ( Z 2 , U 2 ) (Z_{2}, U_{2}) (Z2,U2),我们想得到 p X ( ⋅ ∣ Z 2 , U 1 ) p_{X}\left(\cdot | Z_{2}, U_{1}\right) pX(⋅∣Z2,U1),因此我们需要学习到 X ^ Z 1 → Z 2 \hat{X}_{Z_{1} \rightarrow Z_{2}} X^Z1→Z2,同时又要尽可能地保留 U 1 U_{1} U1。
这个过程可以表示为:
p X ^ Z 1 → Z 2 ( ⋅ ∣ Z 1 , U 1 , Z 2 , U 2 ) = p X ^ ( ⋅ ∣ Z 2 , U 1 ) p_{\hat{X}_{Z_{1} \rightarrow Z_{2}}}\left(\cdot | Z_{1}, U_{1}, Z_{2}, U_{2}\right)=p_{\hat{X}}\left(\cdot | Z_{2}, U_{1}\right) pX^Z1→Z2(⋅∣Z1,U1,Z2,U2)=pX^(⋅∣Z2,U1)
AdaIn
AdaGAN中,生成器模型的规范化方法使用了AdaIN,在风格迁移上使用IN效果比BN好很多,AdaIN和IN的不同在于仿射参数来自于样本,即作为条件的样本,也就是说AadIN没有需要学习的参数,这和BN,IN,LN,GN都不同。风格转换中的风格与IN中的仿射参数有很大关系,AdaIN扩展了IN的能力,使用风格图像的均值和标准差作为仿射参数。
AdaIN最初是用在图片的风格迁移,在语音风格迁移中,AdaIN帮助我们得到说话风格,以及声学内容。
AdaIN ( x , Y ) = σ Y ( x − μ X σ X ) + μ Y \operatorname{AdaIN}(x, Y)=\sigma_{Y}\left(\frac{x-\mu_{X}}{\sigma_{X}}\right)+\mu_{Y} AdaIN(x,Y)=σY(σXx−μX)+μY
x x x是训练集 X X X中声学内容的特征, Y Y Y是目标说话人的说话风格。AdaIN首先使用方差和标准差规范化 x x x。现在假定我们有一个潜在向量,可以表示声学内容的分布以及相同分布下说话人风格。为了转换说话风格,需要使用目标说话的分布。由此,AdaIN输出可以找到影响风格的特征,并且保留声学内容。AdaIN没有任何学习参数,他不会影响复杂度。
网络框架
AdaGAN中有一个编码器En,一个解码器De,还有一个判别器Dis,En将输入音频特征转为潜在向量,De由给定潜在向量生成音频特征。生成时假设原音频为x,需要转换为y,计算x,y的潜在向量。
En输入40长度的Mel谱图,输出1*512的特征向量。
De输入1*512的特征向量,输出40长度的Mel谱图。
En和De中所有的层都是线性层。En中,输入和输出层有40和512 cell大小。相对的在De中,输出和出入层有512和40大小,所有的层(除了输出层)都使用ReLU激活。
判别器Dis的作用于传统的GAN中的判别器的作用相似。他会判别出音频是原音频还是经过转换得到的。与De和En相似,Dis也是由线性层堆叠而成,他包含输入层,3个隐藏层和输出层,大小分别为40,512,1。同样每层也用ReLU函数激活。
转换方法
转换方法是先将原说话人的音频特征 x , y x,y x,y音频送入En,得到 S x S_{x} Sx S y S_{y} Sy,然后进行AdaIN改变准换分布,生成特征表示 t t t 接着使用De从t中得出音频特征。生成的 x Z 1 → Z 2 \quad x_{Z_{1} \rightarrow Z_{2}} xZ1→Z2包含了目标说话人的语音风格 z 2 z_{2} z2,以及原说话人的音频特征 x 1 x_{1} x1
S x = En ( x ) , S y = En ( y ) , t = Ad a I N ( S x , S y ) , x Z 1 → Z 2 = D e ( t ) S_{x}=\operatorname{En}(x), \quad S_{y}=\operatorname{En}(y), \quad t=\operatorname{Ad} a I N\left(S_{x}, S_{y}\right), \quad x_{Z_{1} \rightarrow Z_{2}}=D e(t) Sx=En(x),Sy=En(y),t=AdaIN(Sx,Sy),xZ1→Z2=De(t)
训练和测试方法
训练:为了实现多对多转换和零次转换,使用非平行数据集进行训练。首先针对两个说话人 Z 1 , Z 2 Z_{1}, Z_{2} Z1,Z2,随机选取两段音频特征 x , y x,y x,y。使用上述的转换方法将 x x x从 Z 1 Z_{1} Z1转换为 Z 2 Z_{2} Z2,得到 X Z 1 − > Z 2 X_{Z_{1}->Z_{2}} XZ1−>Z2,接着选取原说话人 Z 1 Z_{1} Z1另一个特征 x 2 x_{2} x2,将得到的音频 X Z 1 − > Z 2 X_{Z_{1}->Z_{2}} XZ1−>Z2再转换为 Z 2 Z_{2} Z2风格,得到 X Z 1 − > Z 2 − > Z 1 X_{Z_{1}->Z_{2}->Z_{1}} XZ1−>Z2−>Z1。
其中判别器需要判断的应该是第一次转换得到的 X Z 1 − > Z 2 X_{Z_{1}->Z_{2}} XZ1−>Z2
同理我们可以生成
X
Z
2
−
>
Z
1
−
>
Z
2
X_{Z_{2}->Z_{1}->Z_{2}}
XZ2−>Z1−>Z2
Loss函数
整个模型的Loss函数为
L total = L adv ( En , D e ) + L adv ( Dis ) + λ 1 L cyc + λ 2 L C X → Y + λ 3 L C Y → X + λ 4 L s t y X → Y + λ 5 L s t y Y → X \mathcal{L}_{\text {total}}=\mathcal{L}_{\text {adv}}(\operatorname{En}, D e)+\mathcal{L}_{\text {adv}}(\text {Dis})+\lambda_{1} \mathcal{L}_{\text {cyc}}+\lambda_{2} \mathcal{L}_{C_{X \rightarrow Y}}+\lambda_{3} \mathcal{L}_{C_{Y \rightarrow X}}+\lambda_{4} \mathcal{L}_{s t y_{X \rightarrow Y}}+\lambda_{5} \mathcal{L}_{s t y_{Y \rightarrow X}} Ltotal=Ladv(En,De)+Ladv(Dis)+λ1Lcyc+λ2LCX→Y+λ3LCY→X+λ4LstyX→Y+λ5LstyY→X
文章使用的超参数为 λ 1 = 10 , λ 2 = 2 , λ 3 = 2 , λ 4 = 3 , λ 5 = 3 \lambda_{1}=10, \lambda_{2}=2, \lambda_{3}=2, \lambda_{4}=3,\lambda_{5}=3 λ1=10,λ2=2,λ3=2,λ4=3,λ5=3
Adversarial loss
Adversarial loss包括 L adv ( En , D e ) \mathcal{L}_{\text {adv}}(\operatorname{En}, D e) Ladv(En,De)和 L adv ( Dis ) \mathcal{L}_{\text {adv}}(\text {Dis}) Ladv(Dis),这个Loss计算的是转换转换得到的数据与元数据的差别。
L a d v ( E n , D e ) = ( Dis ( y Z 2 → Z 1 ) − 1 ) 2 + ( Dis ( x Z 1 → Z 2 ) − 1 ) 2 \mathcal{L}_{a d v}(E n, D e)=\left(\operatorname{Dis}\left(y_{Z_{2} \rightarrow Z_{1}}\right)-1\right)^{2}+\left(\operatorname{Dis}\left(x_{Z_{1} \rightarrow Z_{2}}\right)-1\right)^{2} Ladv(En,De)=(Dis(yZ2→Z1)−1)2+(Dis(xZ1→Z2)−1)2
L a d v ( D i s ) = ( Dis ( x 1 ) − 1 ) 2 + ( D i s ( y 1 ) − 1 ) 2 \mathcal{L}_{a d v}(D i s)=\left(\operatorname{Dis}\left(x_{1}\right)-1\right)^{2}+\left(D i s\left(y_{1}\right)-1\right)^{2} Ladv(Dis)=(Dis(x1)−1)2+(Dis(y1)−1)2
Reconstruction Loss
只使用Adversarial loss的话,可能会丢失声学内容。这里使用Reconstruction Loss来尽可能保留声学内容。
L c y c = ∥ x Z 1 → Z 2 → Z 1 − x 1 ∥ 1 + ∥ y Z 2 → Z 1 → Z 2 − y 1 ∥ 1 \mathcal{L}_{c y c}=\left\|x_{Z_{1} \rightarrow Z_{2} \rightarrow Z_{1}}-x_{1}\right\|_{1}+\left\|y_{Z_{2} \rightarrow Z_{1} \rightarrow Z_{2}}-y_{1}\right\|_{1} Lcyc=∥xZ1→Z2→Z1−x1∥1+∥yZ2→Z1→Z2−y1∥1
Content Preseve Loss
这个Loss是为了在AdaIn期间保留声学内容,同时保证我们的en和de没有噪音
L C X → Y = ∥ S x Z 1 → Z 2 − t 1 ∥ 1 \mathcal{L}_{C_{X \rightarrow Y}}=\left\|S_{x_{Z_{1} \rightarrow Z_{2}}}-t_{1}\right\|_{1} LCX→Y=∥∥SxZ1→Z2−t1∥∥1
Style transfer Loss
这个AdaGAN的核心,有助于实现多对多转换和零次转换。在相同的声学内容下,尽可能地保证说话风格的潜在空间在相同的分布。
L s t y X → Y = ∥ t 2 − S X 1 ∥ 1 \mathcal{L}_{s t y_{X_{\rightarrow} Y}}=\left\|t_{2}-S_{X_{1}}\right\|_{1} LstyX→Y=∥t2−SX1∥1