0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sound Event Detection を動かしたメモ

Last updated at Posted at 2025-05-02

参考資料

  1. Introduction to Sound Event Detection
  2. Faster EfficientNet-B0 SED Model Inference
    ※ 1 の SED モデルのバックボーンを Timm モデルに置き換えたもの

ポイントの整理

クリップ(入力音声全体)から、フレームごとのイベント発生有無を「弱ラベル」だけで学習できるのがポイント。

  • 弱ラベル = クリップ単位のラベル(例:この 10 秒間に犬の鳴き声が含まれる)
  • フレーム単位のラベルがなくても、フレームごとのイベント予測が可能

用語の整理

用語 説明
clip モデルに入力する音声データ全体(例:10 秒間の音)
frame clip の時間軸を細かく区切った単位(例:1 フレーム = 100ms)
segment バックボーンで時間的にダウンサンプリングされた特徴量のスケール(frame より粗い)

モデルの動作メモ

Attention Block(AttBlock クラス)

# x: (n_samples, n_class, n_time)
norm_att = torch.softmax(torch.clamp(self.att(x), -10, 10), dim=-1)
cla = self.nonlinear_transform(self.cla(x))
x = torch.sum(norm_att * cla, dim=2)
  • 1 行目:各クラスごとに softmax を適用し、segment の中で重要な時間的部分に重みをつけている(= Attention)
  • 2 行目:各 segment ごとのクラスごとの予測スコアを計算
  • 3 行目norm_att(重み)と cla(予測スコア)を要素ごとに掛け、時間方向に合計 → clip 全体の予測値を出力
    cla の情報を通すことで、Attention を通した segment ごとのクラス予測が反映される。ここがこの Block の核心部分か?。

ロス計算

  • AttBlock の出力(x)は clip 全体のクラスごとの確率値
  • ラベルは clip 単位の弱ラベルなので、BCELoss(シグモイド後の確率に対しての 2 値交差エントロピー)を使用
  • 出力は確率値なので、BCEWithLogitsLoss(ロジット入力前提)は使わない

実際に動作させたメモ

冒頭の参考資料の 2 つめ Timm モデルを使ったほうを写経して動作確認を行った。しかし、clip の両端 1,2セグメントの予測精度が低かった。
推論時には、両端のセグメントを除外し、中央部分のみの予測結果を使用するといった工夫が必要かもしれない。

うまくいった推論の様子

適当に 64 クラスを選択して学習・推論をしてみた。以下はうまく予測できていた例。

image.png

イベントの発生している segment を高く予測できている。


(とっていたメモを ChatGPT に投げて校正してもらった出力です)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?