본문 바로가기

Study/Project

[졸업 작품] Image Denoising & Colorizing Network.

Image Denoising & Colorizing Network.


- 2018년

** 제가 졸업 작품을 위해 공부한 내용을 정리한 것이라 매우 간략합니다. 자세한 구조, 학습 방법과 같은 것은 생략하겠습니다. **

 

1. MOTIVATION


영상을 이용하는 application은 영상의 품질이 성능을 좌우한다고 볼 수 있다. 

(e.g. object detection)


하지만, 영상의 품질은 우리가 원하던 것처럼 항상 좋을 수 없다.  전기적 간섭과 같은 환경적인 요인에 의해서 noise라는 원치 않는 pixel 값을 갖게된다. 


이러한 noise를 제거하는 기존의 방법은, 주변 pixel의 값을 이용하는 것이다.

(주변 pixel의 값을 평균을 내서 적용하거나, 최대 또는 최소값을 이용하거나...)


이러한 방법은 object의 edge나 corner 같은 high frequency 성분을 뭉게는 단점이 존재한다.


따라서, 사람은 직관적으로 주변 pixel과 다른 색상을 찾아낼 수 있음에 착안하여 deep learning을 적용하여 찾아보는 것이 어떨까 하는 생각이 들어 조사를 시작했다.


당연하게도 이미 많은 연구들이 진행되고 있었고, 나는 그 중 DnCNN이라 하는 Gaussian noise를 제거하는 논문을 공부하기 시작하였다.



2. Denoising Network


2.1 DnCNN


DnCNN은 여러가지 버전(?)으로 다시 나뉘는데, grayscale을 위한 model, color를 위한 model로 크게 분류할 수 있다.

나는 그 중 grayscale을 위한 model을 공부하였다.

해당 model은 총 17개의 layer로 구성되어 있다. layer 내부 구성은 위의 그림과 같다.

이 구조에서 가장 중요한 점은 그림에서는 표현되지 않았지만, skip connection을 두었다는 것이다. 

skip connection의 위치는 입력 이미지와 출력 이미지를 연결하고 있다.

이 skip connection이 중요한 이유는 학습의 target을 denoise된 영상이 아니라, 영상 내에 존재하는 noise를 추론하도록 하기 때문인데,

따라서, network는 noise를 추론하도록 훈련되고, network의 출력을 skip connection을 통해 입력과 감산연산을 하여 denoise된 영상을 얻는다.


2.2 DnCNN's results

(좌측부터, noisy, reference, denoised)



2.3 Proposed Network


     DnCNN과 마찬가지로, denoising을 하는 network에서 자주 발생하는 문제는 over blurring이다.  위의 그림에서


볼 수 있듯이, reference 이미지가 가진 돌의 질감까지도 noise로 인식하여 제거하였다. 


나는 이러한 문제를 high frequency 성분을 지우는 것으로 보고 noisy 이미지로 부터 noise가 아닌 high 


frequency 성분만을 얻을 수 있다면, 복원할 수 있을 것으로 생각하였다. (당연한 이야기지만;;)


하지만, noise가 아닌 high frequency만을 얻는 것은 생각보다 어려웠다.


따라서, DnCNN에서 추론한 noise를 이용해보기로 하였다. (즉, 내가 만든 model의 출력인 high frequency에서 


DnCNN이 추론한 noise를 감산한다면 noise가 없는 high frequency를 얻을 수 있지 않을까였다.)


noise에도 low frequency 성분이 존재할 수 있어 성능이 안좋을 것이라 생각했고 비슷하게만 가자는 생각으로 


network를 훈련시켰다.



위 그림과 같은 구조로 진행하였고, 실제 PSNR값이 DnCNN보다 0.4 정도 낮게 나왔지만, 


사진과 같이 사람의 주름과 같은 detail한 부분을 많이 살린 것을 확인 할 수 있다.

PSNR이 0.4 낮았지만, 나만의 IDEA를 적용했다 생각해서 만족하였다. 




3. Colorizing Network


3.1 cGAN


이 블로그에 GAN에 대해서 공부한 내용이 있어서 cGAN에 대해 바로 설명하겠습니다.


      GAN은 자유롭게 결과를 도출하지만 그 자유로움 때문에 원하는 결과를 얻기 위해선 많은 반복을 할 수도 있다.

(e.g. MNIST dataset으로 학습한 경우, 만약 내가 숫자 5를 GAN으로 얻고 싶으나, network가 항상 5를 만들어내진 않는다. 5를 만들어낼 때까지 반복해야한다.)


따라서, 사람들은 일정 조건을 추가하고 싶어졌고 이러한 needs로 cGAN이 등장한다. (conditional GAN)

.

.

.

.

.

(cGAN에 대한 자세한 내용은 시간이 날 때 정리해서 올리겠습니다.)

.

.

.

.


나는 이러한 cGAN을 이용하여 grayscale의 영상을 color 영상으로 채색해보고 싶었다.

 (GAN을 공부하다 알게 되었고 흥미가 생겨 적용해보고자 하였다.)


따라서, denoising된 결과를 다시 cGAN의 입력으로 받아 채색하고 그 결과를 최종 결과로 한다.


 

3.2 cGAN's results





4. Conclusion




졸업 작품을 위해 공부한 기간 1년, 졸업 작품을 진행하면서 공부한 기간 1년. 실패를 거듭하면서 network를 


훈련시킨 시간만 총 시간 1108시간. 결국 완성했다.ㅜㅜㅜㅜ


생각대로 되지 않아 정말 몸과 맘이 힘들었는데, 끝을 보고나니 내가 4년동안 수업받았던 것을 기초로 나 혼자 


공부하여 얻은 것들을 결국 다 보여준 것 같아 기뻤다. 


비록, 성능 면에서 참조한 논문들보다 안 나와 안타깝긴 하지만. 노력한 만큼 보상받는 거라 생각하고 더 노력하


면 된다고 생각한다.