基于Torchaudio构建数据集
文章目录
前言
本系列本来打算每一章都写笔记记录下来,不过看来几个视频之后,发现2,3其只是在普及torch以及复现基础手写字体识别的例子,与torchaudio和音频处理关系不大,就跳过,感兴趣的可以直接看代码。4,5,6,7都是在讲解如何构建数据集,所以一并记录:
02 Training a feed forward network
构建和训练mnist手写字符识别网络
03 Making predictions
推理接口的实现
04 Creating a custom dataset
创建数据集处理类
05 Extracting Mel spectrograms
基于torchaudio提取音频的梅尔频谱特征
06 Padding audio files
样本的Padding和cut
07 Preprocessing data on GPU
使用GPU训练
一、下载数据集
官方数据集要注册才能下载,直接从这里urbansound8k下载。
文件目录
其中audio是音频文件,大概8700多个
metadata为标注的文件夹
标注格式
metadata/UrbanSound8K.csv:
二、UrbanSoundDataset类的定义
class UrbanSoundDataset(Dataset):
def __init__(self, annotations_file, audio_dir):
self.annotations = pd.read_csv(annotations_file)
# 使用panda加载csv
self.audio_dir = audio_dir
def __len__(self):
return len(self.annotations)
def __getitem__(self, index):
audio_sample_path = self._get_audio_sample_path(index)
label = self._get_audio_sample_label(index)
signal, sr = torchaudio.load(audio_sample_path)
# 返回tensor类型的音频序列和采样率,与librosa.load的区别是,librosa返回的音频序列是numpy格式
return signal, label
def _get_audio_sample_path(self, index):
fold = f"fold{
self.annotations.iloc[index, 5]}"
path = os.path.join(self.audio_dir, fold, self.annotations.iloc[
index, 0])
return path
def _get_audio_sample_label(self, index):
return self.annotations.iloc[index, 6]
三、提取梅尔频谱特征
梅尔频谱为音频信号处理中常见的特征表示,torchaudio中使用torchaudio.transforms模块来实现
定义梅尔转换
mel_spectrogram = torchaudio.transforms.MelSpectrogram(
sample_rate=SAMPLE_RATE,
n_fft=1024,
hop_length&