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

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

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

寫以前,先交代幾件事情,github

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

1.關於 票據ocr預處理算法 性能優化

相關算法細節已經開源。網絡

項目地址:oracle

https://github.com/cpuimage/OcrPreprocessing性能

各位能夠根據CPUImageLocalColorFilter算法思路,對應項目需求進行算法改寫定製算法實現。學習

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

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

因爲思路比較簡單,這裏就不展開,

須要的閱讀相關代碼,理解一下。

 

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

項目地址:

基礎:

https://github.com/cpuimage/shazam

進階:

https://github.com/cpuimage/AudioFingerprinter

音頻指紋最重要的是時序信息,改進的思路和方向有不少,

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

對音頻指紋,哼唱搜歌感興趣的,能夠參閱實現。

 

3.關於音頻採樣算法

相關項目:

簡易實現,便攜可採用:

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

https://github.com/cpuimage/resampler

若有更高要求的,能夠採用:

https://github.com/cpuimage/speex_resampler

https://github.com/cpuimage/WebRTC_Resampler

https://github.com/cpuimage/FFTResampler 

 

4.關於音頻降噪算法

降噪算法可參閱項目:

https://github.com/cpuimage/AudioDenoise

https://github.com/cpuimage/WebRTC_NS

https://github.com/cpuimage/rnnoise

因爲有不少人詢問rnnoise的訓練方法和數據集。

算法實現細節見:

https://people.xiph.org/~jm/demo/rnnoise/

關於數據集問題,原做者已經開放下載了。

下載地址:

https://people.xiph.org/~jm/demo/rnnoise/rnnoise_contributions.tar.gz

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

參閱項目:

https://github.com/GregorR/rnnoise-nu

https://github.com/GregorR/rnnoise-models

GregorR已經作了不少工做了,因此大多數問題,你們能夠考慮聯繫他。

 

5.便攜fft實現stb_fft開源,單頭文件實現。

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

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

項目地址:

https://github.com/cpuimage/stb_fft

 

差很少就這麼多,

以上,如果有不理解的地方,能夠給我發郵件或QQ聯繫。

 

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

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

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

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

可是,有了干擾以後的問題就複雜多了。

咱們先考慮一下,聲音信息可能受到什麼因素的干擾。

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

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

2.說話者生物干擾音素

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

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

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

 

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

不論是asr識別仍是聲紋識別,仍是其餘音頻方向的算法處理,毫無疑問,困難重重。

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

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

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

能夠隨時調參優化算法,適配不一樣的狀況。

 

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

這裏要說一下,爲何不用深度學習的方法,

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

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

而後數據清洗,神經網絡選型設計等等。

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

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

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

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

也許更多的是基於數據的文化規律。

爲何這麼說呢?

其實只要思考一個問題就能夠了。

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

我我的認爲,並無。

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

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

有多是在必定數據長度下的文化特徵。

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

 

例如:

臥槽  -> 屌絲

靚女 -> 廣東人

老司機 -> 你懂的

 

只是舉個例子。

也就是說,若是採用深度學習去作聲紋識別,

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

固然這裏只是經過性別識別這個維度去思考這個問題。

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

在我看來,asr 經過語音轉爲文字,是的的確確在作信號轉譯。

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

固然音頻指紋,哼唱搜索是另外一個問題。

若是說 asr能夠根聽說話的內容來進行預測評估,天然是沒問題的,

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

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

這種問題,放到圖像領域同樣存在,

例如人臉識別,沒有嚴格的生物信息,

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

或者說根據某我的的聲音來判斷真僞,也多是錄音呢?

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

在我看來,深度學習用來作一些帶有長度大小信息的數據的特徵工程是能夠的,

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

說到這裏,只能說,在必定的角度上做爲輔助參考是能夠的,

可是徹底替代人類去作一些事情,爲時過早。

除非,生物信息大躍進,更多生物信息數據維度參與進來。

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

根據這個思考,

不少項目或者說工程化邏輯,

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

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

 

因爲音頻性別識別目前還不能達到我本身預設的理想狀態,暫時也沒有開源計劃。

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

但有挑戰,纔有進步。

圖像領域,兩年前作完一鍵修圖以後,就沒有花心思繼續研究了。

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

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

近期也看到很多人在研究諸如去霧,水下加強,去模糊之類的。

很有感慨,不過圖像方面,除非有靈感上腦,不然,暫時不去深刻了。

固然,我會慢慢把以前作的一些圖像算法,整理開源。

獨樂樂不如衆樂樂。

好基友 imageshop 已經作了不少工做了,

圖像方面的算法,移步他的博客,你會有收穫的。

回頭得找個時間聚聚。

也許,在將來的一小段時間裏,

俺還會在音頻,視頻,圖像以及其餘算法延伸方向作一些研究或者具備挑戰性的工做。

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

特別是音頻 天然語言 方向,須要一些有志之士一塊兒努力。

 

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

 

之於圖像,必需要啃下:

模糊,卷積,顏色空間

 

之於音頻,必需要啃下:

傅里葉變換,插值採樣

 

算法性能優化可參閱:

計算機體系機構

http://www.ituring.com.cn/book/888

數值計算指南 

https://docs.oracle.com/cd/E57201_01/html/E57330/index.html

https://github.com/ARM-software/CMSIS_5

cpu指令集優化

https://www.agner.org/optimize/

 

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

 

最後簡單作個本人簡介:

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

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

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

 

不少事情,在於你想不想作,其餘的都是藉口。

想到就去作,與之共勉。

 

如有其餘相關問題或者需求也能夠郵件聯繫俺探討。

郵箱地址是: gaozhihan@vip.qq.com

相關文章
相關標籤/搜索