Day 31 - 딥러닝 > U-Net & RNN

2022. 11. 22. 21:54Python

이번 글에서는 딥러닝 알고리즘 중 U-Net과 RNN에 대해 다룰 것이다.

 

딥러닝의 이미지 처리 방식은 분류 외에도 다양한 방법들이 있다. 대표적으로 이미지가 어디에 있는지 예측하는 객체 탐지, 이미지의 모든 픽셀을 분류하는 세그멘테이션, 이미지의 노이즈를 거르는 디노이징 등이 있다. U-Net은 이 중 세그멘테이션과 디노이징을 정보를 압축하는 인코더와 복구하는 디코더 구조를 통해 수행하는 딥러닝 모델이다.

U-Net은 인코더의 출력을 디코더의 입력으로 사용하여 정보를 복원할 때 추출한 특징을 참고한다. U-Net의 인코더는 입력받은 이미지를 합성곱을 통해 추출하는데, 해당 과정에서 이미지의 크기가 작아지고 정보가 압축된다. 이후 업샘플링을 활용한 디코딩 과정을 통해 최종적으로 입력과 같은 크기의 이미지를 출력하게 된다.

  • 합성곱: 이미지가 작아진다. 커널을 통해 특징을 추출하는 연산으로, 커널의 가중치가 이미지의 픽셀에 곱해져서 하나의 출력을 계산한다.
  • 업샘플링: 이미지가 커진다. 커널을 통해 특징으로부터 이미지를 복원하는 연산으로, 하나의 픽셀이 커널의 가중치와 곱해져 출력을 계산한다. 전치 합성곱을 이용하며, 복원된 특징은 합성곱을 통해 추출된 특징과 합쳐진다.

U-Net의 장점은 디코더에서 인코더의 정보를 참조 가능하며, 복원할 대상의 정보를 얻을 수 있다는 점이다. 반면, 인코더의 출력과 디코더의 입력이 동일해야 하기 때문에 설계가 자유롭지 않고 인코더 계산의 결과를 저장해야 하기 때문에 메모리가 많이 필요하다는 단점이 있다.

 

U-Net 실습 Link: https://colab.research.google.com/drive/1EjDMd3rKfS47QNPt9xi3sAGO78Mvx0Qn#scrollTo=wICPysWTdDhx

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

딥러닝에서도 마찬가지로, 데이터에 순서가 존재할 때 이를 무시하고 데이터 전체를 입력할 시 제대로 학습이 되지 않아 모델 성능에 악영향을 준다. 이러한 시계열 데이터의 경우 데이터가 순차적으로 입력되어야 하기 때문에, 모델이 내보낸 과거의 출력을 다시 입력으로 넣어야 한다. 이런 방식을 일컬어 신경망이 순환한다고 하고, 순환하는 인공 신경망을 RNN이라고 부른다.

RNN에서 신경망의 한 층은 하나의 시점을 가르키게 되어, 순서가 있는 데이터(주가, 날씨 등)를 다루는 데 적합하며 동영상의 각 프레임의 특징을 시간별로 추출하는데 활용할 수 있다.

RNN의 장점은 이전 시점의 정보를 현재 시점에서 이용하는 등의 시간 추출이 가능하다는 점과, 같은 가중치를 반복 사용하기 때문에 가중치 수가 적다는 점이 있다. 반면 단점으로는, 같은 가중치를 반복 사용하기 때문에 연산에 시간이 오래 걸린다는 점과, 시계열이 길어질 수록 앞의 정보가 점점 흐려진다는 점이 있다.

 

RNN 실습 Link:

https://colab.research.google.com/drive/1PAl8bxdiC46gItmMsNnpwg_R3qC2UL69#scrollTo=2-bL4AzMZjsb

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com