腾讯 PCG QQ 团队 刘秋男 黄飞 石世昌 华超 杨梁
腾讯 QQ,8 亿人都在使用的即时通信软件,大量用户使用它进行免费视频、音频通话。用户在进行音频通话时可能处于各种场景,嘈杂的背景声音对通话产生干扰,高质量的音频降噪能够有效提升用户通话体验。
QQ 团队基于开源 TensorFlow 机器学习平台实现了音频降噪、音质提升和模型优化算法,将降噪算法应用于 QQ 音视频通话场景中,为用户提供 AI 赋能的智能通讯。
前言
传统降噪方法大部分结合数学、物理原理进行推导,其过程中难免基于人认知的理想先验假设,这降低了传统降噪方法对多种类、非平稳噪声的适应性。传统降噪因其计算量低,能够实时进行语音降噪的优势广为使用,但对实际场景中频发的多种类、非平稳噪声表现不佳。
AI 降噪是最近兴起的基于数据驱动的降噪方法,能够有效的应对各种突发的非平稳噪声,前提是需要大量的训练数据与合适的模型设计。模型在移动端上的部署需要权衡模型大小、降噪效果、CPU 占用率和内存占用率等多个因素,给降噪技术带来了一定的挑战。
本文基于 TensorFlow 平台搭建了一个 AI 降噪与噪声场景分类的并行训练框架,如 Fig.1 所示,打通了数据合成、模型搭建、训练推理及部署流程。此框架集中了 TensorFlow 众多 API,训练好模型后使用 TensorFlow Lite 转为 .tflite 文件。借助 TensorFlow Lite 的量化功能减小模型尺寸,在模型的降噪效果基本不受影响的前提下,极大提升了性能优势并成功部署到产品中上线。
Fig.1 基于 TensorFlow 的训练框图
训练框架搭建
数据处理
数据是以一边读取一边合成的方式动态合成带噪音频,数据读取和音频混合使用了 librosa、numpy 等开源框架,最后用 tf.data.Dataset.from_generator()
函数进行封装,模型在训练时直接调用此接口提取数据。
展示部分数据处理代码如下,自定义数据生成器 data_generator()
,其中使用 librosa 开源框架读取音频为 numpy 数组格式,然后按照不同信噪比制作混合音频,每次 yield 一个样本,tf.data.Dataset_from_generator()
函数通过自身的迭代器与自定义的数据生成器遍历数据集。
def snr_mixer(clean_file, noise_file, snr, sample_rate=16000):
clean_audio, _ = librosa.load(clean_file, sr=sample_rate)
noise_audio, _ = librosa.load(noise_file, sr=sample_rate)
snr = np.random.randint(-5, 20)
speech, noise_ori, noisy = generate_mix_audio(clean_audio, noise_audio, snr)
return speech, noise_ori, noisy
def data_generator():
for file in self.clean_files:
idx = random.randint(0, len(self.noise_files) - 1