작성
·
290
0
선생님, 이번에 Kernel과 Filter 차이를 설명하셨는데,
제 이해가 맞는지 검토를 부탁드려도 될까요?
우리가 보통 color image는 R,G,B 총 3개의 (28,28,1) 이미지가 결합이 된 형태이니까 이를 묶어서 (28,28,3) 이렇게 표현을 하고
흑백 이미지의 경우에는 그냥 (28,28,1) 이렇게 표현하잖아요?
그렇게 되면 각각 Channel의 개수는 3,1이 되는 것이구요.
만일 11:54의 Conv2D 조건에서 Input이 RGB 이미지로 주어진다면,
0) 일단 공통적으로 Input (28,28,3)에 대한 Batch 크기는 논외로 여거두고,
1) kernel 정방행렬 한 개를 나눠서 생각해보면 크기는( 3,3,1) 이 되는데, channel 수에 맞추기 위해(RGB) 결국 (3,3,3)이 되는 것이고,
2) filter의 개수가 4개이기 때문에 이 (3,3,3) 크기를 갖는 kernel이 총 4개가 존재한다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
반면 흑백 사진 (28,28,1) 의 경우
0) 공통적으로 Input (28,28,1)에 대한 Batch 크기는 논외로 여겨두고,
1) kernel 정방행렬의 크기는 일단 (3,3)으로 주어지는데 Channel 수에 맞춰야 해서 (3,3,1)이 되는 것이고,
2) filter의 수가 4개이기 때문에 (3,3,1)의 크기를 갖는 kernel이 총 4개가 존재한다
이렇게 흐름으로 나눠서 생각이 되는데 어디부터 잘못이고 어디까지 이해가 잘 되었는지 짚어주시면 감사합니다ㅜㅜ!!
답변 1
2
안녕하십니까,
filter의 채널depth와 filter의 갯수를 헷갈리신것 같습니다.
일반적으로 컬러 이미지에 적용하는 하나의 filter는 3차원입니다. 즉 filter의 채널수(depth)가 3개 입니다.
1개의 filter는 2차원 커널 여러개로 구성될 수 있는데 컬러 이미지에 적용시에는 3개의 커널(즉 채널수가 3개), 흑백 이미지에 적용될 때는 1개의 커널(채널수가 1개 입니다)
이러한 3차원(또는 흑백 이미지의 경우 2차원) filter는 여러개를 적용할 수가 있습니다. 일반적으로 feature map을 만들때는 여러개의 filter 들을 적용합니다. 만약 24x24x3인 1개의 컬러 이미지에 3차원 filter를 12개를 적용하면 (크기가 변하지 않는다고 가정하고) 24x24x12의 차원을 가지는 feature map이 1개가 만들어 집니다.
강의에서도 강조 드리지만, 입력되는 이미지(또는 feature map)에 적용하는 filter의 갯수에 따라서 출력되는 feature map의 채널수(depth)가 결정 됩니다.
정리하면 흑백 이미지에 적용하는 filter는 주로 2차원, 컬러 이미지에 적용하는 filter는 3차원 입니다. 이때 filter 채널수(또는 depth)는 3입니다. kernel은 주로 2차원을 의미하며, 여러개의 kernel을 이뤄서 하나의 filter를 만듭니다.
이렇게 만들어진 3차원(컬러 이미지의 경우) filter는 여러개를 convolution연산에 적용할 수 있습니다. 이 여러개의 filter가 바로 filter의 갯수입니다.
답변 감사합니다, 선생님.
어제도 계속 듣고 혼자 강의 멈추고 예제 내 주신 것을 토대로 이해를 완료하였습니다.
만일 (28 * 28 * 3) Input 입력 filters = 32, kernel_size = 3,strides=1. padding = 'valid' 이렇게 된다면
filter shape는 (3,3,3)이고, 이 filter의 개수가 총 32개,
padding = 'valid'이기 때문에 28-3/ 1 + 1 = 26이므로 ouput feature map의 크기는 (26,26,32)가 되는 것으로 이해하는 것으로 정리할 수 있겠죠?
감사합니다.