一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用檢測(cè)模型進(jìn)行喚醒詞檢測(cè)模型的部署

Tensorflowers ? 來(lái)源:HaaS技術(shù)社區(qū) ? 作者:羅奎 ? 2021-09-30 11:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

隨著機(jī)器學(xué)習(xí)的發(fā)展,TinyML(微型機(jī)器學(xué)習(xí))已在你的家里、車?yán)?、甚至口袋里工作了。什么?TinyML 呢?它是屬于機(jī)器學(xué)習(xí)的一個(gè)子領(lǐng)域,包含了算法、硬件和軟件,能夠基于傳感器數(shù)據(jù)分析,并在極低功耗的設(shè)備上運(yùn)行。比如家里的天貓精靈、蘋果的 Siri 和亞馬遜的 Alexa 等語(yǔ)音助手,都屬于 TinyML 的應(yīng)用,它們提供了語(yǔ)音用戶接口 (AUI),讓用戶不需要操作屏幕、鼠標(biāo)或鍵盤就可以進(jìn)行交互,給用戶提供了一種全新的交互方式,這些語(yǔ)音助手幾乎無(wú)處不在。從獨(dú)立的智能音箱到幾乎所有手機(jī)都內(nèi)置了某種語(yǔ)音助手。

在大部分情況下,語(yǔ)音識(shí)別、自然語(yǔ)言處理以及語(yǔ)音合成等繁重工作都是在云端完成的,由性能強(qiáng)大的服務(wù)器運(yùn)行大型機(jī)器學(xué)習(xí)模型。當(dāng)用戶提出問(wèn)題時(shí),將以 wav 或其他音頻流的形式被發(fā)送到云端。云端識(shí)別出音頻流的含義并進(jìn)行回復(fù)響應(yīng)。語(yǔ)音助手真正需要的音頻是喚醒設(shè)備后的數(shù)據(jù)。如果能在不發(fā)送數(shù)據(jù)的情況下檢測(cè)到這個(gè)喚醒詞,并在聽(tīng)到喚醒詞之后才開(kāi)始音頻流的傳輸,這樣既能夠保護(hù)用戶的隱私、節(jié)省電池電量和帶寬,而且可以在沒(méi)有網(wǎng)絡(luò)的情況下喚醒。

這也是 TinyML 的用武之地。要在低功耗的芯片上運(yùn)行,意味著要訓(xùn)練一個(gè)監(jiān)聽(tīng)喚醒詞的微型模型,嵌入到微控制設(shè)備中,它就可以一直監(jiān)聽(tīng)喚醒詞,當(dāng)檢測(cè)到喚醒詞后通知操作系統(tǒng)開(kāi)始捕獲音頻并發(fā)送到云端。

在本文章中,將教大家如何使用預(yù)先訓(xùn)練的檢測(cè)模型,在 HaaS EDU K1 上進(jìn)行喚醒詞檢測(cè)模型的部署,并使用 Tensorflow Lite Micro 推理引擎進(jìn)行推理。隨后將教大家如何使用 Tensorflow 訓(xùn)練腳本訓(xùn)練一個(gè)自己的喚醒詞,再進(jìn)行設(shè)備端部署。本案例主要由三個(gè)部分組成:

1. 語(yǔ)音采集:接入模擬麥克風(fēng)(Mic1 輸入);

2. 語(yǔ)音識(shí)別:說(shuō)出“打開(kāi)”和“關(guān)閉”識(shí)別后,OLED 將顯示 “Turn on.。.” 和 “Turn off”;

3. 語(yǔ)音播報(bào):執(zhí)行指令的同時(shí),播報(bào)本地 TTS (mp3)。

涉及知識(shí)點(diǎn)

喚醒詞數(shù)據(jù)采集、模型訓(xùn)練、模型部署

設(shè)備端模擬 MIC 聲音采樣

設(shè)備端音頻特征提取

TFLite-Micro 推理引擎應(yīng)用

設(shè)備端命令識(shí)別、響應(yīng)

設(shè)備端喇叭播放 mp3 文件

文件系統(tǒng)應(yīng)用

OLED 顯示字符

方案介紹

整個(gè)方案的框架如下:

提供批量音頻錄制工具進(jìn)行數(shù)據(jù)收集;

提供 TF 模型訓(xùn)練腳本進(jìn)行喚醒詞訓(xùn)練;

提供完整設(shè)備端模型部署方案;

基于該方案,你將學(xué)習(xí)到 TinyML 的整個(gè)生命周期:

開(kāi)發(fā)環(huán)境搭建

1. 硬件準(zhǔn)備

如果有 HaaS 語(yǔ)音擴(kuò)展板,直接插入即可:

如果沒(méi)有 HaaS 語(yǔ)音擴(kuò)展板,請(qǐng)按照如下步驟接入麥克風(fēng)和喇叭:

HaaS EDU K1 硬件排線圖請(qǐng)參考

HaaS EDU K1 說(shuō)明書 - IoT 物聯(lián)網(wǎng)操作系統(tǒng) - 阿里云

HaaS EDU K1 說(shuō)明書 - IoT 物聯(lián)網(wǎng)操作系統(tǒng) - 阿里云

https://help.aliyun.com/document_detail/205267.html

2. 環(huán)境搭建

參考《HaaS EDU K1 快速開(kāi)始》中 HaaS Studio 章節(jié)完成 AliOS Things 開(kāi)發(fā)環(huán)境搭建。

《HaaS EDU K1 快速開(kāi)始》

https://blog.csdn.net/HaaSTech/article/details/119674142

2.1 案例代碼下載

該案例相關(guān)的源代碼下載可參考《創(chuàng)建工程》,該案例是 C/C++ 案例。

《創(chuàng)建工程》

https://g.alicdn.com/alios-things-3.3/doc/haas-studio.html?spm=a2cti.24227744.0.0.696b40faTNQpKM#autotoc_md1867

其中:

選擇解決方案: “TFLite-Micro 離線語(yǔ)音快捷詞喚醒案例”或者 “tflite_micro_speech_demo”

選擇開(kāi)發(fā)板: HaaS EDU K1

2.2 代碼編譯、燒錄

參考《HaaS EDU K1 快速開(kāi)始》完成代碼的編譯及燒錄,在燒錄前,請(qǐng)先完成 2.1 的步驟,再進(jìn)行編譯燒錄。

《HaaS EDU K1 快速開(kāi)始》

https://blog.csdn.net/HaaSTech/article/details/119674142

文件件系統(tǒng)燒錄

本組件例子中使用到的本地語(yǔ)料存放在代碼中 hardware/chip/haas1000/prebuild/data/ 目錄下 mp3 目錄,除燒錄 tflite_micro_speech_demo image 外,需燒錄 littlefs 文件系統(tǒng),請(qǐng)將 hardware/chip/haas1000/package.yaml 文件中以下代碼段的注釋打開(kāi)后重新編譯:

program_data_files:

- filename: release/write_flash_tool/ota_bin/littlefs.bin

address: 0xB32000

2.3 打開(kāi)串口

參考《HaaS EDU K1 快速開(kāi)始》打開(kāi)串口進(jìn)行 LOG 查看。

《HaaS EDU K1 快速開(kāi)始》

https://blog.csdn.net/HaaSTech/article/details/119674142

軟件架構(gòu)

KWS Demo 應(yīng)用程序: 主要打通實(shí)現(xiàn) AI 語(yǔ)音引擎的初始化,歡迎語(yǔ)播報(bào)。

ai_agent 組件:是 AliOS Things 上的 AI 引擎核心模塊,后端接入不同的推理引擎,本案例中使用了 TFLite-Micro 推理引擎。

uVoice 組件:是 AliOS Things 上智能語(yǔ)音解決方案的核心組件,提供了本地音頻,URL 音頻,TTS 合成等基礎(chǔ)功能,音頻格式支持 mp3, m4a, wav, opus 等主流格式,本案例中使用它來(lái)進(jìn)行本地 mp3 語(yǔ)料的響應(yīng)播報(bào)。

A2SA 組件:是 AliOS Things 上音頻服務(wù)框架,兼容 ALSA 應(yīng)用接口訪問(wèn),支持音頻硬件驅(qū)動(dòng)抽象,多音頻驅(qū)動(dòng)加載/卸載,VFS 接口支持等功能。

1. 代碼結(jié)構(gòu)

├── cp_resources.py # 拷貝本地語(yǔ)料到/prebuild/data目錄,編譯進(jìn)文件系統(tǒng)

├── main.c

├── maintask.c

├── Makefile

├── micro_speech # 語(yǔ)音識(shí)別程序

├── oled # OLED顯示程序

│ ├── oled.c

│ └── oled.h

├── package.yaml # 編譯系統(tǒng)配置文件

├── player # 播放器程序

│ ├── player.c

│ └── player.h

├── README.md

├── recorder # 錄音程序

│ ├── recorder.c

│ └── recorder.h

├── resources

│ └── mp3 # 本地mp3語(yǔ)料

├── SConstruct

2. 設(shè)備端工作流程

在 HaaS EDU K1 上的整個(gè)工作流程如下圖:

3. 程序主體

以下代碼是執(zhí)行喚醒詞識(shí)別主體,setup 對(duì) TFLite-Micro 模型推理引擎進(jìn)行初始化,loop 中執(zhí)行上圖中整個(gè)流程,從音頻采集到命令響應(yīng)的全部流程在該函數(shù)中實(shí)現(xiàn),詳細(xì)邏輯請(qǐng)參考代碼。

// The name of this function is important for Arduino compatibility.

void setup()

{

// tflite::InitializeTarget();

//RegisterDebugLogCallback(callback);

// Set up logging. Google style is to avoid globals or statics because of

// lifetime uncertainty, but since this has a trivial destructor it‘s okay.

// NOLINTNEXTLINE(runtime-global-variables)

static tflite::MicroErrorReporter micro_error_reporter;

error_reporter = μ_error_reporter;

// Map the model into a usable data structure. This doesn’t involve any

// copying or parsing, it‘s a very lightweight operation.

model = tflite::GetModel(g_model);

if (model-》version() != TFLITE_SCHEMA_VERSION)

{

TF_LITE_REPORT_ERROR(error_reporter,

“Model provided is schema version %d not equal ”

“to supported version %d.”,

model-》version(), TFLITE_SCHEMA_VERSION);

return;

}

// Pull in only the operation implementations we need.

// This relies on a complete list of all the ops needed by this graph.

// An easier approach is to just use the AllOpsResolver, but this will

// incur some penalty in code space for op implementations that are not

// needed by this graph.

//

// tflite::AllOpsResolver resolver;

// NOLINTNEXTLINE(runtime-global-variables)

static tflite::MicroMutableOpResolver《4》 micro_op_resolver(error_reporter);

if (micro_op_resolver.AddDepthwiseConv2D() != kTfLiteOk)

{

return;

}

if (micro_op_resolver.AddFullyConnected() != kTfLiteOk)

{

return;

}

if (micro_op_resolver.AddSoftmax() != kTfLiteOk)

{

return;

}

if (micro_op_resolver.AddReshape() != kTfLiteOk)

{

return;

}

// Build an interpreter to run the model with.

static tflite::MicroInterpreter static_interpreter(

model, micro_op_resolver, tensor_arena, kTensorArenaSize, error_reporter);

interpreter = &static_interpreter;

// Allocate memory from the tensor_arena for the model’s tensors.

TfLiteStatus allocate_status = interpreter-》AllocateTensors();

if (allocate_status != kTfLiteOk)

{

TF_LITE_REPORT_ERROR(error_reporter, “AllocateTensors() failed”);

return;

}

// Get information about the memory area to use for the model‘s input.

model_input = interpreter-》input(0);

if ((model_input-》dims-》size != 2) || (model_input-》dims-》data[0] != 1) ||

(model_input-》dims-》data[1] !=

(kFeatureSliceCount * kFeatureSliceSize)) ||

(model_input-》type != kTfLiteInt8))

{

TF_LITE_REPORT_ERROR(error_reporter,

“Bad input tensor parameters in model”);

return;

}

model_input_buffer = model_input-》data.int8;

// Prepare to access the audio spectrograms from a microphone or other source

// that will provide the inputs to the neural network.

// NOLINTNEXTLINE(runtime-global-variables)

static FeatureProvider static_feature_provider(kFeatureElementCount,

feature_buffer);

feature_provider = &static_feature_provider;

static RecognizeCommands static_recognizer(error_reporter);

recognizer = &static_recognizer;

previous_time = 0;

RespondCommandThreadInit();

}

// The name of this function is important for Arduino compatibility.

void loop()

{

// Fetch the spectrogram for the current time.

const int32_t current_time = LatestAudioTimestamp();

int how_many_new_slices = 0;

TfLiteStatus feature_status = feature_provider-》PopulateFeatureData(

error_reporter, previous_time, current_time, &how_many_new_slices);

// LOG(“current_time: %d, previous_time: %d, how_many_new_slices: %d

”, current_time, previous_time, how_many_new_slices);

if (feature_status != kTfLiteOk)

{

TF_LITE_REPORT_ERROR(error_reporter, “Feature generation failed”);

return;

}

previous_time = current_time;

// If no new audio samples have been received since last time, don’t bother

// running the network model.

if (how_many_new_slices == 0)

{

//LOG(“[lk added]how_many_new_slices is 0

”);

return;

}

// Copy feature buffer to input tensor

for (int i = 0; i 《 kFeatureElementCount; i++)

{

model_input_buffer[i] = feature_buffer[i];

}

// Run the model on the spectrogram input and make sure it succeeds.

TfLiteStatus invoke_status = interpreter-》Invoke();

if (invoke_status != kTfLiteOk)

{

TF_LITE_REPORT_ERROR(error_reporter, “Invoke failed”);

return;

}

// Obtain a pointer to the output tensor

TfLiteTensor *output = interpreter-》output(0);

// Determine whether a command was recognized based on the output of inference

const char *found_command = nullptr;

uint8_t score = 0;

bool is_new_command = false;

TfLiteStatus process_status = recognizer-》ProcessLatestResults(

output, current_time, &found_command, &score, &is_new_command);

if (process_status != kTfLiteOk)

{

TF_LITE_REPORT_ERROR(error_reporter,

“RecognizeCommands::ProcessLatestResults() failed”);

return;

}

// Do something based on the recognized command. The default implementation

// just prints to the error console, but you should replace this with your

// own function for a real application.

RespondToCommand(error_reporter, current_time, found_command, score,

is_new_command);

}

案例體驗(yàn)

當(dāng)程序燒錄完成后,直接喊出“打開(kāi)“/“關(guān)閉”,就可以看到視頻所示的效果。目前只支持近場(chǎng)喚醒,喚醒距離 1 米左右。由于這個(gè)“打開(kāi)”/“關(guān)閉”喚醒的語(yǔ)料有限,喚醒效果因人不同有差異。建議按照章節(jié) 6 中自己訓(xùn)練一個(gè)喚醒詞或者使用數(shù)據(jù)集中的英文語(yǔ)料 “on/off” 試試。

自訓(xùn)練喚醒詞

本案例是自訓(xùn)練了一個(gè)“打開(kāi)”/“關(guān)閉”快捷喚醒詞。本小節(jié)將帶你訓(xùn)練一個(gè)新的快捷喚醒詞。

從錄音采集到部署到 HaaS EDU K1 的整個(gè)詳細(xì)流程如下:

1. 語(yǔ)料采集

語(yǔ)料采集是一個(gè)比較耗費(fèi)人力的事情,通常商業(yè)化工程中語(yǔ)料收集有專人或?qū)iT的數(shù)據(jù)公司收集整理,這里提供了一個(gè)使用 Python 寫的錄音工具,方便你快速錄音。

依賴項(xiàng)安裝

#pip install pyaudio或者#conda install pyaudio

錄音配置

語(yǔ)音文件長(zhǎng)度一秒

單聲道、16KHz、wav 格式

快、中、慢三種不同速度進(jìn)行錄制

錄制次數(shù) 100 次以上,次數(shù)越多效果越好

相對(duì)安靜環(huán)境

1.1 喚醒詞錄制

錄制時(shí)看到“開(kāi)始錄音,請(qǐng)說(shuō)話。..。..”即可立即說(shuō)出喚醒詞,比如“打開(kāi)”、“關(guān)閉”。由于我們檢測(cè)一秒的喚醒詞,所以注意要在一秒內(nèi)說(shuō)完整整個(gè)喚醒詞,錄制一次后會(huì)自動(dòng)回放確認(rèn)是否錄制完整,如果錄制完整,按回車鍵繼續(xù)下一次錄制,如果錄制不完整或有其他雜音,按其他任意鍵刪除剛才的錄音再繼續(xù)下一次錄制。

執(zhí)行命令:

#python micro_speech/train/record.py

毫無(wú)疑問(wèn),這個(gè)教學(xué)案例是教你如何錄制一個(gè)人的聲音,如果想要達(dá)到商業(yè)化的識(shí)別率,就至少需要 500 人以上的聲音錄制。如果僅僅錄制你一個(gè)人的喚醒詞,那么僅識(shí)別你的聲音是可以的,但其他人在喚醒時(shí)的成功率就會(huì)低很多。這個(gè)案例重點(diǎn)是教你了解喚醒詞訓(xùn)練部署的原理。

1.2 背景噪音錄制

為了更好的識(shí)別,需要錄制一些背景噪音,模型訓(xùn)練時(shí)會(huì)學(xué)習(xí)喚醒詞和背景噪音的差別。背景噪音可以錄制 1~2 分鐘。模型訓(xùn)練時(shí)會(huì)自動(dòng)從中隨機(jī)選擇片段作為背噪加入喚醒詞中進(jìn)行學(xué)習(xí)。

執(zhí)行命令:

#python micro_speech/train/record_noise.py

錄制背景噪音,放到 dataset/_background_noise_ 目錄。

1.3 創(chuàng)建自己的數(shù)據(jù)集

訓(xùn)練腳本中默認(rèn)采樣的預(yù)訓(xùn)練數(shù)據(jù)集是 Google 發(fā)布的 Speech Commands(語(yǔ)音命令)數(shù)據(jù)集,該數(shù)據(jù)集是英文數(shù)據(jù)集。這里我們以錄制中文的“打開(kāi)”/“關(guān)閉”為例,每個(gè)詞錄制 100 次。錄制完成后分別命名為 dakai 和 guanbi 兩個(gè)文件夾放入自定義的 my_dataset 目錄,然后從 Speech Commands 中選擇幾個(gè)單詞 house、marvin、wow 等喚醒詞作為“未知”類別放入到 my_only_dataset 目錄,它的作用是模型訓(xùn)練時(shí)能夠從這些喚醒詞中識(shí)別想要的 dakai 和 guanbi 命令,dakai 和 guanbi 可以理解為正面示例,“未知”類別為反面示例。整個(gè)命令詞個(gè)數(shù)盡量限制在十個(gè)以下,這樣訓(xùn)練的時(shí)間不會(huì)過(guò)久。如果你有其他同樣長(zhǎng)度且與錄音配置中格式一樣的喚醒詞,也可以加入進(jìn)來(lái)。另外如果錄制的是 100 次喚醒詞,那么其他作為“未知”類別的喚醒詞的錄音示例個(gè)數(shù)也盡量在 100 左右。錄制的背景噪音放入到 _background_noise_ 目錄,訓(xùn)練時(shí)腳本將自動(dòng)從中隨機(jī)選取一秒片段作為背景噪音加入到“無(wú)聲”類別中。

2. 模型訓(xùn)練

2.1 PC 端訓(xùn)練

PC 上在 VSCode 中使用 jupyter notebook 插件打開(kāi) tflite_micro_speech_demo/micro_speech/train/train_micro_speech_model.ipynb

進(jìn)行其他喚醒詞的訓(xùn)練。

前提:

參考《HaaS AI 之 VSCode 中搭建 Python 虛擬環(huán)境》搭建完開(kāi)發(fā)環(huán)境后,安裝 tensorflow 1.15 版本:

《HaaS AI 之 VSCode 中搭建 Python 虛擬環(huán)境》

https://f.cp46.cn/q5zd

#conda create --name tf python=3.6#conda activate tf#conda install tensorflow=1.15

2.2 阿里云 PAI 平臺(tái)訓(xùn)練

如果 PC 性能有限,使用阿里云 PAI 平臺(tái)進(jìn)行訓(xùn)練也是一個(gè)不錯(cuò)的選擇,PAI-DSW 是一款云端機(jī)器學(xué)習(xí)開(kāi)發(fā) IDE,為您提供交互式編程環(huán)境,適用于不同水平的開(kāi)發(fā)者。你可以根據(jù)需要選擇個(gè)人版、GPU 特價(jià)版或探索者版(免費(fèi)),相關(guān)使用手冊(cè) DSW 新手使用手冊(cè)。

探索者版(免費(fèi))

https://dsw-dev.data.aliyun.com/#/

DSW 新手使用手冊(cè)

https://tianchi.aliyun.com/forum/postDetail?spm=TODO.TODO.header.2.21864825A5pdfB&postId=121050

以使用 DSW 個(gè)人版為例:

1. 登錄 PAI 控制臺(tái)。

登錄 PAI 控制臺(tái)

https://pai.data.aliyun.com/console

2. 在左側(cè)導(dǎo)航欄,選擇模型開(kāi)發(fā)和訓(xùn)練 》 交互式建模 (DSW)。

3. 在頁(yè)面左上方,選擇目標(biāo)地域。

4. 在 Notebook 建模服務(wù)頁(yè)面,單擊創(chuàng)建實(shí)例。

5. 在配置實(shí)例向?qū)ы?yè)面,配置參數(shù),鏡像選擇 tensorflow1.15-gpu-py36-cu101-ubuntu18.04 版本。

2.3 模型配置

無(wú)論在什么平臺(tái)上進(jìn)行訓(xùn)練,腳本中需要對(duì)訓(xùn)練的參數(shù)進(jìn)行一定的配置:

喚醒詞配置

WANTED_WORDS 就是你訓(xùn)練的喚醒詞。比如:

WANTED_WORDS=”yes, on“,yes/on 對(duì)應(yīng)于數(shù)據(jù)集 dataset 目錄的喚醒詞語(yǔ)料文件夾。這里根據(jù)你要訓(xùn)練的喚醒詞修改。

訓(xùn)練步數(shù)配置

如果你的喚醒詞僅僅數(shù)百條甚至數(shù) 10 條,那么訓(xùn)練的步數(shù)不用太久,修改:

TRANINGS_STEPS=”1200, 300“

如果你有上千條以上,訓(xùn)練的步數(shù)可以增加。

TRANINGS_STEPS=”15000, 3000“

為了防止訓(xùn)練欠擬合或者過(guò)擬合,訓(xùn)練的時(shí)間長(zhǎng)短需要反復(fù)驗(yàn)證,找到最優(yōu)的結(jié)果。

數(shù)據(jù)集配置

如果使用自己的數(shù)據(jù)集,請(qǐng)修改:

DATASET_DIR = ‘。/dataset/’

3. 模型部署

模型部署在 HaaS EDU K1 上,主要有三個(gè)步驟:

1. 模型替換:將生成的模型文件 model.cc 替換 micro_speech/micro_features/model.cc 文件

2. 標(biāo)簽更新:在 micro_speech/micro_features/micro_model_settings.cc 中修改 kCategoryLabels 標(biāo)簽內(nèi)容,將標(biāo)簽名更換為你訓(xùn)練的快捷詞,比如“打開(kāi)”、“關(guān)閉”。由于標(biāo)簽與模型的輸出張量元素是按照順序進(jìn)行匹配的,因此,需要按照將標(biāo)簽提供給訓(xùn)練腳本的順序列出這些標(biāo)簽。

3. 業(yè)務(wù)邏輯更新:在 micro_speech/command_responder.cc 中根據(jù)標(biāo)簽更新相應(yīng)的業(yè)務(wù)邏輯。目前在聽(tīng)到“打開(kāi)”后,會(huì)打開(kāi) HaaS EDU K1 上 R/G/B LED 燈。你也可以修改邏輯比如通過(guò) WiFi 打開(kāi)遠(yuǎn)程的風(fēng)扇或燈。這里可以充分發(fā)揮你的想象力打造一些比較有意思的場(chǎng)景應(yīng)用。

總結(jié)

本案例在 HaaS EDU K1 上基于 TFLite-Micro 推理引擎進(jìn)行語(yǔ)音喚醒詞的部署。也提供了從喚醒詞采集到模型訓(xùn)練、模型部署的全鏈路開(kāi)發(fā)流程,幫助您深入理解在低功耗 MCU 上如何進(jìn)行離線語(yǔ)音識(shí)別的開(kāi)發(fā)部署,期待您打造更多屬于你的離線喚醒詞應(yīng)用。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:社區(qū)分享 | 基于TensorFlow Lite Micro在HaaS EDU K1物聯(lián)網(wǎng)開(kāi)發(fā)板上玩轉(zhuǎn)TinyML之離線語(yǔ)音喚醒

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問(wèn)嘉楠平臺(tái)k230訓(xùn)練的跌倒檢測(cè)模型里面的設(shè)置是怎么樣的?

    我想要了解K230所使用的跌倒檢測(cè)模型中的設(shè)置,例如人體檢測(cè)是如何實(shí)現(xiàn)的,在模型檢測(cè)中,人體的節(jié)點(diǎn)是多少?;蛘呦胝?qǐng)教一下相關(guān)的文檔或者內(nèi)容在
    發(fā)表于 06-23 07:05

    如何使用Docker部署模型

    隨著深度學(xué)習(xí)和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個(gè)重要的挑戰(zhàn)。Docker 作為一種輕量級(jí)的容器化技術(shù),能夠?qū)?b class='flag-5'>模型及其依賴環(huán)境打包成一個(gè)可移植的容器,極大地簡(jiǎn)化了
    的頭像 發(fā)表于 05-24 16:39 ?330次閱讀

    請(qǐng)問(wèn)如何在imx8mplus上部署和運(yùn)行YOLOv5訓(xùn)練的模型?

    我正在從事 imx8mplus yocto 項(xiàng)目。我已經(jīng)在自定義數(shù)據(jù)集上的 YOLOv5 上訓(xùn)練了對(duì)象檢測(cè)模型。它在 ubuntu 電腦上運(yùn)行良好?,F(xiàn)在我想在我的 imx8mplus 板上運(yùn)行該模型
    發(fā)表于 03-25 07:23

    K230D部署模型失敗的原因?

    MicroPython部署的無(wú)法正常運(yùn)行,采用C++版本的無(wú)法實(shí)現(xiàn)部署 嘗試解決過(guò)程 1.考慮到可能是固件不匹配的問(wèn)題,重新燒錄了流程(生成模型后給的readme)中要求的固件,依舊無(wú)法成功
    發(fā)表于 03-11 06:19

    使用OpenVINO?模型的OpenCV進(jìn)行人臉檢測(cè),檢測(cè)到多張人臉時(shí),伺服電機(jī)和步入器電機(jī)都發(fā)生移動(dòng)是為什么?

    使用OpenVINO?模型的 OpenCV* 進(jìn)行人臉檢測(cè)。 使用 cv2.矩形 函數(shù),能夠獲取檢測(cè)到的面部的坐標(biāo)。 檢測(cè)到多張人臉時(shí),多
    發(fā)表于 03-07 06:35

    如何使用OpenVINO?運(yùn)行對(duì)象檢測(cè)模型?

    無(wú)法確定如何使用OpenVINO?運(yùn)行對(duì)象檢測(cè)模型
    發(fā)表于 03-06 07:20

    請(qǐng)問(wèn)是否有任何OpenVINO?樣本可以推斷批次大小大于1的檢測(cè)模型?

    是否有任何OpenVINO?樣本可以推斷批次大小大于 1 的檢測(cè)模型
    發(fā)表于 03-06 07:19

    使用OpenVINO?訓(xùn)練擴(kuò)展對(duì)水平文本檢測(cè)模型進(jìn)行微調(diào),收到錯(cuò)誤信息是怎么回事?

    已針對(duì)水平文本檢測(cè)模型運(yùn)行OpenVINO?訓(xùn)練擴(kuò)展中的 微調(diào) 步驟,并收到錯(cuò)誤消息: RuntimeError: Failed to find annotation files
    發(fā)表于 03-05 06:48

    添越智創(chuàng)基于 RK3588 開(kāi)發(fā)板部署測(cè)試 DeepSeek 模型全攻略

    和NPU的利用率,可以看到CPU的占用率已經(jīng)降了下來(lái),并且調(diào)用了NPU的3個(gè)核心進(jìn)行加速推理: 通過(guò)以上兩種方法,我們掌握了在 RK3588 開(kāi)發(fā)板上部署并測(cè)試 DeepSeek 模型的技能。如果你也是
    發(fā)表于 02-14 17:42

    請(qǐng)問(wèn)有沒(méi)有不在linux上對(duì).pt模型向.kmodel轉(zhuǎn)換的教程呢?

    的文章 但是里面很多參數(shù)以及.npy的數(shù)據(jù)集我不知道怎么填寫及處理。 2、還有一個(gè)問(wèn)題,現(xiàn)在yolo有一個(gè)obb模塊可以檢測(cè)物體的傾斜角度,請(qǐng)問(wèn)用這個(gè)模塊訓(xùn)練出來(lái)的模型可以部署在k230上嗎?或者是可以使用云訓(xùn)練平臺(tái)訓(xùn)練出帶角
    發(fā)表于 02-08 08:56

    【「基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化」閱讀體驗(yàn)】+大模型微調(diào)技術(shù)解讀

    。對(duì)于文本數(shù)據(jù),可以采用同義替換、句法變換、上下文擴(kuò)展等技術(shù)。微調(diào)策略和方法全參數(shù)微調(diào):對(duì)模型的所有參數(shù)進(jìn)行再訓(xùn)練。雖然需要大量的計(jì)算資源,但它可以充分適應(yīng)特定任務(wù)。輕量級(jí)微調(diào)方法:Adapter
    發(fā)表于 01-14 16:51

    企業(yè)AI模型部署攻略

    當(dāng)下,越來(lái)越多的企業(yè)開(kāi)始探索和實(shí)施AI模型,以提升業(yè)務(wù)效率和競(jìng)爭(zhēng)力。然而,AI模型部署并非易事,需要企業(yè)在多個(gè)層面進(jìn)行細(xì)致的規(guī)劃和準(zhǔn)備。下面,AI部落小編為企業(yè)提供一份AI
    的頭像 發(fā)表于 12-23 10:31 ?781次閱讀

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測(cè)模型

    并非易事,它涉及到從選擇合適的算法架構(gòu)到針對(duì)特定硬件平臺(tái)進(jìn)行優(yōu)化等一系列復(fù)雜的工作。 接下來(lái),我們將詳細(xì)介紹如何在資源受限的邊緣設(shè)備上成功部署目標(biāo)檢測(cè)模型,探索其背后的原理和技術(shù),并討
    發(fā)表于 12-19 14:33

    如何開(kāi)啟Stable Diffusion WebUI模型推理部署

    如何開(kāi)啟Stable Diffusion WebUI模型推理部署
    的頭像 發(fā)表于 12-11 20:13 ?556次閱讀
    如何開(kāi)啟Stable Diffusion WebUI<b class='flag-5'>模型</b>推理<b class='flag-5'>部署</b>

    在樹莓派上部署YOLOv5進(jìn)行動(dòng)物目標(biāo)檢測(cè)的完整流程

    卓越的性能。本文將詳細(xì)介紹如何在性能更強(qiáng)的計(jì)算機(jī)上訓(xùn)練YOLOv5模型,并將訓(xùn)練好的模型部署到樹莓派4B上,通過(guò)樹莓派的攝像頭進(jìn)行實(shí)時(shí)動(dòng)物目標(biāo)檢測(cè)
    的頭像 發(fā)表于 11-11 10:38 ?3683次閱讀
    在樹莓派上<b class='flag-5'>部署</b>YOLOv5<b class='flag-5'>進(jìn)行</b>動(dòng)物目標(biāo)<b class='flag-5'>檢測(cè)</b>的完整流程