Skip to content

是否要增加MultiResolutionSTFTLoss #2

@yingfenging

Description

@yingfenging

你好:
我在代码train_lpcnet.py中,有这样的一句代码aux_criteon = MultiResolutionSTFTLoss().cuda()。我想问一下,在训练时尝试过增加STFTLoss吗?如何增加?
我想通过增加STFT Loss来改善LPCnet的效果,但是不知道如何去增加,因为LPCnet网络输出的是概率密度,不是一个具体的采样点值,需要通过采样才能得到具体的采样值

谢谢。期待你的回复。

@BridgetteSong 的答复如下:

  1. 我确实尝试通过增加STFT Loss来改善效果,但是我发现对于交叉熵Loss没有改善(训练的交叉熵loss并没有减少),而且最终的音质也没有什么改善,所以后来就去掉了
  2. 因为我本来是想要使用Gaussian分布替换Softmax分布的,所以加入了这个Loss,但是Gaussian的效果不好,于是在交叉熵Loss中也想着加入这个是不是也可以改善。
  3. 想要加入STFT,首先需要从SoftMax分布中采样来得到激励信号out_exc的8bit ulaw预测值,然后使用ulaw2lin()转为16bit的float值,再计算ulaw2lin(predict) +ulaw2lin(out_exc)来得到音频的16bit预测样点值,同时输入数据需要增加原始语音输入,就可以计算STFT Loss了
  4. 由于原作者实现的LPCNet的一些限制,使用辅助Loss会比较麻烦,一是在提取特征时不能重复读入才可以确保特征长度和原始音频一致,二是我不确定作者的噪声注入是不是会影响辅助Loss,所以我去掉了噪声注入部分
  5. 原作者提取特征时就直接使用ulaw,所以当使用辅助Loss时再使用ulaw2lin转化有可能带来ulaw还原误差
  6. 我建议当使用交叉熵loss还是不要使用辅助Loss,如果使用其他Loss还是可以尝试的,如Gaussian Loss

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions