本工程演示鼾声二分类模型的完整流程:数据准备、浮点训练、按目标平台进行 Linger 量化训练、自动导出量化 ONNX、Thinker 打包、仿真运行和一致性验证。量化训练必须指定目标平台,因为 Linger 初始化和导出的量化算子属性都与平台相关,不能训练一个通用量化模型后再直接导出到不同平台。
支持平台:arcs、venus、venusA
根据本机环境安装 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 等数据集。训练开始前需要先扩充无鼾声类别,再生成训练特征。
无鼾声类别样本放在 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。
python preprocess/fea_extra.py --origin-root ./dataset/origin --resample-root ./dataset/resample_16k --fea-root ./dataset/fea --labels 0 1 --overwrite训练脚本会按原始样本分组切分训练集和验证集,避免原始样本与其增强版本同时出现在不同集合中。
python train.py --type float --data_path ./dataset/fea/ --epochs 10 --out_path ./models/# 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/# 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在 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.shcd ./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.bincd ./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/:仿真/部署侧示例代码。