⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计8970字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
语音识别--猫狗声音识别
猫狗声音识别
一、任务需求
ESC-50数据集(Piczak,2015年)是2000个五秒时长的环境录音集合。该数据集由 50 个类组成,每个类有 40 个样本。
要求:利用YAMNet针对ESC-50数据集建立猫狗声音识别模型
二、任务目标
1、掌握TF Hub的使用方法
2、学习YAMNet网络推断
3、学习对音频数据集的操作
三、任务环境
1、jupyter开发环境
2、python3.6
3、tensorflow2.4
四、任务实施过程
ESC-50数据集(Piczak,2015年)是2000个五秒时长的环境录音集合。该数据集由 50 个类组成,每个类有 40 个样本。
import os
from IPython import display
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_io as tfio
1、探索数据
ESC-50-master/meta/esc50.csv
中存储了每个音频样本的元数据
ESC-50-master/audio/
存放了所有的音频文件
接下来我们使用pandas读取元数据进行查看
_ = '/home/jovyan/datas/ESC-50-master'
esc50_csv = _+'/meta/esc50.csv'
base_data_path = _+'/audio/'
pd_data = pd.read_csv(esc50_csv)
pd_data.head()
2、过滤数据
现在数据存储在 DataFrame 中,应用一些转换:
过滤掉其他类,只保留dog和cat两类。 当然,如果需要使用任何其他类,可以在这一步进行选择。
然后我们要修改文件名以获得完整路径,方便文件加载。
最后将修改标签,将dog标签保持为0,cat标签修改为1。
my_classes = ['dog', 'cat']
map_class_to_id = {
'dog':0, 'cat':1}
filtered_pd = pd_data[pd_data.category.isin(my_classes)]
class_id = filtered_pd['category'].apply(lambda name: map_class_to_id[name])
filtered_pd = filtered_pd.assign(target=class_id)
full_path = filtered_pd['filename'].apply(lambda row: os.path.join(base_data_path, row))
filtered_pd = filtered_pd.assign(filename=full_path)
filtered_pd.head(10)
filename fold target category esc10 src_file take
0 /home/jovyan/datas/ESC-50-master/audio/1-10003... 1 0 dog True 100032 A
14 /home/jovyan/datas/ESC-50-master/audio/1-11038... 1 0 dog True 110389 A
157 /home/jovyan/datas/ESC-50-master/audio/1-30226... 1 0 dog True 30226 A
158 /home/jovyan/datas/ESC-50-master/audio/1-30344... 1 0 dog True 30344 A
170 /home/jovyan/datas/ESC-50-master/audio/1-32318... 1 0 dog True 32318 A
175 /home/jovyan/datas/ESC-50-master/audio/1-34094... 1 1 cat False 34094 A
176 /home/jovyan/datas/ESC-50-master/audio/1-34094... 1 1 cat False 34094 B
229 /home/jovyan/datas/ESC-50-master/audio/1-47819... 1 1 cat False 47819 A
230 /home/jovyan/datas/ESC-50-master/audio/1-47819... 1 1 cat False 47819 B
231 /home/jovyan/datas/ESC-50-master/audio/1-47819... 1 1 cat False 47819 C
3、加载音频文件并使用YAMNet计算声音嵌入
在这一步,我们将为使用load_wav_16k_mono读取 WAV 数据,为模型提取做准备。
使用YAMNet从 WAV 数据中提取嵌入时,会得到一个(N, 1024)的数组, 其中N是 YAMNet 计算的帧数(每 0.48 秒音频一帧)。
模型将使用每一帧作为一个输入。因此,我们需要创建一个每行一帧的数组。
需要注意的是,这里我们不能将帧进行混合,因为在执行拆分时,最终可能会在不同的拆分中拥有相同音频的部分,而混合帧会降低验证和测试步骤的效率。
filenames = filtered_pd