728x90
해당 글은 아래 Reference의 [Predictive Maintenance with LSTM Siamese Network] 글을 참고했습니다.
주요 내용
- Siamese Network는 2개의 input을 받아, 둘 사이 거리를 계산해, 이를 토대로 유사성(similarity)을 판단하는 방법
- 이미지 처리의 경우, CNN 계층을 통해 이미지의 특징이 추출되면, FC layer로 비교해 유사도를 측정
- Siamese Network는 주로 CNN계층과 결합해 Image Recognition에 사용되지만, LSTM계층과 결합해정상 sequence 데이터와 고장 sequence 데이터 중 sample 데이터가 어느 클래스 데이터에 더 가까운지(유사한지)를 측정해 Binary classification처럼 예지보전 시스템에 사용할 수 있다
- 유사도 측정을 n번 반복한 결과값(max, mean 등)으로 최종 판단을 함
The benefit of applying Siamese Network to time series classification problem in the field of Predictive Maintenance is to avoid the lack of unlabeled samples for the crucial class of interest, i.e. in Predictive Maintenance, it’s synonymous of the absence of failures evidence
1. DATASET (데이터셋)
- 4개의 컨베이어 벨트(BLO, BHL, BHR, BRU) 데이터 정보를 가지고 있는 데이터셋
- 고장 시점(failure)에는 Labels column에 1로 라벨링이 되어있음
- Reference의 저자는 HRSS_anomalous_optimized.csv를 사용
- 19634개의 데이터 (111 cycle, cycle이 초기화되면 timestamp는 0으로 재설정됨)
- 그 중 4517개의 고장(failure) 정보가 담김
- 매 cycle마다, 4개의 컨베이어 벨트와 2개의 rail에서 들어오는 18개의 센서 데이터 정보가 있다
2. 데이터 특성 분석 및 전처리
- 해당 데이터셋의 경우, 결측치(missing values)는 없기 때문에 결측치 처리는 진행하지 않아도 됨
- 반면, 각 센서데이터별 데이터 분포의 격차가 심하기 때문에 이를 해결하기 위해, reference 글의 저자는 다음과 같은 3가지 전처리를 실시
1) Separate our data among cycles
2) Handle each sensor value as an increment from the starting time of the relative cycle
3) Scale the increments with a standard scaling approach
3. 모델 설계
- 모델의 목적 : 고장 발생 가능성의 유무를 1 step 이전에 알림 (alarm the presence of possible failures in the system one step in advance through a Siamese Network)
- Siamese Network는 2개의 input을 받아, 둘 사이 거리를 계산해, 이를 토대로 유사성(similarity)을 판단하는 방법
- Siamese Network는 주로 Image Recognition에 사용되지만, Predictive Maintenance에 사용할 경우, 고장 데이터 부족 문제를 해결할 수 있다
- Siamese network를 time series 데이터에 맞게 LSTM 구조로 변형시킴
- Siamese Network를 통해 정상 데이터와 고장 데이터 중 sample 데이터가 어느 클래스 데이터에 더 가까운지(유사한지)를 측정
- 유사도 측정을 n번 반복한 결과값(max, mean 등)으로 최종 판단을 함
- 즉, binary classification처럼 사용될 수 있다
def SiamesNet():
left_input = Input((sequence_length, len(features)))
right_input = Input((sequence_length, len(features)))
lstmnet = Sequential([
BatchNormalization(),
LSTM(128, activation='relu', return_sequences=True,
input_shape=(sequence_length, len(features))),
LSTM(32, activation='relu')
])
encoded_l = lstmnet(left_input)
encoded_r = lstmnet(right_input)
L1_layer = Lambda(lambda tensor: K.abs(tensor[0] - tensor[1]))
L1_distance = L1_layer([encoded_l, encoded_r])
drop = Dropout(0.2)(L1_distance)
prediction = Dense(1,activation='sigmoid')(drop)
model = Model(inputs=[left_input,right_input],
outputs=prediction)
return model
4. 결론
- Siamese Network는 주로 CNN계층과 결합해 Image Recognition에 사용되지만, LSTM계층과 결합해 정상 데이터와 고장 데이터 중 sample 데이터가 어느 클래스 데이터에 더 가까운지(유사한지)를 측정해 Binary classification처럼 예지보전 시스템에 사용할 수 있다
- Siamese Network를 통해 고장 데이터 부족문제를 해결할 수 있다는 것이 reference 글의 설명이지만, 실제로 위에서 사용한 데이터셋과 같이 고장 데이터수가 많은 경우, 모델의 학습이 가능
- 하지만, 실제 산업 현장에서는 고장 데이터를 확보하는 것에 문제가 있어 당장 적용하기에 한계가 있는 모델
Reference
반응형