작성자 : 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
Convolution은 합성곱을 의미한다. CNN에서는 Filter라고 부르는 weight를 이미지에 곱해준다.
이때 input은 이미지의 height, width, depth를 그대로 받아주고 filter는 이미지보다 작은 크기의 height와 width를 가지지만 depth는 같은 크기로 가진다.
이때 Filter를 이미지에 슬라이딩하면서 dot product를 진행한다. 여기에 bias 값을 더하여 출력 값을 구한다.
따라서 32x32x3 이미지에 5x5x3 필터를 convolve 하면 28x28x1 크기의 activation map이 나오게 된다.
CNN은 다양한 filter를 사용하여 convlution을 진행한다. 예를 들어 6개의 5x5필터를 사용하면 6개의 activation map이 만들어지고,이를 stack 하면 28x28x6 크기의 이미지가 만들어지게 된다.
Convolution layer를 계산할 때 stride를 설정할 수 있다. Stride는 filter가 슬라이딩할 때 얼마나 움직일지 정해준다. 앞서 설명한 모델은 stride 1의 크기를 가지고 convolution이 진행됐다. Stride가 2인 경우엔 다음과 같이 진행된다.
이때 이미지 사이즈, 필터 사이즈, stride 사이즈, 아웃풋 사이즈 사이의 관계를 수식화 하면 다음과 같다.
Convolution의 특성상 이미지의 크기는 점점 작아지게 된다. 또한 아웃풋 사이즈가 나누어 떨어지지 않을 수 있다. 이 경우엔 padding을 진행하기도 한다. Padding이란 임의적으로 이미지의 border를 추가하여 이미지의 사이즈를 키워주는 방법이다. 가장 대표적인 예시는 0으로 padding 하는 zero padding이다.
Dive Into Deep Learning/RNN 소개 + 구현 (1) | 2022.11.27 |
---|---|
[Dive into Deep Learning / CNN] CNN 구현해보기 (0) | 2022.11.21 |
[Dive into Deep Learning/3주차] Optimization Algorithm (0) | 2022.11.16 |
[Dive into Deep Learning / CNN] AlexNet (0) | 2022.11.16 |
[Dive into Deep Learning / CNN] Fully connected layer / pooling layer (0) | 2022.11.13 |
댓글 영역