零基础入门语音学习之CNN-baseline

零基础入门语音学习之CNN-baseline

baseline由开源学习组织Datawhale提供
https://github.com/datawhalechina/team-learning

环境介绍

环境要求librosa tensorflow 2.x
librosa是一个功能强大的语音处理库,后面会用这个库对语音数据特征进行提取。tensorflow 2.x是本次实现语音识别的深度学习库。语音数据为kaggle开源可商用的语音数据集。
https://pan.baidu.com/s/1K2vgn_Wf8Foy3oYHPH22LA 提取码:4vdz
将数据集下载到clips_rd_sox文件夹中解压,即可运行代码。
本次打卡主要说一下对于特征提取的理解。

特征提取方法的理解

def extract_features(parent_dir, sub_dirs, max_file=10, file_ext="*.wav"):
    c = 0
    label, feature = [], []
    for sub_dir in sub_dirs:
        for fn in tqdm(glob.glob(os.path.join(parent_dir, sub_dir, file_ext))[:max_file]): # 遍历数据集的所有文件
            
           # segment_log_specgrams, segment_labels = [], []
            #sound_clip,sr = librosa.load(fn)
            #print(fn)
            label_name = fn.split('/')[-2]
            label.extend([label_dict[label_name]])
            X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
            mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
            feature.extend([mels])
            
    return [feature, label]

以上代码块中是baseline用于提取声音特征的函数。个人认为最重要的是mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0)这一段。这一段的意思是对librosa提取的声音信号X提取梅尔频谱特征。提取后特征是[128, frames]。其中frames代表提取的特征的帧数。意义在于对每一帧提取128维度的向量表示。每个声音特征的时长不等,故提取的帧数frames肯定是不相等的。因此baseline中将其转职后对frames所在维度取均值表示。
baseline中选择CNN作为语音识别的模型,因此又将输入数据reshape

X_train = X_train.reshape(-1, 16, 8, 1)
X_test = X_test.reshape(-1, 16, 8, 1)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值