Skip to content

LISTENAI/Snore-Detection_lnn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

鼾声检测 Demo

本工程演示鼾声二分类模型的完整流程:数据准备、浮点训练、按目标平台进行 Linger 量化训练、自动导出量化 ONNX、Thinker 打包、仿真运行和一致性验证。量化训练必须指定目标平台,因为 Linger 初始化和导出的量化算子属性都与平台相关,不能训练一个通用量化模型后再直接导出到不同平台。

支持平台:arcsvenusvenusA

开发环境准备

根据本机环境安装 PyTorch、linger、thinker/tpacker/tvalidator。也可以参考官方 Linger/Thinker 教程或直接使用项目提供的 Docker/Conda 环境。

cd ./thinker/demo/snoring_net
pip install -r requirement.txt

目录约定:

  • dataset/origin/0/:原始无鼾声音频,标签为 0。
  • dataset/origin/1/:原始鼾声音频,标签为 1。
  • dataset/resample_16k/:重采样到 16 kHz 后的中间 wav。
  • dataset/fea/0/dataset/fea/1/:训练使用的 .fea 特征。
  • dataset/test/:仿真输入音频和 int8 特征样例。

数据集与预处理

本工程原始数据主要来自 Kaggle Snoring、Kaggle Female and Male Snoring、ESC-50 等数据集。训练开始前需要先扩充无鼾声类别,再生成训练特征。

1. 扩充无鼾声数据

无鼾声类别样本放在 dataset/origin/0/。脚本会为每条原始 wav 生成噪声、变调、变速三种增强样本,文件名后缀分别为 _noise_pitch_speed

cd ./thinker/demo/snoring_net
python preprocess/augment_data.py --input-dir ./dataset/origin/0 --output-dir ./dataset/origin/0 --seed 0

如果需要重新生成已存在的增强文件,追加 --overwrite

2. 生成训练特征

python preprocess/fea_extra.py --origin-root ./dataset/origin --resample-root ./dataset/resample_16k --fea-root ./dataset/fea --labels 0 1 --overwrite

训练脚本会按原始样本分组切分训练集和验证集,避免原始样本与其增强版本同时出现在不同集合中。

模型训练与 ONNX 导出

1. 浮点模型训练

python train.py --type float --data_path ./dataset/fea/ --epochs 10 --out_path ./models/

2. 量化训练并导出 ONNX

# arcs
python train.py --type quant --platform arcs --data_path ./dataset/fea/ --epochs 5 --checkpoint ./models/snoring_net.float.best.pt --out_path ./models/

# venus
python train.py --type quant --platform venus --data_path ./dataset/fea/ --epochs 5 --checkpoint ./models/snoring_net.float.best.pt --out_path ./models/

#venusa
python train.py --type quant --platform venusA --data_path ./dataset/fea/ --epochs 5 --checkpoint ./models/snoring_net.float.best.pt --out_path ./models/

模型转换与一致性验证

1. tpacker 打包

# arcs
tpacker -g ./models/snoring_net_quant_arcs.onnx -o ./models/snoring_net_arcs_final.bin --dma_prefetch=False

# venus
tpacker -g ./models/snoring_net_quant_venus.onnx -o ./models/snoring_net_venus_final.bin

# venusa
tpacker -g ./models/snoring_net_quant_venusA.onnx -o ./models/snoring_net_venusa_final.bin

2. 编译仿真运行库

在 Thinker 根目录选择目标平台并编译,例如 VENUS:

cd ./thinker
# 修改 scripts/x86_linux.sh 或对应 CMake 选项:
# -DTHINKER_USE_VENUS=ON
# -DTHINKER_USE_ARCS=OFF
# -DTHINKER_USE_VENUSA=OFF
bash scripts/x86_linux.sh

3. 生成仿真输入并运行

cd ./thinker

# ARCS
./bin/test_thinker ./demo/snoring_net/models/snoring_net_arcs_final.bin ./demo/snoring_net/models/input_int8_final.bin ./demo/snoring_net/models/output_int8_arcs_final.bin

# VENUS
./bin/test_thinker ./demo/snoring_net/models/snoring_net_venus_final.bin ./demo/snoring_net/models/input_int8_final.bin ./demo/snoring_net/models/output_int8_venus_final.bin

# VENUSA
./bin/test_thinker ./demo/snoring_net/models/snoring_net_venusa_final.bin ./demo/snoring_net/models/input_int8_final.bin ./demo/snoring_net/models/output_int8_venusa_final.bin

4. 训练与推理一致性验证

cd ./thinker

# ARCS
tvalidator -g ./demo/snoring_net/models/snoring_net_quant_arcs.onnx -r ./demo/snoring_net/models/snoring_net_arcs_final.bin

# VENUS
tvalidator -g ./demo/snoring_net/models/snoring_net_quant_venus.onnx -r ./demo/snoring_net/models/snoring_net_venus_final.bin

# VENUSA
tvalidator -g ./demo/snoring_net/models/snoring_net_quant_venusA.onnx -r ./demo/snoring_net/models/snoring_net_venusa_final.bin

芯片部署

固件集成待补充。

工程结构

  • modules/snoring_net.py:鼾声检测网络结构。
  • train.py:浮点训练、平台相关量化训练和自动 ONNX 导出入口。
  • preprocess/augment_data.py:无鼾声数据增强脚本。
  • preprocess/fea_extra.py:训练特征提取脚本。
  • preprocess/long_fea_extra_int8.py:Thinker 仿真输入生成脚本。
  • models/:训练权重、ONNX 和打包后的模型文件。
  • deploy/:仿真/部署侧示例代码。

About

Snore Detection Algorithm Example: Engineering Deployment with ListenAI LNN Toolchain

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages