상세 컨텐츠

본문 제목

[Dive into Deep Learning / CNN] Convolution Layer

심화 스터디/Dive into Deep Learning

by 원준천 2022. 11. 18. 15:25

본문

작성자 : 16기 천원준

본 포스팅은 다음 자료들을 참고하여 작성되었습니다.

- https://www.youtube.com/watch?v=bNb2fEVKeEo&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=5

- https://velog.io/@fbdp1202/CS231n-%EC%A0%95%EB%A6%AC-5.-Convolutional-Neural-Networks

- https://d2l.ai/chapter_convolutional-neural-networks/index.htmlhttps://wikidocs.net/28#_9

 


1. Convolution layer

Convolution은 합성곱을 의미한다. CNN에서는 Filter라고 부르는 weight를 이미지에 곱해준다.

이때 input은 이미지의 height, width, depth를 그대로 받아주고 filter는 이미지보다 작은 크기의 heightwidth를 가지지만 depth는 같은 크기로 가진다.

이미지와 필터 사이의 관계를 나타낸다

이때 Filter를 이미지에 슬라이딩하면서 dot product를 진행한다. 여기에 bias 값을 더하여 출력 값을 구한다.

따라서 32x32x3 이미지에 5x5x3 필터를 convolve 하면 28x28x1 크기의 activation map이 나오게 된다.

하나의 필터는 하나의 activation map을 생성한다

CNN은 다양한 filter를 사용하여 convlution을 진행한다. 예를 들어 6개의 5x5필터를 사용하면 6개의 activation map이 만들어지고,이를 stack 하면 28x28x6 크기의 이미지가 만들어지게 된다.

 

Activation maps를 stack하여 새로운 이미지 생성


2. Padding and Stride

Convolution layer를 계산할 때 stride를 설정할 수 있다. Stridefilter가 슬라이딩할 때 얼마나 움직일지 정해준다. 앞서 설명한 모델은 stride 1의 크기를 가지고 convolution이 진행됐다. Stride가 2인 경우엔 다음과 같이 진행된다.

5x5 이미지를 3x3 필터로 convolve하면 2x2 아웃풋이 나온다.

이때 이미지 사이즈, 필터 사이즈, stride 사이즈, 아웃풋 사이즈 사이의 관계를 수식화 하면 다음과 같다.

Depth는 유지된다는걸 기억하자

Convolution의 특성상 이미지의 크기는 점점 작아지게 된다. 또한 아웃풋 사이즈가 나누어 떨어지지 않을 수 있다. 이 경우엔 padding을 진행하기도 한다. Padding이란 임의적으로 이미지의 border를 추가하여 이미지의 사이즈를 키워주는 방법이다. 가장 대표적인 예시는 0으로 padding 하는 zero padding이다.

Padding을 통해 convolution이 진행되고 난 후에도 원본 이미지의 사이즈를 유지했다

관련글 더보기

댓글 영역