📌 이 글은 권철민님의 딥러닝 CNN 완벽 가이드를 바탕으로 정리한 내용입니다.


목차

  1. 다채널 Input에 여러 개의 Filter 적용
  2. Filter 채널수와 개수, 그리고 입력과 출력 Feature map의 채널수 관계
  3. 다채널 Input의 Convolution Filter 적용 메커니즘
  4. 다채널 Input에 3x3 Filter 적용 메커니즘
  5. Quiz 1. Filter, Kernel, Channel 수
  6. Quiz 2. Filter의 shape

다채널 Input에 여러 개의 Filter 적용

지금까지 이해를 돕기 위해 Filter를 2차원(면적)으로 표현했지만 일반적으로 Filter는 3차원이며,

CNN에서는 이 3차원 Filter 여러개를 개별 Feature map에 적용하는 방식이다.


Filter 채널수와 개수, 그리고 입력과 출력 Feature map의 채널수 관계

Convolution 연산을 적용할 Filter의 채널 수는 입력 Feature map의 채널 수와 같아야 한다.

Convolution 연산을 적용한 Filter의 개수는 출력 Feature map의 채널 수가 된다.

Filter

입력이미지는 RGB니까 3차원이다.

하나의 단일 Filter는 여러개의 커널을 가진다.

그리고 여러개의 커널 갯수를 채널수라고 한다.

또한 Filter의 채널수가 커널 갯수이다. 

즉, Channel = Kernel

단일 필터의 채널수는 위의 입력 피쳐맵에서 6x6x(3) 과 맞아야 한다. 

 

input_tensor = Input(shape=(28, 28, 1))

x = Conv2D(filters=32, kernel_size=3, strides=1, padding='same', activation='relu')(input_tensor)
# 3by3 커널, depth=1인 필터가 32개가 있는 layer

x = Conv2D(filters=64, kernel_size=3, activation='relu')(x)
# 3by3 커널, depth=32인 필터가 64개가 있는 layer

x = MaxPooling2D(2)(x)

model = Model(inputs=input_tensor, outputs=x)
model.summary()

 

모델을 만들 때, Conv2D 연산을 보면 단일 Filter의 채널 수가 나와있지 않다.

무조건 같을 것 이라고 생각을 하는 것이다. input_tensor의 차원Conv2D의 채널수가.

 

위에서 단일 Filter의 채널 수는 1이다. (28, 28, 1)

그리고 첫번째 Conv2D 연산의 output은 Filter의 갯수 만큼인 32개가 나왔다. (28, 28, 32)

그런데 또 Conv2D 연산을 적용하려면, 

두번째 Conv2D의 단일 필터의 채널 개수는 32여야만 한다.

단일 필터의 32개의 커널이 들어가 있는 것이 적용이 되는 것이다.

이것들이 생략이 되고 계산이 된다. 당연히 맞아야 하기 때문이다.

다르면 계산이 안된다.

 

320 = (3x3x1<depth>)x32 + 32<bias> = 크기가 3x3 이고 depth가 1인 커널이 32개가 있다.

 

18496 = (3x3x32<depth>)x64 + (3x3x32)<bias> = 크기가 3x3 이고 depth가 32인 커널이 64개가 있다.


다채널 Input의 Convolution Filter 적용 메커니즘

input의 채널 수와 Filter의 채널 수는 무조건 같아야 계산이 된다.

Filter가 1개이기 때문에 Feature map의 채널수는 1이다.

 

 


다채널 Input에 3x3 Filter 적용 메커니즘

https://i.stack.imgur.com/uDgke.gif

 


다채널 Input에 여러개의 Filter 적용

 

 

 

https://cs231n.github.io/convolutional-networks/

입력 피쳐맵이 3차원이면 당연히 똑같이 양옆으로 계산하므로 단일 필터의 갯수는 3개이다.


Quiz. Filter, Kernel, Channel 수

Filter의 개수는?

Kernel의 크기는?

Filter의 Channel 수는?

출력 Feature map의 Channel 수는?

 

정답 확인

더보기

Filter 개수 : 128개

Kernel 크기 : 3x3

Filter의 Channel 수 : 3개 (= input에 들어있는 채널의 수:3개(7x7x3))

출력 Feature map의 Channel 수 : 128개 (Filter가 128개 이기 때문)

 


Quiz. Filter의 shape

 

위의 두 Network 에서 각 Layer에 적용된 Filter의 Shape는?

 

정답 확인

더보기

1. 5x5x1,  5x5x6

2. 11x11x3,  5x5x96  

 

 

첫번째는 피쳐맵의 채널이 6개(6x)가 있고 colvolution 연산은 5x5 이다.

고로 Filter의 개수는 6개이다.

Filter의 size는 5x5

input의 채널 수는 1개이다.

따라서 (5x5x1)의 Filter 6개가 연산이 된다.

 

두번째는 convolution 연산도 5x5로 계산 된다.

단일 Filter에 들어가는 채널 개수는 당연히 6개이다.

따라서서 (5x5x6)의 Filter 16개가 연산이 된다.

 

첫번째는 11x11 커널 사이즈를 가지는 걸로 convolution 연산을 진행한다.

여기서 단일 Filter의 채널수는 3개이다.

그리고 Filter의 개수는 96개이다.

왜냐하면 output으로 96개가 나왔기 때문이다.

따라서 (11x11x3)의 Filter 96개가 연산이 된다.

x = Conv2D(filters=96, kernel_size=11, strides=4)(input_tensor)

 

두번째는 5x5 커널 사이즈를 가지는 걸로 convolution 연산을 진행한다.

패딩은 same을 주고 단일 Filter의 채널은 96개이다.

그리고 Filter는 256개이다.

따라서 (5x5x96)의 Filter 256개가 연산이 된다.

 

복사했습니다!