CNN

·2023년 7월 8일
0

영상처리 딥러닝

목록 보기
7/7
post-thumbnail

🔎 CNN이란?

Convolution Neural Network, 합성곱 신경망.
이미지, 영상 데이터에 주로 사용되는 딥러닝 모델이다.


CNN 등장 배경

DNN은 기본적으로 1차원 형태의 데이터를 사용하기 때문에, 2차원 이미지가 입력되는 경우 공간적/지역적(spatial/topological) 정보가 손실된다. 또한 추상화 과정 없이 바로 연산 과정으로 넘어가기 때문에 비효율적인 학습을 한다.

이로부터 고안된 해결책이 CNN이다. CNN은 이미지를 날 것 그대로 입력받기 때문에 공간적/지역적 정보를 유지한 채 특성 계층을 빌드업한다.

CNN의 중요한 특징은 아래와 같다.

  • 이미지 전체가 아니라 부분을 보는 것
  • 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살리는 것

예를 들어, 새인지 아닌지를 분류하는 모델을 만든다고 가정하자.
새의 특징은 여러 가지가 있지만, 우리는 부리의 유무를 기준으로 판가름해보자.
이미지에 부리가 있다면 새인 것이고, 없다면 새가 아닌 것이다.
그렇다면 이미지에서 부리가 있는지 없는지 확인을 해야하는데, 이 때 모델이 이미지의 전체를 보는 것이 아니라 일부를 잘라서 보는 것이 더 효율적이다.
이 방법을 사용하는 것이 CNN이다.



🔎 Convolution

연산 과정

우리는 입력된 이미지를 커널(필터)에 넣어줄 것이다.

입력 이미지의 모든 부분에 필터를 적용하고, 우리가 원하는 패턴(위의 예시에서는 부리)을 찾아 처리하는 것이다.

필터를 적용할 때는 행렬곱이 사용된다.

필터를 한 칸 씩 옆으로 옮겨주며 연산을 계속해준다.

이렇게 연산을 마무리하면, 행렬이 결과로 나온다.

입력, 필터, 결과 행렬의 관계를 수식으로 정리하면 아래와 같은 식이 나온다.

입력값 : d_1 x d_2
필터 : k_1 x k_2
결과값 : (d_1 - k_1 + 1) x (d_2 - k_2 + 1)

결과값은 입력된 이미지와 크기가 다르다는 것을 눈치 챌 수 있다.
즉, 손실이 발생한다.


Zero Padding

위 Convolution에서는 5x5 이미지가 3x3으로 줄어들었다.
손실되는 부분이 발생한다는 뜻이다.
결과값도 입력값과 같게 하고 싶다면 어떻게 해야할까?

이 때 사용되는 것이 zero padding이다. 이미지의 주변을 0으로 감싸는 것이다.
zero padding의 크기는 이미지를 0으로 몇 겹 감싸는지를 의미한다.

위 사진은 zero padding1이다.

앞선 convolution 연산에서는 zero padding2로 적용하면(7x7) 손실을 없앨 수 있다.

💡 입력과 출력이 같도록 해주는 zero paddinghalf padding이라고 한다.

💡 최소 1개의 픽셀이라도 필터에 들어가도록 하는 zero paddingfull padding이라고 한다.


Stride

stride는 필터를 옆으로 몇 칸 옮길 지 정하는 값이다.
앞선 예시에서는 stride가 1이었고,
위 사진에서는 stride가 2이다.



📑 참조
https://halfundecided.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-cnn-convolutional-neural-networks-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-836869f88375
https://kionkim.github.io/2018/06/08/Convolution_arithmetic/
https://www.youtube.com/watch?v=ggBQj1NXUEg

0개의 댓글