这是撰写的“与老师强迫和计划采样的声音事件检测语言建模”中介绍的方法的存储库,K。Drossos,S。Gharib,P,Magron和T. Virtanen。
我们的论文介绍了对声学场景和事件的检测和分类(DCASE)2019年。
如果您使用我们的方法,请引用我们的论文。
您可以从论文中使用的代码版本
声音事件检测(SED)是从音频的短时表示中识别声音事件活动的任务。例如,给定从0.04秒提取的音频特征向量,SED方法应确定该向量中不同声音事件的活动。通常,将SED应用于一系列短时音频特征向量,并对每个输入特征向量进行声音事件活动的识别。也就是说,由于输入给出一个矩阵, T和F分别为特征向量和特征的量,输出是矩阵,该矩阵在每个t特征向量上都保留每个C类的预测。
在现实生活中,各种声音事件可能在事件内部和跨事件中具有时间结构。例如,在之间(事件内结构)之间的停顿可能会重复“脚步”事件。另一方面,“汽车喇叭”可能会遵循或先于“通过”声音事件(事件间结构)。这种时间结构用于其他机器学习任务,例如在机器翻译,图像字幕和语音识别中。在这些任务中,开发的方法还学习了目标类别的时间关联模型。这些关联通常被称为语言模型。
SED方法可以从语言模型中受益。此存储库中的方法与此有关。一种利用SED语言模型的方法。
为了利用上述时间结构,我们使用教师强迫[1]技术。老师的强迫是在上一个时间步骤中通过声音事件的活动来调整输入到RNN的条件。那是,
在时间步骤t处的RNN的输出在哪里,是RNN的输入(从上一层)和时间步t ,并且是时间键t-t-1的声音事件的活动。
如果所用的地面真实值,那么对于不是正确的类活动的情况,RNN将不健壮。例如,在没有地面真实价值的测试过程中。
如果使用分类器的预测,则RNN将很难学习声音事件的任何依赖性,因为在培训期间(尤其是在培训过程开始时),它将被提供不正确的课堂活动。
为了解决以上两个方面,我们采用了预定的抽样技术[2]。也就是说,在培训开始时,我们将其用作基础真实价值观。随着培训的进展,分类器学会了预测越来越正确的课堂活动,我们逐渐采用了分类器的预测。
[1] RJ Williams和D. Zipser,“用于不断运行完全复发神经网络的学习算法”,《神经计算》,第1卷。 1,不。 2,第270–280页,1989年6月。
[2] S. Bengio,O。Vinyals,N。Jaitly和N. Shazeer,“针对复发性神经网络进行序列预测的预定抽样”,在第28届国际神经信息处理系统会议论文集,第1卷,第1卷。 Nips'15。美国马萨诸塞州剑桥市:麻省理工学院出版社,2015年,第1171–1179页。在线的。可用:http://dl.acm.org/citation.cfm?id=2969239.2969370
要开始使用我们的项目,您必须:
使用Python 3.6。该存储库中的代码经过测试,并与Python 3.6合作。可能会使用其他Python 3.x版本,但请注意,此代码适用于Python 3.6。
使用pip (pip_requirements.txt)或conda (conda_requirements.txt)文件设置依赖项。在项目的根目录中使用您的终端导航(即克隆此存储库后创建的目录),然后在终端上发出适当的命令:
pip设置依赖关系: $ pip install -r requirements/pip_requirements.txtconda设置依赖项,您可以发出命令$ conda install --yes --file requirements/conda_requirements.txt下载音频数据。您可以从:
TUT-SED合成2016数据集可从此处获得。
下载音频文件(即音频1/5,音频2/5,...,音频5/5),进行功能提取,并在数据设置部分遵循说明。
2016年TUT Sound Events可从此处获得。
下载音频文件,进行功能提取,然后按照数据设置部分遵循说明。
TUT Sound活动2017可从这里获得
下载音频文件,进行功能提取,然后按照数据设置部分遵循说明。
现在,该项目已设置,您可以将其与步骤3中获得的数据一起使用。
您可以将SEDLM直接用于数据,也可以检查代码并将SEDLM采用到SED任务中,或重复我们论文中描述的过程。
SEDLM代码基于Pytorch,版本1.1.0。
在当前形式中,代码的不同变量在YAML文件中指定,持有代码的所有设置。所有YAML文件都在settings目录中,并且在settings目录中搜索YAML文件的YAML加载功能。通常,您只需更改YAML文件中的设置值,然后运行代码。
数据必须在data目录中。
如果要使用现有的数据加载程序,则必须以特定方式组织数据。首先,您必须有不同的文件来获得输入功能和目标值。例如, input_features.npy和target_values.npy 。然后,根据要使用的数据集,您必须将数据放在不同的目录中。那是:
Tutsed合成2016。
数据必须位于data目录中的名为synthetic目录中。也就是说, data/synthetic 。然后,培训,验证和测试数据的文件必须在其他目录中。那是:
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testing您必须具有不同的numpy文件,以进行输入功能和目标值。您可以在YAML设置文件中指定每个输入或目标文件的名称。例如,培训文件应该是:
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npy该代码将加载Numpy文件并将其用于训练SEDLM方法。您可以确保正确订购了输入功能和目标值。也就是说,输入特征中的第一个元素对应于目标值中的第一个元素。
TUT现实生活2016
数据必须位于data目录中的名为real_life_2016的目录中。也就是说, data/real_life_2016 。然后,每个折叠的文件必须在不同的目录中。那是:
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4您必须为输入功能和目标值以及每个折叠的训练和测试具有不同的泡菜文件。由于每个场景和每个折叠都有多个文件,因此您不能在numpy数组中具有所有功能。因此,您必须在列表中使用所有数据,并使用腌制软件包列出列表(即磁盘)。此外,每个折叠都有用于培训和测试的文件。
为了方便起见,SEDLM会自动使用文件名的预修饰。也就是说,它会自动将“火车”和“测试”添加到指定的文件名中。
您可以在YAML设置文件中指定每个输入或目标文件的名称。例如,文件应该是:
input_features.ptarget_values.p然后,SEDLM代码将搜索正确的文件和每个折叠。例如,对于折叠1和家庭场景,将寻求以下文件:
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.p该代码将加载腌制文件并将其用于训练SEDLM方法。您可以确保正确订购了输入功能和目标值。也就是说,输入特征中的第一个元素对应于目标值中的第一个元素。
TUT现实生活2017
数据必须位于data目录中的名为real_life_2017的目录中。也就是说, data/real_life_2017 。然后,每个折叠的文件必须在不同的目录中。那是:
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4您必须为输入功能和目标值以及每个折叠的训练和测试具有不同的泡菜文件。由于每倍有多个文件,因此您不能在numpy数组中具有所有功能。因此,您必须在列表中使用所有数据,并使用腌制软件包列出列表(即磁盘)。此外,每个折叠都有用于培训和测试的文件。
为了方便起见,SEDLM会自动使用文件名的预修饰。也就是说,它会自动将“火车”和“测试”添加到指定的文件名中。
您可以在YAML设置文件中指定每个输入或目标文件的名称。例如,文件应该是:
input_features.ptarget_values.p然后,SEDLM代码将搜索正确的文件和每个折叠。例如,对于折叠1,将寻求以下文件:
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.p该代码将加载腌制文件并将其用于训练SEDLM方法。您可以确保正确订购了输入功能和目标值。也就是说,输入特征中的第一个元素对应于目标值中的第一个元素。
可以从YAML设置文件调整超参数。可进行调整的超参数是:
您可以使用BASH脚本运行系统。此类脚本的一个示例是文件:
example_bash_script_baseline.sh ,运行SEDLM的基线配置example_bash_script_tf.sh ,使用TUT现实生活2017数据集运行SEDLM。