我找不到在 PyTorch 中使用我的 wav 文件作为数据集的方法

问题描述

你好,我是 PyTorch 的新手,我想做一个简单的语音识别,但我不想使用 pytorch.datasets 我有一些数据集的声音,但我找不到任何地方可以帮助我。

我想使用 .wav 文件。我看到了一个教程,但他使用了 pytorch 数据集。

import torch
from torch import nn,optim
import torch.nn.functional as F
import torchaudio

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

from torchaudio.datasets import SPEECHCOMMANDS
import os

class SpeechSubset(SPEECHCOMMANDS):
    def __init__(self,subset,str=None):
        super().__init__("./",download=True)
        
        def load_list(filename):
            filepath = os.path.join(self._path,file.name)
            with open(filepath) as fileob:
                return [os.path.join(self._path,line.strip())]
            
        if subset == "validation":
            self._walker = load_list("validation_list.txt")
        elif subset == "testing":
            self._walker = load_list("testing_list.txt")
        elif subset == "training":
            excludes = load_list("validation_list.txt") + load_list("testing_list.txt")
            excludes = set(excludes)
            self._walker = [w for w in self._walker if w not in excludes]
            
train_set = SpeechSubset("training")
test_set = SpeechSubset("testing")

waveform,sample_rate,label,speaker_id,utterance_number = train_set[0]

对不起,我的英语不太好。

编辑

我使用的是 SPEECHCOMMANDS 数据集,但我想使用我自己的数据集

感谢阅读。

解决方法

既然你在谈论语音识别和 pytorch,我建议你使用一套完善的工具,而不是从头开始做与语音相关的训练任务。

github 上的一个很好的 repo 是 Espnet。它包含一些关于文本到语音和语音到文本模型的最新工作,以及用于训练不同语言的流行开源数据集的现成脚本。它还包括训练有素的模型供您直接使用。

回到你的问题,如果你想使用pytorch在你自己的数据集上训练你自己的语音识别模型,我建议你去这个Espnet Librispeech ASR recipe。虽然它使用 .flac 文件,但对 data preparation script 进行一些小修改并更改 major entry script asr.sh 中的一些参数可能会满足您的需求。

注意,除了python和torch的知识,espnet还需要你熟悉shell脚本。他们的 asr.sh 脚本很长。对于那些对特定模型的最少 pytorch 代码更满意的人来说,这可能不是一件容易的事。 Espnet 旨在容纳许多模型和许多数据集。它包含许多预处理阶段,例如语音特征提取、长度过滤、token准备、语言模型训练等,这些都是好的语音识别模型所必需的。

如果你坚持你找到的回购。您需要编写自定义 Dataset 和 Dataloader 类。你可以参考pytorch dataloading tutorial,但是这个链接以图片为例,如果你想要一个音频的例子,可能来自一些github repos,比如deepspeech pytorch dataloader

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...