首页 > 其他分享 >音频质量检测模型中标准数据集的构建方法

音频质量检测模型中标准数据集的构建方法

时间:2022-09-28 16:03:45浏览次数:47  
标签:noise end 检测 音频 start 构建 语音 data


背景

音频质量检测模型训练中,纯净高质量的音频数据集比较好获得,但是损伤音频的数据集比较少,而且损伤音频的质量得分也很难评估。我们采用了一种只依靠纯净高质量的语音数据集来制作低质量音频并打分的方法。

在语音质量评估中,有很多主观和客观的评价方法。主观的评价方法就是人通过听觉感受来评价音频质量的好坏,并进行打分,常用的评分标准是MOS(Mean Opinion Score)。MOS是国际电信联盟(ITU)在语音质量的主观评价方法ITU-T P.800标准里提出的,该标准是对电话传输系统中声音质量主观评价的概述,其本质就是MOS方法。同时给出语音质量主观评价的普遍方法和普遍测试环境,其他所有测试都遵循该建议,特别是测试环境(在所有的主观评价方法中基本相同)。为完成MOS评价得分,需要大量评测人员对音频质量进行打分,分值范围为1-5分,分数越高表示音频质量越好。一般情况下MOS值大于4的被认为是质量比较好的语音,小于3的则被认为语音质量不合格。

音频质量检测模型中标准数据集的构建方法_数据

客观的语音质量评估方法即通过算法来评估语音质量,主要有2类,有参考和无参考的语音质量评估方法。两者的主要区别在于是否需要标准音频参考。有参考的除了待评估的音频,还需要一个对应的高质量无损伤的音频作为参考,代表算法如PESQ(Perceptual eval(SNR)的形式加入到纯净语音数据的随机位置上,这种噪音添加方法可以有效地模拟真实场景中的噪声,最后计算PESQ指标作为每一份音频数据的GroundTruth,步骤如下:

  1. 随机选择加入噪声的起始与结束段落
  2. 根据指定的信噪比计算加入噪声的强度值
  3. 在计算好的段落内加入随机选择的噪声种类
  4. 计算PESQ分数

技术实现

  1. 随机选择加入噪声的起始与结束段落
def random_sample(n1, n2):
if n1 < n2:
start = random.randint(0, n1)
end = random.randint(start, n1)
else:
start = random.randint(0, n2)
end = random.randint(start, n2)
return

信噪比指为有用信号功率(Power of Signal)与噪声功率(Power of Noise)的比值。为了合成指定信噪比的混合语音,需要对噪声的能量进行调整。根据信噪比的计算公式,计算出噪声能量调整的倍数。

音频质量检测模型中标准数据集的构建方法_测试_02

def add_noise(x, d, SNR):
P_signal = np.sum(abs(x) ** 2)
P_d = np.sum(abs(d) ** 2)
P_noise = P_signal / 10 ** (SNR / 10)
k
def make_noise_data(high_wave_data,noise_sample_data):
c_start, c_end = random_sample(len(high_wave_data), len(noise_sample_data))
n_start = random.randint(0, len(noise_sample_data) - (c_end - c_start))
n_end = c_end - c_start + n_start
k = add_noise(high_wave_data, noise_sample_data[n_start:n_end], -10)
convert_data = high_wave_data[c_start:c_end] + k * noise_sample_data[n_start:n_end]
new_wave_data
score = pesq(sr, high_wave_data, low_wave_data, 'nb')

总结

在现实场景中,我们评估一段音频的质量分值的时候,很难找到对应的高质量音频数据做参考,所以无法用PESQ算法来直接计算。我们可以通过神经网络模型来学习这种对应关系,用上面的方法由高质量音频数据构建出对应的低质量音频数据并计算出PESQ的分值;将构建好的两类数据输入给神经网络模型做训练,让神经网络学习内在的对应关系,并给任意输入的音频数据打分。当模型训练好后,我们就能对任意的音频数据进行评估打分,而不需要其对应的参考信号。

标签:noise,end,检测,音频,start,构建,语音,data
From: https://blog.51cto.com/u_15649298/5719645

相关文章

  • 59、Window10+VS2019调用百度的API进行活体检测
    基本思想:给客户搞了个摄像头的人证比对历程,真艰辛;本以为很简单的一个事情,最开始是人证比对,客户搞成了照片测试;我又搞成了眨眼测试,客户用上了手机播放视频;我又又搞成了手机......
  • 39、rk3399 pro刷机过程、并实现npu目标检测和http服务发送信息
    基本思想:记录一下rk3399pro刷机过程,在公司刷机造成了屏幕卡在firefly画面不动了,甚是焦虑,拿回家拯救搬砖其中ubuntu的帐号:firefly密码:firefly其中Fedroa的帐号:toybrick......
  • NCH Switch Plus Mac(音频转换工具)
    自己喜欢的歌曲在手机上不支持这种格式怎么办?这时候就要用到音频转换工具了,SwitchforMac是Mac平台上一款很好用的音频转换工具,可以快速转换各种音频格式,使用便捷,还能在转......
  • 25、Jetson Xavier Nx 使用deepstream6.0进行目标检测和推流处理
    基本思想:客户的开发板,搞一个deepstream开发板上进行推流检测并将视频推到手机上进行实时显示,如果开发板的python环境有问题的话,可以在pc端进行模型转换,不用计较pc端的驱动......
  • 20、NanoDet训练、测试 以及使用ncnn部署Jetson Nano 进行目标检测和串口数据转发
    基本思想:最近想尝试一下nano上部署nanodet,于是记录一下训练过程,手中有一份labelme标注的数据集,于是开始了一波操作~首先进行划分数据集分为训练集和验证集 31、TensorFlow......
  • Notebook交互式完成目标检测任务
    摘要:本文将介绍一种在Notebook中进行算法开发的新方式,新手也能够快速训练自己的模型。目标检测是计算机视觉中非常常用且基础的任务,但是由于目标检测任务的复杂性,往往令新......
  • pytorch 构建单/多层感知机
    One-HotEncode编码:主要用于解决神经网络用于分类的构建loss编码的方式super()super()函数是用于调用父类(超类)的一个方法。super()是用来解决多重继承问题的,直接......
  • Qt实战15.构建网络拓扑图
    1需求描述基于Qt图形视图框架开发一个网络拓扑模块,用于可视化展示、控制HUB(类似于交换机)与NODE(类似于连接到交换机上的设备)的关系网路。2设计思路先来看个图:这里将......
  • GB/T28181-2016基于RTP的视音频数据封装和技术实现
    首先我们先回顾下相关技术规范,看看基于RTP的音视频数据PS封装。C.1基于RTP的视音频数据PS封装基于RTP的PS封装首先按照ISO/IEC13818-1:2000将视音频流封装成PS包,再将PS包......
  • Python cv2(Opencv) Canny边缘检测 和 傅里叶变换
    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效,由一系列C函数和少......