TDNN for PyTorch
概述
简述
ECAPA-TDNN是一个用于声纹识别的深度学习模型,它基于传统TDNN模型进行了改进,主要有三个方面的优化,分别是:增加了一维SE残差模块(1-Dimensional Squeeze-Excitation Res2Block);多层特征融合(Multi-layer feature aggregation and summation);通道和上下文相关的统计池化(Channel- and context-dependent statistics pooling)。
-
参考实现:
url=https://github.com/speechbrain/speechbrain/tree/develop/templates/speaker_id commit_id=f02eafc1e8ac3f094e89a4c31941e44f4dbcab62 -
适配昇腾 AI 处理器的实现:
url=https://gitcode.com/ascend/ModelZoo-PyTorch.git code_path=PyTorch/contrib/audio
准备训练环境
该模型为不随版本演进模型(随版本演进模型范围可在此处查看),未在最新昇腾配套软件中适配验证,您可以:
- 根据下面提供PyTorch版本在软件版本配套表中选择匹配的CANN等软件下载使用。
- 查看软件版本配套表后确认对该模型有新版本PyTorch和CANN中的适配需求,请在modelzoo/issues中提出您的需求。自行适配不保证精度和性能达标。
准备环境
-
当前模型支持的 PyTorch 历史版本和已知三方库依赖如下表所示。
表 1 版本支持表
Torch_Version 三方库依赖版本 PyTorch 1.8 torchaudio==0.8.1 PyTorch 1.11 torchaudio==0.11.0 -
环境准备指导。
- 请参考《Pytorch框架训练环境准备》准备torch_npu环境。
- 安装torchaudio,npu安装方法请参考:https://gitcode.com/ascend/modelzoo/issues/I48AZM
-
安装依赖并安装环境。
pip install -r requirements.txt pip install --editable .
注意:安装依赖环境时,如果自动卸载torch,可以将'pip install --editable .'替换为'pip install --editable . --no-deps'。
准备数据集
-
获取数据集。
用户自行获取
train-clean-5数据集和rirs_noises数据集,将数据集分别解压至服务器任意目录下新建的data/LibriSpeech和data/RIRS_NOISES文件夹路径下,数据集目录结构参考如下:├── data ├──LibriSpeech ├──train-clean-5 ├──RIRS_NOISES ├──pointsource_noises ├──real_rirs_isotropic_noises ├──simulated_rirs说明: 该数据集的训练过程脚本只作为一种参考示例。 用户可从www.openslr.org/31/获取train-clean-5的数据集
开始训练
训练模型
-
进入解压后的源码包根目录并将speechbrain文件夹拷贝到templates/speaker_id目录下
cd /${模型文件夹名称}/templates/speaker_id cp -r ../../speechbrain . -
运行训练脚本。 该模型支持单机单卡训练和单机8卡训练。
-
单机单卡训练
启动单卡训练。
bash ./test/train_full_1p.sh --data_folder=./data # 单卡精度 bash ./test/train_performance_1p.sh --data_folder=./data # 单卡性能 -
单机8卡训练
启动8卡训练。
bash ./test/train_full_8p.sh --data_folder=./data # 8卡精度 bash ./test/train_performance_8p.sh --data_folder=./data # 8卡性能
--data_folder参数为当前目录data文件夹下数据集路径。
-
-
日志文件夹如下。
Log path: test/output/train_full_1p.log # 单卡精度日志 test/output/train_performance_1p.log # 单卡性能日志 test/output/train_full_8p.log # 8卡精度日志 test/output/train_performance_8p.log # 8卡性能日志模型训练脚本参数说明如下。
公共参数: --data_folder //数据集路径 --local_rank //训练设备ID --batch_size //训练批次大小 --number_of_epochs //训练重复次数 多卡训练参数: --distributed_launch //开启多卡训练 --distributed_backend //多卡通信协议
训练结果展示
表 2 训练结果展示表
| NAME | Valid Err | FPS | Epochs | AMP_Type | Torch_Version |
|---|---|---|---|---|---|
| 1p-竞品V | - | - | - | - | - |
| 8p-竞品V | - | - | - | - | - |
| 1p-NPU | - | - | - | O1 | 1.8 |
| 8p-NPU | 0 | - | 35 | O1 | 1.8 |
版本说明
变更
2023.07.08:整改模型,重新发布。
FAQ
无。
TDNN模型-推理指导
概述
TDNN是一种经典的语音识别网络结构,主要由Conv1D+Relu+BN组成,speechbrain在原有结构上添加了最新的压缩网络和激励网络,使得TDNN可以适应更为复杂的任务并且获得更高的精度。
-
参考实现:
url=https://github.com/speechbrain/speechbrain.git commit_id=51a2becdcf3a337578a9307a0b2fc3906bf20391 code_path=speechbrain/templates/speaker_id
输入输出数据
-
输入数据
输入数据 数据类型 大小 数据排布格式 input FLOAT32 batchsize x 1800 x 24 ND -
输出数据
输出数据 数据类型 大小 数据排布格式 output1 FLOAT32 1 x 28 ND
推理环境准备
-
该模型需要以下插件与驱动
表 1 版本配套表
配套 版本 环境准备指导 固件与驱动 22.0.2 Pytorch框架推理环境准备 CANN 5.1.RC2 - Python 3.7.5 - PyTorch 1.10.0 - 说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 \ \
快速上手
可参考实现https://gitcode.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/built-in/audio/TDNN_for_Pytorch
获取源码
-
获取源码。
git clone https://github.com/speechbrain/speechbrain.git speechbrain cd speechbrain git checkout develop git reset --hard 51a2becdcf3a337578a9307a0b2fc3906bf20391 git apply --reject --whitespace=fix ../modify.patch cd .. -
安装依赖。
pip3 install -r onnx_requirements.txt git clone https://gitee.com/Ronnie_zheng/MagicONNX.git cd MagicONNX && git checkout 8d62ae9dde478f35bece4b3d04eef573448411c9 pip3 install . cd ..
准备数据集
-
获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip)
本模型使用Mini Librispeech数据集验证,预处理阶段会自动下载数据集。
-
获取权重文件。
新建best_model目录,获取训练好的权重文件classifier.ckpt, embedding_model.ckpt。将模型权重文件和hyperparams.yaml文件放入best_model中
mv classifier.ckpt best_model mv embedding_model.ckpt best_model mv hyperparams.yaml best_model -
数据预处理,将原始数据集转换为模型输入的数据。
执行tdnn_preprocess.py脚本,完成预处理。
python3 tdnn_preprocess.py
模型推理
-
模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
-
导出onnx文件。
-
使用tdnn_pth2onnx.py导出onnx文件。
python3 tdnn_pth2onnx.py 64获得tdnn_bs64.onnx文件。
-
优化ONNX文件。
python3 -m onnxsim tdnn_bs64.onnx tdnn_bs64s.onnx python3 modify_onnx.py tdnn_bs64s.onnx获得tdnn_bs64s.onnx文件。
-
-
使用ATC工具将ONNX模型转OM模型。
-
配置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh -
执行命令查看芯片名称(${chip_name})。
npu-smi info -
执行ATC命令。
atc --model=tdnn_bs64s.onnx --framework=5 --input_format=ND --input_shape="feats:64,-1,23" --dynamic_dims='200;300;400;500;600;700;800;900;1000;1100;1200;1300;1400;1500;1600;1700;1800' --output=./tdnn_bs64s --soc_version=Ascend${chip_name} --log=error-
参数说明:
- --model:为ONNX模型文件。
- --framework:5代表ONNX模型。
- --output:输出的OM模型。
- --input_format:输入数据的格式。
- --input_shape:输入数据的shape。
- --log:日志级别。
- --soc_version:处理器型号。
运行成功后生成tdnn_bs64s.om模型文件。
-
-
-
-
开始推理验证。
-
执行推理。
python3 tdnn_pyacl_infer.py --model_path=tdnn_bs64s.om --batch_size=64 --device_id=0 --cpu_run=True --sync_infer=True --input_info_file_path=mini_librispeech_test.info --input_dtypes=float32 --infer_res_save_path=./result --res_save_type=bin-
参数说明:
- --model_path:om文件路径。
- --batch_size:模型batch size。
- --device_id:NPU设备编号。
- --cpu_run:MeasureTime类的cpu_run参数,True or False。
- --sync_infer:同步推理,True or False。
- --input_info_file_path:预处理时生成的数据集info文件。
- --input_dtypes:输入数据类型。
- --infer_res_save_path:推理输出保存目录
- --res_save_type:推理输出保存格式
推理后的输出默认在当前目录result下。
-
-
精度验证。 将后处理脚本中label的数值与训练结果文件中label_encoder.txt文件中的数值对齐 调用脚本与数据集标签比对,可以获得Accuracy数据。
python3 tdnn_postprocess.py -
性能验证。
可使用ais_bench推理工具的纯推理模式验证不同batch_size和length的om模型的性能。
安装ais_bench推理工具。请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
推理参考命令如下:python3 -m ais_bench --model=${om_model_path} --loop=20 --batchsize=${batch_size} --dymDims=feats:${batch_size},${length},23- 参数说明:
- --model:om模型路径
- --batchsize:模型batch大小
- --dymDims:推理输入的实际shape
- 参数说明:
-
模型推理性能&精度
调用ACL接口推理计算,性能参考下列数据。
| 产品型号 | Batch Size | length | 数据集 | 精度 | 性能 |
|---|---|---|---|---|---|
| Atlas推理系列产品 | 1 | 1800 | Mini Librispeech | 99.93% | 465.21fps |
| Atlas推理系列产品 | 4 | 1800 | Mini Librispeech | 99.93% | 1415.17fps |
| Atlas推理系列产品 | 8 | 1800 | Mini Librispeech | 99.93% | 1058.37fps |
| Atlas推理系列产品 | 16 | 1800 | Mini Librispeech | 99.93% | 1066.47fps |
| Atlas推理系列产品 | 32 | 1800 | Mini Librispeech | 99.93% | 1080.21fps |
| Atlas推理系列产品 | 64 | 1800 | Mini Librispeech | 99.93% | 1682.2fps |