分割和标记鸟鸣的神经网络

tweetynet的Python项目详细描述


doipypi version

TweetyNet

tweetynet image

一种混合卷积递归神经网络,用于分割和标记鸟叫声和其他叫声。

示例注释 金丝雀之歌被分成几个词组

安装

要安装,请在命令行运行以下命令:
pip安装tweetynet

在安装之前,您需要设置一个虚拟环境 (有关原因的解释,请参见 https://www.geeksforgeks.org/python-virtual-environment/)。 创建虚拟环境并不像听起来那么困难; 这是一本入门书:https://realpython.com/python-virtual-environments-a-primer/
对于许多依赖于
除了python之外的语言,您可能会发现它更易于使用 致力于管理这些依赖关系的平台,例如 水蟒(免费)。 您可以使用anaconda开发的conda命令行工具 创建环境并安装此软件包的科学库 取决于。此外,使用conda安装依赖项可能会提高性能 (参见https://www.anaconda.com/blog/developer blog/tensorflow-in-anaconda/)。
以下是设置conda环境的方法:
/home/you/code/$conda create-n tweetyenv python=3.6 numpy scipy joblib tensorflow gpu ipython jupyter
/home/you/code/$source激活tweetyenv
(您不必在Windows上source:激活TweetYenV)

然后,您可以在conda环境中使用pip(tweetyenv)/home/you/code/$pip安装tweetynet

用法

训练TweetyNet分割和标记鸟鸣的模型

您可以使用vak库来训练tweetynet模型。 vak库配置有config.ini文件,使用少数命令行标志之一。 例如,下面是如何从命令行运行vak来训练单个config.ini文件:
(tweetyenv)$vak train./configs/config\u bird0.ini

有关更多详细信息,请参见vak文档vak。

数据和文件夹结构

要训练模型,必须以音频文件或 谱图文件,以及每个谱图的注释。

光谱图和标签

该软件包可以从.wav.cbin音频文件生成光谱图。 它还可以接受Matlab格式的频谱图。>文件

重要的模型参数

  • 必须在配置.ini文件中正确定义以下参数

    • n_音节-必须是正确数量的标签,包括音节之间无声时段的标签。
    • 时间单元-从显示到网络的光谱图的每个窗口中的时间单元数。 在训练过程中,网络会看到从数据中随机抓取的一批窗口,这些窗口的宽度等于time\u bin。 直观地说,时间步长越大,网络拥有的时间上下文越多,但所需时间越长 训练。在实践中,对于孟加拉雀歌,我们用88个时间箱和金丝雀歌达到了很好的精度, 我们使用约250个时间箱实现了良好的精度。
  • 如果需要,可以更改以下参数:

    • num-epochs-网络应该看到所有培训数据的次数。
    • 批大小-每个训练批中的片段数(当前为11个)
    • 学习率-训练步长系数(当前为0.001) 指定网络本身的其他参数可以在代码中更改,但需要了解TensorFlow。

准备培训文件

可以对任何手动标注的数据进行培训,但有一些有用的指南:

  • 尽可能多地使用示例-结果会更好。具体地说,这段代码不会正确地标记训练中没有遇到的音节,而且很可能会泛化到最近的样本或忽略音节。
  • 使用噪声示例-这将使代码在忽略噪声方面非常出色。
  • 有关噪音的音节示例很重要-最好从干净的录音开始。代码不会产生奇迹,如果音频太坏或被噪音掩盖,代码很可能会失败。尽管如此,在笼形噪声背景下使用音节示例进行训练将是有益的。

运行代码的结果

建议在从估计值中提取实际音节标记以及起始和偏移时间时应用后处理。

预测新标签

您可以通过在config.ini文件中添加[predict]部分来预测新标签,并且 然后使用predict命令运行命令行界面,如下所示:
(tweetyenv)$vak预测./configs/config\u bird0.ini 带有[predict]节的config.ini文件的一个例子是 在这里的doc文件夹中

对于有脚本/tensorflow经验的用户,可以 使用 TensorFlow检查点保护程序。下面是一个如何做到这一点的例子 从vak.train\u utils.learn\u curve功能:

meta_file=glob(os.path.join(training_records_dir,'checkpoint*meta*'))[0]data_file=glob(os.path.join(training_records_dir,'checkpoint*data*'))[0]model=TweetyNet(n_syllables=n_syllables,input_vec_size=input_vec_size,batch_size=batch_size)withtf.Session(graph=model.graph)assess:model.restore(sess=sess,meta_file=meta_file,data_file=data_file)

模型架构

这种深层神经网络的结构是基于这些论文:

深深的网。此代码中使用的结构包含3个元素:

  • 2个卷积和最大池层-卷积层卷积具有一组可调特征的谱图,最大池用于限制参数的数量。这些层允许提取音节和噪声的局部光谱和时间特征。
  • 一个长-短期记忆重现层(LSTM)-这个层允许模型在信号中包含时间依赖性,如金丝雀颤音和不同音节的持续时间。该代码包含一个添加更多LSTM层的选项,但由于不需要,因此不使用这些层。
  • 一个投影层-对于每个时间格,该层将前一层的输出投影到一组可能的音节上。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用prepared语句在oracle中插入日期   对点具有双重值的java   使用多个通配符的java请求映射   java Springboot为什么要设置springbootstartertomcat   除了对JavaBean的请求之外,还使用servletContext的servlet   java如何清除OCSID。返回到池的连接时的CLIENTID JDBC客户端信息属性   将整型数组转换为光栅Java   java使用对象引用作为互斥锁   java为什么在编程语言中使用sin函数返回奇怪的sin值不像计算器   java如何将JButton链接到对象并调用相关方法   php用Java发送POST数据   导航属性的java模拟加载   java多个活动错误Android试图对空对象引用调用虚拟方法“”   java Android更改ActionBar文本颜色   如何使用带有java反射且不带开关的parant引用创建子类