【Python】Deep Learning 深層学習でオーディオのノイズを除去する

Python
この記事は約4分で読めます。

オーディオの分離方法はいくつか方法がありますが、Deep Learningで分離する方法が最も精度が高いです。他に出来ることとしては、雑音の除去、特定人物の音声の抽出、楽器同士の音源分離、ボーカルと楽器音の分離が考えられます。
今回はDeep Learningを用いてオーディオファイルに含まれるノイズ部分を除去する方法を3ステップで解説します。

参考URL

How To Build a Deep Audio De-Noiser Using TensorFlow 2.0
Practical deep learning audio de-noising

ソースコード Thalles Santos Silva著

daitan-innovation/cnn-audio-denoiser
Tensorflow 2.0 implementation of the paper: A Fully Convolutional Neural Network for Speech Enhancement - daitan-innovation/cnn-audio-denoiser

Deep Learning(深層学習)

ディープラーニングまたは深層学習とは、多層の人工ニューラルネットワークによる機械学習手法である。深層学習登場以前、4層以上の深層ニューラルネットは、局所最適解や勾配消失などの技術的な問題によって十分学習させられず、性能も芳しくなかった。

ウィキペディア: ディープラーニング

ディープラーニングの理論としては、1979年に提唱されたネオコグニトロンなどニューラルネットワークの多層化の発想自体は存在していたが、コンピュータの処理能力が追いつかず、長年冬の時代が続いた。2006年ジェフリー・ヒントンらの研究がオートエンコーダの深層化に成功し再び注目されるようになった。

インターネットの普及でデータの収集が容易になり、コンピュータのハード性能の進歩、GPUの低価格化がディープラーニングの研究にいい影響を与えた。
2012年にはジェフリー・ヒントン率いるトロント大学のチームがエラー率10%改善したことにより、多くの研究者に驚きを与えた。

オーディオのノイズを除去する

データセット

UrbanSound8K
This dataset contains 8732 labeled sound excerpts (

オーディオファイルを学習するにはデータセットを利用します。
およそ30GBからなる2454ファイルのmp3から学習します。
780時間分のファイルになっているのでGPUが載っているPCが理想です。

データセットにノイズをかける

元となるオーディオファイルにノイズが含まれていない場合、
人為的にノイズをかけます。
ノイズを収録したファイルを読み込み、元ファイルと合成させて学習用のデータセットを作成します。

学習データからモデルを作成する

学習用のデータセットが完成したら、次はモデルの作成を行います。

DCNNとは

畳み込みニューラルネットワーク(CNN)をさらに深い層にしたDCNNを提案しています。
これはカスケード冗長畳み込みエンコーダ・デコーダネットワーク(CR-CED)と呼ばれるものです。

モデルについて

このモデルは、対称エンコーダー・デコーダーアーキテクチャに基づいています。
どちらのコンポーネントにも、Convolution、ReLU、Batch Normalizationの繰り返しブロックが含まれています。ネットワークには合計16ブロック、33kものパラメーターが追加されています。相当な計算量になるのでハイスペックなGPUがあると良いでしょう。

収束の加速と勾配の消失を減らす

また、一部のエンコーダー・デコーダーブロックの間にはスキップ接続があります。
ここでは、両方のコンポーネントの特徴ベクトルが加算によって結合されています。
これはResNetと非常によく似ており、収束を加速し、勾配の消失を減らしています。

CR-CEDとは

CR-CEDネットワークのもう1つの重要な特徴は、畳み込みが1次元でのみ行われることです。
具体的には、Shape(129 x 8)の入力スペクトルが与えられると、畳み込みは周波数軸(つまり、最初の軸)でのみ実行されます。
これにより、転送伝播中に周波数軸が一定に保たれます。

作成したモデルでノイズを除去する

モデルの作成が完了したら、ノイズを除去させたいファイル群に適用していきます。

オーディオファイルのノイズ除去は大変難しい課題ですが、許容できるレベルでの除去が出来ています。しかし完璧ではありません。

他に考えられる可能性は、GAN(Generative Adversarial Networks)敵対的生成ネットワークの存在です。
損失関数自体を学習することで信号から信号への変換の問題として捉えることが出来、適切は損失関数を学習して、入力ノイズのある信号をクリーンなファイルへとマッピングすることができます。

最後に

オーディオのノイズ除去は長年の課題となっており、様々な手法が試されています。
今回はディープラーニングの一つとして畳み込みネットワークからノイズを除去する方法について説明いたしました。

タイトルとURLをコピーしました