ASR听觉训练
#0 导入nemo工具库及asr工具类
[1]
import nemo
import nemo.collections.asr as nemo_asr
#1.1 加载自动语音识别模型
[3]
quartznet = nemo_asr.models.EncDecCTCModel.restore_from("stt_zh_quartznet15x5.nemo")#
加载中文预训练模型并实例化
#1.2 传入音频文件 — 进行语音识别
[4]
asr_result = quartznet.transcribe(paths2audio_files=["/root/testdata/guopi6.wav"]) # 调用transcribe函数测试预训练模型识别效果
print(asr_result)
#输出识别结果
#1.3 使用ASR_mertrics工具库对预训练模型识别结果计算准确率
[6]
from ASR_metrics import utils as metrics
s1 = "请检测出果皮"#指定正确答案
s2 = " ".join(asr_result)#识别结果
print("字错率:{}".format(metrics.calculate_cer(s1,s2)))#计算字错率cer
print("准确率:{}".format(1-metrics.calculate_cer(s1,s2)))#计算准确率accuracy
字错率:0.1
准确率:0.9
#2 采集数据制作数据集
#2.1数据采集
我们由比赛方所要求的三类物品果皮、纸箱、瓶子,数据采样分为了15种情况。由三名女生和一名男生共制作了45条。
请检测出:
纸箱 | ||
瓶子 | ||
果皮 | ||
纸箱 | 和瓶子 | |
纸箱 | 和果皮 | |
瓶子 | 和纸箱 | |
瓶子 | 和果皮 | |
果皮 | 和瓶子 | |
果皮 | 和纸箱 | |
纸箱 | 果皮 | 和瓶子 |
纸箱 | 瓶子 | 和果皮 |
果皮 | 瓶子 | 和纸箱 |
果皮 | 纸箱 | 和瓶子 |
瓶子 | 果皮 | 和纸箱 |
瓶子 | 纸箱 | 和果皮 |
#2.2 录制语音文件:
录制语音文件,文件类型需统一转换为wav格式,采样率建议在44100HZ 、单声道。通过录音软件Audacity录制:Ubuntu系统安装=>sudo apt install audacity
windows系统可用此网址下载安装: Audacity下载-Audacity2.3.1简体中文版-华军软件园
#2.3制作数据清单格式要求:
{"audio_filepath":"/root/traindata/guopi.wav","duration":3.1463038548752835,"text":"请检测出果皮“}
[7]
# 导入librosa音频工具包获取音频时长,用于制作语音数据集
import librosa
time = librosa.get_duration(filename="/root/testdata/guopi6.wav")
print(time)
3.6919727891156464
#2.4加载数据清单
[8]
#将制作好的json格式的数据清单加载进来train_manifest = "/root/manifest/train_6th.json" test_manifest = "/root/manifest/test_6th.json"
#2.5加载quartznet配置文件
[9]
# 使用YAML读取quartznet模型配置文件
from ruamel_yaml import YAML
config_path = "/root/config/quartznet_15x5_zh.yaml"
yaml = YAML(typ='safe')
with open(config_path) as f:
params = yaml.load(f)
print(params)
#2.6将数据清单传给配置文件
[10]
params['model']['train_ds']['manifest_filepath']=train_manifest
params['model']['validation_ds']['manifest_filepath']=test_manifest
#3 训练模型
#3.1 使用迁移学习的方法训练模型
[11]
quartznet.setup_training_data(train_data_config=params['model']['train_ds'])# 指向我们将用于微调的数据作为训练集
quartznet.setup_validation_data(val_data_config=params['model']['validation_ds'])# 指向新的验证数据进行微调
import pytorch_lightning as pl
trainer = pl.Trainer(gpus=1,max_epochs=220)#重新设置训练器参数
trainer.fit(quartznet)#调用‘fit’方法开始训练
#3.2模型的保存
[12]
#quartznet.save_to("7th_asr_model.nemo")#将训练好的模型保存为.nemo格式
#3.3将训练好的模型进行重载
[13]
try_model_1 = nemo_asr.models.EncDecCTCModel.restore_from("7th_asr_model_1.nemo")#对模型进行重新加载
asr_result = try_model_1.transcribe(paths2audio_files=["/root/testdata/guopi6.wav"])
print(asr_result)#打印输出结果
3.4对自定义模型识别结果计算准确率
[14]
from ASR_metrics import utils as metrics
s1 = "请检测出果皮"#指定正确答案
s2 = " ".join(asr_result)#识别结果
print("字错率:{}".format(metrics.calculate_cer(s1,s2)))#计算字错率cer
print("准确率:{}".format(1-metrics.calculate_cer(s1,s2)))#计算准确率accuracy
字错率:0.0
准确率:1.0
#4 成功拿到用于图像识别的语音指令
=> 就可以作为输入给计算机视觉模型作为检测果皮识别的指令
我们保存好经过验证的识别模型,为后续将模型移植部署在边缘计算备Jetson Nano中做准备