CEVA 是無線連接和智能傳感技術(shù)的領(lǐng)先授權(quán)商。我們的產(chǎn)品可幫助原始設(shè)備制造商 (OEM) 為移動(dòng)設(shè)備、消費(fèi)者、汽車、機(jī)器人、工業(yè)和物聯(lián)網(wǎng)等多種終端市場,設(shè)計(jì)節(jié)能、智能和聯(lián)網(wǎng)的設(shè)備。
CEVA
https://www.ceva-dsp.com/
在本文中,我們將說明如何使用適用于微控制器的 TensorFlow Lite (TensorFlow Lite for Microcontrollers, TFLM),在基于 CEVA-BX DSP 內(nèi)核的裸機(jī)開發(fā)板上部署名為 WhisPro 的語音識(shí)別引擎及前端。WhisPro 可在設(shè)備端有效識(shí)別隨時(shí)出現(xiàn)的喚醒詞和語音命令。
適用于微控制器的 TensorFlow Lite
https://tensorflow.google.cn/lite/microcontrollers
圖 1 CEVA 多麥克風(fēng) DSP 開發(fā)板
WhisPro 簡介
WhisPro 是語音識(shí)別引擎及前端,主要在低功耗、資源受限的邊緣設(shè)備上運(yùn)行,包含負(fù)責(zé)音頻樣本處理到檢測的整個(gè)數(shù)據(jù)流。
WhisPro 支持兩種邊緣設(shè)備用例:
始終開啟的喚醒詞檢測引擎。在此用例中,WhisPro 用于在檢測到預(yù)定義的短語時(shí)喚醒處于睡眠模式下的設(shè)備。
語音指令。在此用例中,WhisPro 用于啟用基于語音的接口。用戶可以使用自己的聲音來控制設(shè)備。常用指令有:調(diào)高音量、調(diào)低音量、播放、停止等。
WhisPro 可在集成了 CEVA BX DSP 內(nèi)核的任何 SoC 上啟用語音接口,從而為希望參與語音接口變革的 OEM 和原始設(shè)計(jì)制造商 (ODM) 降低了準(zhǔn)入門檻。
我們的動(dòng)機(jī)
最初,WhisPro 是使用名為 CEVA NN Lib 的內(nèi)部神經(jīng)網(wǎng)絡(luò)庫實(shí)現(xiàn)的。盡管該實(shí)現(xiàn)具有出色的性能,但是開發(fā)過程相當(dāng)復(fù)雜。我們意識(shí)到,我們可以通過移植 TFLM 運(yùn)行庫,并針對目標(biāo)硬件對其進(jìn)行優(yōu)化的方式,讓整個(gè)模型移植過程將變得透明且更加可靠(大幅減少需要編寫、修改和維護(hù)的代碼量)。
為 CEVA-BX DSP 系列構(gòu)建 TFLM
首先,我們需要弄清楚如何將 TFLM 移植到我們的平臺(tái)上。我們發(fā)現(xiàn),遵循《指南:移植到新平臺(tái)》會(huì)非常有用。
指南:移植到新平臺(tái)
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/docs/new_platform_support.md
在指南的指導(dǎo)下,我們執(zhí)行了以下操作:
驗(yàn)證我們的平臺(tái)支持 DebugLog() 實(shí)現(xiàn)。
在 CEVA 基于 Eclipse 的 IDE 中創(chuàng)建 TFLM 運(yùn)行庫項(xiàng)目:
在 CEVA 的 IDE 中創(chuàng)建新的 CEVA-BX 項(xiàng)目
將所有必需的源文件添加到項(xiàng)目中
為 CEVA-BX 內(nèi)核構(gòu)建 TFLM 運(yùn)行庫。
這需要對路徑(并非所有必需文件都在“micro”目錄下)、鏈接器腳本文件等編譯器標(biāo)記進(jìn)行常規(guī)的調(diào)整。
DebugLog()
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/debug_log.cc
模型移植過程
我們將從模型中的 Keras 實(shí)現(xiàn)開始演示。以下是我們在裸機(jī)目標(biāo)硬件上部署模型所采取的步驟:
使用 TF 內(nèi)置轉(zhuǎn)換器將 TensorFlow 模型轉(zhuǎn)換為 TensorFlow Lite 模型:
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynbconverter = tf.lite.TFLiteConverter.from_keras_model(keras_model) converter.experimental_new_converter = True tflite_model = converter.convert() open("converted_to_tflite_model.tflite", "wb").write(tflite_model)
執(zhí)行量化操作:
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynbconverter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE] converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] converter.representative_dataset = representative_data_gen
使用 xxd 將 TensorFlow Lite 模型轉(zhuǎn)換為 TFLM 模型:
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynb$> xxd –I model.tflite > model.cc
TF 內(nèi)置轉(zhuǎn)換器
https://tensorflow.google.cn/lite/convert
量化
https://tensorflow.google.cn/lite/performance/model_optimization#quantization
xxd
https://linux.die.net/man/1/xxd
這里,我們發(fā)現(xiàn)TFLM(在當(dāng)時(shí))未能很好地支持模型的某些層(如GRU)。我們期待,隨著 TFLM 的繼續(xù)完善,以及 Google 和 TFLM 社區(qū)的持續(xù)投入,類似問題將大幅減少。
在我們的案例中,我們選擇了相對容易的方式:在完全連接層方面重新實(shí)現(xiàn)GRU層。
集成
接下來是將 TFLM 運(yùn)行庫和轉(zhuǎn)換后的模型集成到我們現(xiàn)有的嵌入式 C 前端。該前端將處理音頻預(yù)處理和特征提取操作。
即使我們的前端在編寫時(shí)并未考慮 TFLM,但因其有較高的模塊化程度,可通過實(shí)現(xiàn)單個(gè)簡單的封裝容器函數(shù)來輕松完成集成,具體步驟如下:
將 TFLM 運(yùn)行庫鏈接到我們的嵌入式 C 應(yīng)用(WhisPro 前端)
實(shí)現(xiàn) wrapper-over-setup 函數(shù),用于將模型映射到可用的數(shù)據(jù)結(jié)構(gòu)中,以分配解釋器和張量
實(shí)現(xiàn) wrapper-over-execute 函數(shù),用于將 WhisPro 前端傳遞的數(shù)據(jù)映射到實(shí)際執(zhí)行函數(shù)使用的 tflite 張量
將對原始模型執(zhí)行函數(shù)的調(diào)用替換為對 TFLM 實(shí)現(xiàn)的調(diào)用
過程可視化
模型的移植過程將由以下兩者執(zhí)行:
微控制器供應(yīng)商(在本例中為 CEVA),負(fù)責(zé)為自身硬件架構(gòu)優(yōu)化 TFLM。
微控制器用戶(在本例中為 CEVA WhisPro 開發(fā)者),負(fù)責(zé)使用優(yōu)化的 TFLM 運(yùn)行庫在目標(biāo)微控制器上部署基于神經(jīng)網(wǎng)絡(luò)的模型。
未來計(jì)劃
此項(xiàng)研究已證實(shí) TFLM 平臺(tái)對我們非常重要。此外,通過支持 TFLM,我們可以在邊緣設(shè)備上輕松部署神經(jīng)網(wǎng)絡(luò)模型,從而為我們的客戶和合作伙伴帶來更多的價(jià)值。我們致力于通過以下方式在 CEVA-BX DSP 系列上深化對 TFLM 的支持:
積極開發(fā) TFLM 項(xiàng)目,以便提高層覆蓋率和平臺(tái)總體的成熟度。
對于在 CEVA-BX 內(nèi)核上執(zhí)行的 TFLM 運(yùn)算符,加大對其的優(yōu)化力度,以實(shí)現(xiàn)完整覆蓋。
最終想法
盡管移植過程中遇到了一些困難,但我們最終還是取得了巨大的成功,整個(gè)項(xiàng)目耗時(shí)約 4 至 5 天。除此之外,從頭開始用 C 語言實(shí)現(xiàn)模型,以及手動(dòng)編寫從 Python 到 C 的模型轉(zhuǎn)換腳本還需要耗費(fèi) 2 至 3 周的時(shí)間,并進(jìn)行大量的調(diào)試工作。
責(zé)任編輯:lq
-
微控制器
+關(guān)注
關(guān)注
48文章
8375瀏覽量
164548 -
語音識(shí)別
+關(guān)注
關(guān)注
39文章
1812瀏覽量
116045 -
智能傳感
+關(guān)注
關(guān)注
1文章
133瀏覽量
17252 -
TensorFlow Lite
+關(guān)注
關(guān)注
0文章
26瀏覽量
828
原文標(biāo)題:案例分享 | CEVA 使用 TensorFlow Lite 在邊緣設(shè)備部署語音識(shí)別引擎及前端
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Microchip PIC18F2458/2553/4458/4553系列微控制器深度解析
ST7LITE3xF2微控制器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)解析
SRK1001:適用于反激式轉(zhuǎn)換器的自適應(yīng)同步整流控制器
國民MCU微控制器汽車充電樁方案的應(yīng)用優(yōu)勢
如何在TensorFlow Lite Micro中添加自定義操作符(1)
MOTIX? TLE989x/TLE988x:適用于BLDC應(yīng)用的微控制器解決方案
MOTIX? TLE994x/TLE995x:適用于BLDC應(yīng)用的微控制器
CW32系列微控制器的時(shí)鐘源和定時(shí)器選項(xiàng)介紹
適用于DLP5500 DMD的DLPC200 DLP數(shù)字控制器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
DLPC300:適用于DLP3000 DMD的DLP?數(shù)字控制器深度解析
SkyOne? LiTE 中頻和高頻帶前端模塊,適用于 3G、4G 和 5G 應(yīng)用 skyworksinc
RAA270000KFT適用于 RH850 汽車微控制器的電源管理IC數(shù)據(jù)手冊
帶有FPU的32位微控制器RX23T系列數(shù)據(jù)手冊
適用于單電機(jī)控制應(yīng)用的RX13T系列32位微控制器數(shù)據(jù)手冊
如何使用適用于微控制器的TensorFlow Lite
評論