BATCAM FXファームウェア v1.0.3c からは、当社で独自開発したAIベース部分放電分類機能がファームウェアに統合されています。本機能はCUDAおよびONNX Runtimeを活用し、デバイス内でリアルタイムに部分放電タイプを分類できるよう設計されています。
本ドキュメントでは、ユーザーがAIベース分類結果をどのように受信し、活用するかについて説明します。
ファームウェアでサポートされる分類結果は合計4種類(Corona、Floating、Surface、Noise)であり、各LPoint Audioチャネルごとに個別の結果が提供されます。
ROS 2およびWebSocket経由で提供されるこれらの結果には、各LPoint Audioチャネルに対して、対応する部分放電タイプ別のlogitスコアが含まれます。ユーザーはこれを基に分類結果を推定できます。
定義されたメッセージについては、ROS概要のメッセージ定義セクションに整理されています。
BATCAM FXは各チャネル(CH0〜CH2)に対して4種類の分類をサポートしており、分類タイプごとに実数値のlogitスコアを提供します。logit値は正規化されていないスコアであり、正負いずれも取り得るため、相対的な大きさに基づいて解釈する必要があります。
ユーザーは各チャネルに対して4つのクラス別logit値のうち最大値を持つ項目(argmax)を選択します。
さらに各結果の確率を算出したい場合は、各チャネルの値に対してsoftmaxを適用します。
| チャネル | noise | corona | floating | surface | 分類結果 | 確率 (probability) |
|---|---|---|---|---|---|---|
| ch0 | -0.96 | 2.98 | -3.55 | 0.30 | corona | 0.921 (92.1%) |
| ch1 | 4.48 | 5.88 | -5.45 | -1.51 | corona | 0.793 (79.3%) |
| ch2 | -6.54 | -1.39 | 0.73 | 0.45 | floating | 0.563 (56.3%) |
softmax関数はlogitベクトルを確率分布へ変換するもので、一般的な式は以下の通りです:
$$ \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{K} e^{x_j}} $$
ただし、logit値が非常に大きいまたは小さい場合にはオーバーフローまたはアンダーフローが発生する可能性があるため、通常は次のように数値安定化した形で計算します:
$$ \text{softmax}(x_i) = \frac{e^{x_i - \max(x)}}{\sum_{j=1}^{K} e^{x_j - \max(x)}} $$
import numpy as np
def softmax(logits):
logits = np.array(logits)
exps = np.exp(logits - np.max(logits)) # 安定化softmax
return exps / np.sum(exps)