唇語識別系統(tǒng)使用機器視覺技術(shù),從圖像中連續(xù)識別出人臉,判斷其中正在說話的人,提取此人連續(xù)的口型變化特征,隨即將連續(xù)變化的特征輸入到唇語識別模型中,識別出講話人口型對應(yīng)的發(fā)音,隨后根據(jù)識別出的發(fā)音,計算出可能性最大的自然語言語句。
唇語識別并非最近才出現(xiàn)的技術(shù),早在 2003 年,Intel 就開發(fā)了唇語識別軟件 Audio Visual Speech Recognition(AVSR),開發(fā)者得以能夠研發(fā)可以進行唇語識別的計算機;2016 年 Google DeepMind 的唇語識別技術(shù)就已經(jīng)可以支持 17500 個詞,新聞測試集識別準確率達到了 50% 以上。
大家一定很好奇唇語識別系統(tǒng)要怎么實現(xiàn)。Amirsina Torfi 等人實現(xiàn)了使用 3D 卷積神經(jīng)網(wǎng)絡(luò)的交叉視聽識別技術(shù)進行唇語識別,并將代碼托管到 GitHub 上開源:
傳送門:
https://github.com/astorfi/lip-reading-deeplearning
接下來就為大家介紹如何使用 3D 卷積神經(jīng)網(wǎng)絡(luò)的交叉視聽識別技術(shù)進行唇語識別,完整的論文可參閱:
https://ieeexplore.ieee.org/document/8063416
下面是進行唇語識別的簡單實現(xiàn)方法。
用戶需要按照格式準備輸入數(shù)據(jù)。該項目使用耦合 3D 卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)了視聽匹配(audio-visual matching)。唇語識別就是這個項目的具體應(yīng)用之一。
概況
當(dāng)音頻損壞時,視聽語音識別(Audio-visual recognition,AVR)被認為是完成語音識別任務(wù)的另一種解決方案,同時,它也是一種在多人場景中用于驗證講話人的視覺識別方法。AVR 系統(tǒng)的方法是利用從某種模態(tài)中提取的信息,通過填補缺失的信息來提高另一種模態(tài)的識別能力。
▌問題與方法
這項工作的關(guān)鍵問題是找出音頻和視頻流之間的對應(yīng)關(guān)系。我們提出了一種耦合 3D 卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),該架構(gòu)可以將兩種模式映射到一個表示空間中,并使用學(xué)到的多模態(tài)特征來判斷視聽流間的對應(yīng)關(guān)系。
▌如何利用 3D 卷積神經(jīng)網(wǎng)絡(luò)
我們提出的該架構(gòu)將結(jié)合時態(tài)信息和空間信息,來有效地發(fā)現(xiàn)不同模態(tài)的時態(tài)信息之間的相關(guān)性。我們的方法使用相對較小的網(wǎng)絡(luò)架構(gòu)和更小的數(shù)據(jù)集,并在性能上優(yōu)于現(xiàn)有的視聽匹配方法,而現(xiàn)有方法主要使用 CNN來表示特征。我們還證明了有效的對選擇(pair selection)方法可以顯著提高性能。
代碼實現(xiàn)
輸入管道須由用戶提供。其余部分的實現(xiàn)包含基于話語的特征提取的數(shù)據(jù)集。
▌唇語識別
就唇語識別來講,必須將視頻作為輸入。首先,使用 cd 命令進入相應(yīng)的目錄:
運行專用的python file如下:
運行上述腳本,通過保存每個幀的嘴部區(qū)域來提取唇部動作,并在畫框圈出嘴部區(qū)域來創(chuàng)建新的視頻,以便進行更好的可視化。
所需的arguments由以下 Python 腳本定義,VisualizeLip.py文件中已定義該腳本:
一些已定義的參數(shù)有其默認值,它們并不需要進一步的操作。
▌處理
視覺部分,視頻通過后期處理,使其幀率相等,均為 30f/s。然后,使用 dlib 庫跟蹤視頻中的人臉和提取嘴部區(qū)域。最后,所有嘴部區(qū)域都調(diào)整為相同的大小,并拼接起來形成輸入特征數(shù)據(jù)集。數(shù)據(jù)集并不包含任何音頻文件。使用 FFmpeg 框架從視頻中提取音頻文件。數(shù)據(jù)處理管道如下圖所示:
▌輸入管道
我們所提出的架構(gòu)使用兩個不相同的卷積網(wǎng)絡(luò)(ConvNet),輸入是一對語音和視頻流。網(wǎng)絡(luò)輸入是一對特征,表示從 0.3 秒的視頻中提取的唇部動作和語音特征。主要任務(wù)是確定音頻流是否與唇部運動視頻在所需的流持續(xù)時間內(nèi)相對應(yīng)。在接下來的兩個小節(jié)中,我們將分別講解語音和視覺流的輸入。
語音網(wǎng)絡(luò)(Speech Net)
在時間軸上,時間特征是非重疊的 20ms 窗口,用來生成局部的頻譜特征。語音特征輸入以圖像數(shù)據(jù)立方體的形式表示,對應(yīng)于頻譜圖,以及 MFEC 特征的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)。這三個通道對應(yīng)于圖像深度。從一個 0.3 秒的視頻剪輯中,可以導(dǎo)出 15 個時態(tài)特征集(每個都形成 40 個 MFEC 特征),這些特征集形成了語音特征立方體。一個音頻流的輸入特征維數(shù)為 15x40x3。如下圖所示:
語音特征使用 SpeechPy 包進行提取。
要了解輸入管道是如何工作的,請參閱:
code/speech_input/input_feature.py
視覺網(wǎng)絡(luò)(Visual Net)
在這項工作中使用的每個視頻剪輯的幀率是 30 f/s。因此,9 個連續(xù)的圖像幀形成 0.3 秒的視頻流。網(wǎng)絡(luò)的視頻流的輸入是大小為 9x60x100 的立方體,其中 9 是表示時態(tài)信息的幀數(shù)。每個通道是嘴部區(qū)域的 60x100 灰度圖像。
架構(gòu)
該架構(gòu)是一個耦合 3D 卷積神經(jīng)網(wǎng)絡(luò),其中必須訓(xùn)練具有不同權(quán)重的兩個網(wǎng)絡(luò)。在視覺網(wǎng)絡(luò)中,唇部運動的空間信息和時態(tài)信息相結(jié)合,以此來利用時間相關(guān)性。在音頻網(wǎng)絡(luò)中,提取的能量特征作為空間維度,堆疊的音頻幀構(gòu)成了時間維度。在我們提出的 3D 卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)中,卷積運算是在連續(xù)的時間幀上對兩個視聽流執(zhí)行的。
訓(xùn)練 / 評估
首先,克隆存儲庫。然后,用 cd 命令進入專用目錄:
最后,必須執(zhí)行train.py文件:
對于評估階段,必須執(zhí)行類似腳本:
▌運行結(jié)果
下面的結(jié)果表明了該方法對收斂準確度和收斂速度的影響。
最好的結(jié)果,也就是最右邊的結(jié)果,屬于我們提出的方法。
所提出的在線對選擇方法的效果如上圖所示。
分析到這,希望大家可以到 Github 上找到源碼,開始練起!附上作者給的代碼演示。
DEMO 演示地址
1.Training/Evaluation :
https://asciinema.org/a/kXIDzZt1UzRioL1gDPzOy9VkZ
2.Lip Tracking:
https://asciinema.org/a/RiZtscEJscrjLUIhZKkoG3GVm
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103655 -
機器視覺
+關(guān)注
關(guān)注
163文章
4597瀏覽量
122918 -
識別技術(shù)
+關(guān)注
關(guān)注
0文章
211瀏覽量
20032
原文標題:唇語識別技術(shù)的開源教程,聽不見聲音我也能知道你說什么!
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于3D數(shù)據(jù)卷積神經(jīng)網(wǎng)絡(luò)的物體識別

使用Python卷積神經(jīng)網(wǎng)絡(luò)(CNN)進行圖像識別的基本步驟
基于毫米波雷達的手勢識別神經(jīng)網(wǎng)絡(luò)
【uFun試用申請】基于cortex-m系列核和卷積神經(jīng)網(wǎng)絡(luò)算法的圖像識別
可分離卷積神經(jīng)網(wǎng)絡(luò)在 Cortex-M 處理器上實現(xiàn)關(guān)鍵詞識別
卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用
卷積神經(jīng)網(wǎng)絡(luò)簡介:什么是機器學(xué)習(xí)?
3D卷積神經(jīng)網(wǎng)絡(luò)的手勢識別

評論