我参加NVIDIA Sky Hackathon(语音识别模型训练)

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

我参加NVIDIA Sky Hackathon(语音识别模型训练)_第1张图片

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中做准备

你可能感兴趣的:(人工智能,语音识别)