これは、K。Drossos、S。Gharib、P、Magron、およびT. Virtanenによる、「教師の強制とスケジュールされたサンプリングによるサウンドイベント検出の言語モデリング」という方法のリポジトリです。
私たちの論文は、アコースティックシーンとイベント(DCase)ワークショップ2019の検出と分類に紹介されています。
私たちの方法を使用する場合は、私たちの論文を引用してください。
ペーパーで使用されているコードのバージョンをから取得できます
サウンドイベント検出(SED)は、音声の短い時間表現からサウンドイベントのアクティビティを識別するタスクです。たとえば、0.04秒から抽出されたオーディオ機能ベクトルを考えると、SEDメソッドはこのベクトル内のさまざまなサウンドイベントのアクティビティを識別する必要があります。通常、SEDは一連の短い時間オーディオ機能ベクトルに適用され、すべての入力機能ベクトルに対してサウンドイベントのアクティビティの識別が実行されます。つまり、入力にはマトリックスが与えられ、 TとFがそれぞれ機能ベクトルと特徴の量であるため、出力はマトリックスであり、各t機能ベクトルの各Cクラスの予測を保持します。
実際の録音では、さまざまなサウンドイベントには、イベント内およびイベント全体の時間構造がある可能性があります。たとえば、「足音」イベントは、間に一時停止して繰り返される場合があります(イベント内構造)。一方、「車のホーン」は、「車を通る車」のサウンドイベント(イベント間構造)に従うか先行する可能性があります。このような時間構造は、たとえば機械翻訳、画像キャプション、音声認識など、他の機械学習タスクで採用および使用されます。これらのタスクでは、開発された方法は、ターゲットクラスの時間的関連のモデルも学習します。これらの関連付けは通常、言語モデルと呼ばれます。
SEDメソッドは言語モデルの恩恵を受けることができます。このリポジトリの方法は、まさにこれについてです。 SEDの言語モデルを利用する方法。
上記の時間構造を活用するために、[1]手法を強制する教師を使用します。教師の強制は、前の時間ステップでサウンドイベントのアクティビティを使用して、RNNへの入力の条件付けです。つまり、
ここで、タイムステップTでのRNNの出力は、RNN(前のレイヤーから)およびタイムステップTでの入力であり、タイムステップT-1でのサウンドイベントのアクティビティです。
グラウンドトゥルース値が使用されている場合、RNNは正しいクラスのアクティビティではない場合に堅牢ではありません。たとえば、地上の真理値がないテストプロセスで。
分類器の予測を使用すると、RNNはサウンドイベントの依存関係を学ぶのに困難な時期を迎えます。これは、トレーニング中(特にトレーニングプロセスの開始時)に誤ったクラスアクティビティを提供するためです。
上記の両方に取り組むために、スケジュールされたサンプリング手法を採用しています[2]。つまり、トレーニングの開始時に、グラウンドトゥルース値として使用します。トレーニングが進行し、分類器がますます正しいクラスアクティビティを予測することを学ぶと、分類器の予測を徐々に採用します。
[1] RJ WilliamsおよびD. Zipser、「完全に再発性のニューラルネットワークを継続的に実行するための学習アルゴリズム」、Neural Computation、Vol。 1、いいえ。 2、pp。270–280、1989年6月。
[2] S. Bengio、O。Vinyals、N。Jaitly、およびN. Shazeer、「再発性ニューラルネットワークを使用したシーケンス予測のためのスケジュールされたサンプリング」、第28回神経情報処理システムに関する国際会議の議事録、第1巻、Ser。 NIPS'15。米国マサチューセッツ州ケンブリッジ:MIT Press、2015、pp。1171–1179。オンライン。利用可能:http://dl.acm.org/citation.cfm?id=2969239.2969370
プロジェクトの使用を開始するには、次のことが必要です。
Python 3.6を使用します。このリポジトリのコードはテストされ、Python 3.6で動作します。おそらく他のPython 3.xバージョンを使用すると問題ありませんが、このコードはPython 3.6用であることに留意してください。
pip (pip_requirements.txt)またはconda (conda_requirements.txt)ファイルのいずれかを使用して依存関係をセットアップします。プロジェクトのルートディレクトリ内に端末をナビゲートします(つまり、このリポジトリをクローニングした後に作成されたディレクトリ)。端末で適切なコマンドを発行します。
pip使用で依存関係をセットアップするには: $ pip install -r requirements/pip_requirements.txtcondaで依存関係をセットアップするには、コマンドを発行できます$ conda install --yes --file requirements/conda_requirements.txtオーディオデータをダウンロードします。次の3つのオーディオデータセットをダウンロードできます。
Tut-Sed Synthetic 2016データセットはこちらから入手できます。
オーディオファイル(つまり、オーディオ1/5、オーディオ2/5、...、オーディオ5/5)をダウンロードし、機能抽出を行い、データセットアップセクションの指示に従ってください。
Tut Sound Events 2016はこちらから入手できます。
オーディオファイルをダウンロードし、機能抽出を実行し、データセットアップセクションの指示に従ってください。
Tut Soundイベント2017はこちらから入手できます
オーディオファイルをダウンロードし、機能抽出を実行し、データセットアップセクションの指示に従ってください。
これでプロジェクトがセットアップされ、ステップ3から入手したデータで使用できます。
SEDLMをデータに直接使用するか、コードを確認してSEDLMをSEDタスクに採用するか、論文に記載されているプロセスを繰り返すことができます。
SEDLMコードは、バージョン1.1.0のPytorchに基づいています。
現在の形式では、コードのさまざまな変数がYAMLファイルで指定され、コードのすべての設定が保持されます。すべてのYAMLファイルはsettingsディレクトリにあり、YAMLロード関数はYAMLファイルのsettingsディレクトリに検索されます。一般に、YAMLファイルの設定値を変更して、コードを実行するだけです。
データはdataディレクトリにある必要があります。
既存のデータローダーを使用する場合は、特定の方法でデータを整理する必要があります。まず、入力機能とターゲット値に異なるファイルが必要です。たとえば、 input_features.npyおよびtarget_values.npy 。次に、使用するデータセットに応じて、さまざまなディレクトリにデータを使用する必要があります。つまり:
Tutsed Synthetic 2016。
データは、 data Directoryでsyntheticと呼ばれるディレクトリにある必要があります。つまり、 data/synthetic 。次に、トレーニング、検証、およびテストデータのファイルは別のディレクトリにある必要があります。つまり:
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testing入力機能とターゲット値に異なるnumpyファイルが必要です。 YAML設定ファイルの各入力ファイルまたはターゲットファイルの名前を指定できます。たとえば、トレーニングファイルは次のようなものでなければなりません。
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npyコードはnumpyファイルをロードし、それらを使用してSEDLMメソッドをトレーニングします。ただし、入力機能とターゲット値が適切に順序付けられていることを確認できます。つまり、入力機能の最初の要素は、ターゲット値の最初の要素に対応しています。
Tut Real Life 2016
データは、 dataディレクトリのreal_life_2016と呼ばれるディレクトリにある必要があります。つまり、 data/real_life_2016 。次に、各フォールドのファイルは別のディレクトリにある必要があります。つまり:
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4入力機能とターゲット値、および各foldのトレーニングとテストのために、異なるピクルファイルが必要です。シーンごとに複数のファイルがあり、折りたたみ1個あたりのファイルがあるため、すべての機能をnumpy配列に入れることはできません。したがって、すべてのデータをリストに載せ、ピクルスパッケージを使用してリストのシリアル化(つまり、ディスクからディスクにストア)する必要があります。また、各foldにトレーニングとテスト用のファイルがあります。
便宜上、SEDLMはファイル名のプリフィックスを自動的に使用します。つまり、指定されたファイル名に「トレーニング」と「テスト」を自動的に追加します。
YAML設定ファイルの各入力ファイルまたはターゲットファイルの名前を指定できます。たとえば、ファイルは次のようなものでなければなりません。
input_features.ptarget_values.p次に、SEDLMコードは適切なファイルと各フォールドを検索します。たとえば、Fold 1とHomeシーンの場合、次のファイルが求められます。
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.pコードはピクルスファイルをロードし、それらを使用してSEDLMメソッドをトレーニングします。ただし、入力機能とターゲット値が適切に順序付けられていることを確認できます。つまり、入力機能の最初の要素は、ターゲット値の最初の要素に対応しています。
Tut Real Life 2017
データは、 dataディレクトリのreal_life_2017というディレクトリにある必要があります。つまり、 data/real_life_2017です。次に、各フォールドのファイルは別のディレクトリにある必要があります。つまり:
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4入力機能とターゲット値、および各foldのトレーニングとテストのために、異なるピクルファイルが必要です。折り畳みあたり複数のファイルがあるため、すべての機能をnumpy配列に入れることはできません。したがって、すべてのデータをリストに載せ、ピクルスパッケージを使用してリストのシリアル化(つまり、ディスクからディスクにストア)する必要があります。また、各foldにトレーニングとテスト用のファイルがあります。
便宜上、SEDLMはファイル名のプリフィックスを自動的に使用します。つまり、指定されたファイル名に「トレーニング」と「テスト」を自動的に追加します。
YAML設定ファイルの各入力ファイルまたはターゲットファイルの名前を指定できます。たとえば、ファイルは次のようなものでなければなりません。
input_features.ptarget_values.p次に、SEDLMコードは適切なファイルと各フォールドを検索します。たとえば、fold 1の場合、次のファイルが求められます。
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.pコードはピクルスファイルをロードし、それらを使用してSEDLMメソッドをトレーニングします。ただし、入力機能とターゲット値が適切に順序付けられていることを確認できます。つまり、入力機能の最初の要素は、ターゲット値の最初の要素に対応しています。
ハイパーパラメーターは、YAML設定ファイルから調整できます。チューニングのために利用可能なハイパーパラメーターは次のとおりです。
Bashスクリプトを使用してシステムを実行できます。そのようなスクリプトの例は、ファイルです。
example_bash_script_baseline.sh 、sedlmのベースライン構成を実行するexample_bash_script_tf.shは、TUT Real Life 2017データセットでSEDLMを実行します。