Skip to content

一个帮助无声带人士将气流声转换为声音的尝试项目

License

Notifications You must be signed in to change notification settings

sharmt1411/voice-enhancement

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

无声带发声转实声AI模型

尝试训练一个小模型,将气流声转换为标准嗓音。用于帮助无声带人士发声。

因后天因素手术切除声带,一般仍可说话,但是嗓音类似悄悄话一样,只有轻微气流声发声。

或者夜晚游戏,为防止扰民,开麦时启用悄悄话转换功能。

demo

目前初步训练一个1M小模型,可以将气流声转换嗓音

输入音频16k采样率,16位深度 转换为mel图 模型使用conv+conv+conv+lstm+upconv+upconv+upconv实现,数据量大概采集10分钟,预估增大数据集后,参数量仍可减少 一次处理 序列(帧)长度64,在mel图以128hop转换时,对应16K采样率大概0.5s转换一次,仍有优化空间

分支说明

main 主分支 70万参数
1_3M 130万参数版本

文件说明

src/audio_process 进行实时转换的测试 src/train 模型训练脚本 src/test-case 测试模型效果的脚本 src/audio_model 模型设计文件 src/dataset 数据集加载文件

学习到的想法

自己在训练过程中,总结的一些想法也记录下来:

1.重视数据的标准化,数据的分布。有一天突然想起改变标准化方式用对数后归一化,效果立马好了很多。

2.有一段时间测试输出的音频一直有很大噪音,后来才发现是输入数据log处理后,转回线性过程中引入了噪声,导致训练的目标中就包括了噪声。有时候问题可能不是模型的问题。

2.1还有次发现,录制训练数据时默认开的音频增强,而实际测试中时有时没有,也导致和预期效果差很大,后边全部重新录制了一遍数据

3.借助正则化技术,小的数据集也可以训练出像样的模型。

4.以前以为L1loss,L2loss是每批的均值,用了才知道默认是所有批次的均值

5.激活函数的选择根据自己输出目标的分布来决定,不同的激活函数,效果可能差别非常大。

6.训练中打印模型的梯度信息,学习率,可以提前观察到梯度爆炸梯度消失等信息。

7.优化器上Adam基本没错,RMSprop有时候效果也很好

8.数据集不够可以上数据增强,迅速增大数据集,还有一定正则化作用,用了以后验证集上损失明显下降。比如为了使模型不处理正常声音,将正常声音最为输入加入模型,用正常声音作为目标训练,模型还能够具备一定的区分能力,针对呼吸声进行转换。

9.tensorboard对比不同批次很方便,记录重要信息

10.git记录很有用,多在分支上修改,至少保存训练最好的结果分支。

11.涉及到训练参数的,尽量不要在代码中设置默认参数,否则中间环节一个默认,排查都不好排查。然后最好是统一管理,不然可能出现测试和训练用的不是一套数据这种低级错误。

About

一个帮助无声带人士将气流声转换为声音的尝试项目

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages