nn-morse,再び ― 2024/03/26 08:05
モールス信号を深層学習:nn-morseでデコードする話の続き。
トーン周波数の範囲設定が、オリジナルの100~950Hzに対して、 解読させたいsatnogsのAudioファイルでは(ざっくり)200~2800Hzなので、 周波数範囲とサンプリング周波数を変更して、Google Colabを使って再学習した (その設定は、従来環境:実PCでは、計算時間とGPUメモリの兼ね合いで、トライできなかった)。
loss値が下がらないので、入力層の数:spectrogram_size∝サンプリング周波数なので、中間層の数を増やしてみたが、決定打にならず。 Audioファイルでのトーン周波数のヒストグラムを作成して、 出現頻度の高い周波数(680〜1680Hz)に絞ったのが、一番効いたかも。
その変更+オリジナルにない符号(Slash, Hyphen, Colon)を学習させたら、 lossは(2200stepまで回すことになったが)0.30でサチった。オリジナルに比べるとちょと高め...だが良しとしよう。 以下は、実データによるデコード結果。 実マシンで学習したときと大差は無かった💦けど、
HSU-SAT1はnn-morseの圧勝だし、耳だと短点連打の完コピーは難しい。
0JS1YHSHSUSAT104.19V0.10A8.46DEEEEETETTTE
KOSEN-1ではHyphenを正しく認識できている。
HJR5YGJ KOSEN-1 S1 3E 1E 93 AE S2 1E 00 00 00
このモデルをエッジ環境でも動かしたいので、Pytorch⇛ONNX変換して、onnxruntimeで動くようにしてみた。 ONNX変換は、画像処理(入力サイズが固定長)の事例ばかりで、 信号処理のような「入力サイズが可変長」のリンクが見付からず、難儀した。
それから、Pytorchで記述された処理(入力データの用意、推論結果から文字列への変換)をnumpyに置き換える必要があり、 PyTorchで定義されたテンソルをNumpy配列に変換する作業は、Rubyistの自分には書けないので、 Google ColabのAIコーディング機能(Colab AI)を使ってコード修正したら・何とか・なった。
以下は、ONNXモデルによるデコード結果で、Pytorchと同じ文字列が得られた。
HSU-SAT1
0JS1YHSHSUSAT104.19V0.10A8.46DEEEEETETTTE
KOSEN-1
HJR5YGJ KOSEN-1 S1 3E 1E 93 AE S2 1E 00 00 00
最近のコメント