目录:
1、作为一个不太熟悉Linux系统的小白,建议阅读下方文章👀:
2、系统配置:x86 CPU + NVIDIA GPU + Ubuntu 18.04 以上🐮🐮🐮
前言🍀🍀:
🌸🌸🌸随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文将从小白的视角讲述我们在参加NVIDIA举办的第六届hackathon比赛中,是如何从零基础出发,一步步熟悉Linux系统以及配置环境变量等内容,使用jupyter对代码进行调试训练模型进行语音识别和视觉识别(识别图片并且讲出简单的句子)🌷🌷🌷
🌷一、准备工作:
1、作为一个不太熟悉Linux系统的小白,建议阅读下方文章👀:
史上最全的Linux常用命令汇总https://blog.csdn.net/weixin_44895651/article/details/105289038?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen%20%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%20%E7%89%88%E6%9D%83%E5%A3%B0%E6%98%8E%EF%BC%9A%E6%9C%AC%E6%96%87%E4%B8%BACSDN%E5%8D%9A%E4%B8%BB%E3%80%8Cyzy%E6%9D%A8%E5%92%A9%E5%92%A9(%E2%97%A6%CB%99%E2%96%BD%CB%99%E2%97%A6)%E3%80%8D%E7%9A%84%E5%8E%9F%E5%88%9B%E6%96%87%E7%AB%A0%EF%BC%8C%E9%81%B5%E5%BE%AACC%204.0%20BY-SA%E7%89%88%E6%9D%83%E5%8D%8F%E8%AE%AE%EF%BC%8C%E8%BD%AC%E8%BD%BD%E8%AF%B7%E9%99%84%E4%B8%8A%E5%8E%9F%E6%96%87%E5%87%BA%E5%A4%84%E9%93%BE%E6%8E%A5%E5%8F%8A%E6%9C%AC%E5%A3%B0%E6%98%8E%E3%80%82%20%E5%8E%9F%E6%96%87%E9%93%BE%E6%8E%A5%EF%BC%9Ahttps://blog.csdn.net/qq_52300499/article/details/123234652 熟悉Ubuntu环境https://blog.csdn.net/qq_52300499/article/details/123234652?spm=1001.2014.3001.5502
2、系统配置:x86 CPU + NVIDIA GPU + Ubuntu 18.04 以上🐮🐮🐮
3、其他工具🐰🐰🐰:
(1)安装 NVIDIA 驱动 460 以上版本
(2)安装 docker 与 nvidia-docker2
(3)安装 MiniConda3 与 Jupyter 开发环境
(4)安装 NeMO 1.4.0
(5)安装 TAO 模型训练优化工具:用 Python 与 Virtualenv
有些工具安装十分缓慢(例如:docker),建议更换国内源~
以上工具安装参考官方发放的知识图谱~
(欲知详情,快来参加NVIDIA下一届hackathon比赛吧!😃😃😃)
🌷二、训练过程:
🌻1、ASR 语音模型训练:
1、录制语音文件🌵:
(1)推荐录制语音文件的工具:🙈(audacity)
#安装audacity
sudo apt install audacity
(2)格式🙉: 文件类型统一为.wav格式,采样率为:44100HZ ,选择:单声道。(千万不要错,不然后续代码会报错呜呜呜~)
(3)音频数据量🙊: 全组五位成员,每人上交30条数据,(每位成员需要找到不同年龄段的3位家庭成员,每位家庭成员录制10条音频)共150条数据。
(4)若单双声道错误🌚,下载ffmpeg工具批量转换一下~
使用下方命令即可:
ffmpeg -y -i stereo.wav -ac 1 mono.wav
注意:录制音频文件时,要保证环境安静,无杂音。吐字清楚,音频前后留白不要太大~
采集样本数据尽可能保证:数据量大、数据种类多,范围广。
🌻2、制作数据清单:
(1)数据清单格式要求🐹:
(2)运行代码获取语音时长🐱:(官方提供jupyter文件中有)
# 导入librosa音频工具包获取音频时长,用于制作语音数据集
import librosa
time = librosa.get_duration(filename="/root/testdata/hi1.wav")
print(time)
(3)将前两步制作好的数据清单,统一为.json格式🐴。
🌻3、训练并验证模型:
比赛指定使用Nemo作为训练框架,预训练模型可以在NVIDIA的NGC官网搜索。
使用官方提供的jupyter文件脚本按步骤运行即可~运行时并无太大问题~
(欲知详情,快来参加NVIDIA下一届hackathon比赛吧!😉😉😉)
🌻2、TTS语音合成训练:
1、2步同上ASR模型训练~🌴🌴🌴
3、导出模型💐💐💐:
利用melgan声码器模型将频谱图合成语音文件并播放,通过对比原始语音音频与合成语音音频得出PESQ分值。若合成音频音质不佳,或PESQ分值不高,可重新调整数据集进行训练,直到满意为止,导出模型。
使用官方提供的jupyter文件脚本按步骤运行即可~
(欲知详情,快来参加NVIDIA下一届hackathon比赛吧!😍😍😍)
🌻3、TAO视觉类模型训练:
1、处理数据集🐶:
我们使用官方提供的Pascal Voc数据集。
需要将Pascal Voc的数据标注文件格式转换成Kitti的数据标注格式。
网上现成数据集:KITTI、OpenImages、COCO、VOC、Others。也可自行拍摄制作数据集~
2、训练模型的选择🐻:
从NVIDIA的NGC官网上查看可下载的预训练模型。
下面介绍几个不错的模型🌟🌟🌟:
官方推荐的RESNET18/ 34/ 101、mobilenet_v2🌝🌝🌝
- ResNet18和ResNet34🌞
特点:
1、超深的网络结构(突破1000层)
2、提出residual模块(残差结构)
3、使用Batch Normalization加速训练(丢弃dropout)
使用resnet系列模型可显著提高模型评估map值~
- 轻量级网络网络模型——MobileNet⭐
MobileNet使用深度可分离卷积来构建轻量级的深度神经网络是一种用于移动和嵌入式视觉应用的高效模型 。通过引入的两个简单全局超参数有效地在延迟和准确性之间进行权衡。为使模型得到更高的精度,一般的趋势是使网络模型加深、变复杂,但模型准确率的提高并不一定使网络在规模和速度方面更有效 。如在机器人、自动驾驶汽车 和 增强现实等许多现实应用中,识别任务需要在 计算能力有限的平台 上及时完成 。
在这之前,人们构建小型模型主要通过两种方式:压缩与训练网络和直接训练小型模型 。但许多关于小型网络的论文只关注规模,而没有考虑速度 ,MobileNet主要专注于优化延迟但也产生小型网络。
3、对模型剪枝🐟:
修改了定义阈值的pth值,由于使用0.5阈值模型训练效果不太好,改为0.3,减少了剪枝的部分。
4、训练并导出模型🐨:
查看map值大小,若不满意,可更换模型重新进行训练~
在导出模型时,可选择模型数据类型: fp32、fp16。(nano不支持Int8)
- 对比 INT8\fp16\fp32:
在CPU上,INT8略快;使用GPU比使用CPU节约80%左右的CPU开销;
在GPU上,FP16快于FP32,但FP16的精度有时低于FP32~
5、遇到的问题🐤:
docker路径映射错误,导致文件绝对路径混乱,代码报错。
解决方法:
上述使用官方提供的jupyter文件脚本按步运行即可~
(欲知详情,快来参加NVIDIA下一届hackathon比赛吧!)
总结🍀:
宏观的体会了智能语音识别和视觉识别,了解了大致流程,例如:如何训练模型,测试模型,提升模型精度,数据集的收集,选择合适神经网络。