分割和标记鸟鸣的神经网络
tweetynet的Python项目详细描述
TweetyNet
一种混合卷积递归神经网络,用于分割和标记鸟叫声和其他叫声。
金丝雀之歌被分成几个词组
安装
要安装,请在命令行运行以下命令: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。
要训练模型,必须以音频文件或
谱图文件,以及每个谱图的注释。 该软件包可以从 必须在配置 如果需要,可以更改以下参数: 可以对任何手动标注的数据进行培训,但有一些有用的指南: 建议在从估计值中提取实际音节标记以及起始和偏移时间时应用后处理。 您可以通过在 对于有脚本/tensorflow经验的用户,可以
使用
TensorFlow检查点保护程序。下面是一个如何做到这一点的例子
从 这种深层神经网络的结构是基于这些论文:数据和文件夹结构
光谱图和标签
.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文件夹中
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层的选项,但由于不需要,因此不使用这些层。
- 一个投影层-对于每个时间格,该层将前一层的输出投影到一组可能的音节上。