5

TinyML语音关键字唤醒 – 训练模型#1

 2 years ago
source link: https://www.taterli.com/7774/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

TinyML语音关键字唤醒 – 训练模型#1

  • TaterLi
  • 2021年5月10日2021年5月10日

之前是用现有模型进行的,现在开始训练自己的模型,训练模型其实毫无难度,难度是人力成本,具体转到连接:

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/audio/simple_audio.ipynb

当然如果你想不开,非要本机训练,CPU状态下要2-3小时,而Colab提供的GPU加速,只需要十几分钟,而且,默认打开就是使用GPU训练的,当然,我们还不用特殊设置,直接就好用.

读到现在,当然假设大家都已经掌握TF的基础(如果还不行就翻之前的内容),我就大致说一下这个训练中关键的内容.

  • 下载 mini_speech_commands.zip 文件,这个文件包含了8个词,每个词都有1000个文件,是不同的1000个人说的.我们要训练的词,也必须找很多人不断录音哦.同理,如果你要训练小狗这个图片模型,也是需要找很多不同形态的小狗,不同环境下的小狗.
  • 然后切割数据为三份,训练数据6400,测试数据800,验证数据800,后续用from_tensor_slices分割.
  • 获取每个文件对应的label,目录路径中就包含label这么关键的信息.
  • 随机抽一些音频数据画图(可视化看看)
  • 使用SFFT进行时域转频域(即频谱图),然后后面也打印一些频域图.
  • 然后开始训练(构造层啊各种,这些需要不断组合做出最佳结果)
  • 然后一直训练到自己合适的loss,然后结束训练.
  • 然后用测试验证数据测试一下结果.

不过Colab始终有12小时的限制,如果模型很大,就必须本地训练,可以在本地这么训练.

bazel-3.7.2 run tensorflow/examples/speech_commands:train

觉得资源不够可以选择性训练.(为了提高速度节约资源我用的是这个!)

bazel-3.7.2 run -c opt --copt=-mavx2 --copt=-mfma tensorflow/examples/speech_commands:train -- --model_architecture=tiny_conv --window_stride=20 --preprocess=micro --wanted_words="yes,no" --silence_percentage=25 --unknown_percentage=25 --quantize=1

小内存方案方案也可以用Python(以后会不支持)

python3 tensorflow/examples/speech_commands/train.py -- --model_architecture=tiny_conv --window_stride=20 --preprocess=micro --wanted_words="yes,no" --silence_percentage=25 --unknown_percentage=25 --quantize=1

如果觉得无聊,可以开个tensorboard娱乐下,功能挺多,需要自己探索下.

 tensorboard --logdir /tmp/retrain_logs

最后得到以下有用文件(其他文件省略了!):

root@ip-tl-ml:~# ls /tmp
speech_commands_train retrain_logs speech_dataset

得到模型之后可以转换模型.(start_checkpoint替换成你自己的实际路径!)

bazel run tensorflow/examples/speech_commands/freeze -- \
--sample_rate=16000 --dct_coefficient_count=40 --window_size_ms=20 \
--window_stride_ms=10 --clip_duration_ms=1000 \
--model_architecture=tiny_conv --preprocess=micro \
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \
--output_file=/tmp/tiny_conv.pb

最后得到PB文件.

Use `tf.compat.v1.graph_util.extract_sub_graph`
INFO:tensorflow:Saved frozen graph to /tmp/my_frozen_graph.pb
I0510 05:15:03.693924 139953678481216 freeze.py:173] Saved frozen graph to /tmp/my_frozen_graph.pb

默认toco版本很低,所以使用源码自带的.(必须版本匹配才能转换)

bazel run tensorflow/lite/toco:toco -- --input_file=/tmp/tiny_conv.pb --output_file=/tmp/tiny_conv.tflite --input_shapes=1,49,40,1 --input_arrays=Reshape_2 --output_arrays='labels_softmax' --inference_type=QUANTIZED_UINT8 --mean_values=0 --std_values=9.8077

最终得到TFLite模型文件,按照之前方法转换到单片机中就可以用了.

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论

显示名称 *

电子邮箱地址 *

网站网址


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK