BATCAM FX 펌웨어 v1.0.3c부터는 당사에서 자체 개발한 AI 기반 부분방전 분류 기능이 펌웨어에 통합되었습니다. 이 기능은 CUDA 및 ONNX Runtime을 활용하여, 장치 내에서 실시간으로 부분방전 유형을 분류할 수 있도록 설계되었습니다.
본 문서는 해당 기능의 사용자가 AI 기반 분류 결과를 어떻게 수신하고 활용할 수 있는지를 설명합니다. 펌웨어에서 지원하는 분류 결과는 총 4가지(Corona, Floating, Surface, Noise)이며, 각 LPoint Audio 채널별로 개별 결과가 제공됩니다.
ROS 2와 WebSocket으로 제공되는 이 결과에는, 각 LPoint Audio 채널에 대해, 지원하는 부분 방전 유형별 logit score를 제공하며, 사용자는 이를 기반으로 분류 결과를 추론할 수 있습니다.
정의된 메세지에 대해서는 ROS 개요의 메세지 정의 문단에 정리되어 있습니다.
BATCAM FX는 각 채널 (CH0~CH2)에 대해 4가지 분류를 지원하며, 분류 유형별로 실수형 logit score를 제공합니다. logit 값은 정규화되지 않은 score이며, 양/음수 모두 가능하기에, 상대적인 크기를 기반으로 해석해야 합니다.
사용자는 각 채널에 대해 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 값이 지나치게 크거나 작을 경우 오버플로우(Overflow) 또는 언더플로우(Underflow) 가 발생할 수 있으므로, 보통은 다음과 같은 정규화된 형태로 계산합니다:
$$ \text{softmax}(x_i) = \frac{e^{x_i - \max(x)}}{\sum_{j=1}^{K} e^{x_j - \max(x)}} $$
아래의 식을 Python으로 옮기는 경우 아래 예시와 같습니다: