본문 바로가기
Research/Deep Learning & Application

다양한 Convolution Layer

by IMCOMKING 2020. 1. 30.

Convolution

기본적으로 convolution layer는 fully connected layer에서 spatial(이미지의 가로세로) 영역을 잘게 쪼개고, 그만큼 weight sharing을 시킨 아키텍쳐이다.
그러나 feature dimension(=channel, depth)에 대해서는 여전히 fully connected를 유지하고 있다. 즉 모든 input channel을 섞어서 각각의 output channel로 연결하는 과정이 fully connected라는 의미이다. 수식으로 말하자면 input channel이 256 dim이고 output channel이 128 dim이라면, feature dim에 대한 weight matrix는 [256x128]로 fully connected 이다.

Grouped Convolution

속칭 그룹 convolution은 아주 간단히말해 input channel을 N등분 시켜서 group단위로 channel을 쪼개고, 그 group 대해서 각각 일반 convolution을 한 것이다.
쉽게 말하면 위의 예시에서 2개의 group을 가진 grouped convolution을 적용하면, input과 output channel을 2개의 그룹으로 나누고, 각각에 대해 [128x64]의 weight matrix를 구하는 것이다. 즉 feature dim에 대해 fully connected가 아닌 쪼개진 convolution을 하겠다는 것이다.

Depth-wise Convolution

한줄로 말하면 위의 Grouped Convolution에서 group의 개수를 input channel의 개수만큼 만들겠다는 것이다. 즉 1개의 group에 1개의 channel만 들어가 있다. 즉 input channel이 RGB였다면, R에 해당하는 정보만 보는 convolution, G만 보는 convolution, B만 보는 convolution을 만들겠다는 것이다. 이렇게하면 항상 output channel의 개수는 input channel과 같을 수 밖에 없다. 이 방식은 서로 다른 feature를 섞지 않지만, 대신 spatial로만 정보를 섞겠다는 의미이다. 즉 Red channel의 정보를 3x3의 픽셀에 대해서 고려하겠다라는 의미이다. 이러한 아키텍쳐는 point-wise convolution(1x1 convolution)과 같이 등장하는 경우가 많으며, 각각 역할을 분리하여 하나는 spatial 정보만 섞고, 하나는 feature dim에대한 정보만 섞는 역할을 하게 된다. 이러한 것을 통칭해 seperable convolution이라고도 한다.

Point-wise Convolution( 1 x 1 Convolution )

앞에서 등장한 depth-wise convolution이 오직 spatial dimension의 정보만 섞었다라면, 이번에는 반대로 spatial dimension의 정보는 섞지 않고 오직 channel dimension의 정보만 섞는 아키텍쳐가 바로 point-wise convolution이다. 이에 대한 구현은 아주 간단하게 2d conv의 kernel size를 (1, 1)로 넣으면 되기 때문에 1x1 convolution이란 이름으로도 널리 불린다.  즉 공간적인 의미의 고려 없이 오직 feature dim에 대해서만 fully connected를 수행하는 아키텍쳐라고 볼 수 있다.

Depth-wise Seperable Convolution
  = Depth-wise Convolution -> Point-wise Convolution

앞에서도 살짝 언급되었지만, 일반적인 convolution이 spatial과 channel의 정보를 한 번에 뒤섞는 아키텍쳐라면 depth-wise seperable convolution은 이 두가지를 완전히 분리하여 처리하는 아키텍쳐를 의미한다. 그래서 일단 이미지가 들어오면 먼저 spatial정보만 섞는 depth-wise convolution을 일단 수행하고, 그렇게 나온 feature에 point-wise convolution을 수행하여 이번에는 channel정보에 대해서 섞겠다는 의미이다.

이렇게 두가지를 완전히 분리할 경우, 기존의 일반 convolution에 훨씬 더 적은 연산량과 파라미터로 유사한 기능을 수행 할 수 있다. 그리고 이는 더 적은 overfitting을 가지므로 더 높은 성능을 낸다.


좋은 참고 문서


댓글