1. 程式人生 > >音訊識別演算法思考與階段性小結

音訊識別演算法思考與階段性小結

這篇文章醞釀了很久,一直沒抽時間寫。

在中秋,國慶來臨之時,落筆。

寫之前,先交代幾件事情,

主要是 回覆 給我發郵件以及QQ上詢問的朋友們的一些疑問和需求,這裡稍作回覆一下。

1.關於 票據ocr預處理演算法 

相關演算法細節已經開源。

專案地址:

各位可以根據CPUImageLocalColorFilter演算法思路,對應專案需求進行演算法改寫定製演算法實現。

主要是基於顏色過濾的思路,只要確認具體需求,

提供的演算法,可以解決絕大多數關於顏色疊加,干擾移除的問題。

由於思路比較簡單,這裡就不展開,

需要的閱讀相關程式碼,理解一下。

2.關於音訊指紋演算法實現,已經開源。

專案地址:

基礎:

進階:

音訊指紋最重要的是時序資訊,改進的思路和方向有很多,

例如提取更加魯棒性的特徵或者增加特徵維度等。

對音訊指紋,哼唱搜歌感興趣的,可以參閱實現。

3.關於音訊取樣演算法

相關專案:

簡易實現,便攜可採用:

目前有兩種簡單插值實現,平時基本夠用。

如有更高要求的,可以採用:

如果不考慮效能問題,有特殊嗜好的,可以採用傅立葉變換的實現:

4.關於音訊降噪演算法

降噪演算法可參閱專案:

由於有很多人詢問rnnoise的訓練方法和資料集。

演算法實現細節見:

關於資料集問題,原作者已經開放下載了。

下載地址:

關於rnnoise取樣率適配和訓練問題:

參閱專案:

GregorR已經做了很多工作了,所以大多數問題,大家可以考慮聯絡他。

5.便攜fft實現stb_fft開源,單標頭檔案實現。

這個開源專案只是方便一些思路的驗證和平時的測試使用。

不是效能最優實現,最優實現版本暫不開源。

專案地址:

差不多就這麼多,

以上,若是有不理解的地方,可以給我發郵件或QQ聯絡。

回到主題上,本人最近一直在研究音訊識別的一個小分支——性別判斷。

簡而言之就是通過聲音分析,判斷 說話者的性別。

聽起來好像很簡單,但是做起來,才知道,路上好多坑。

總的來說,想要精準識別聲音的性別,如果沒有干擾是很簡單的事情,

但是,有了干擾之後的問題就複雜多了。

我們先考慮一下,聲音資訊可能受到什麼因素的干擾。

1.外界干擾,主要是噪聲

例如:多人交談(等非主體的聲音),軟硬裝置(網路,電壓等抖動),背景環境(室內室外)

2.說話者生物干擾音素

例如: 語速,音量,音高,當然還有生物問題 既發聲器官的狀態(年齡,感冒發炎等)

3.文化因素,發音風格,飲食環境下的聲喉狀態

4. 以上1+2+3 等多重情況疊加下的混合干擾

從以上提及的各個音素來看,理想很豐滿,現實很骨感。

不管是asr識別還是聲紋識別,還是其他音訊方向的演算法處理,毫無疑問,困難重重。

花了近6個月,踩了無數個小坑之後,在不處理噪聲的干擾情況下,

對中國人的普通話,音訊性別識別終於達到85%的準確率。

由於是先驗演算法,純c不採用任何第三方庫的乾淨演算法實現,

可以隨時調參優化演算法,適配不同的情況。

沒有采用深度學習的方案去做特徵工程。

這裡要說一下,為什麼不用深度學習的方法,

以及使用深度學習方法的一些思考。

首先,深度學習的資料集處理,就是一項體力活,

然後資料清洗,神經網路選型設計等等。

像我這樣的懶人,真的不愛做體力活,我更喜歡思考。

在我看來,深度學習基於資料的特徵工程,

最終會落到一個共同的話題,文化大一統。

也就是說,最後訓練產出的有效特徵,

也許更多的是基於資料的文化規律。

為什麼這麼說呢?

其實只要思考一個問題就可以了。

人的性別跟人說的話的內容多少長短,有沒有直接關聯。

我個人認為,並沒有。

而深度學習大多數根據人說的話的內容(資料集),進行資料特徵工程,

假設它有效,那它最終提取的有效特徵是什麼?

有可能是在一定資料長度下的文化特徵。

通俗地講,就是一個地區的一些人的文化風格或生活方式。

例如:

臥槽  -> 屌絲

靚女 -> 廣東人

老司機 -> 你懂的

只是舉個例子。

也就是說,如果採用深度學習去做聲紋識別,

其實更像是定義 男士說話的內容風格 或 女士說話的內容風格。

當然這裡只是通過性別識別這個維度去思考這個問題。

若把這個問題擴充套件到 asr 或者 聲紋識別,也會有一定的關聯。

在我看來,asr 通過語音轉為文字,是的的確確在做訊號轉譯。

但是 聲紋識別就不應該是這個理。

當然音訊指紋,哼唱搜尋是另一個問題。

如果說 asr可以根據說話的內容來進行預測評估,自然是沒問題的,

但是性別或者說聲紋,就不能了。

你不能根據某個人說的某句話很像某個人的風格就說,他是某人吧。

這種問題,放到影象領域一樣存在,

例如人臉識別,沒有嚴格的生物資訊,

怎麼區分雙胞胎或者其實目標的是活體非錄影。

或者說根據某個人的聲音來判斷真偽,也可能是錄音呢?

從邏輯上來說,這是不科學的,也是不合理的。

在我看來,深度學習用來做一些帶有長度大小資訊的資料的特徵工程是可以的,

但是如果做一些文化規律的工程或者工作,就差強人意了。

說到這裡,只能說,在一定的角度上作為輔助參考是可以的,

但是完全替代人類去做一些事情,為時過早。

除非,生物資訊大躍進,更多生物資訊資料維度參與進來。

一句話總結就是,能回答像不像,但不能確認是不是。

根據這個思考,

很多專案或者說工程化邏輯,

並不需要確認是不是,而只需要關注什麼條件下觸發異常反饋,

而後人工跟進,例如質檢,自(fu)動(zhu)駕駛等。

由於音訊性別識別目前還不能達到我自己預設的理想狀態,暫時也沒有開源計劃。

個人目前的下一個研究方向,有可能是音訊降噪這種叫人頭大,擾人清夢的東西。

但有挑戰,才有進步。

影象領域,兩年前做完一鍵修圖之後,就沒有花心思繼續研究了。

這個一鍵修圖演算法,也一直沒抽時間去整理,

等哪天有時間再整理出來,釋放demo給大家玩玩。

近期也看到不少人在研究諸如去霧,水下增強,去模糊之類的。

頗有感慨,不過影象方面,除非有靈感上腦,否則,暫時不去深入了。

當然,我會慢慢把之前做的一些影象演算法,整理開源。

獨樂樂不如眾樂樂。

影象方面的演算法,移步他的部落格,你會有收穫的。

回頭得找個時間聚聚。

也許,在未來的一小段時間裡,

俺還會在音訊,視訊,影象以及其他演算法延伸方向做一些研究或者具有挑戰性的工作。

國內的技術創新,確實比較落後,

特別是音訊 自然語言 方向,需要一些有志之士一起努力。

最後為新人做點科普工作。

之於影象,必須要啃下:

模糊,卷積,顏色空間

之於音訊,必須要啃下:

傅立葉變換,插值取樣

演算法效能優化可參閱:

計算機體系機構

數值計算指南 

cpu指令集優化

後面若有精力再做一些與演算法編碼優化相關的分享。

最後簡單做個本人簡介:

前金山員工,前金山毒霸研發。

前百度員工,前百度防毒研發。

89年生人,大專商務英語專業。

很多事情,在於你想不想做,其他的都是藉口。

想到就去做,與之共勉。

若有其他相關問題或者需求也可以郵件聯絡俺探討。

郵箱地址是: [email protected]