기계 진동(소음)에 나타나는 이상 패턴을 자동으로 탐지할 수 있을까?

글쓴이 Inforience 날짜

클릭 >> Hello, world !! (from ShadowEgo)

2편 바로가기 : https://inforience.net/2019/06/08/machine-vibration2/

기계 진동(소음) 분석…??

기계 장치가 발생시키는 진동(소음)이 나타내는 패턴을 이해하고, 이상 패턴을 정확히 탐지(분류)할 수 있는 지능적인 모듈을 구현할 수 있을까? 이러한 기능이 구현되어 실시간으로 기계 장치의 상태를 모니터링할 수 있게 된다면, 작업자들에게는 큰 도움이 될 수 있다. 예를 들어, 기계의 고장 여부를 판단하거나, 잔존 유효 수명 (RUL: Remaining Useful Life)을 측정할 수도 있다. 더 나아가, 갑자기 발생할 수 있는 오작동으로 인한 사고를 미리 방지할 수 있게 된다면 작업 공간의 안전 수준을 크게 높일 수도 있다. 그런데, 이러한 기능을 구현하려면, 기계 장치가 발생시키는 진동(소음)에서 이상 패턴을 자동적으로 탐지하는 기능이 우선적으로 필요하다. 더 구체적으로 말하자면, 입력된 진동(소음) 데이터가 정상 패턴을 보이는지, 아니면 이상 징후를 보이는지의 여부를 스스로 판단하는 모듈을 구현해야 한다.

이번 포스팅에서는, 진동(소음)데이터에 포함되어 있는 이상 패턴의 존재를 찾아내는 기초적인 모듈을 구현해 본 결과를 소개한다. 진동(소음) 데이터를 활용한 실험결과를 담은 첫 포스팅이니만큼, 기본적인 구조의 머신러닝 모델을 쓴 결과를 소개하기로 한다.

활용할 데이터 선정

실험을 진행하려면, 되도록 많은 양의 진동(소음)데이터가 필요하다. 또한 각 데이터에 이상 패턴이 들어있는지 알려져 있어야 한다. 기초적인 수준의 실험을 하면서 대용량의 진동(소음) 데이터를 직접 모을 수는 없는 노릇이니, 우선 공개된 데이터[1]를 찾아서 활용하도록 하였다.

데이터 준비

데이터[1]에는 동일한 길이의 진동(소음)파일들이 들어있으며, 정상적인(normal)상태의 기어 및 비정상적인(anomaly) 상태의 기어에서 나는 진동(소음) 데이터가 포함되어 있다. 그러나 데이터의 수가 너무 작아서 그대로 활용하기에는 부족하여, 본 실험에서는 데이터의 수를 늘리기 위해 augmentation 과정을 수행하였다. (Augmentation 기법에 대해서는 따로 포스팅할 예정)

스크린샷 2019-05-07 10.15.05.png

표 1. 실험에 활용한 데이터의 용량

그렇다면, 정상적인(normal)상태의 기어 및 비정상적인(anomaly) 상태의 기어에서 나는 진동(소음)은 어떻게 다를까? 진동(소음) 파일을 직접 플레이 해보자.

소리 1. Normal 상태의 기어 진동(소음)

소리 2. Anomaly 상태의 기어 진동(소음)

진동(소음) 데이터를 처리하고 활용하려면, 그 특성을 잘 표현하는 feature를 추출하여야 한다. 이번 실험에서는 가장 많이 활용되는 mel-spectrogram을 추출하여 사용하였다.

normal_spectrogram.png

그림 1. Normal 상태의 기어 진동(소음)의 mel-spectrogram

anomaly_spectrogram.png

그림 2. Anomaly 상태의 기어 진동(소음)의 mel-spectrogram

학습 모델 선택

일반적으로는 anomaly 상태가 자주 발생하지 않기 때문에, anomaly 클래스에 해당하는 데이터의 수는 normal 클래스에 해당하는 데이터의 수에 비해 크게 부족하게 되어 classification 모델을 활용하기 어렵다. 따라서 anomaly detection 모듈은 normal 데이터의 특성을 충실히 학습시킨 모델을 생성한 뒤에, 테스트 데이터의 특성이 normal 데이터의 특성과 얼마나 다른 지 측정하게 하는 개념으로 구현한다. 간단히 말하면, 입력된 데이터의 특성이 normal 데이터의 특성과 많이 다르면 anomaly로 간주하는 방식이다.

Anomaly detection을 위해서는 데이터의 특성 및 응용 요구사항에 따라 다양한 형태의 학습 모델을 활용할 수 있다. 인포리언스는 anomaly detection 을 위해 여러가지 학습 모델을 활용해 본 경험이 있으나, 이번 포스팅에서는 가장 기본적인 Convolutional Recurrent Neural Networks(CRNN)을 활용해 본 결과만을 일단 소개하기로 한다. (인포리언스는 실제 현장에서 수집된 대용량의 공장 진동(소음)에 대해서도 CRNN 계열의 모델을 효과적으로 활용했던 전례가 있다.)

CRNN은 Convolutional Neural Networks (CNN)와 Recurrent Neural Networks (RNN)의 특징을 혼합한 것으로, CNN의 마지막 layer를 RNN으로 구성하는 것이 가장 대표적인 형태이다. 이렇게 구성하면 CNN이 추출한 feature들의 시간적(temporal) 특성을 고려할 수 있다는 장점이 있다.

CRNN_concept.png

그림 3. 본 실험에서 활용한 CRNN의 개념도

그림 3은 이번 실험에서 활용한 CRNN의 개념적 구조를 나타낸다. 같은 타이밍(프레임)에 나타난 고차원(본 실험에서는 mel numbers에 해당)특성을 1-D convolution을 통해 추출하고, 이렇게 추출한 특성들의 temporal 배열에 나타나는 sequential 특성을 LSTM layer에서 잡아내게 하는 구조이다. 이번 실험은 기초적인 개념을 소개하기 위한 것이므로, 이전 프레임의 특성 패턴 sequence의 구조를 바탕으로 현재의 프레임의 특성을 예측하는 가장 기본적인 형태를 선택하였다. 실제로 관찰된 프레임의 특성과 학습 모델이 예측한 특성 사이에 차이가 많이 날 경우 해당 프레임을 anomaly로 판단하는 개념으로서, 하나의 데이터 파일 내에서 프레임 단위로 anomaly를 탐지할 수 있다는 장점이 있는 모델이다. 따라서, 데이터 내의 어느 타이밍에 anomaly 패턴이 나타났는가에 대한 정보도 쉽게 추출할 수 있다.

inside-CRNN.png

그림 4. 본 실험에서 활용한 CRNN의 세부 구조

그림 4는 이번 실험에서 활용한 CRNN의 세부 구조를 나타낸다. 1개의 CNN layer와 2개의 LSTM layer, 그리고 linear layer로 구성되어 있는 아주 간단한 모델이다. 본 실험에서는 그림 4와 같이 구성한 CRNN을 200 epoch 동안 학습시켰다.

실험 결과

no_of_anomaly.png

그림 5. Normal 데이터에서 발견된 anomaly 프레임의 수(파란색)와 anomaly 데이터에서 발견된 anomaly 프레임의 수(붉은색)

그림 5를 통해, 35개의 normal 테스트 데이터에서 각각 발견된 anomaly 프레임의 수와 35개의 anomaly 테스트 데이터에서 각각 발견된 anomaly 프레임의 수를 비교해 볼 수 있다. 우리는 붉은색 그래프와 파란색 그래프가 최대한 separable한 형태가 되는 것을 목표로 하는 셈이다. (Anomaly 프레임으로 분류하기 위한 기준이 되는 loss값을 설정하는 방법이나, 이러한 분류과정을 정확히 수행하기 위해서 관찰해야 하는 과거 프레임의 수(sequence length) 등과 같은 parameter들에 대한 언급은 지면 관계상 생략한다.)

final_results.png

그림 6. 최종 실험 결과

그림 6은 3개 미만의 anomaly 프레임을 가진 데이터를 normal로 판단하고, 3개 이상의 anomaly 프레임을 가진 데이터를 anomaly로 판단하였을 때의 최종 결과를 수치로 보여준다. Confusion matrix를 보면, 우리가 학습시킨 CRNN 모델이 normal 데이터는 100% 정확하게 normal로 판단하였으나, 아쉽게도 35개의 anomaly 데이터들 중 6개를 normal로 판단하는 오류를 범했음을 알 수 있다.

이 실험 결과는 기계 진동(소음)에서 이상 패턴을 탐지하는 과정의 기초적인 개념을 소개하기 위해 가장 기본적인 모델을 아주 제한적인 데이터에 적용해 본 것이다. 실험 과정과 결과에 아쉬운 부분이 있지만 충분히 의미있는 결과를 얻었다고 평가할 수 있다. 물론, 실제 환경에서 쓰일 만한 모듈을 구현하고자 한다면 이 정도 수준의 연구로는 턱없이 부족하며, 훨씬 더 깊이있는 연구와 분석과정을 거쳐야 한다.

잠정적인 결론

지금까지, 기계 진동(소음)데이터에서 anomaly를 자동적으로 탐지하는 모듈을 1-Dimensional CNN layer와 LSTM layer를 기반으로 구성한 CRNN모델을 활용하여 구현하고 테스트해 보았다. 비교적 간단한 구조의 모델들을 적용했음에도 불구하고, 테스트 결과는 추가적으로 진행할 연구 결과에 대해 희망을 품게 하였다.

데이터 출처

  • [1] http://data-acoustics.com/measurements/gear-faults/gear-1/
    • “Acknowledgement is made for the measurements used in this work provided through data-acoustics.com Database “.