基于TensorFlow Lite的人声识别在端上的实现
通過TensorFlow Lite,移動終端、IoT設備可以在端上實現聲音識別,這可以應用在安防、醫療監護等領域。來自阿里巴巴閑魚技術互動組仝輝和上葉通過TensorFlow Lite實現了一套完整的提取聲音特征,模型訓練和生成端上模型方案。
轉載聲明:本文轉自公眾號【閑魚技術】
摘要
現有的人聲識別絕大部分在服務端實現,這會帶來如下兩方面的問題:
當網絡較差的情況下會造成較大的延時,帶來較差的用戶體驗。
當訪問量較大的情況下,會大量占用服務端資源。
為解決以上兩個問題,我們選擇在客戶端上實現人聲識別功能。本文使用機器學習的方法識別人聲。采用的框架是谷歌的TensorFlow Lite框架,該框架跟它的名字一樣具有小巧的特點。在保證精度的同時,框架的大小只有300KB左右,且經過壓縮后產生的模型是TensorFlow模型的四分之一[1]。因此,TensorFlow ?Lite框架比較適合在客戶端上使用。
為了提高人聲的識別率,需要提取音頻特征作為機器學習框架的輸入樣本。本文使用的特征提取算法是基于人耳聽覺機理的梅爾倒頻譜算法[2]。
由于在客戶端上使用人聲識別比較耗時,在工程上需要做很多優化,優化方面如下:
指令集加速:引入ARM指令集,做多指令集優化,加速運算。
多線程加速:對于耗時的運算采用多線程并發處理。
模型加速:選用支持NEON優化的模型,并預加載模型減少預處理時間。
算法加速:I) 降低音頻采樣率。II) 選取人聲頻段(20Hz~20KHz),剔除非人聲頻段。 III) 合理分窗和切片,防止過度計算。IV) 靜音檢測,減少不必要的時間片段。
1.概述?
1.1 人聲識別流程
人聲識別分為訓練和預測兩個部分。訓練指的是生成預測模型,預測是利用模型產生預測結果。
首先介紹下訓練的過程,分為以下三個部分:
基于梅爾倒頻譜算法,提取聲音特征,并將其轉換成頻譜圖片。
將人聲頻譜作為正樣本,動物聲音和雜音等非人聲作為負樣本,交由神經網絡模型訓練。
基于訓練產生的文件,生成端上可運行的預測模型。
簡而言之,人聲識別訓練的流程分為三個部分,提取聲音特征,模型訓練和生成端上模型。最后,是人聲識別的部分:先提取聲音特征,然后加載訓練模型即可獲得預測結果。
1.2 人工智能框架
2017年11月,谷歌曾在 I/O 大會上宣布推出 TensorFlow Lite,這是一款 TensorFlow用于移動設備和嵌入式設備的輕量級解決方案。可以在多個平臺上運行,從機架式服務器到小型 IoT 設備。但是隨著近年來機器學習模型的廣泛使用,出現了在移動和嵌入式設備上部署它們的需求。而 TensorFlow Lite 允許設備端的機器學習模型的低延遲推斷。
本文基于的TensorFlow Lite是谷歌研發的人工智能學習系統,其命名來源于本身的運行原理。Tensor(張量)意味著N維數組,Flow(流)意味著基于數據流圖的計算,TensorFlow為張量從流圖的一端流動到另一端計算過程。TensorFlow是將復雜的數據結構傳輸至人工智能神經網中進行分析和處理過程的系統。
下圖展示了TensorFlow Lite的架構設計[1]:
圖1.1?TensorFlow Lite架構圖
2.梅爾倒頻譜算法
2.1 概述
本章中聲音識別的算法--梅爾倒頻譜算法[2]分為如下幾步,將會再后續小節中詳細介紹。
輸入聲音文件,解析成原始的聲音數據(時域信號)。
通過短時傅里葉變換,加窗分幀將時域信號轉變為頻域信號。
通過梅爾頻譜變換,將頻率轉換成人耳能感知的線性關系。
通過梅爾倒譜分析,采用DCT變換將直流信號分量和正弦信號分量分離[3]。
提取聲音頻譜特征向量,將向量轉換成圖像。
加窗分幀是為了滿足語音在時域的短時平穩特性,梅爾頻譜變換是為了將人耳對頻率的感知度轉化為線性關系,倒譜分析的重點是理解傅里葉變換,任何信號都可以通過傅里葉變換而分解成一個直流分量和若干個正弦信號的和。
圖2.1 聲音的時域信號
圖2.1是聲音的時域信號,直觀上很難看出頻率變化規律。圖2.2是聲音的頻域信號,反映了能夠反映出聲音的音量和頻率等信息。圖2.3是經過梅爾倒頻譜的聲音特征,能夠提取聲音。
圖2.2 聲音的頻域信號
圖2.3 聲音的倒頻譜特征
?圖2.4 梅爾倒頻譜算法實現流程
2.2 短時傅里葉變換
聲音信號是一維的時域信號,直觀上很難看出頻率變化規律。如果通過傅里葉變換把它變到頻域上,雖然可以看出信號的頻率分布,但是丟失了時域信息,無法看出頻率分布隨時間的變化。為了解決這個問題,很多時頻分析手段應運而生。短時傅里葉,小波,Wigner分布等都是常用的時頻域分析方法。
圖2.5 FFT變換和STFT變換示意圖
通過傅里葉變換可以得到信號的頻譜。信號的頻譜的應用非常廣泛,信號的壓縮、降噪都可以基于頻譜。然而傅里葉變換有一個假設,那就是信號是平穩的,即信號的統計特性不隨時間變化。聲音信號就不是平穩信號,在很長的一段時間內,有很多信號會出現,然后立即消失。如果將這信號全部進行傅里葉變換,就不能反映聲音隨時間的變化。
本文采用的短時傅里葉變換(STFT)是最經典的時頻域分析方法。短時傅里葉變換(STFT)是和傅里葉變換(FT)相關的一種數學變換,用以確定時變信號其局部區域正弦波的頻率與相位。它的思想是:選擇一個時頻局部化的窗函數,假定分析窗函數h(t)在一個短時間間隔內是平穩的,使f(t)h(t)在不同的有限時間寬度內是平穩信號,從而計算出各個不同時刻的功率譜。短時傅里葉變換使用一個固定的窗函數,通常使用的窗函數有漢寧窗、海明窗、Blackman-Haris窗等。本文中采用了海明窗,海明窗是一種余弦窗,能夠很好地反映某一時刻能量隨時間的衰減關系。
因此,本文的STFT公式在原先傅里葉變換公式
公式的基礎上加了窗函數,因此STFT公式變換為?
其中,
為海明窗函數。
圖2.6 基于海明窗的STFT變換
2.3 梅爾頻譜
聲譜圖往往是很大的一張圖,為了得到合適大小的聲音特征,往往把它通過梅爾標度濾波器組,變換為梅爾頻譜。什么是梅爾濾波器組呢?這里要從梅爾標度說起。
梅爾標度,由Stevens,Volkmann和Newman在1937年命名。我們知道,頻率的單位是赫茲(Hz),人耳能聽到的頻率范圍是20-20000Hz,但人耳對Hz這種標度單位并不是線性感知關系。例如如果我們適應了1000Hz的音調,如果把音調頻率提高到2000Hz,我們的耳朵只能覺察到頻率提高了一點點,根本察覺不到頻率提高了一倍。如果將普通的頻率標度轉化為梅爾頻率標度,映射關系如下式所示:
經過上述公式,則人耳對頻率的感知度就成了線性關系[4]。也就是說,在梅爾標度下,如果兩段語音的梅爾頻率相差兩倍,則人耳可以感知到的音調大概也相差兩倍。
讓我們觀察一下從Hz到梅爾頻率(Mel)的映射圖,由于它們是Log的關系,當頻率較小時,梅爾頻率隨Hz變化較快;當頻率很大時,梅爾頻率的上升很緩慢,曲線的斜率很小。這說明了人耳對低頻音調的感知較靈敏,在高頻時人耳是很遲鈍的,梅爾標度濾波器組啟發于此。?
圖2.7 頻率轉梅爾頻率示意圖
如下圖所示,12個三角濾波器組成濾波器組,低頻處濾波器密集,門限值大,高頻處濾波器稀疏,門限值低。恰好對應了頻率越高人耳越遲鈍這一客觀規律。上圖所示的濾波器形式叫做等面積梅爾濾波器(Mel-filter bank with same bank area),在人聲領域(語音識別,說話人辨認)等領域應用廣泛。
圖2.8 梅爾濾波器組示意圖
2.4 梅爾倒頻譜
基于2.3的梅爾對數譜,采用DCT變換將直流信號分量和正弦信號分量分離,最后得到的結果稱為梅爾倒頻譜。
其中
由于梅爾倒頻譜輸出的是向量,還不能用圖片顯示,需要將其轉換成圖像矩陣。需要將輸出向量的范圍 線性變換到圖像的范圍?
圖2.9 繪圖顏色標度示意圖
2.5 算法處理速度優化
由于算法需要在客戶端上實現,因此需要對速度做一定的改進[5]。優化方面如下:
指令集加速:由于算法有大量的加法和乘法矩陣運算,因此引入arm指令集,做多指令集優化,加速運算。速度可以提高4~8倍[6]。
算法加速:I) 選取人聲頻段(20Hz~20KHz),并剔除非人聲頻段減少冗余計算。II) 降低音頻采樣率,由于人耳對過高的采樣率不敏感,因此降低采樣率?可以減少不必要的數據計算。III) 合理分窗和切片,防止過度計算。IV) 靜音檢測,減少不必要的時間片段。
采樣頻率加速:如果音頻的采樣頻率過高,選擇下采樣,處理的頻率最高設定為32KHz。
多線程加速:將音頻拆分為多個片段,采用多線程并行處理。并根據機器的能力配置線程數,默認為4個線程。
圖2.10 算法工程端選取的參數
3.人聲識別模型
3.1模型選擇
卷積神經網絡(Convolutional Neural Networks-簡稱CNN)是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對于大型圖像處理有出色表現。
20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經元時發現其獨特的網絡結構可以有效地降低反饋神經網絡的復雜性,繼而提出了卷積神經網絡。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由于該網絡避免了對圖像的復雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。 K.Fukushima在1980年提出的新識別機是卷積神經網絡的第一個實現網絡。隨后,更多的科研工作者對該網絡進行了改進。其中,具有代表性的研究成果是Alexander和Taylor提出的“改進認知機”,該方法綜合了各種改進方法的優點并避免了耗時的誤差反向傳播。
一般地,CNN的基本結構包括兩層,其一為特征提取層,每個神經元的輸入與前一層的局部接受域相連,并提取該局部的特征。一旦該局部特征被提取后,它與其它特征間的位置關系也隨之確定下來;其二是特征映射層,網絡的每個計算層由多個特征映射組成,每個特征映射是一個平面,平面上所有神經元的權值相等。特征映射結構采用影響函數核小的sigmoid, relu等函數作為卷積網絡的激活函數,使得特征映射具有位移不變性。此外,由于一個映射面上的神經元共享權值,因而減少了網絡自由參數的個數。卷積神經網絡中的每一個卷積層都緊跟著一個用來求局部平均與二次提取的計算層,這種特有的兩次特征提取結構減小了特征分辨率。
CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測層通過訓練數據進行學習,所以在使用CNN時,避免了顯式的特征抽取,而隱式地從訓練數據中進行學習;再者由于同一特征映射面上的神經元權值相同,所以網絡可以并行學習,這也是卷積網絡相對于神經元彼此相連網絡的一大優勢。卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有著獨特的優越性,其布局更接近于實際的生物神經網絡,權值共享降低了網絡的復雜性,特別是多維輸入向量的圖像可以直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度。
圖3.1 Inception-v3模型
本文選取了精度較高的Inception-v3模型作為人聲識別的模型,v3一個最重要的改進是分解,將7x7卷積網絡分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算,使得網絡深度進一步增加,增加了網絡的非線性,還有值得注意的地方是網絡輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模塊。
使用TensorFlow?Session模塊可以實現代碼層面的訓練和預測功能,具體使用方法詳見TensorFlow 官網[7]。
圖3.2 TensorFlow Session使用示意圖
3.2模型樣本
有監督的機器學習中,一般需要將樣本分成獨立的三部分訓練集(train set),驗證集(validation set)和測試集(test set)。其中訓練集用來估計模型,驗證集用來確定網絡結構或者控制模型復雜程度的參數,而測試集則檢驗最終選擇最優的模型的性能如何。
具體定義如下:
訓練集:學習樣本數據集,通過匹配一些參數來建立一個分類器。建立一種分類的方式,主要是用來訓練模型的。
驗證集:對學習出來的模型,調整分類器的參數,如在神經網絡中選擇隱藏單元數。驗證集還用來確定網絡結構或者控制模型復雜程度的參數,用來防止模型過擬合現象。
測試集:主要是測試訓練好的模型的分辨能力(識別率等)
根據第二章的梅爾倒頻譜算法可以得到聲音識別的樣本文件,將人聲頻譜作為正樣本,動物聲音和雜音等非人聲作為負樣本,交由Inception-v3模型進行訓練。
本文采用了TensorFlow作為訓練框架,選取人聲和非人聲各5000個樣本作為測試集,1000個樣本作為驗證集。
3.3 模型訓練
樣本準備完成后,即可使用Inception-v3模型訓練。當訓練模型收斂時,即可生成端上可使用的pb模型。模型選取時選擇編譯armeabi-v7a或者以上版本即可默認打開NEON優化,即打開USE_NEON的宏,能夠達到指令集加速的效果。例如CNN網絡一半以上的運算都在卷積(conv)運算,使用指令集優化可以至少加速4倍。
圖3.3 卷積處理函數
然后經過TensorFlow提供的toco工具生成lite模型,該模型可以直接在客戶端上使用TensorFlow?Lite框架調用。
圖3.4 toco工具調用接口
3.4 模型預測
對聲音文件使用梅爾倒頻譜算法提取特征,并生成預測圖片。之后使用訓練產生的lite模型即可預測,預測結果示意圖如下:
圖3.5 模型預測結果
參考文獻:
[1] https://www.tensorflow.org/mobile/tflite
[2] 基于MFCC與IMFCC的說話人識別研究[D]. 劉麗巖. 哈爾濱工程大學 . 2008
[3] 一種基于MFCC和LPCC的文本相關說話人識別方法[J]. 于明,袁玉倩,董浩,王哲. 計算機應用. 2006(04)
[4] Text dependent Speaker Identification in Noisy Enviroment[C]. Kumar Pawan,Jakhanwal Nitika,
Chandra Mahesh. International Conference on Devices and Communications . 2011
[5] https://github.com/weedwind/MFCC
[6] https://baike.baidu.com/item/ARM指令集/907786?fr=aladdin
[7] https://www.tensorflow.org/api_docs/python/tf/Session
WebRTCon 2018 ?上海,期待與你相遇
繼2017年第一屆LiveVideoStackCon音視頻技術大會之后,LiveVideoStack又一次出發——WebRTCon 2018,將于5月在上海舉行,這是一次對過去幾年WebRTC技術實踐與應用落地的總結。
WebRTCon 2018設立了主題演講,WebRTC與前端,行業應用專場,測試監控和服務保障,娛樂多媒體開發應用實踐,WebRTC深度開發,解決方案專場,WebRTC服務端開發,新技術跨界,WebRTC與Codec等多個專場。邀請30余位全球領先的WebRTC技術專家,為參會者帶來全球同步的技術實踐與趨勢解讀。
總結
以上是生活随笔為你收集整理的基于TensorFlow Lite的人声识别在端上的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【重磅】中国AVS2标准被国际超高清联盟
- 下一篇: YouTube高效传输策略:节省14%带