Denoising - 1

곤돌이·2023년 6월 2일

딥러닝 교육

목록 보기
3/4

AI/MLOps Roadmap(2023) 과정 중 하나인 Denoising에 대해 블로깅 합니다.

1. Denoising 이 필요한 이유

제조현장 내외적으로 설비 및 분석장비에서 다양한 방법으로 제품을 촬영하고 이미지를 남기게 됩니다.
대표적인 이미지 촬영 장비는 다음과 같습니다.

  • 광학 현미경(Optic, Confocal, Laser)
  • 전자 현미경(SEM, TEM)

이러한 현미경이 항상 고품질의 이미지를 잘 찍어주면 좋겠지만, 외부적/환경적/측정사물적 요인에 의해 이미지에 Noise가 끼게 되어 사람의 눈으로 보기 안좋거나 딥러닝 모델 성능에 영향을 미치게 됩니다.
이러한 Noise의 사례들을 살펴보고, 어떠한 기법들을 이용하여 Noise를 제거하여 고품질 이미지를 항상 유지시킬 수 있을지에 대해 설명해 보도록 하겠습니다.

2. Denoising 사례

다년간 회사생활을 하면서 현미경, SEM, TEM, FIB, AFM, 3D-현미경 등의 분석장비들을 직접 사용하여 이미지를 촬영 해 분석도 해보고, 설비에서 발생하는 이미지를 딥러닝을 통해 원하는 Task를 수행하는 업무도 진행 하면서 겪은 대표적인 Noise 사례는 아래 3개 정도가 있습니다.

  1. Out-focusing : 초점을 잘못 잡아 흐려짐
  2. Gaussian noise : 전자 현미경에서 진공도/백금도금 이상, 해상도가 너무높거나 설비상태가 안좋을 때
  3. 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로 복원하기 위한 기법들에 대해 알아 보도록 하겠습니다.

3. Denoising 기법들

Denoising 기법으로는 크게 두가지로 구분을 하고자 합니다.

  1. Computer Vision 기법을 통한 수식적 접근
  2. Deep Learning 기법을 통한 학습적 접근

이번 블로그에서는 Computer Vision 기법은 생략 하도록 하겠습니다.
관련된 내용은 smoothing, cv2.fastNlMeansDenoising 등을 검색해서 참고하도록 합니다.

Deep Learning 을 통한 Denoising 기법은 크게 또 2가지로 구분할 수 있을 것 같습니다.

  1. Generative Model : GAN
  2. Auto-Encoder : DAE

두 가지 방법에 대해 Image Dataset 을 가지고 직접 구현해보도록 하자.
MNIST 예시는 너무 성능이 좋으니, 더 현실적인 이미지로 구현을 해보자!

4. Denoising 구현

cat-dog Dataset 에서, cat(ㅈ냥이)으로만 Denoising을 구현 하도록 해본다.
Traning - 4000장
Test - 1000장 중 일부를 발췌

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

  1. DAE : 원본에 Noise를 섞은 이미지를 Input으로 넣고, 원본을 Output으로 하여 Loss 계산 및 Optimizer 진행
  2. GAN : SRGAN (Super Resolution GAN) 기반으로 구현

🤗 모델구현은 직접 보여주도록 하겠습니다!

5. Noise 잘 활용한 방법 : Diffusion

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

profile
Data Scientist

0개의 댓글