基于starganvc2的变声器论文原理解读

2024-04-08 12:04

本文主要是介绍基于starganvc2的变声器论文原理解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据与代码见文末

论文地址:https://arxiv.org/pdf/1907.12279.pdf

1.概述

        什么是变声器,变声器就是将语音特征进行转换,而语音内容不改变

        那么我们如何构建一个变声器呢? 

         首先,我们肯定不能为转换的每一种风格的声音训练一种网络,因此我们可以采用star gan的思想(参见:Star GAN论文解析-CSDN博客),只训练一个对抗生成网络解决所有问题。当然,任务不同,具体的网络结构需要改变

        需要的什么输入呢?输入当然是声音数据和标签编码(one hot类型)。

2.输入数据

        输入声音数据最重要的指标为频率,即每秒钟波峰所发生的数目称之为信号的频率,用单位千赫兹(kHz)表示

        通常来讲,声音信号为一段剧烈震荡的波形,当我们将声音信号不断放大时,就有可能出现一个一个的小线段(极限的思想)。例如0.1ms,此时我们可以对声音进行采样,例如秒0.1ms 4.8次,最终声音频率为4.8kHZ

3.语音特征提取

(1)声音信号的预处理

  • 首先,进行16KHZ重采样,即每秒采用16k次
  • 然后,进行预加重,通过来说,高频信号价值更大,于是我们补偿高频信号,让高频信号权重更大一些       
  • 分帧,类似时间窗口,得到多个特征段 

(2)特征汇总

        基频特征(FO):声音可以分解成不同频率的正弦波,其中频率最低的那个就是基频特征

        频谱包络:语音是一个时序信号,如采样频率为16kHz的音频文件(每秒包含16000个采样点)分后得到了多个子序列,然后对每个子序列进行傅里叶变换操作,就得到了频率-振幅图(也就是描述频率-振幅图变化趋势的)

        Aperiadic参数:基于FO与频谱包络计算得到

(3)MFCC

        流程:连续语音--预加重--加窗分帧--FFT傅里叶变换--MEL滤波器组--对数运算--DCT 

        通常来讲,我们人对低频的声音更敏感,例如从100HZ到200HZ,我们明显能够感觉到声音的变化。而如果声音从4000HZ到4100HZ,我们则感觉不到明显的变化。这可以从斜率的角度理解,其图像类似于一个对数函数。 

         

        FFT(傅里叶变换)之后就把语音转换到频域,MEL滤波器变换后相当于去模拟人类听觉效果。

         

        最后DCT相当于提取每一帧的包络 (这里面特征多) 

4.网络架构

(1)生成器网络结构

        在生成器中,首先进行下采样,然后提取特征,最后上采样,输出结果,类似与ecoder和decoder的过程。

(2)Instance normalization的作用

        在声音数据中,有语音特征和文本特征,对于语音特征我们希望保留其原始内容。

        Instance  normalization是从每一个实例维度出发进行归一化。即首先使用多组卷积进行特征提取,然后对每个特征图进行归一化。经过归一化后,声音特征被平均化,从而消除了特性,而基本的文本特征被保留。

        

(3)AdaIn的目的与效果 

         AdaIn主要用于解码器中,需要我们还原其声音特性。AdaIn有点类似于通道注意力,即使用FC层为每个通过学习一个权重项和偏置项,注意FC层学习的参数是基于标签的one-hot变量学习而来。

        

        (4)判别器

         判别器主要用于判断声音是原始的还是合成的,即判断真假。对于输入的声音数据,不断进行下采样。最后得到真假的预测。真预测接近于1,假预测接近于0.

        标签的处理:首先每个domain进行one hot编码,得到B*d的编码向量,然后将sourse和target进行拼接。拼接后编码为B*C的向量。而GSP层会将输出向量B*C*H*W压成B*C的向量,最后和标签得到的向量内积得到B*C的向量,对最终结果在sum一下得到B*1的向量,然后加入经过FC层的B*1的向量x中,最终得到预测值

数据与代码链接:https://pan.baidu.com/s/1aNlghgo6mtD4iWqNgMOWOQ?pwd=s206 
提取码:s206 

        

        

这篇关于基于starganvc2的变声器论文原理解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885534

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令