본 포스팅은 2022-11-09(수), 2022-11-14(월), 국민대학교 김장호교수님의 컴퓨터 비전 수업을 통해 배운내용을 정리하기 위한 게시글입니다.
# Convolution Layer
컴퓨터 비전 초기에 공부했던 필터들을 신경망에 적용하는 것이다. 개념은 똑같다. 그 개념들은 위 게시글을 참고해 보자.
## 단일 사진 / 단일 필터
Image 데이터는 n*m의 크기를 가짐과 동시에 Channel이라는 것이 존재한다. Channel은 RGB의 값을 가진다. 이 값을 우리는 depth라고도 부른다.
이제 해당 이미지에 적용될 필터가 필요하다. 당연하게도 필터는 Channel의 수만큼 존재해야 한다. 그리고 필터는 이미지에 컨볼루션 연산을 진행한다. 그리고 이 값들은 합쳐져서 한개의 값이 나온다.
3*32*32의 Image에 3*5*5의 필터를 씌우면 해당 필터를 통해 얻은 하나의 Feature-map이 나올 것이다.
그리고 이 Feature-map은 기존의 이미지보단 작은 크기를 가진다. 이 크기를 유지시키기 위해서 Padding이라는 작업을 하기도 하는데 뒤에서 다루도록 하겠다. Feature-map의 크기는 (원본 이미지)-(필터의 크기) +1의 크기를 가진다 즉 32-5+1 = 28의 값이 나오기 때문에 해당 Feature-map은 28*28의 크기가 된다. 이 Feature-map은 다음 Layer의 input으로 들어갈 수 있을 것이다.
## 단일 사진 / 다중 필터
한 이미지(Input)에 대해서 여러개의 필터를 적용할수 있다. 여러개의 필터는 (Channel)*(필터가로)*(필터세로)에 필터의 갯수를 곱해주는 것이다.
즉 우리가 기존에 하나의 필터 ( 3*5*5 )만을 이용해 한 이미지에 적용했다면, 6개의 필터를 만들어 한 이미지 적용할 수 있다. 그렇다면 위와 같은 결과가 나온다. 한 필터는 하나의 출력(Feature-map)을 만들기때문에 6개의 필터라면 6개의 Feature-map이 만들어진다.
## 다중 사진 / 다중 필터
그렇다면 Batch가 2인 경우, 즉 Image가 2장 들어왔다면?!
위와 같이 될것이다. 6개의 3*5*5의 필터가 두장의 이미지 각각의 적용 될 것이다. 2*6 총 12개의 출력이 생긴다.
이를 공식화 해본다면,
입력 : N * ( Channel ) * Height * Width
필터 : (필터 갯수) * ( Channel ) * (Filter_height) * (Filter_width)
N * (필터 갯수) * (new_height) * (new_width)가 될 것이다. 출력의 height와 width는 인풋크기, 필터크기, stride등에 의해 결정 된다.
# Convolutions를 쌓아보자
일반적으로 위와 같이 쌓임이 진행됨을 알 수 있다. Channel의 갯수는 맞춰 줘야 한다.
이후 비선형 적인 특성을 주기 위해서 활성함수를 중간에 넣어주도록 개선해보자. 비선형성을 줘야하는 이유는 앞전에 공부했었다!
# 필터와 input에 따른 출력 계산
## Padding이 없을 경우
위에서 봤던 W-K+1의 공식으로 유추가 된다.
## Padding
출력의 크기를 줄어들지 않기 위해서 input값에 Padding을 추가해 줄 수 있다.
- Padding은 (K-1) / 2로 구할 수 있다.
- OutPut은 W-K+1+2P로 구할 수 있다.
## Stride
필터의 보폭을 조절하여 출력 사이즈를 downsize시킬 수 있다. 예를 들어 보폭을 2로 설정한다면 필터는 위 파란색 원과 같이 돌게 될 것이다.
이런 경우에 Output은 아래와 같이 구한다.
# 끝
output 크기를 구하는 문제는 시험에 내기 좋을 것 같다.
정말 교수님이 악심을 품으신다면, 파라메타의 갯수를 구하라고도 할 수 있을 것 같다.
셤 기간이 되면 공부해 두자!