目的・背景
製造業では、工場の製造ラインから音を収集し、異常を早期に発見することが求められます。
しかし、異常音のデータは非常に少なく、異常音検知モデルの学習には教師あり学習が難しいという課題があります。
このような背景から、正常音のみを使って学習し、異常を検出する「教師なし異常音検知モデル」が近年注目を集めています。
本記事では、音響コンペティション「DCASE」で1位を獲得した手法を参考にしながら、教師なし異常音検知モデルを実装した事例について紹介します。
モデル構成やアプローチ、実装上の工夫点、得られた知見などを簡潔にまとめていきます。
モデル構成
データの前処理では、librosaを用いて音声データをメルスペクトログラムに変換しました。
モデルには、Meta社が開発した音響特徴抽出モデル BEATs を使用し、その上に自己注意統計プーリング層と2つの全結合層を追加しました。
損失関数には、識別性を高めるために ArcFace損失 を導入しています。
また、BEATsの自己注意モジュールにはLoRA(Low-Rank Adaptation)を適用し、パラメータの追加を抑えつつ効率的なファインチューニングを実現しました。
異常検知の際は、正常音の埋め込み空間における最近傍の距離を異常スコアとして用いるK近傍法(KNN)を採用しています。
実装上の工夫点
工夫した点は主に2つあります。
1つ目は、データの前処理方法の検討です。
参考にした論文では、前処理に使用するライブラリや設定が明記されていませんでした。
そこで、kaldiとlibrosaの両方を用いて、それぞれ異なる前処理設定で実験を行い、結果を比較しました。
最も良い結果が得られたのは、librosaで正規化ありの設定でした。
kaldiはlibrosaに比べてスペクトログラムの特徴の変化が小さく、それが精度に影響していたと考えられます。
2つ目は、PyTorch Lightningを使った論文手法の再現です。
論文には実装コードが付属しておらず、ArcFace損失や自己注意統計プーリング層などの構造を、自ら論文を読み解きながら組み込む必要がありました。
特に難しかったのは、LoRAによるファインチューニングの実装です。
既存の学習済みモデルにLoRAを組み込んだ構造を読み込もうとした際に、パラメータの不一致によるエラーが頻発し、その対応に多くの時間を費やしました。
得られた知見
まず、今回扱ったそれぞれの技術のアイデアに非常に興味を持ち、深く感心しました。
・自己注意統計プーリング層:
時系列データに対して、平均と分散をとり、それらを結合して1つの特徴ベクトルとして扱う手法です。
これにより、突発的な異常音などの変化を特徴量に反映しやすくなります。
・LoRA(Low-Rank Adaptation):
大きなパラメータ行列を低ランクな2つの行列に分解し、効率よく学習を行う手法です。
パラメータ数を抑えながらも、高い性能を維持できる点が非常に印象的でした。
・SMOTE(Synthetic Minority Over-sampling Technique):
少数のデータをもとに新しいデータを合成することで、データの不均衡を補正する手法です。
特に、正常音データの中でもクラス間に偏りがある場合、SMOTEで補完することでK近傍法の精度向上に貢献します。
このように、それぞれの技術が互いに補完し合いながら、一つのモデルとして機能していることに強く興味を持ちました。
今後も、さまざまな技術に触れながら学びを深めていきたいと感じています。
参考文献