未経験からデータサイエンティスト

未経験からデータサイエンティストの勉強したことの備忘録とか雑記とか

「異常音検知の現状と展望」まとめ

こんにちは。 sue124です。

先日産総研の第46回AIセミナー「AIによる音環境理解を目的とした環境音分析」というセミナーを受けたので、それに関してまとめてみたいと思います。

第46回AIセミナー「AIによる音環境理解を目的とした環境音分析」リンク

このセミナーは2つプレゼンがありました。

今回は資料がすでに公開されている後半のプレゼン「異常音検知の現状と展望」についてをまとめます。

「異常音検知の現状と展望」資料 リンク

今回のテーマ

今回のプレゼンのゴールは「機械の異常、故障を検知するために、未知のものも含めてどうやって異常音を検知するか」でした。

機械学習に詳しい方ならお気づきかと思いますが、「未知のものも含めて」というのがこの問題の非常に難しいところです。

今回のプレゼンは「正常な状態と、未知の異常を見分けるための現状のノウハウの紹介」と言ってもいいかもしれません。

未知の異常を見分けるための方策の変遷

「異常音」というのは滅多に発生しないので、そもそも既知の異常でもデータは少ないです。 まして未知の異常に関しては、データがありません。

そのような状態に対して、以下のような方策が取られたようです。

DCASE2020以前

「DCASE2020」というコンペ以前は、以下のような方策を試したそうですが、うまくいかなかったそうです。

  • エンコードした音に対して、正常音を元通りに復元できるようにトレーニングしたエンコーダを作って、元の音とエンコードした音の差を「異常度」として異常を見分ける

 → エンコーダの汎化性能が良いと、異常音の異常度が上がらず。

  • 正常音に別の音(叩く音、擦れる音など)を足したものを「異常音」として、正常/異常を見分けるモデルを作成

 → 正常を異常と判定する誤報が増えた。

DCASE2020で出た解法

そんな中「DCASE2020」というコンペが開かれました。

このコンペは「ミニ四駆やファンなどの全個体の正常音と一部個体の異常音が与えられた状態で、異常音が与えられていない個体の正常音と異常音(未知の異常含む)を見分ける」というものです。

興味深いのは、上位チームがすべて以下のような解法に辿り着いた、というところです。

  • ある個体Aの正常音に対して、別の個体の正常音を「個体A」の異常音として、モデルを作る

イメージとしては「下図のように各個体の正常音をマッピングして、別個体の正常音は異常とする」というものです。

f:id:sue124:20210228072355p:plain

一見奇抜に見えますが、よくよく考えると合理的だな、と感じました。

「異常」を見分ける問題は、「異常と正常を分ける境界面をどうやってうまく作るか」という点に尽きます。 そしてその「境界面」をうまく引くためには「ギリギリ正常でない異常音」がないと、妥当なところに境界面を置けず、誤報や異常見逃しが増える、という自体を招きます。

それに対して「別個体の正常音をその個体の異常音とする」というのは「正常音と少ししか違わないが、人間が明確に『正常とは異なる』と明確にアノテーションできる」ものとして、最適だったわけです。

ただこの手法に問題がないわけではなく、各個体の音が違いすぎる、または違いが少ない場合は機能しないらしく、この問題にうまく対処できなかったチームがコンペでは順位を落としたそうです。

今後の展望

色々あったのですが要約すると

「DCASE2021 を今年やるからよろしく!」

とのことです。

あとは「どこで異常音が発生しているか」を判別する取り組みをやっていくそうです。

まとめ

  • 異常検知においては「正常音と少ししか違わないが、人間が明確に『正常とは異なる』と明確にアノテーションできる」データを如何にして用意できるかが大事
  • DCASE2020では、「ある個体Aの正常音に対して、別の個体の正常音を「個体A」の異常音として、モデルを作る」という解法を使ったチームが上位に
  • DCASE2021も開催されるとのこと