자동 인코더의 SSIM 구현 방법 설명
소개
자동 인코더의 SSIM 구현 방법을 구성합니다.
SSIM이란?
SSIM(Structural Similarity Index Measure)은 2004년에 발표된 이미지의 유사도를 측정하는 지표입니다.
오토 엔코더의 과제 중, 오리지널 화상으로부터 만들어지는 생성 화상이 선명하지 않은 특징이 있습니다. 영어로는 Blurred Generated Image라고 합니다. 이 경우 작은 이상을 감지하기 어려운 문제가 있습니다.
기존 오토엔코더에는 mse(mean squared error)를 손실함수로 사용하여 아무래도 선명하지 않은 이미지만 만들 수 있었습니다. 그런데 SSIM을 손실 함수로 사용하면 보다 선명한 생성 화상을 얻을 수 있어 결과적으로 이상 검지의 OK/NG의 판별 성능이 향상되는 결과가 되었습니다. 죄송합니다.
2. 구현 절차
학습 단계와 추론 단계로 나누어 설명합니다.
2.1. 학습 단계
SSIM 사용자 정의 손실 함수 정의
Tensorflow tf.image.ssim
함수를 사용하여 ssim_loss()
의 사용자 지정 손실 함수를 정의합니다.
파라미터 설정은 float32
와 uint8
에 따라 다르므로, 그에 관해서는 Tensorflow 문서를 참조하십시오.
import tensorflow as tf
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
Compile에 loss로 지정
autoencoder라는 모델을 준비합니다.mse
와 사용하는 compile 문과 ssim_loss
를 사용하는 compile 문을 병기하므로 참고하십시오.
SSIM은이 코드를 사용하면 문제없이 학습 할 수 있습니다.
#損失関数 mse
autoencoder.compile(optimizer = 'adam', loss = 'mse')
#損失関数 SSIM
autoencoder.compile(optimizer = 'adam', loss = ssim_loss)
2.2.추론 단계
학습한 모델(h5 파일)을 로드할 때, "이 모델은 SSIM이라는 커스텀 손실 함수를 사용하고 있어요"라고 프로그램에 가르쳐야 합니다.
예를 들어, autoencoder-ssim.h5
드디어 모델을 로드하는 경우는, 아래와 같이 코드를 씁니다.
load_model 추가
from tensorflow.keras.models import load_model
loaded_model = load_model('autoencoder-ssim.h5', custom_objects={'ssim_loss':ssim_loss}
custom_objects
부분을 보자.
custom_objects={'ssim_loss':ssim_loss}
첫 번째 'ssim_loss'는 autoencoder.compile(optimizer = 'adam', loss = ssim_loss)のloss='ssim_loss'
입니다.
두 번째 ssim_loss는 カスタム損失関数名
입니다.
SSIM 함수 설명
위의 이유로 추론 코드도 カスタム損失関数
를 작성합니다. 학습용 코드에 쓴 동일한 커스텀 손실 함수를 쓰면 OK입니다.
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
이것으로 문제없이 SSIM의 학습 모델을 읽어 새로운 데이터로의 추론이 가능합니다.
요약
SSIM의 커스텀 함수를 이용한, 오토 인코더의 학습·추론의 코드의 구현 방법에 대해 해설했습니다.
참고 자료
1. Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders
htps : // 아 rぃ v. rg/아bs/1807.02011
2. 【논문 읽기】신・오토 엔코더로 이상 검지
htps : // 코 m / 신무라 0 / ms / 예 074172 에c3c818b614 에
Reference
이 문제에 관하여(자동 인코더의 SSIM 구현 방법 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kotai2003/items/2d6ab5771fdc57c05507
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SSIM(Structural Similarity Index Measure)은 2004년에 발표된 이미지의 유사도를 측정하는 지표입니다.
오토 엔코더의 과제 중, 오리지널 화상으로부터 만들어지는 생성 화상이 선명하지 않은 특징이 있습니다. 영어로는 Blurred Generated Image라고 합니다. 이 경우 작은 이상을 감지하기 어려운 문제가 있습니다.
기존 오토엔코더에는 mse(mean squared error)를 손실함수로 사용하여 아무래도 선명하지 않은 이미지만 만들 수 있었습니다. 그런데 SSIM을 손실 함수로 사용하면 보다 선명한 생성 화상을 얻을 수 있어 결과적으로 이상 검지의 OK/NG의 판별 성능이 향상되는 결과가 되었습니다. 죄송합니다.
2. 구현 절차
학습 단계와 추론 단계로 나누어 설명합니다.
2.1. 학습 단계
SSIM 사용자 정의 손실 함수 정의
Tensorflow tf.image.ssim
함수를 사용하여 ssim_loss()
의 사용자 지정 손실 함수를 정의합니다.
파라미터 설정은 float32
와 uint8
에 따라 다르므로, 그에 관해서는 Tensorflow 문서를 참조하십시오.
import tensorflow as tf
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
Compile에 loss로 지정
autoencoder라는 모델을 준비합니다.mse
와 사용하는 compile 문과 ssim_loss
를 사용하는 compile 문을 병기하므로 참고하십시오.
SSIM은이 코드를 사용하면 문제없이 학습 할 수 있습니다.
#損失関数 mse
autoencoder.compile(optimizer = 'adam', loss = 'mse')
#損失関数 SSIM
autoencoder.compile(optimizer = 'adam', loss = ssim_loss)
2.2.추론 단계
학습한 모델(h5 파일)을 로드할 때, "이 모델은 SSIM이라는 커스텀 손실 함수를 사용하고 있어요"라고 프로그램에 가르쳐야 합니다.
예를 들어, autoencoder-ssim.h5
드디어 모델을 로드하는 경우는, 아래와 같이 코드를 씁니다.
load_model 추가
from tensorflow.keras.models import load_model
loaded_model = load_model('autoencoder-ssim.h5', custom_objects={'ssim_loss':ssim_loss}
custom_objects
부분을 보자.
custom_objects={'ssim_loss':ssim_loss}
첫 번째 'ssim_loss'는 autoencoder.compile(optimizer = 'adam', loss = ssim_loss)のloss='ssim_loss'
입니다.
두 번째 ssim_loss는 カスタム損失関数名
입니다.
SSIM 함수 설명
위의 이유로 추론 코드도 カスタム損失関数
를 작성합니다. 학습용 코드에 쓴 동일한 커스텀 손실 함수를 쓰면 OK입니다.
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
이것으로 문제없이 SSIM의 학습 모델을 읽어 새로운 데이터로의 추론이 가능합니다.
요약
SSIM의 커스텀 함수를 이용한, 오토 인코더의 학습·추론의 코드의 구현 방법에 대해 해설했습니다.
참고 자료
1. Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders
htps : // 아 rぃ v. rg/아bs/1807.02011
2. 【논문 읽기】신・오토 엔코더로 이상 검지
htps : // 코 m / 신무라 0 / ms / 예 074172 에c3c818b614 에
Reference
이 문제에 관하여(자동 인코더의 SSIM 구현 방법 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kotai2003/items/2d6ab5771fdc57c05507
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import tensorflow as tf
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
#損失関数 mse
autoencoder.compile(optimizer = 'adam', loss = 'mse')
#損失関数 SSIM
autoencoder.compile(optimizer = 'adam', loss = ssim_loss)
from tensorflow.keras.models import load_model
loaded_model = load_model('autoencoder-ssim.h5', custom_objects={'ssim_loss':ssim_loss}
custom_objects={'ssim_loss':ssim_loss}
def ssim_loss(y_true, y_pred):
return 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred,
max_val = 1.0,filter_size=11,
filter_sigma=1.5, k1=0.01, k2=0.03 ))
SSIM의 커스텀 함수를 이용한, 오토 인코더의 학습·추론의 코드의 구현 방법에 대해 해설했습니다.
참고 자료
1. Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders
htps : // 아 rぃ v. rg/아bs/1807.02011
2. 【논문 읽기】신・오토 엔코더로 이상 검지
htps : // 코 m / 신무라 0 / ms / 예 074172 에c3c818b614 에
Reference
이 문제에 관하여(자동 인코더의 SSIM 구현 방법 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kotai2003/items/2d6ab5771fdc57c05507
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(자동 인코더의 SSIM 구현 방법 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kotai2003/items/2d6ab5771fdc57c05507텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)