AI/MLOps Roadmap(2023) 과정 중 하나인 Denoising에 대해 블로깅 합니다.
제조현장 내외적으로 설비 및 분석장비에서 다양한 방법으로 제품을 촬영하고 이미지를 남기게 됩니다.
대표적인 이미지 촬영 장비는 다음과 같습니다.
- 광학 현미경(Optic, Confocal, Laser)
- 전자 현미경(SEM, TEM)
이러한 현미경이 항상 고품질의 이미지를 잘 찍어주면 좋겠지만, 외부적/환경적/측정사물적 요인에 의해 이미지에 Noise가 끼게 되어 사람의 눈으로 보기 안좋거나 딥러닝 모델 성능에 영향을 미치게 됩니다.
이러한 Noise의 사례들을 살펴보고, 어떠한 기법들을 이용하여 Noise를 제거하여 고품질 이미지를 항상 유지시킬 수 있을지에 대해 설명해 보도록 하겠습니다.
다년간 회사생활을 하면서 현미경, SEM, TEM, FIB, AFM, 3D-현미경 등의 분석장비들을 직접 사용하여 이미지를 촬영 해 분석도 해보고, 설비에서 발생하는 이미지를 딥러닝을 통해 원하는 Task를 수행하는 업무도 진행 하면서 겪은 대표적인 Noise 사례는 아래 3개 정도가 있습니다.
- Out-focusing : 초점을 잘못 잡아 흐려짐
- Gaussian noise : 전자 현미경에서 진공도/백금도금 이상, 해상도가 너무높거나 설비상태가 안좋을 때
- Rotation : 측정사물이 alignment가 제대로 안되었을 경우
위 사례에 대해 SEM 이미지 sample로 한번 구현해서 보도록 하겠습니다.
import matplotlib.pyplot as plt
import numpy as np
import cv2
import skimage
img = cv2.imread('sem.jpg', cv2.IMREAD_GRAYSCALE)
outfocusing_img = cv2.GaussianBlur(img, (7, 7), 3, 3)
noise = np.random.rand(*img.shape) * 127
noise_img = img + noise
rot_img = skimage.transform.rotate(img, -20, mode='reflect')
plt.figure(figsize=(12,8))
plt.subplot(141)
plt.imshow(img, 'gray')
plt.axis('off')
plt.title('original image')
plt.subplot(142)
plt.imshow(outfocusing_img, 'gray')
plt.axis('off')
plt.title('out focusing')
plt.subplot(143)
plt.imshow(noise_img, 'gray')
plt.axis('off')
plt.title('gaussian noise')
plt.subplot(144)
plt.imshow(rot_img, 'gray')
plt.axis('off')
plt.title('rotation')
plt.show()

이제 이러한 noise 이미지를 original image로 복원하기 위한 기법들에 대해 알아 보도록 하겠습니다.
Denoising 기법으로는 크게 두가지로 구분을 하고자 합니다.
- Computer Vision 기법을 통한 수식적 접근
- Deep Learning 기법을 통한 학습적 접근
이번 블로그에서는 Computer Vision 기법은 생략 하도록 하겠습니다.
관련된 내용은 smoothing, cv2.fastNlMeansDenoising 등을 검색해서 참고하도록 합니다.
Deep Learning 을 통한 Denoising 기법은 크게 또 2가지로 구분할 수 있을 것 같습니다.
두 가지 방법에 대해 Image Dataset 을 가지고 직접 구현해보도록 하자.
MNIST 예시는 너무 성능이 좋으니, 더 현실적인 이미지로 구현을 해보자!
cat-dog Dataset 에서, cat(ㅈ냥이)으로만 Denoising을 구현 하도록 해본다.
Traning - 4000장
Test - 1000장 중 일부를 발췌

모델은 총 2개로 구성하고 평가해보고자 한다.


🤗 모델구현은 직접 보여주도록 하겠습니다!
Diffusion 모델은 Vision 분야의 Generative Model의 혁명을 불러 일으킨 모델입니다.
GAN 모델이 나왔을 당시 엄청난 파장을 불러 일으켰지만, 실제 GAN을 사용하기에는 Generator 와 Discriminator 두 개를 Balance를 유지하면서 학습시키기가 매우 힘들어 좋은 성능을 내기가 힘든 점이 있었지만, Dolle2 를 시작으로 Diffusuin 모델(Stable-Diffusion)이 아주 좋은 성능를 내면서 아주 Hot한 모델이 되었습니다.
이런 Diffusion 모델은 Gaussian Noise를 이용한 연구를 통해 만들어 졌습니다.
모두가 쉽게 이해할 수 있는 블로그에 대해 설명을 드릴게요.
