2024年4月17日水曜日

Open Set Recognition

OSR の始まりはOpenMAXからのようです。

● OpenMax (Bendale & Boult, 2016)
SoftMaxの前層の Activation Vectorを利用。
https://github.com/abhijitbendale/OSDN
https://github.com/aadeshnpn/OSDN , for Keras2.2.4 TF1.12.0

Classification-Reconstruction Learning for Open-Set Recognition (Yoshihashi et al., 2019)
日本人も頑張っているようでしたが、コードはリンク切れ。残念。

● OpenGAN (Kong & Ramanan, 2021)
Using an adversarially trained discriminator
https://github.com/aimerykong/OpenGAN, for torch
GANを利用しているのでしょうか?読んでいませんが性能は上がるようです。

● ARPL (Adversarial Reciprocal Point Learning) (Chen et al., 2020a; 2021)
https://github.com/iCGY96/ARPL, for torch1.4
上記と同じ生成系のOSR。ネットワークが3つ必要です。これは後日。

● MLS (Maximum logit score) (Vaze., et al., 2022)
OPEN-SET RECOGNITION: A GOOD CLOSED-SET CLASSIFIER IS ALL YOU NEED?
https://github.com/sgvaze/osr_closed_set_all_you_need, for torch1.9.
https://github.com/Jingkang50/OpenOOD, for torch>=1.13.1
OoDです。日本語の紹介サイトがあったですが、見当たりません。ま、要約を読んでもよくわからなかったので、文献を読んでいるわけですが。その文献を読んでも具体的な閾値の決定法は載っていません。なんらかの手法で閾値を検討する必要がでてきます。が、ネットワークの出力値を利用できる手軽な手法です。
https://github.com/sgvaze/osr_closed_set_all_you_need/issues/5
面白いのは、既知クラスの分類性能が高いほど unknown の検出(AUROC)も高くなり、相関性が見られるという点です。OoDの識別性能を鍛えると同時に分類性能が上がるので、ネットワークは一つでいいよ、ということでしょう。

known unknown

機械学習で「未知の異常を見逃したくない」といったオーダーを受けました。

その上で、「既知の異常は多クラス分類したい」ということで異常検知はダメ。少し考えて、ふと思い浮かんだのが softmax 関数の出力値をそのまま使う方法。argmax を通す前に、ある閾値以下を unkonown とする方法です。調べてみると、既に似たような方法が提案されていましたが、あまり上手い方法ではなさそうでした。

このような問題は「オープンワールド認識」の一部として機械学習の研究者が精力的に取り組まれているようです。不勉強により全く知りませんでした。一つ山を登ったと思えば、未開拓の平原が見えてきたようで焦ります。
必要性が高いにもかかわらず、あまり知られていない分野と書かれている文献がありましたので、一般的に知られていないのでしょう。

Open-Set Recognition: a Good Closed-Set Classifier is All You Need?
サブフィールドとして以下のものがあるようです。OSR と OOD検出との違いがワカラナイ。
・オープンセット認識(OSR: open set recognition)
・分布外検出(OOD検出: out-of-distribution detection)
・新規性検知(ND: novelty detection)
・異常検知(AD: anomaly detection)
・新規カテゴリ発見(novel category discovery)

また、「未知」「既知」に関する用語は、以下の4つに区別されています。KUC と UKCが ワカラナイ。GPTに聞いて埒が明かない状態です。
・ known known classes(KKC)
・ known unknown classes(KUC)
・ unknown known classes(UKC)
・ unknown unknown classes (UUC)

[2110.11334] Generalized Out-of-Distribution Detection: A Survey (arxiv.org)
こちらも5つに分類しています。
・anomaly detection (AD)
・novelty detection (ND)
・open set recognition (OSR)
・out-of-distribution (OOD) detection
・outlier detection (OD)

In safety-critical applications such as autonomous driving, the driving system must issue a warning and hand over the control to drivers when it detects unusual scenes or objects it has never seen during training

とても大事ですね。ぼーっと生きていますので、言われて初めて気づきます。


2024年4月16日火曜日

WAV + FFT

16bit 44.1kHz の wav ファイルを扱うことになりました。

スケール変換しようと思いハードウェアの資料を探しましたが見当たりません。レコーダーですので、ないのかもしれません。

2^15 で割って正規化し FFTをかけて、振幅を抽出します。で、この後が不明。ある基準値をもって dB値に変換するのですが、音圧と異なるので決まりがないようです。最大値を基準にしても良いし、最小値でも問題ないのでしょう。今回は見た目で真ん中あたりを選択しましたが、決まったやり方があれば知りたいところです。

出来上がったランニングスペクトルを見ると、現象によって奇麗に判別できました。これで全ての音声を聞かなくて済みそうです。時短に有効活用です。


2024年4月11日木曜日

MEMS Seismometer Update, April 2024

The ability to change the Wi-Fi settings of the ADXL355 MEMS seismometer has been implemented. ESP-Touch app from Espressif Systems is used.

https://github.com/T40O0/ADXL355_SPI_M5_SD_FIR/tree/main

If you are connecting M5Tough to Wi-Fi for the first time, or if you want to connect to a different Wi-Fi access point than the last time, touch "Wi-Fi Settings". You can change the Wi-Fi setting from an "ESP Touch" app on your phone. The app will display the Wi-Fi access point your phone is connected to, so please enter the password, and it will be reflected on the M5Tough.

How to start
There are three options before the measurement starts.

  1. Power On >> Wait 30 seconds >> Start
  2. Power On >> RTC Reset >> Start
  3. Power On >> Set Wi-Fi Access Point >> RTC Reset >> Start


2024年4月8日月曜日

M5StickC Plus + SGP30, 2024 Spring

昨年はM5Toughで地震計を作成しており、SGP30を触っていませんでした。

そろそろタバコ検知の季節なので ver.UP しましょうとコードを探してみましたが、見当たりません。PCを変更した際に、コードをコピーし忘れたようです。

ま、それほどフクザツではないので、もう一度書き直しました。
Lineへの通知も復旧しました。
https://phreeqc.blogspot.com/2022/10/line-notify.html

今回はFFT をかけずに音量のみの取り込みです。音量がある程度高い時、かつ STA/LTA で濃度変化の初期を検知し LINE を送るようにしました。大容量モバイルバッテリーも用意したので、窓を閉めっぱなしでも一晩はかれるます。

さあ、データをとってみましょう。

2024年4月3日水曜日

TensorFlow -> GPT -> PyTorch

TensorFlow のコードを PyTorch に変換しました。
というか、GPTに変換してもらいました。便利な時代になったものです。

そのままでは動きませんでしたが、そこそこ正しいコードでした。error が出たら、再び GPTへ。コードを書くというよりある程度書いてもらったものをチェックする感覚で、完成までかなり早くなりました。2大フレームワークでしょうから、教師データには困らないのでしょう。

なかなか要領を得ない回答もありますが、そのうちストレスを感じることなく回答してくれるようになるのでしょう。楽しみです。

2024年3月15日金曜日

Update MEMS Seismometer

Update

If you can connect to Wi-Fi, touch the button that appears on the startup screen. M5Tough will access any NTP server and start resetting the RTC. Just change lines 12-17 to suit your environment. Once completed, the measurement will start automatically.


1年利用して、プログラムを書き換えてからRTCのリセットを行う、また書き換えて振動を測るという手順がとても面倒に感じていました。特に現場で。

せっかくタッチ画面があるのですから、これを用いてプログラムの切り替えを済ませることにしました。起動時に表示されるボタンにタッチすればRTCをリセットする、完了すれば自動的に振動測定を開始する。もし30秒間ボタンに触れなければRTCリセットをスキップし、いきなり振動測定を行う、という流れ。
ついでにTFカードが入っていない場合も画面にエラーを表示させるように修正しました。

次からは現場でTFカードの交換だけで済みます。これで誰でも扱えるようになりました。