謝作如 浙江省溫州中學
胡君豪 上海人工智能實驗室
通過查詢多項AI活動的學生作品列表可以發(fā)現(xiàn),在當前中小學的AI科創(chuàng)項目中通過訓練語音識別模型來解決問題的比較少見,訓練出AI模型并部署在開源硬件上的更是鳳毛麟角。究其原因有二:首先是目前計算機視覺技術(shù)比較成熟,又有類似OpenMMLab、MMEdu之類的AI工具包,再加上卷積神經(jīng)網(wǎng)絡(CNN)模型在圖像分類方面表現(xiàn)突出,中小學的教材中也內(nèi)置了類似圖像識別的案例。其次是全國統(tǒng)一使用普通話,智能音箱的應用已經(jīng)遍布千家萬戶,探究語音識別似乎沒有新意。
全國統(tǒng)一使用普通話和智能音箱普及固然是事實,但是這并不等于語音識別不值得探究。我國非北方地區(qū)的大部分老人,做不到像年輕人一樣能夠講一口流利的普通話,他們和智能音箱的對話是困難的。況且,語音識別應用雖然隨處可見,但是一些用戶群體較小的方言如溫州話,依然找不到相應的AI模型。因此,筆者準備設計一個支持方言識別的智能音箱,讓不會說普通話的弱勢群體也能享受AI的便利。
按照深度學習的原理和AI科創(chuàng)作品的開發(fā)流程,要完成這個智能音箱項目大致需要進行如下工作:
首先,需要一個本地方言的數(shù)據(jù)集,可以在當?shù)貓D書館語音庫中尋找,或者自己想辦法找各種有代表性的人錄音形成數(shù)據(jù)集。其次,處理原始音頻并提取特征,之后再搭建神經(jīng)網(wǎng)絡訓練模型。在訓練過程中調(diào)整各種超參數(shù),最終得到一個性能可行的模型。最后,選擇一款支持AI模型推理的開源硬件,生成相應格式的AI模型并部署。如果語音識別的效果不錯,那么再增加外圍的相關(guān)代碼,如通過麥克風采音,識別出語音后執(zhí)行預設的指令等。
從整個流程上,最關(guān)鍵的工作是如何處理原始音頻并提取特征和搭建一個怎樣的神經(jīng)網(wǎng)絡,以及如何得到能運行在開源硬件上的AI模型,這就需要介紹短時傅里葉變換(short-time Fourier transform,STFT)和ONNX(Open Neural Network Exchange)技術(shù)了。
語音的原始音頻信號是一維的,如果使用原始信號作為輸入數(shù)據(jù),信號長度較長,同時,使用該輸入對應的網(wǎng)絡模型也會很大,更糟糕的是找不到可以參考的直接用一維信號進行語音識別的網(wǎng)絡模型。STFT可以將一維信號變?yōu)槎S信號,該二維信號叫做時頻譜圖,橫坐標為時間,縱坐標為頻率,顏色深度為對應時間和對應頻率的大小。如圖1所示,變換后的信號就等同于一張圖像,那么語音分類問題就等同于圖像分類問題了。MMEdu中內(nèi)置了很多圖像分類的輕量型卷積神經(jīng)網(wǎng)絡,如ResNet、MobileNet等,借鑒或者直接使用就能訓練模型了。
圖1 波形信號轉(zhuǎn)化為時頻譜圖
在本欄目上一期的文章中,筆者已經(jīng)完成了將ONNX模型部署在行空板上。ONNX是一種通用的AI模型,支持多平臺,推理環(huán)境搭建非常方便,是部署AI應用的主流選擇。MMEdu支持直接導出ONNX模型,新版的行空板也內(nèi)置了ONNX的推理環(huán)境。
通過圖書館、溫州當?shù)氐拇髷?shù)據(jù)開放平臺,都沒有找到溫州話的語音庫,只好采用最笨也是最踏實的辦法——手動采集。筆者找會溫州話的學生錄制了近300條音頻文件,再通過SpecAugment(自動語音識別數(shù)據(jù)擴充)的方法進行數(shù)據(jù)集增強,得到1520個訓練數(shù)據(jù)和520個測試數(shù)據(jù)。
有了音頻文件后,再通過librosa、numpy和Pillow庫以STFT的方法,將這些音頻文件轉(zhuǎn)換為一張張圖片,然后按照ImageNet的格式做成數(shù)據(jù)集。核心代碼可參考圖2所示的代碼。
圖2
目前,MMEdu已經(jīng)在圖像分類方面內(nèi)置了5種SOTA(state-ofthe-art,指最先進的、最新技術(shù)水平的)模型。經(jīng)過再三比較,筆者選擇Resnet18作為最終模型,原因如下:
高精度。ResNet18以其在圖像分類任務上的高精度而著稱,對于時頻譜圖的分類,ResNet18的表現(xiàn)超過了其他模型。
模型大小合適。與其他卷積神經(jīng)網(wǎng)絡CNN相比,ResNet18模型適中,推理速度較快,這使得它的訓練和部署效率更高。
可遷移學習。由于ResNet18已經(jīng)在大型圖像數(shù)據(jù)集上進行了訓練,因此可以將其用作遷移學習的起點。如果想提高其在特定任務上的性能,僅僅需要在自己的數(shù)據(jù)集上對其進行微調(diào)。
完成一個AI模型的訓練需要經(jīng)歷多個步驟,收集并整理好數(shù)據(jù)集是基礎,接下來的工作是搭建ResNet18模型,再使用官方的預訓練權(quán)重文件作為遷移學習的“范本”。至于代碼倒很簡單,MMEdu的模型訓練代碼是公式化的,僅需幾行即可完成對預訓練ResNet18網(wǎng)絡的遷移學習。參考代碼如圖3所示。
圖3
需要說明的是,執(zhí)行上述的代碼需要下載ResNet18模型的預訓練權(quán)重文件。該文件MMEdu一鍵安裝包中已經(jīng)內(nèi)置。另外,因為是基于預訓練模型的遷移學習,只要5輪左右就能得到不錯的識別效果,使用OpenInnoLab的GPU容器,訓練一輪大概需要30多秒,也就是說數(shù)分鐘內(nèi)即可訓練好這個模型。
在完成訓練后,借助MMEdu的“convert”方法就能導出ONNX格式模型,代碼(僅僅一行)如下:
行空板自帶麥克風和觸控屏,只要加一個小音箱就可以做智能音箱的項目,當然也可以用行空板的藍牙功能接任意一個藍牙音箱。筆者希望這個智能音箱不用聯(lián)網(wǎng)也能識別語音,也就是說從音頻采集到模型推理的一系列工作都是在行空板上完成的。因為身邊的行空板還不是最新固件,需要安裝一些額外的Python庫,如librosa、pyaudio和onnxruntime等。前兩個針對音頻信號處理,最后一個用于運行ONNX模型。
筆者最終的設計是用行空板完成一個用溫州話短語控制智能家居的助手項目,其工作流程圖如圖4所示。
圖4 智能方言小助手工作流程
當然,這個項目還需要增加“錄音”“界面設計”之類的代碼。最終代碼在行空板上的運行結(jié)果如圖5所示。
圖5 實物運行
鑒于在中小學很少看到語音識別方面的AI科創(chuàng)研究,筆者設計了這個智能音箱的項目。本項目的最大啟示在于,語音分類的問題通過特定的特征處理后,也能夠轉(zhuǎn)換為圖像分類問題,只要擁有相應的語音數(shù)據(jù),就能通過卷積神經(jīng)網(wǎng)絡解決各種模式識別方面的問題。還有AI模型訓練和硬件是沒有直接關(guān)聯(lián)的,如這個項目訓練的模型,除了行空板外,還可以直接部署在沖鋒舟、虛谷號、樹莓派和香橙派等硬件上。