AudioClassification 您所在的位置:网站首页 声音识别年龄在线测试 AudioClassification

AudioClassification

2024-07-10 22:18| 来源: 网络整理| 查看: 265

简体中文 | English

基于Pytorch实现的声音分类系统

python version GitHub forks GitHub Repo stars GitHub 支持系统

前言

本项目是基于Pytorch的声音分类项目,旨在实现对各种环境声音、动物叫声和语种的识别。项目提供了多种声音分类模型,如EcapaTdnn、PANNS、ResNetSE、CAMPPlus和ERes2Net,以支持不同的应用场景。此外,项目还提供了常用的Urbansound8K数据集测试报告和一些方言数据集的下载和使用例子。用户可以根据自己的需求选择适合的模型和数据集,以实现更准确的声音分类。项目的应用场景广泛,可以用于室外的环境监测、野生动物保护、语音识别等领域。同时,项目也鼓励用户探索更多的使用场景,以推动声音分类技术的发展和应用。

欢迎大家扫码入知识星球或者QQ群讨论,知识星球里面提供项目的模型文件和博主其他相关项目的模型文件,也包括其他一些资源。

知识星球 QQ群 使用准备 Anaconda 3 Python 3.8 Pytorch 1.13.1 Windows 10 or Ubuntu 18.04 项目特性 支持模型:EcapaTdnn、PANNS、TDNN、Res2Net、ResNetSE、CAMPPlus、ERes2Net 支持池化层:AttentiveStatsPool(ASP)、SelfAttentivePooling(SAP)、TemporalStatisticsPooling(TSP)、TemporalAveragePooling(TAP) 支持预处理方法:MelSpectrogram、Spectrogram、MFCC、Fbank

模型论文:

EcapaTdnn:ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation in TDNN Based Speaker Verification PANNS:PANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition TDNN:Prediction of speech intelligibility with DNN-based performance measures Res2Net:Res2Net: A New Multi-scale Backbone Architecture ResNetSE:Squeeze-and-Excitation Networks CAMPPlus:CAM++: A Fast and Efficient Network for Speaker Verification Using Context-Aware Masking ERes2Net:An Enhanced Res2Net with Local and Global Feature Fusion for Speaker Verification 模型测试表 模型 Params(M) 预处理方法 数据集 类别数量 准确率 获取模型 ResNetSE 7.8 Flank UrbanSound8K 10 0.98863 加入知识星球获取 CAMPPlus 7.1 Flank UrbanSound8K 10 0.97727 加入知识星球获取 ERes2Net 6.6 Flank UrbanSound8K 10 0.96590 加入知识星球获取 ERes2NetV2 5.4 Flank UrbanSound8K 10 0.90568 加入知识星球获取 PANNS(CNN10) 5.2 Flank UrbanSound8K 10 0.96590 加入知识星球获取 Res2Net 5.0 Flank UrbanSound8K 10 0.94318 加入知识星球获取 TDNN 2.6 Flank UrbanSound8K 10 0.92045 加入知识星球获取 EcapaTdnn 6.1 Flank UrbanSound8K 10 0.91876 加入知识星球获取 CAMPPlus 6.1 Flank CN-Celeb和VoxCeleb 2(中英文语种) 0.99320 加入知识星球获取 ResNetSE 9.8 Flank CN-Celeb和VoxCeleb 2(中英文语种) 0.99056 加入知识星球获取 安装环境 首先安装的是Pytorch的GPU版本,如果已经安装过了,请跳过。 conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia 安装macls库。

使用pip安装,命令如下:

python -m pip install macls -U -i https://pypi.tuna.tsinghua.edu.cn/simple

建议源码安装,源码安装能保证使用最新代码。

git clone https://github.com/yeyupiaoling/AudioClassification-Pytorch.git cd AudioClassification-Pytorch/ pip install . 准备数据

生成数据列表,用于下一步的读取需要,audio_path为音频文件路径,用户需要提前把音频数据集存放在dataset/audio目录下,每个文件夹存放一个类别的音频数据,每条音频数据长度在3秒以上,如 dataset/audio/鸟叫声/······。audio是数据列表存放的位置,生成的数据类别的格式为 音频路径\t音频对应的类别标签,音频路径和标签用制表符 \t分开。读者也可以根据自己存放数据的方式修改以下函数。

以Urbansound8K为例,Urbansound8K是目前应用较为广泛的用于自动城市环境声分类研究的公共数据集,包含10个分类:空调声、汽车鸣笛声、儿童玩耍声、狗叫声、钻孔声、引擎空转声、枪声、手提钻、警笛声和街道音乐声。数据集下载地址:UrbanSound8K.tar.gz。以下是针对Urbansound8K生成数据列表的函数。如果读者想使用该数据集,请下载并解压到 dataset目录下,把生成数据列表代码改为以下代码。

执行create_data.py即可生成数据列表,里面提供了生成多种数据集列表方式,具体看代码。

python create_data.py

生成的列表是长这样的,前面是音频的路径,后面是该音频对应的标签,从0开始,路径和标签之间用\t隔开。

dataset/UrbanSound8K/audio/fold2/104817-4-0-2.wav 4 dataset/UrbanSound8K/audio/fold9/105029-7-2-5.wav 7 dataset/UrbanSound8K/audio/fold3/107228-5-0-0.wav 5 dataset/UrbanSound8K/audio/fold4/109711-3-2-4.wav 3 修改预处理方法(可选)

配置文件中默认使用的是MelSpectrogram预处理方法,如果要使用其他预处理方法,可以修改配置文件中的安装下面方式修改,具体的值可以根据自己情况修改。如果不清楚如何设置参数,可以直接删除该部分,直接使用默认值。

preprocess_conf: # 音频预处理方法,支持:MelSpectrogram、Spectrogram、MFCC、Fbank feature_method: 'MelSpectrogram' # 设置API参数,更参数查看对应API,不清楚的可以直接删除该部分,直接使用默认值 method_args: sample_rate: 16000 n_fft: 1024 hop_length: 320 win_length: 1024 f_min: 50.0 f_max: 14000.0 n_mels: 64 提取特征(可选)

在训练过程中,首先是要读取音频数据,然后提取特征,最后再进行训练。其中读取音频数据、提取特征也是比较消耗时间的,所以我们可以选择提前提取好取特征,训练模型的是就可以直接加载提取好的特征,这样训练速度会更快。这个提取特征是可选择,如果没有提取好的特征,训练模型的时候就会从读取音频数据,然后提取特征开始。提取特征步骤如下:

执行extract_features.py,提取特征,特征会保存在dataset/features目录下,并生成新的数据列表train_list_features.txt和test_list_features.txt。 python extract_features.py --configs=configs/cam++.yml --save_dir=dataset/features 修改配置文件,将dataset_conf.train_list和dataset_conf.test_list修改为train_list_features.txt和test_list_features.txt。 训练

接着就可以开始训练模型了,创建 train.py。配置文件里面的参数一般不需要修改,但是这几个是需要根据自己实际的数据集进行调整的,首先最重要的就是分类大小dataset_conf.num_class,这个每个数据集的分类大小可能不一样,根据自己的实际情况设定。然后是dataset_conf.batch_size,如果是显存不够的话,可以减小这个参数。

# 单卡训练 CUDA_VISIBLE_DEVICES=0 python train.py # 多卡训练 CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc_per_node=2 train.py

训练输出日志:

[2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:14 - ----------- 额外配置参数 ----------- [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - configs: configs/ecapa_tdnn.yml [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - local_rank: 0 [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - pretrained_model: None [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - resume_model: None [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - save_model_path: models/ [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:16 - use_gpu: True [2023-08-07 22:54:22.148973 INFO ] utils:print_arguments:17 - ------------------------------------------------ [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:19 - ----------- 配置文件参数 ----------- [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:22 - dataset_conf: [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:25 - aug_conf: [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - noise_aug_prob: 0.2 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - noise_dir: dataset/noise [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - speed_perturb: True [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - volume_aug_prob: 0.2 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - volume_perturb: False [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:25 - dataLoader: [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - batch_size: 64 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - num_workers: 4 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:29 - do_vad: False [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:25 - eval_conf: [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - batch_size: 1 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - max_duration: 20 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:29 - label_list_path: dataset/label_list.txt [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:29 - max_duration: 3 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:29 - min_duration: 0.5 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:29 - sample_rate: 16000 [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:25 - spec_aug_args: [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - freq_mask_width: [0, 8] [2023-08-07 22:54:22.202166 INFO ] utils:print_arguments:27 - time_mask_width: [0, 10] [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:29 - target_dB: -20 [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:29 - test_list: dataset/test_list.txt [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:29 - train_list: dataset/train_list.txt [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:29 - use_dB_normalization: True [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:29 - use_spec_aug: True [2023-08-07 22:54:22.203167 INFO ] utils:print_arguments:22 - model_conf: [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - num_class: 10 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - pooling_type: ASP [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:22 - optimizer_conf: [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - learning_rate: 0.001 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - optimizer: Adam [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - scheduler: WarmupCosineSchedulerLR [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:25 - scheduler_args: [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:27 - max_lr: 0.001 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:27 - min_lr: 1e-05 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:27 - warmup_epoch: 5 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - weight_decay: 1e-06 [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:22 - preprocess_conf: [2023-08-07 22:54:22.207167 INFO ] utils:print_arguments:29 - feature_method: Fbank [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:25 - method_args: [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:27 - num_mel_bins: 80 [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:27 - sample_frequency: 16000 [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:22 - train_conf: [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:29 - log_interval: 10 [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:29 - max_epoch: 30 [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:31 - use_model: EcapaTdnn [2023-08-07 22:54:22.208167 INFO ] utils:print_arguments:32 - ------------------------------------------------ [2023-08-07 22:54:22.213166 WARNING] trainer:__init__:67 - Windows系统不支持多线程读取数据,已自动关闭! ========================================================================================== Layer (type:depth-idx) Output Shape Param # ========================================================================================== EcapaTdnn [1, 10] -- ├─Conv1dReluBn: 1-1 [1, 512, 98] -- │ └─Conv1d: 2-1 [1, 512, 98] 204,800 │ └─BatchNorm1d: 2-2 [1, 512, 98] 1,024 ├─Sequential: 1-2 [1, 512, 98] -- │ └─Conv1dReluBn: 2-3 [1, 512, 98] -- │ │ └─Conv1d: 3-1 [1, 512, 98] 262,144 │ │ └─BatchNorm1d: 3-2 [1, 512, 98] 1,024 │ └─Res2Conv1dReluBn: 2-4 [1, 512, 98] -- │ │ └─ModuleList: 3-15 -- (recursive) │ │ └─ModuleList: 3-16 -- (recursive) │ │ └─ModuleList: 3-15 -- (recursive) │ │ └─ModuleList: 3-16 -- (recursive) │ │ └─ModuleList: 3-15 -- (recursive) │ │ └─ModuleList: 3-16 -- (recursive) │ │ └─ModuleList: 3-15 -- (recursive) │ │ └─ModuleList: 3-16 -- (recursive) │ │ └─ModuleList: 3-15 -- (recursive) │ │ └─ModuleList: 3-16 -- (recursive) ··································· │ │ └─ModuleList: 3-56 -- (recursive) │ │ └─ModuleList: 3-55 -- (recursive) │ │ └─ModuleList: 3-56 -- (recursive) │ │ └─ModuleList: 3-55 -- (recursive) │ │ └─ModuleList: 3-56 -- (recursive) │ └─Conv1dReluBn: 2-13 [1, 512, 98] -- │ │ └─Conv1d: 3-57 [1, 512, 98] 262,144 │ │ └─BatchNorm1d: 3-58 [1, 512, 98] 1,024 │ └─SE_Connect: 2-14 [1, 512, 98] -- │ │ └─Linear: 3-59 [1, 256] 131,328 │ │ └─Linear: 3-60 [1, 512] 131,584 ├─Conv1d: 1-5 [1, 1536, 98] 2,360,832 ├─AttentiveStatsPool: 1-6 [1, 3072] -- │ └─Conv1d: 2-15 [1, 128, 98] 196,736 │ └─Conv1d: 2-16 [1, 1536, 98] 198,144 ├─BatchNorm1d: 1-7 [1, 3072] 6,144 ├─Linear: 1-8 [1, 192] 590,016 ├─BatchNorm1d: 1-9 [1, 192] 384 ├─Linear: 1-10 [1, 10] 1,930 ========================================================================================== Total params: 6,188,490 Trainable params: 6,188,490 Non-trainable params: 0 Total mult-adds (M): 470.96 ========================================================================================== Input size (MB): 0.03 Forward/backward pass size (MB): 10.28 Params size (MB): 24.75 Estimated Total Size (MB): 35.07 ========================================================================================== [2023-08-07 22:54:26.726095 INFO ] trainer:train:344 - 训练数据:8644 [2023-08-07 22:54:30.092504 INFO ] trainer:__train_epoch:296 - Train epoch: [1/30], batch: [0/4], loss: 2.57033, accuracy: 0.06250, learning rate: 0.00001000, speed: 19.02 data/sec, eta: 0:06:43 评估

执行下面命令执行评估。

python eval.py --configs=configs/bi_lstm.yml

评估输出如下:

[2024-02-03 15:13:25.469242 INFO ] trainer:evaluate:461 - 成功加载模型:models/CAMPPlus_Fbank/best_model/model.pth 100%|██████████████████████████████| 150/150 [00:00


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有