오늘은 맑음

convolution transpose/ conv2d_transpose 본문

Deep learning

convolution transpose/ conv2d_transpose

자전거 타는 구구 2020. 4. 20. 20:22
반응형

Autoencoder에서 encoding을 통해 feature를 추출하였다면 그 다음은 추출된 feature를 기반으로 다시 decoding을 하여 원래 이미지의 사이즈를 거치는 과정을 갖는다.

decoding과정에서 다시 feature map의 사이즈를 키우는 과정을 Upsampling이라고 하는데 대표적으로 두 가지 방법이 있다.

1. max pooling

2. convolution transpose

 max pooling을 이용한 Upsampling은 과정이 convolution tanspose에 비해 단순하지만 전체적인 성능을 보자면 convolution연산을 거쳐 한번 더 feature를 추출해내서 Upsampling을 거치는 convolutoin transpose가 더 뛰어나기 때문에 최근에 주로 사용이 되고 있다.

conv2d_transpose를 설명할 때 사용되는 기호의 정의는 다음과 같다.

  conv2d conv2d_transpose
input size i i'
output size o o'
kernel k k' = k
stride s s'
padding p p' = k - p - 1

 

convolution transpose를 수행하는 예시를 그림으로 들어보자.

i' = 2, k' = 3, p' = 2라고 하자.

p' = 2이므로 convolution에서는 p = 0인 convolution연산과 같다

위의 조건에서 convolution transpose함수를 수행하면 4 x 4의 output feature map을 얻을 수 있다.

위는 stride가 1인 경우이다.

s' = 2인 경우에는 input feature map의 padding이 달라진다.

 

이번에는 i = 2, k = 3, p' = 2, s = 2인 경우를 보자.

'

s = 2인 경우 input feature map의 한 데이터를 중심으로 그 주변에 zero padding이 된 것을 볼 수 있다.

이 경우에 s = 2지만 s' = 1로 convolution연산을 수행한다.

따라서 결과 값으로는 5 x 5의 output feature map을 얻을 수 있다.

 

Convolution에서 처럼 상황을 분류하여 수식으로 나타내보면 다음과 같이 분류할 수 있다.

 

convolution transpose함수는 크게 네 가지 방식으로 분류할 수 있으며 앞서 convolution과 케이스는 같다.

1. No zero padding, unit strides, transposed

$$o' = i' + (k - 1)$$

2. Zero padding, unit strides, transposed

$$o' = i' + (k - 1) - 2p = i'$$

3. No zero padding, non-unit strides, transposed

$$o' = s(i' - 1) + k - 2p$$

4. Zero padding, non-unit strides, transposed

$$o' = s(i' - 1) + k - 2p$$

 

Convolution에서 p = 0.5인 상황이 있었다. 

Convolution transpose 역시 마찬가지다.

Convolution의 예제를 역으로 생각해 보겠다.

i = 6, k = 3, s = 2인 경우 o = 3이 나왔다.

Convolution transpose로 i = 3인 feature map을 o = 6으로 복원하게 되면 어떻게 될까.

역시나 한 칸이 부족하다. Convolution에서 겪었던 상황이 다시 반복됬다.

하지만 transposed에서는 아래와 같이 패딩이 생긴다.

Convolution에서는 우측과 하단에 먼저 zero padding이 생겼지만 transposed에서는 좌측과 상단에 생긴다.

Convolution에서 참조문헌으로 링크했던 문서를 보면 이해할 수 있다.

반응형

'Deep learning' 카테고리의 다른 글

Convolution연산과 수식  (0) 2020.04.20
Pandas/DataFrame 함수(1)  (0) 2019.02.23
Comments